couchdb-ruby-server 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +2 -4
- data/README.md +1 -1
- data/TODO.md +1 -0
- data/bin/couchdb-ruby-server +18 -14
- data/couchdb-ruby-server.gemspec +5 -5
- data/lib/couchdb-ruby-server/serializer.rb +17 -0
- data/lib/couchdb-ruby-server/server.rb +8 -17
- data/lib/couchdb-ruby-server/tracer.rb +7 -0
- data/lib/couchdb-ruby-server/version.rb +1 -1
- data/lib/couchdb-ruby-server.rb +2 -4
- data/spec/couchdb-ruby-server_spec.rb +24 -67
- data/spec/spec_helper.rb +3 -1
- metadata +12 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e9ffed61239c2bb7d32f8eaa6720683c8baee09
|
4
|
+
data.tar.gz: d0674c1c0e546777f974fa7d381ce5c5cae13c12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 360e274df3ae6321d2c091026242796de8d95735a8911b489dd93a039194d101f1e26b79788f09a0eba24263467630a22b00e16991094a148ec0ee69d7eb8022
|
7
|
+
data.tar.gz: 1061aeab8a3d3051ba604f1ddb2e8d38b088d2db976131683c77d4094787b247161554051c2e89ab16a2d45b3143dfdfb93f2c83da61cdcab0b9611169e586f4
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -5,9 +5,7 @@ rvm:
|
|
5
5
|
- "2.0.0"
|
6
6
|
- "2.1" # latest 2.1.x
|
7
7
|
- "2.2" # latest 2.2.x
|
8
|
-
|
9
|
-
|
10
|
-
script:
|
11
|
-
CODECLIMATE_REPO_TOKEN=PLACE_TOKEN_HERE bundle exec rake test
|
8
|
+
script: # use QS_TRACE=1 for the tracing
|
9
|
+
CODECLIMATE_REPO_TOKEN=306fa22cbd8a30beb74c4fd7536e659ac9b669147772d9718f0032dcda96e507 bundle exec rake test
|
12
10
|
branches:
|
13
11
|
- "master"
|
data/README.md
CHANGED
@@ -26,7 +26,7 @@ You may load your own code into the query server context by providing path to a
|
|
26
26
|
Actually any tagname for the query server may be set in `local.ini` instead of `ruby` so it's possible to run several query servers e.g. per application. Just remember to copy that tagname into couchapp's `language` file.
|
27
27
|
|
28
28
|
## Tests
|
29
|
-
`bundle exec rake test`. Gem
|
29
|
+
`bundle exec rake test`. Gem is trying to follow original [tests](https://github.com/apache/couchdb/blob/master/test/view_server/query_server_spec.rb).
|
30
30
|
|
31
31
|
## Documentation
|
32
32
|
This README is all i could say in a rush. No other documentation provided at this moment, see the sources.
|
data/TODO.md
CHANGED
data/bin/couchdb-ruby-server
CHANGED
@@ -1,18 +1,22 @@
|
|
1
|
-
#!/usr/bin/env
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
require 'couchdb-ruby-server'
|
3
3
|
require 'argparser'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
5
|
+
module CouchdbRubyServer
|
6
|
+
trace {'+ bin/couchdb-ruby-server'}
|
7
|
+
at_exit { trace {'- bin/couchdb-ruby-server' } }
|
8
|
+
args = ArgParser.new :program => 'couchdb-ruby-server',
|
9
|
+
:version => CouchdbRubyServer::VERSION,
|
10
|
+
:info => 'CouchDB query server to run ruby design docs.',
|
11
|
+
:licence => 'MIT',
|
12
|
+
:copyright=> '2014-2015 sinmsinm@gmail.com',
|
13
|
+
:options => [{ :names => %w[r require],
|
14
|
+
:argument => 'LIB',
|
15
|
+
:multiple => true,
|
16
|
+
:help => 'Aux library to require.' }]
|
17
|
+
args['require'].value.each do |r|
|
18
|
+
require r
|
19
|
+
end
|
17
20
|
|
18
|
-
|
21
|
+
run
|
22
|
+
end
|
data/couchdb-ruby-server.gemspec
CHANGED
@@ -20,9 +20,9 @@ Gem::Specification.new do |s|
|
|
20
20
|
# '--main' << 'README' <<
|
21
21
|
# '--markup' << 'markdown' <<
|
22
22
|
# '--line-numbers'
|
23
|
-
s.add_development_dependency
|
24
|
-
s.add_development_dependency
|
25
|
-
s.add_development_dependency
|
26
|
-
s.add_dependency
|
27
|
-
s.add_dependency
|
23
|
+
s.add_development_dependency 'bundler', '~> 1.7'
|
24
|
+
s.add_development_dependency 'rake', '~> 10.1'
|
25
|
+
s.add_development_dependency 'minitest', '~> 4.7'
|
26
|
+
s.add_dependency 'argparser', '~> 1.0'
|
27
|
+
s.add_dependency 'oj', '~> 2.7'
|
28
28
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module CouchdbRubyServer
|
4
|
+
module Serializer
|
5
|
+
require 'oj'
|
6
|
+
::Oj.default_options = {:mode => :compat,
|
7
|
+
:class_cache => true }
|
8
|
+
def self.dump(obj)
|
9
|
+
Oj.dump(obj)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.load(str)
|
13
|
+
return nil if str.nil?
|
14
|
+
Oj.load(str)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,9 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
|
4
|
-
$stdin.sync = true
|
5
|
-
$stdout.sync = true
|
6
|
-
|
7
3
|
module CouchdbRubyServer
|
8
4
|
class Error < RuntimeError
|
9
5
|
attr_reader :key
|
@@ -39,23 +35,15 @@ module CouchdbRubyServer
|
|
39
35
|
|
40
36
|
TYPES_MIME = Hash[MIME_TYPES.map {|k, v| [v, k] }]
|
41
37
|
|
42
|
-
def self.to_json(obj)
|
43
|
-
Oj.dump(obj)
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.json_parse(str)
|
47
|
-
return nil if str.nil?
|
48
|
-
Oj.load str
|
49
|
-
end
|
50
|
-
|
51
38
|
def self.log message
|
52
39
|
respond ['log', "#{message}"]
|
53
40
|
end
|
54
41
|
|
55
42
|
def self.respond obj
|
56
|
-
|
43
|
+
trace {"+ respond(#{obj.inspect})"}
|
44
|
+
puts Serializer.dump(obj)
|
57
45
|
rescue
|
58
|
-
log "respond error converting object to JSON: #{$!.message}\n#{$!.backtrace.join("\n")}"
|
46
|
+
puts('["log", "' + "respond error converting object to JSON: #{$!.message}\n#{$!.backtrace.join("\n")}" + '"]')
|
59
47
|
puts 'false'
|
60
48
|
end
|
61
49
|
|
@@ -136,7 +124,7 @@ module CouchdbRubyServer
|
|
136
124
|
respond ["chunks", @@chunks]
|
137
125
|
end
|
138
126
|
@@chunks = []
|
139
|
-
json =
|
127
|
+
json = Serializer.load($stdin.gets)
|
140
128
|
if json[0] == 'list_end'
|
141
129
|
@@last_row = true
|
142
130
|
return nil
|
@@ -209,10 +197,13 @@ module CouchdbRubyServer
|
|
209
197
|
end
|
210
198
|
|
211
199
|
def self.run
|
200
|
+
trace {'+ run'}
|
201
|
+
$stdout.sync = true
|
212
202
|
log "CouchdbRubyServer started, RUBY_VERSION: #{RUBY_VERSION}"
|
213
203
|
log "RUBY_GC_MALLOC_LIMIT=#{ENV['RUBY_GC_MALLOC_LIMIT']}"
|
214
204
|
while cmd = $stdin.gets
|
215
|
-
cmd =
|
205
|
+
cmd = Serializer.load(cmd)
|
206
|
+
trace {"cmd = #{cmd.inspect}"}
|
216
207
|
case cmd[0]
|
217
208
|
when "reset"
|
218
209
|
@@callables = []
|
data/lib/couchdb-ruby-server.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
require 'oj'
|
4
|
-
::Oj.default_options = {:mode => :compat,
|
5
|
-
:class_cache => true }
|
6
|
-
|
7
3
|
require 'couchdb-ruby-server/version'
|
4
|
+
require 'couchdb-ruby-server/serializer'
|
5
|
+
require 'couchdb-ruby-server/tracer'
|
8
6
|
require 'couchdb-ruby-server/server'
|
@@ -19,32 +19,27 @@
|
|
19
19
|
# QS_LANG=lang
|
20
20
|
# run tests on the query server (for now, one of: js, erlang)
|
21
21
|
#
|
22
|
-
require 'json'
|
23
22
|
|
24
23
|
COUCH_ROOT = "#{File.dirname(__FILE__)}/../.." unless defined?(COUCH_ROOT)
|
25
24
|
LANGUAGE = ENV["QS_LANG"] || "ruby"
|
25
|
+
COMMANDS = {
|
26
|
+
"js" => "#{COUCH_ROOT}/bin/couchjs #{COUCH_ROOT}/share/server/main.js",
|
27
|
+
"erlang" => "#{COUCH_ROOT}/test/view_server/run_native_process.es",
|
28
|
+
"ruby" => "bin/couchdb-ruby-server"
|
29
|
+
}
|
26
30
|
|
27
31
|
puts "Running query server specs for #{LANGUAGE} query server"
|
28
32
|
|
29
33
|
require 'spec_helper'
|
30
34
|
|
31
|
-
class
|
32
|
-
def
|
33
|
-
trace
|
34
|
-
puts "launching #{run_command}" if trace
|
35
|
-
if block_given?
|
36
|
-
IO.popen(run_command, "r+") do |io|
|
37
|
-
qs = QueryServerRunner.new(io, trace)
|
38
|
-
yield qs
|
39
|
-
end
|
40
|
-
else
|
41
|
-
io = IO.popen(run_command, "r+")
|
42
|
-
QueryServerRunner.new(io, trace)
|
43
|
-
end
|
35
|
+
class QueryServerRunner
|
36
|
+
def trace str=nil, &block
|
37
|
+
CouchdbRubyServer.trace str, &block
|
44
38
|
end
|
45
|
-
|
46
|
-
|
47
|
-
|
39
|
+
|
40
|
+
def initialize
|
41
|
+
trace {"launching #{COMMANDS[LANGUAGE]}"}
|
42
|
+
@qsio = IO.popen(COMMANDS[LANGUAGE], "w+")
|
48
43
|
end
|
49
44
|
def close
|
50
45
|
@qsio.close
|
@@ -76,59 +71,21 @@ class OSProcessRunner
|
|
76
71
|
jsgets
|
77
72
|
end
|
78
73
|
def rrun json
|
79
|
-
line = json
|
80
|
-
|
81
|
-
@qsio.puts
|
74
|
+
line = CouchdbRubyServer::Serializer.dump(json)
|
75
|
+
trace { "run: #{line}" }
|
76
|
+
@qsio.puts(line)
|
82
77
|
end
|
83
78
|
def rgets
|
84
|
-
resp = @qsio.gets
|
85
|
-
|
79
|
+
resp = @qsio.closed? ? '' : @qsio.gets
|
80
|
+
trace { "got: #{resp}" }
|
86
81
|
resp
|
87
82
|
end
|
88
83
|
def jsgets
|
89
|
-
resp = rgets
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
rj = JSON.parse("[#{resp.chomp}]")[0]
|
95
|
-
rescue JSON::ParserError
|
96
|
-
puts "JSON ERROR (dump under trace mode)"
|
97
|
-
# puts resp.chomp
|
98
|
-
while resp = rgets
|
99
|
-
# puts resp.chomp
|
100
|
-
end
|
101
|
-
end
|
102
|
-
if rj.respond_to?(:[]) && rj.is_a?(Array)
|
103
|
-
if rj[0] == "log"
|
104
|
-
log = rj[1]
|
105
|
-
puts "log: #{log}" if @trace
|
106
|
-
rj = jsgets
|
107
|
-
end
|
108
|
-
end
|
109
|
-
rj
|
110
|
-
else
|
111
|
-
raise "no response"
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
class QueryServerRunner < OSProcessRunner
|
117
|
-
|
118
|
-
COMMANDS = {
|
119
|
-
"js" => "#{COUCH_ROOT}/bin/couchjs #{COUCH_ROOT}/share/server/main.js",
|
120
|
-
"erlang" => "#{COUCH_ROOT}/test/view_server/run_native_process.es",
|
121
|
-
"ruby" => "bin/couchdb-ruby-server"
|
122
|
-
}
|
123
|
-
|
124
|
-
def self.run_command
|
125
|
-
COMMANDS[LANGUAGE]
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
class ExternalRunner < OSProcessRunner
|
130
|
-
def self.run_command
|
131
|
-
"#{COUCH_ROOT}/src/couchdb/couchjs #{COUCH_ROOT}/share/server/echo.js"
|
84
|
+
raise "no response" unless resp = rgets
|
85
|
+
rj = CouchdbRubyServer::Serializer.load("[#{resp}]").first
|
86
|
+
return rj unless rj.is_a?(Array) && rj[0] == "log"
|
87
|
+
trace { "log: #{rj[1]}" }
|
88
|
+
jsgets
|
132
89
|
end
|
133
90
|
end
|
134
91
|
|
@@ -618,7 +575,7 @@ end
|
|
618
575
|
describe "query server normal case" do
|
619
576
|
before(:all) do
|
620
577
|
`cd #{COUCH_ROOT} && make` unless LANGUAGE == 'ruby'
|
621
|
-
@qs = QueryServerRunner.
|
578
|
+
@qs = QueryServerRunner.new
|
622
579
|
end
|
623
580
|
after(:all) do
|
624
581
|
@qs.close
|
@@ -892,7 +849,7 @@ end
|
|
892
849
|
|
893
850
|
describe "query server that exits" do
|
894
851
|
before(:each) do
|
895
|
-
@qs = QueryServerRunner.
|
852
|
+
@qs = QueryServerRunner.new
|
896
853
|
@ddoc = {
|
897
854
|
"_id" => "foo",
|
898
855
|
"lists" => {
|
data/spec/spec_helper.rb
CHANGED
@@ -5,6 +5,8 @@ rescue LoadError
|
|
5
5
|
$stderr.puts "CodeClimate is not started: #{$!.message}"
|
6
6
|
end
|
7
7
|
|
8
|
-
|
8
|
+
require 'couchdb-ruby-server/tracer'
|
9
|
+
require 'couchdb-ruby-server/serializer'
|
10
|
+
|
9
11
|
require 'minitest/autorun'
|
10
12
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: couchdb-ruby-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sinm
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,56 +16,56 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1'
|
19
|
+
version: '1.7'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1'
|
26
|
+
version: '1.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '10'
|
33
|
+
version: '10.1'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '10'
|
40
|
+
version: '10.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '4'
|
47
|
+
version: '4.7'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '4'
|
54
|
+
version: '4.7'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: argparser
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '1'
|
61
|
+
version: '1.0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '1'
|
68
|
+
version: '1.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: oj
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,7 +100,9 @@ files:
|
|
100
100
|
- couchdb-ruby-server.gemspec
|
101
101
|
- couchdb-ruby-server.sublime-project
|
102
102
|
- lib/couchdb-ruby-server.rb
|
103
|
+
- lib/couchdb-ruby-server/serializer.rb
|
103
104
|
- lib/couchdb-ruby-server/server.rb
|
105
|
+
- lib/couchdb-ruby-server/tracer.rb
|
104
106
|
- lib/couchdb-ruby-server/version.rb
|
105
107
|
- spec/couchdb-ruby-server_spec.rb
|
106
108
|
- spec/spec_helper.rb
|