relaxo-query-server 0.1.2 → 0.1.3

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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZDVhYmYxZWNlYmQwNmQzNGRmYzdiYzJhMTQxY2Y3MTY2N2E1MjBlNw==
5
+ data.tar.gz: !binary |-
6
+ MDUzMmI3YjIzNWZmMzU3NTNjNDBmNmUwYTVmM2ExYjU2NzMzMWYyNA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ YTgxMjllODIyMjhmM2JmYzA2ODMxZmM0M2I2YWQ1MjRhYzE0ZDgyYmFhMjQy
10
+ ZGVjYzEwMzQ5MDBiOTNkNjIwYmM1NTJiZDc0MDg4OGFkNGM3NmNkNmIzNjA3
11
+ ZjY1ZjRiYzJhMzQxOGQ5MmZjMWQzNzJlMGVkYjZmMTNkOTMzNzY=
12
+ data.tar.gz: !binary |-
13
+ YmJhZjVhNmU4ZmRiM2FiMTc1NWU2Nzg4MDRmYTgwNDU1MDYyODE2YmU4ZDIy
14
+ M2UwZTJhOTI1NDBlNWFmMWFiMzYyNWNiMDI5NDljMzNhYTIyNDllNmZiOTli
15
+ MGQ1YzcxOTZkOTAzZDlhMjY3NGUyZWMyYmIyY2M5M2ExYTAxNmY=
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.8.7"
4
+ - "1.9.2"
5
+ - "1.9.3"
6
+ - jruby-18mode # JRuby in 1.8 mode
7
+ - jruby-19mode # JRuby in 1.9 mode
8
+ - rbx-18mode
9
+ - rbx-19mode
10
+ services:
11
+ - couchdb
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in relaxo-query-server.gemspec
4
+ gemspec
5
+
6
+ platforms :jruby do
7
+ gem 'jruby-openssl'
8
+ end
data/README.md CHANGED
@@ -1,14 +1,14 @@
1
- Relaxo Query Server
2
- ===================
3
-
4
- * Author: Samuel G. D. Williams (<http://www.oriontransfer.co.nz>)
5
- * Copyright (C) 2012 Samuel G. D. Williams.
6
- * Released under the MIT license.
1
+ # Relaxo Query Server
7
2
 
8
3
  The Relaxo Query Server implements the CouchDB Query Server protocol for CouchDB 1.1.0+. It provides a comprehensive Ruby-style view server along with full support for Design Document based processing.
9
4
 
10
- Installation
11
- ------------
5
+ For more information and examples please see the main [project page][1].
6
+
7
+ [1]: http://www.codeotaku.com/projects/relaxo/query-server
8
+
9
+ [![Build Status](https://secure.travis-ci.org/ioquatix/relaxo-query-server.png)](http://travis-ci.org/ioquatix/relaxo-query-server)
10
+
11
+ ## Installation
12
12
 
13
13
  Install the ruby gem as follows:
14
14
 
@@ -27,15 +27,9 @@ Make sure the `relaxo-query-server` executable is accessible from `$PATH`.
27
27
 
28
28
  (You can also load code by specifying libraries in your design documents and views.)
29
29
 
30
- To build and install the gem from source:
30
+ ##Usage
31
31
 
32
- cd build/
33
- sudo GEM=gem1.9 rake1.9 install_gem
34
-
35
- Usage
36
- -----
37
-
38
- ### Mapping Function ###
32
+ ### Mapping Function
39
33
 
40
34
  Select documents of `type == 'user'`:
41
35
 
@@ -45,7 +39,7 @@ Select documents of `type == 'user'`:
45
39
  end
46
40
  end
47
41
 
48
- ### Reduction Function ###
42
+ ### Reduction Function
49
43
 
50
44
  Calculate the sum:
51
45
 
@@ -53,7 +47,7 @@ Calculate the sum:
53
47
  values.inject &:+
54
48
  end
55
49
 
56
- ### Design Document ###
50
+ ### Design Document
57
51
 
58
52
  A simple application:
59
53
 
@@ -105,18 +99,24 @@ The previous `design.yaml` document can be loaded using the `relaxo` client comm
105
99
 
106
100
  relaxo http://localhost:5984/test design.yaml
107
101
 
108
- To Do
109
- -----
102
+ ## Contributing
103
+
104
+ 1. Fork it
105
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
106
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
107
+ 4. Push to the branch (`git push origin my-new-feature`)
108
+ 5. Create new Pull Request
109
+
110
+ ## To Do
110
111
 
111
112
  - Improve documentation, including better sample code.
112
113
  - More tests, including performance benchmarks.
113
114
  - Explore `parse_function` to improve performance of code execution by caching functions.
114
115
  - Helper methods for commonly used mapping functions.
115
116
 
116
- License
117
- -------
117
+ ## License
118
118
 
119
- Copyright (c) 2010, 2012 Samuel G. D. Williams. <http://www.oriontransfer.co.nz>
119
+ Copyright (c) 2010, 2012 Samuel G. D. Williams. <http://www.codeotaku.com>
120
120
 
121
121
  Permission is hereby granted, free of charge, to any person obtaining a copy
122
122
  of this software and associated documentation files (the "Software"), to deal
@@ -69,7 +69,8 @@ module Relaxo
69
69
  when 'add_fun'
70
70
  @mapper.add_function command[1]; true
71
71
  when 'add_lib'
72
- @mapper.add_libraries command[1]; true
72
+ @mapper.add_libraries command[1]
73
+ @reducer.add_libraries command[1]; true
73
74
  when 'map_doc'
74
75
  @mapper.map command[1]
75
76
  when 'reset'
@@ -78,5 +78,26 @@ module Relaxo
78
78
  @instance ||= @klass.new
79
79
  end
80
80
  end
81
+
82
+ class Loader
83
+ # The default library name
84
+ DEFAULT = ['_default']
85
+
86
+ def initialize
87
+ @libraries = {}
88
+ end
89
+
90
+ def load(path)
91
+ Library.for(@libraries, path)
92
+ end
93
+
94
+ def add_libraries(libraries)
95
+ @libraries.merge!(libraries)
96
+ end
97
+
98
+ def load_default
99
+ load(DEFAULT)
100
+ end
101
+ end
81
102
  end
82
103
  end
@@ -53,34 +53,23 @@ module Relaxo
53
53
  end
54
54
  end
55
55
 
56
- class Mapper
57
- # The default library name
58
- DEFAULT = ['_default']
59
-
56
+ class Mapper < Loader
60
57
  def initialize(context)
58
+ super()
59
+
61
60
  @context = context
62
61
  @functions = []
63
-
64
- @libraries = {}
65
62
  end
66
63
 
67
64
  # Adds a function by parsing the text, typically containing a textual representation of a lambda.
68
- def add_function text
65
+ def add_function(text)
69
66
  @functions << @context.parse_function(text, binding)
70
67
  end
71
68
 
72
- def load(path)
73
- Library.for(@libraries, path)
74
- end
75
-
76
- def add_libraries libraries
77
- @libraries = libraries
78
- end
79
-
80
69
  # Map a document to a set of results by appling all functions.
81
70
  def map(document)
82
71
  # Force load the default library:
83
- load(DEFAULT)
72
+ load_default
84
73
 
85
74
  @functions.map do |function|
86
75
  MappingProcess.new(@context, @libraries, function).run(document)
@@ -19,6 +19,7 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  require 'relaxo/query_server/process'
22
+ require 'relaxo/query_server/library'
22
23
 
23
24
  module Relaxo
24
25
  module QueryServer
@@ -35,9 +36,11 @@ module Relaxo
35
36
  end
36
37
 
37
38
  # Implements the `reduce` and `rereduce` functions along with all associated state.
38
- class Reducer
39
+ class Reducer < Loader
39
40
  # Create a reducer attached to the given context.
40
41
  def initialize(context)
42
+ super()
43
+
41
44
  @context = context
42
45
  end
43
46
 
@@ -53,6 +56,8 @@ module Relaxo
53
56
  # @param [Array] items
54
57
  # A composite list of items.
55
58
  def reduce(functions, items)
59
+ load_default
60
+
56
61
  functions = functions.collect do |function_text|
57
62
  @context.parse_function(function_text, binding)
58
63
  end
@@ -79,6 +84,8 @@ module Relaxo
79
84
  # @param [Array] values
80
85
  # An array of values to reduce
81
86
  def rereduce(functions, values)
87
+ load_default
88
+
82
89
  functions = functions.collect do |function_text|
83
90
  @context.parse_function(function_text, binding)
84
91
  end
@@ -20,12 +20,6 @@
20
20
 
21
21
  module Relaxo
22
22
  module QueryServer
23
- module VERSION
24
- MAJOR = 0
25
- MINOR = 1
26
- TINY = 2
27
-
28
- STRING = [MAJOR, MINOR, TINY].join('.')
29
- end
23
+ VERSION = "0.1.3"
30
24
  end
31
25
  end
data/rakefile.rb CHANGED
@@ -1,8 +1,8 @@
1
-
2
- require 'rake/testtask'
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
3
 
4
4
  Rake::TestTask.new do |t|
5
- t.libs << 'test'
5
+ t.libs << 'test'
6
6
  end
7
7
 
8
8
  desc "Run tests"
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'relaxo/query_server/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "relaxo-query-server"
8
+ spec.version = Relaxo::QueryServer::VERSION
9
+ spec.authors = ["Samuel Williams"]
10
+ spec.email = ["samuel.williams@oriontransfer.co.nz"]
11
+ spec.description = <<-EOF
12
+ Relaxo Query Server is a query server for CouchDB which provides full
13
+ support for map/reduce functionality using Ruby code. It's main purpose
14
+ is to provide a consistent backend for Ruby based clients to CouchDB.
15
+ In practice, it allows code to be shared between Ruby based client
16
+ applications and CouchDB servers.
17
+ EOF
18
+ spec.summary = %q{Relaxo Query Server provides support for executing CouchDB functions using Ruby.}
19
+ spec.homepage = ""
20
+ spec.license = "MIT"
21
+
22
+ spec.files = `git ls-files`.split($/)
23
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
24
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
25
+ spec.require_paths = ["lib"]
26
+
27
+ spec.add_development_dependency "bundler", "~> 1.3"
28
+ spec.add_development_dependency "rake"
29
+
30
+ spec.add_dependency "relaxo", "~> 0.4.0"
31
+ spec.add_dependency "json", "~> 1.7.3"
32
+ spec.add_dependency "rest-client"
33
+ end
data/test/helper.rb CHANGED
@@ -8,8 +8,17 @@ require 'stringio'
8
8
  require "relaxo/json"
9
9
  require "relaxo/query_server"
10
10
 
11
+ class Test::Unit::TestCase
12
+ def self.abstract_test_case!
13
+ self.class_eval do
14
+ def test_default
15
+ end
16
+ end
17
+ end
18
+ end
19
+
11
20
  class ContextualTestCase < Test::Unit::TestCase
12
- undef_method :default_test
21
+ abstract_test_case!
13
22
 
14
23
  def setup_context(options)
15
24
  @shell = Relaxo::QueryServer::MockShell.new
data/test/test_reduce.rb CHANGED
@@ -12,4 +12,27 @@ class ReduceTest < ContextualTestCase
12
12
  response = @context.run ["rereduce", [SUM, CONCAT], (0...10).map{|i|i}]
13
13
  assert_equal [true, [45, "0_1_2_3_4_5_6_7_8_9"]], response
14
14
  end
15
+
16
+ def test_reduce_libraries
17
+ library_code = %q{
18
+ def sum(values)
19
+ values.inject(&:+)
20
+ end
21
+ }
22
+
23
+ reduce_function = %q{
24
+ foo = load('foo')
25
+
26
+ lambda {|k,v,r|
27
+ puts v.inspect
28
+ foo.sum(v)
29
+ }
30
+ }
31
+
32
+ response = @context.run ['add_lib', {'foo' => library_code}]
33
+ assert_equal true, response
34
+
35
+ response = @context.run ['reduce', [reduce_function], (0...10).map{|i|[i,i]}]
36
+ assert_equal [true, [45]], response
37
+ end
15
38
  end
metadata CHANGED
@@ -1,60 +1,103 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: relaxo-query-server
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 2
9
- version: 0.1.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
10
5
  platform: ruby
11
- authors:
6
+ authors:
12
7
  - Samuel Williams
13
8
  autorequire:
14
9
  bindir: bin
15
10
  cert_chain: []
16
-
17
- date: 2012-10-14 00:00:00 +13:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: relaxo
11
+ date: 2013-04-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
22
35
  prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: relaxo
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
25
45
  - - ~>
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- - 4
30
- - 0
46
+ - !ruby/object:Gem::Version
31
47
  version: 0.4.0
32
48
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.4.0
55
+ - !ruby/object:Gem::Dependency
35
56
  name: json
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.7.3
62
+ type: :runtime
36
63
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- requirements:
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
39
66
  - - ~>
40
- - !ruby/object:Gem::Version
41
- segments:
42
- - 1
43
- - 7
44
- - 3
67
+ - !ruby/object:Gem::Version
45
68
  version: 1.7.3
69
+ - !ruby/object:Gem::Dependency
70
+ name: rest-client
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
46
76
  type: :runtime
47
- version_requirements: *id002
48
- description:
49
- email: samuel.williams@oriontransfer.co.nz
50
- executables:
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: ! "\tRelaxo Query Server is a query server for CouchDB which provides
84
+ full\n\tsupport for map/reduce functionality using Ruby code. It's main purpose\n\tis
85
+ to provide a consistent backend for Ruby based clients to CouchDB.\n\tIn practice,
86
+ it allows code to be shared between Ruby based client \n\tapplications and CouchDB
87
+ servers.\n"
88
+ email:
89
+ - samuel.williams@oriontransfer.co.nz
90
+ executables:
51
91
  - relaxo-query-server
52
92
  extensions: []
53
-
54
93
  extra_rdoc_files: []
55
-
56
- files:
94
+ files:
95
+ - .gitignore
96
+ - .travis.yml
97
+ - Gemfile
98
+ - README.md
57
99
  - bin/relaxo-query-server
100
+ - lib/relaxo/query_server.rb
58
101
  - lib/relaxo/query_server/context.rb
59
102
  - lib/relaxo/query_server/designer.rb
60
103
  - lib/relaxo/query_server/library.rb
@@ -63,7 +106,8 @@ files:
63
106
  - lib/relaxo/query_server/reducer.rb
64
107
  - lib/relaxo/query_server/shell.rb
65
108
  - lib/relaxo/query_server/version.rb
66
- - lib/relaxo/query_server.rb
109
+ - rakefile.rb
110
+ - relaxo-query-server.gemspec
67
111
  - test/helper.rb
68
112
  - test/test_filters.rb
69
113
  - test/test_libraries.rb
@@ -74,37 +118,39 @@ files:
74
118
  - test/test_updates.rb
75
119
  - test/test_validations.rb
76
120
  - test/test_views.rb
77
- - rakefile.rb
78
- - README.md
79
- has_rdoc: true
80
- homepage: http://www.oriontransfer.co.nz/gems/relaxo
81
- licenses: []
82
-
121
+ homepage: ''
122
+ licenses:
123
+ - MIT
124
+ metadata: {}
83
125
  post_install_message:
84
126
  rdoc_options: []
85
-
86
- require_paths:
127
+ require_paths:
87
128
  - lib
88
- required_ruby_version: !ruby/object:Gem::Requirement
89
- requirements:
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- segments:
93
- - 0
94
- version: "0"
95
- required_rubygems_version: !ruby/object:Gem::Requirement
96
- requirements:
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- segments:
100
- - 0
101
- version: "0"
129
+ required_ruby_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ required_rubygems_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
102
139
  requirements: []
103
-
104
140
  rubyforge_project:
105
- rubygems_version: 1.3.6
141
+ rubygems_version: 2.0.2
106
142
  signing_key:
107
- specification_version: 3
108
- summary: Relaxo Query Server provides support for executing CouchDB functions using Ruby.
109
- test_files: []
110
-
143
+ specification_version: 4
144
+ summary: Relaxo Query Server provides support for executing CouchDB functions using
145
+ Ruby.
146
+ test_files:
147
+ - test/helper.rb
148
+ - test/test_filters.rb
149
+ - test/test_libraries.rb
150
+ - test/test_lists.rb
151
+ - test/test_map.rb
152
+ - test/test_reduce.rb
153
+ - test/test_shows.rb
154
+ - test/test_updates.rb
155
+ - test/test_validations.rb
156
+ - test/test_views.rb