mr_mongo 0.0.1 → 0.1.0
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.
- data/ChangeLog.md +6 -0
- data/README.md +31 -0
- data/lib/mr_mongo/application.rb +7 -1
- data/lib/mr_mongo/context.rb +7 -2
- data/lib/mr_mongo/dsl.rb +15 -1
- data/lib/mr_mongo/version.rb +1 -1
- data/mr_mongo.gemspec +1 -0
- data/spec/unit/lib/mr_mongo/dsl_spec.rb +39 -0
- data/spec/unit/lib/mr_mongo/map_reduce_spec.rb +3 -1
- metadata +20 -4
data/ChangeLog.md
CHANGED
data/README.md
CHANGED
@@ -64,6 +64,37 @@ function (key, values) {
|
|
64
64
|
}
|
65
65
|
```
|
66
66
|
|
67
|
+
### Dynamic Parameters
|
68
|
+
|
69
|
+
sub-commands `exec` and `exec_on_memory` accepts *Dynamic Parameters* by `--params` option.
|
70
|
+
|
71
|
+
`--params` can be specified as JSON hash.
|
72
|
+
|
73
|
+
```
|
74
|
+
$ bundle exec mr_mongo exec some_map_reduce.rb --params '{"date":"2013-02-01"}'
|
75
|
+
```
|
76
|
+
|
77
|
+
In DSL, Dynamic Parameters can be get with `#params` method.
|
78
|
+
|
79
|
+
```ruby
|
80
|
+
set :collection, 'accesses'
|
81
|
+
set :query, {date: params['date']} if params['date']
|
82
|
+
|
83
|
+
__END__
|
84
|
+
|
85
|
+
...
|
86
|
+
```
|
87
|
+
|
88
|
+
### Default Parameter
|
89
|
+
|
90
|
+
Default Parameter can be set with `#default_param` method
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
default_param 'date', '2013-02-01'
|
94
|
+
|
95
|
+
# => params will be {"date" => "2013-02-01"} by default.
|
96
|
+
```
|
97
|
+
|
67
98
|
## Contributing
|
68
99
|
|
69
100
|
1. Fork it
|
data/lib/mr_mongo/application.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'thor'
|
2
2
|
require 'mongo'
|
3
|
+
require 'multi_json'
|
3
4
|
require 'pp'
|
4
5
|
|
5
6
|
module MrMongo
|
@@ -8,6 +9,7 @@ module MrMongo
|
|
8
9
|
|
9
10
|
desc 'exec', 'executes MapReduce'
|
10
11
|
method_option :db, default: DEFAULT_URI
|
12
|
+
method_option :params
|
11
13
|
def exec(*files)
|
12
14
|
files.each do |file|
|
13
15
|
puts "Executing #{file}..."
|
@@ -20,6 +22,7 @@ module MrMongo
|
|
20
22
|
|
21
23
|
desc 'exec_on_memory', 'executes MapReduce on memory'
|
22
24
|
method_option :db, default: DEFAULT_URI
|
25
|
+
method_option :params
|
23
26
|
def exec_on_memory(*files)
|
24
27
|
files.each do |file|
|
25
28
|
puts "Executing #{file} on memory..."
|
@@ -36,7 +39,10 @@ module MrMongo
|
|
36
39
|
end
|
37
40
|
|
38
41
|
def context
|
39
|
-
|
42
|
+
context_params = {db: database}
|
43
|
+
context_params[:params] = ::MultiJson.load(options[:params]) if options[:params]
|
44
|
+
|
45
|
+
Context.new(context_params)
|
40
46
|
end
|
41
47
|
|
42
48
|
def database
|
data/lib/mr_mongo/context.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
module MrMongo
|
2
2
|
class Context
|
3
|
-
attr_reader :db
|
3
|
+
attr_reader :db, :params
|
4
4
|
|
5
5
|
def initialize(params = {})
|
6
|
-
@db
|
6
|
+
@db = params[:db] if params[:db]
|
7
|
+
@params = params[:params] if params[:params]
|
8
|
+
end
|
9
|
+
|
10
|
+
def params?
|
11
|
+
not @params.nil?
|
7
12
|
end
|
8
13
|
end
|
9
14
|
end
|
data/lib/mr_mongo/dsl.rb
CHANGED
@@ -3,7 +3,9 @@ module MrMongo
|
|
3
3
|
attr_reader :map_reduce
|
4
4
|
|
5
5
|
def initialize(context)
|
6
|
-
@
|
6
|
+
@context = context
|
7
|
+
@map_reduce = MapReduce.new(context)
|
8
|
+
@default_params = {}
|
7
9
|
end
|
8
10
|
|
9
11
|
def parse(&block)
|
@@ -15,5 +17,17 @@ module MrMongo
|
|
15
17
|
def set(key, value = true)
|
16
18
|
@map_reduce.send("#{key}=", value)
|
17
19
|
end
|
20
|
+
|
21
|
+
def params
|
22
|
+
if @context.params?
|
23
|
+
@default_params.merge(@context.params)
|
24
|
+
else
|
25
|
+
@default_params
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def default_param(key, value)
|
30
|
+
@default_params[key] = value
|
31
|
+
end
|
18
32
|
end
|
19
33
|
end
|
data/lib/mr_mongo/version.rb
CHANGED
data/mr_mongo.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency "mongo", "~> 1.8.4"
|
22
22
|
spec.add_dependency "bson_ext", "~> 1.8.4"
|
23
23
|
spec.add_dependency "thor", "~> 0.18.1"
|
24
|
+
spec.add_dependency "multi_json", "~> 1.7.2"
|
24
25
|
spec.add_dependency "inline_template_loader", "~> 0.3.0"
|
25
26
|
|
26
27
|
spec.add_development_dependency "bundler", "~> 1.3"
|
@@ -20,5 +20,44 @@ module MrMongo
|
|
20
20
|
it { should be_true }
|
21
21
|
end
|
22
22
|
end
|
23
|
+
|
24
|
+
describe '#params' do
|
25
|
+
subject { dsl.params }
|
26
|
+
|
27
|
+
context 'when context has no params' do
|
28
|
+
context 'without default params' do
|
29
|
+
it { should == {} }
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'with default params' do
|
33
|
+
before { dsl.default_param 'foo', 'bar' }
|
34
|
+
|
35
|
+
it { should eq({'foo' => 'bar'}) }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'when context has params' do
|
40
|
+
let(:context) { Context.new(params: input_params) }
|
41
|
+
let(:input_params) { {'hoge' => 'fuga'} }
|
42
|
+
|
43
|
+
context 'without default params' do
|
44
|
+
it { should == input_params }
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'with default params' do
|
48
|
+
context 'no override' do
|
49
|
+
before { dsl.default_param 'foo', 'bar' }
|
50
|
+
|
51
|
+
it { should eq({'foo' => 'bar', 'hoge' => 'fuga'}) }
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'override' do
|
55
|
+
before { dsl.default_param 'hoge', 'piyo' }
|
56
|
+
|
57
|
+
it { should eq({'hoge' => 'fuga'}) }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
23
62
|
end
|
24
63
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module MrMongo
|
2
2
|
describe MapReduce do
|
3
|
-
let(:context) { Context.new
|
3
|
+
let(:context) { Context.new }
|
4
4
|
let(:map_reduce) { MapReduce.new(context) }
|
5
5
|
|
6
6
|
describe '#to_options' do
|
@@ -26,6 +26,8 @@ module MrMongo
|
|
26
26
|
end
|
27
27
|
|
28
28
|
describe 'MapReduce excution', mongo: true do
|
29
|
+
let(:context) { Context.new(db: testing_database) }
|
30
|
+
|
29
31
|
let(:expected) do
|
30
32
|
[
|
31
33
|
{'_id' => 'be', 'value' => 2.0},
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mr_mongo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongo
|
@@ -59,6 +59,22 @@ dependencies:
|
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 0.18.1
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: multi_json
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.7.2
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.7.2
|
62
78
|
- !ruby/object:Gem::Dependency
|
63
79
|
name: inline_template_loader
|
64
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -218,7 +234,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
218
234
|
version: '0'
|
219
235
|
segments:
|
220
236
|
- 0
|
221
|
-
hash:
|
237
|
+
hash: 1026442737
|
222
238
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
223
239
|
none: false
|
224
240
|
requirements:
|
@@ -227,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
227
243
|
version: '0'
|
228
244
|
segments:
|
229
245
|
- 0
|
230
|
-
hash:
|
246
|
+
hash: 1026442737
|
231
247
|
requirements: []
|
232
248
|
rubyforge_project:
|
233
249
|
rubygems_version: 1.8.23
|