Uploaded image for project: 'CouchDB'
  1. CouchDB
  2. COUCHDB-732

ruby versions of the query server spec functions

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Trivial
    • Resolution: Won't Fix
    • None
    • None
    • Test Suite
    • None
    • New Contributors Level (Easy)

    Description

      In the process of creating the a ruby version of the query server, I wrote these to determine it was working correctly. Even though the repository for the ruby query server contains its own test suite, I figure these might be welcomed into the main query server specs. If not, no big deal. They assume the ruby query server's repository is in the same parent directory as couchdb.

      diff --git a/test/view_server/query_server_spec.rb b/test/view_server/query_server_spec.rb
      index 1de8e5b..c427e35 100644
      — a/test/view_server/query_server_spec.rb
      +++ b/test/view_server/query_server_spec.rb
      @@ -117,7 +117,8 @@ class QueryServerRunner < OSProcessRunner

      COMMANDS = {
      "js" => "#

      {COUCH_ROOT}/bin/couchjs_dev #{COUCH_ROOT}

      /share/server/main.js",

      • "erlang" => "# {COUCH_ROOT}/test/view_server/run_native_process.es"
        + "erlang" => "#{COUCH_ROOT}

        /test/view_server/run_native_process.es",
        + "ruby" => "/usr/bin/env ruby – #

        {COUCH_ROOT}

        /../couchdb-ruby-query-server/bin/couchdb_view_server --safe"
        }

      def self.run_command
      @@ -137,13 +138,14 @@ end
      functions = {
      "emit-twice" => {
      "js" => %{function(doc){emit("foo",doc.a); emit("bar",doc.a)}},

      • "erlang" => <<-ERLANG
        + "erlang" => <<-ERLANG,
        fun( {Doc}) ->
        A = proplists:get_value(<<"a">>, Doc, null),
        Emit(<<"foo">>, A),
        Emit(<<"bar">>, A)
        end.
        ERLANG
        + "ruby" => "lambda{|doc| emit('foo',doc['a']); emit('bar',doc['a']) }"
        },
        "emit-once" => {
        "js" => <<-JS,
        @@ -151,20 +153,39 @@ functions = { emit("baz",doc.a) }
        JS
        - "erlang" => <<-ERLANG
        + "erlang" => <<-ERLANG,
        fun({Doc}

        ) ->
        A = proplists:get_value(<<"a">>, Doc, null),
        Emit(<<"baz">>, A)
        end.
        ERLANG
        + "ruby" => <<-RUBY
        + lambda

        {|doc| emit("baz", doc['a']) }

        + RUBY
        + },
        + "map-invalid-expression" => {
        + "js" => %{function(doc {emit("foo", doc.a);}},
        + "erlang" => %|fun(

        {Doc}|,
        + "ruby" => "lambda{" + },
        + "map-non-function-expression" => { + "js" => "3", + "erlang" => "3", + "ruby" => "3" + },
        + "map-logging" => {
        + "js" => %{function(doc){ log(doc); emit("logged", doc.a);}},
        + "ruby" => %{lambda{|doc| log(doc); emit("logged", doc['a']) }}
        },
        "reduce-values-length" => {
        "js" => %{function(keys, values, rereduce) { return values.length; }},
        - "erlang" => %{fun(Keys, Values, ReReduce) -> length(Values) end.}
        + "erlang" => %{fun(Keys, Values, ReReduce) -> length(Values) end.},
        + "ruby" => %{lambda{|keys, values, rereduce| values.size }}
        },
        "reduce-values-sum" => {
        "js" => %{function(keys, values, rereduce) { return sum(values); }},
        - "erlang" => %{fun(Keys, Values, ReReduce) -> lists:sum(Values) end.}
        + "erlang" => %{fun(Keys, Values, ReReduce) -> lists:sum(Values) end.},
        + "ruby" => %{lambda{|keys, values, rereduce| values.inject(0){|sum, val| sum += val} }}
        },
        "validate-forbidden" => {
        "js" => <<-JS,
        @@ -173,7 +194,7 @@ functions = {
        throw({forbidden:"bad doc"}); "foo bar";
        }
        JS
        - "erlang" => <<-ERLANG
        + "erlang" => <<-ERLANG,
        fun({NewDoc}, _OldDoc, _UserCtx) ->
        case proplists:get_value(<<"bad">>, NewDoc) of
        undefined -> 1;
        @@ -181,6 +202,13 @@ functions = {
        end
        end.
        ERLANG
        + "ruby" => <<-RUBY
        + lambda{|new_doc, old_doc, user_ctx| + if (new_doc['bad']) + throw(:forbidden, "bad doc") + end + }
        + RUBY
        },
        "show-simple" => {
        "js" => <<-JS,
        @@ -189,7 +217,7 @@ functions = { return [doc.title, doc.body].join(' - '); }
        JS
        - "erlang" => <<-ERLANG
        + "erlang" => <<-ERLANG,
        fun({Doc}

        , Req) ->
        Title = proplists:get_value(<<"title">>, Doc),
        Body = proplists:get_value(<<"body">>, Doc),
        @@ -197,6 +225,9 @@ functions = {

        Unknown macro: {[{<<"body">>, Resp}]}

        end.
        ERLANG
        + "ruby" => <<-RUBY
        + lambda

        {|doc, req| [doc['title'], doc['body']].join(' - ') }

        + RUBY
        },
        "show-headers" => {
        "js" => <<-JS,
        @@ -206,7 +237,7 @@ functions =

        { return resp; }

        JS

      • "erlang" => <<-ERLANG
        + "erlang" => <<-ERLANG,
        fun( {Doc}

        , Req) ->
        Title = proplists:get_value(<<"title">>, Doc),
        Body = proplists:get_value(<<"body">>, Doc),
        @@ -218,6 +249,12 @@ functions =

        { ]}

        end.
        ERLANG
        + "ruby" => <<-RUBY
        + lambda {|doc, req|
        + resp = {"code" => 200, "headers" => {"X-Plankton" => "Rusty"}}
        + resp.update("body" => [doc["title"], doc["body"]].join(" - "))
        + }
        + RUBY
        },
        "show-sends" => {
        "js" => <<-JS,
        @@ -228,7 +265,7 @@ functions =

        { return "tail"; }

        ;
        JS

      • "erlang" => <<-ERLANG
        + "erlang" => <<-ERLANG,
        fun(Head, Req) ->
        Resp = {[
        {<<"headers">>, {[ {<<"Content-Type">>, <<"text/plain">>}

        ]}}
        @@ -239,6 +276,14 @@ functions = {
        <<"tail">>
        end.
        ERLANG
        + "ruby" => <<-RUBY
        + lambda {|head, req|
        + start({"headers" => {"Content-Type" => "text/plain"}})
        + send "first chunk"
        + send 'second "chunk"'
        + "tail"
        + }
        + RUBY
        },
        "show-while-get-rows" => {
        "js" => <<-JS,
        @@ -265,6 +310,16 @@ functions =

        Unknown macro: { <<"tail">> end. ERLANG+ "ruby" => <<-RUBY+ lambda{|head, req| + send "first chunk" + send req['q'] + while row = get_row do + send row['key'] + end + "tail" + }+ RUBY }

        ,
        "show-while-get-rows-multi-send" => {
        "js" => <<-JS,
        @@ -291,6 +346,16 @@ functions =

        Unknown macro: { <<"tail">> end. ERLANG+ "ruby" => <<-RUBY+ lambda{|head, req| + send "bacon" + while row = get_row do + send row["key"] + send "eggs" + end + "tail" + }+ RUBY }

        ,
        "list-simple" => {
        "js" => <<-JS,
        @@ -316,6 +381,16 @@ functions =

        Unknown macro: { <<"early">> end. ERLANG+ "ruby" => <<-RUBY+ lambda{|head, req| + send("first chunk") + send(req['q']) + while row = get_row do + send(row['key']) + end + return "early" + }+ RUBY }

        ,
        "list-chunky" => {
        "js" => <<-JS,
        @@ -348,6 +423,14 @@ functions = {
        Tail
        end.
        ERLANG
        + "ruby" => <<-RUBY
        + lambda

        Unknown macro: {|head, req|+ send("first chunk")+ send(req['q'])+ 3.times { send get_row['key'] }
        + "early tail"
        + }
        + RUBY
        },
        "list-old-style" => {
        "js" => <<-JS,
        @@ -390,6 +473,13 @@ functions = {
        Tail
        end.
        ERLANG
        + "ruby" => <<-RUBY
        + lambda{|head, req|
        + send "bacon"
        + 3.times { send get_row['key'] }+ "early"+ }

        + RUBY
        },
        "list-raw" => {
        "js" => <<-JS,
        @@ -417,6 +507,16 @@ functions =

        Unknown macro: { <<"tail">> end. ERLANG+ "ruby" => <<-RUBY+ lambda{|head, req| + send "first chunk" + send req["q"] + while row = get_row do + send row["key"] + end + return "tail" + }+ RUBY }

        ,
        "filter-basic" => {
        "js" => <<-JS,
        @@ -431,6 +531,9 @@ functions =

        Unknown macro: { proplists}

        ,
        "update-basic" => {
        "js" => <<-JS,
        @@ -446,6 +549,12 @@ functions = {
        [

        {Doc2}

        ,

        Unknown macro: {[{<<"body">>, <<"hello doc">>}]}

        ]
        end.
        ERLANG
        + "ruby" => <<-RUBY
        + lambda

        {|doc, req| + doc["world"] = "hello" + [doc, "hello doc"] + }

        + RUBY
        },
        "error" => {
        "js" => <<-JS,
        @@ -453,11 +562,14 @@ functions =

        { throw(["error","error_key","testing"]); }

        JS

      • "erlang" => <<-ERLANG
        + "erlang" => <<-ERLANG,
        fun(A, B) ->
        throw([<<"error">>,<<"error_key">>,<<"testing">>])
        end.
        ERLANG
        + "ruby" => <<-RUBY
        + lambda {|doc, req| throw :error, "error_key", "testing" }

        + RUBY
        },
        "fatal" => {
        "js" => <<-JS,
        @@ -465,11 +577,14 @@ functions =

        { throw(["fatal","error_key","testing"]); }

        JS

      • "erlang" => <<-ERLANG
        + "erlang" => <<-ERLANG,
        fun(A, B) ->
        throw([<<"fatal">>,<<"error_key">>,<<"testing">>])
        end.
        ERLANG
        + "ruby" => <<-RUBY
        + lambda {|h,r| throw :fatal, ["error_key", "testing"] }

        + RUBY
        }
        }

      Attachments

        Activity

          People

            robertkowalski Robert Kowalski
            mattly Matt Lyon
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: