mr_mongo 0.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.
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ *.swp
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
19
+ vendor
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ -fd -c --require=spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,13 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - 2.0.0
7
+
8
+ services: mongodb
9
+
10
+ env:
11
+ - MR_MONGO_RUN_ALL_TESTS=on
12
+
13
+ script: bundle exec rspec
data/ChangeLog.md ADDED
@@ -0,0 +1,7 @@
1
+ ChangeLog of Mr. Mongo
2
+ ======================
3
+
4
+ 0.0.1 released 2013-04-08
5
+ -------------------------
6
+
7
+ - Initial release
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in mr_mongo.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,9 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec' do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/unit/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+ end
9
+
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Yuya Takeyama
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,73 @@
1
+ # Mr. Mongo
2
+
3
+ [![Build Status](https://travis-ci.org/yuya-takeyama/mr_mongo.png?branch=master)](https://travis-ci.org/yuya-takeyama/mr_mongo)
4
+ [![Coverage Status](https://coveralls.io/repos/yuya-takeyama/mr_mongo/badge.png?branch=master)](https://coveralls.io/r/yuya-takeyama/mr_mongo)
5
+
6
+ MapReduce framework for MongoDB using Ruby DSL
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ gem 'mr_mongo'
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install mr_mongo
21
+
22
+ ## Usage
23
+
24
+ ### mr_mongo command
25
+
26
+ ```
27
+ $ bundle exec mr_mongo
28
+ Commands:
29
+ mr_mongo exec # executes MapReduce
30
+ mr_mongo exec_on_memory # executes MapReduce on memory
31
+ mr_mongo help [COMMAND] # Describe available commands or one specific command
32
+ ```
33
+
34
+ *NOTICE*
35
+
36
+ The result of exec_on_memory may be massive, so it's preferable to use for small collections as testing.
37
+
38
+ ### Defining MapReduce job using DSL
39
+
40
+ Following is word-count example using Mr. Mongo DSL
41
+
42
+ ```ruby
43
+ set :collection, 'texts'
44
+ set :out, {replace: 'word_counts'}
45
+
46
+ __END__
47
+
48
+ @@ map
49
+ function () {
50
+ this.text.split(/\s+/).forEach(function (word) {
51
+ emit(word, {count: 1});
52
+ });
53
+ }
54
+
55
+ @@ reduce
56
+ function (key, values) {
57
+ var count = 0;
58
+
59
+ values.forEach(function (value) {
60
+ count += value.count;
61
+ });
62
+
63
+ return {count: count};
64
+ }
65
+ ```
66
+
67
+ ## Contributing
68
+
69
+ 1. Fork it
70
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
71
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
72
+ 4. Push to the branch (`git push origin my-new-feature`)
73
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/mr_mongo ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'mr_mongo'
3
+
4
+ MrMongo::Application.start
@@ -0,0 +1,22 @@
1
+ set :collection, 'texts'
2
+ set :out, {replace: 'word_counts'}
3
+
4
+ __END__
5
+
6
+ @@ map
7
+ function () {
8
+ this.text.split(/\s+/).forEach(function (word) {
9
+ emit(word, {count: 1});
10
+ });
11
+ }
12
+
13
+ @@ reduce
14
+ function (key, values) {
15
+ var count = 0;
16
+
17
+ values.forEach(function (value) {
18
+ count += value.count;
19
+ });
20
+
21
+ return {count: count};
22
+ }
@@ -0,0 +1,53 @@
1
+ require 'thor'
2
+ require 'mongo'
3
+ require 'pp'
4
+
5
+ module MrMongo
6
+ class Application < ::Thor
7
+ DEFAULT_URI = 'mongodb://localhost:27017/test'
8
+
9
+ desc 'exec', 'executes MapReduce'
10
+ method_option :db, default: DEFAULT_URI
11
+ def exec(*files)
12
+ files.each do |file|
13
+ puts "Executing #{file}..."
14
+ pp loader.load(file).exec
15
+ puts
16
+ end
17
+
18
+ puts "Finished MapReduce execution."
19
+ end
20
+
21
+ desc 'exec_on_memory', 'executes MapReduce on memory'
22
+ method_option :db, default: DEFAULT_URI
23
+ def exec_on_memory(*files)
24
+ files.each do |file|
25
+ puts "Executing #{file} on memory..."
26
+ pp loader.load(file).exec_on_memory
27
+ puts
28
+ end
29
+
30
+ puts "Finished MapReduce execution (on memory)."
31
+ end
32
+
33
+ private
34
+ def loader
35
+ Loader.new(context)
36
+ end
37
+
38
+ def context
39
+ Context.new(db: database)
40
+ end
41
+
42
+ def database
43
+ path = URI.parse(options[:db]).path
44
+ database_name = if path =~ %r{^/([^/]+)}
45
+ $1
46
+ else
47
+ 'test'
48
+ end
49
+
50
+ ::Mongo::MongoClient.from_uri(options[:db]).db(database_name)
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,9 @@
1
+ module MrMongo
2
+ class Context
3
+ attr_reader :db
4
+
5
+ def initialize(params = {})
6
+ @db = params[:db] if params[:db]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ module MrMongo
2
+ class Dsl
3
+ attr_reader :map_reduce
4
+
5
+ def initialize(context)
6
+ @map_reduce = MapReduce.new(context)
7
+ end
8
+
9
+ def parse(&block)
10
+ instance_eval &block
11
+
12
+ self
13
+ end
14
+
15
+ def set(key, value = true)
16
+ @map_reduce.send("#{key}=", value)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,27 @@
1
+ require 'inline_template_loader'
2
+
3
+ module MrMongo
4
+ class Loader
5
+ def initialize(context)
6
+ @context = context
7
+ end
8
+
9
+ def load(file)
10
+ dsl_script = ::File.read(file).sub!(/^__END__\n.*\Z/m, '')
11
+
12
+ map_reduce = load_from_string(dsl_script)
13
+
14
+ InlineTemplateLoader.load(file).each do |key, val|
15
+ map_reduce.send("#{key}=".to_sym, val)
16
+ end
17
+
18
+ map_reduce
19
+ end
20
+
21
+ def load_from_string(dsl_script, file = "(Mr. Mongo DSL)")
22
+ dsl = Dsl.new(@context)
23
+
24
+ eval "dsl.parse {\n" + dsl_script + "\n}.map_reduce", binding, file, 0
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,51 @@
1
+ module MrMongo
2
+ class MapReduce
3
+ attr_accessor :collection, :map, :reduce, :out, :query, :sort, :limit,
4
+ :finalize, :scope, :js_mode, :verbose
5
+
6
+ def initialize(context)
7
+ @context = context
8
+ end
9
+
10
+ def to_options
11
+ options = {}
12
+
13
+ options[:query] = @query if defined?(@query)
14
+ options[:sort] = @sort if defined?(@sort)
15
+ options[:limit] = @limit if defined?(@limit)
16
+ options[:finalize] = @finalize if defined?(@finalize)
17
+ options[:out] = @out if defined?(@out)
18
+ options[:verbose] = @verbose if defined?(@verbose)
19
+
20
+ options[:raw] = true if defined?(@out) and @out.is_a?(::Hash) and @out[:inline]
21
+
22
+ options
23
+ end
24
+
25
+ def exec
26
+ exec_with_options(to_options)
27
+ end
28
+
29
+ def exec_on_memory
30
+ options = to_options
31
+ options[:out] = {inline: true}
32
+ options[:raw] = true
33
+
34
+ exec_with_options(options)
35
+ end
36
+
37
+ def insert_into_collection(*args)
38
+ mongo_collection.send(:insert, *args)
39
+ end
40
+ alias_method :insert, :insert_into_collection
41
+
42
+ private
43
+ def exec_with_options(options)
44
+ mongo_collection.map_reduce(@map, @reduce, options)
45
+ end
46
+
47
+ def mongo_collection
48
+ @context.db.collection(@collection)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,3 @@
1
+ module MrMongo
2
+ VERSION = "0.0.1"
3
+ end
data/lib/mr_mongo.rb ADDED
@@ -0,0 +1,10 @@
1
+ require "mr_mongo/application"
2
+ require "mr_mongo/context"
3
+ require "mr_mongo/dsl"
4
+ require "mr_mongo/loader"
5
+ require "mr_mongo/map_reduce"
6
+ require "mr_mongo/version"
7
+
8
+ module MrMongo
9
+ # Your code goes here...
10
+ end
data/mr_mongo.gemspec ADDED
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mr_mongo/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mr_mongo"
8
+ spec.version = MrMongo::VERSION
9
+ spec.authors = ["Yuya Takeyama"]
10
+ spec.email = ["sign.of.the.wolf.pentagram@gmail.com"]
11
+ spec.description = %q{MapReduce framework for MongoDB using Ruby DSL}
12
+ spec.summary = %q{MapReduce framework for MongoDB using Ruby DSL}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "mongo", "~> 1.8.4"
22
+ spec.add_dependency "bson_ext", "~> 1.8.4"
23
+ spec.add_dependency "thor", "~> 0.18.1"
24
+ spec.add_dependency "inline_template_loader", "~> 0.3.0"
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.3"
27
+ spec.add_development_dependency "rake"
28
+ spec.add_development_dependency "rspec", "~> 2.13.0"
29
+ spec.add_development_dependency "guard-rspec", "~> 2.5.2"
30
+ spec.add_development_dependency "rb-fsevent", "~> 0.9.1"
31
+ spec.add_development_dependency "coveralls", "~> 0.6.4"
32
+ end
@@ -0,0 +1,9 @@
1
+ set :collection, "foo"
2
+ set :out, "bar"
3
+ set :verbose
4
+
5
+ __END__
6
+ @@ map
7
+ function () { emit(this.id, this.count); }
8
+ @@ reduce
9
+ function (key, values) { return 0; }
@@ -0,0 +1,20 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+ require 'mr_mongo'
4
+ require 'mongo'
5
+
6
+ RSpec.configure do |c|
7
+ c.filter_run_excluding mongo: true unless ENV['MR_MONGO_RUN_ALL_TESTS']
8
+ end
9
+
10
+ def testing_connection
11
+ ::Mongo::Connection.new('localhost')
12
+ end
13
+
14
+ def testing_database
15
+ testing_connection.db('mr_mongo_test')
16
+ end
17
+
18
+ def drop_testing_database
19
+ testing_connection.drop_database('mr_mongo_test')
20
+ end
@@ -0,0 +1,24 @@
1
+ module MrMongo
2
+ describe Dsl do
3
+ let(:context) { Context.new }
4
+ let(:dsl) { Dsl.new(context) }
5
+
6
+ describe '#set' do
7
+ subject { dsl.map_reduce.verbose }
8
+
9
+ context 'one is passed as argument' do
10
+ before { dsl.set :verbose, 1 }
11
+
12
+ it 'should set its argument to MapReduce object' do
13
+ should eq(1)
14
+ end
15
+ end
16
+
17
+ context 'no arguments are passed' do
18
+ before { dsl.set :verbose }
19
+
20
+ it { should be_true }
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ module MrMongo
4
+ describe Loader do
5
+ let(:loader) { Loader.new(Context.new) }
6
+
7
+ describe '#load_from_string' do
8
+ subject { loader.load_from_string(dsl_script) }
9
+
10
+ context 'some parameters are set' do
11
+ let(:dsl_script) do
12
+ <<-EOS
13
+ set :collection, "foo"
14
+ set :out, "bar"
15
+ set :verbose, true
16
+ EOS
17
+ end
18
+
19
+ its(:collection) { should eq('foo') }
20
+ its(:out) { should eq('bar') }
21
+ its(:verbose) { should be_true }
22
+ end
23
+
24
+ context 'no parameters are set' do
25
+ let(:dsl_script) { '' }
26
+
27
+ its(:collection) { should be_nil }
28
+ its(:out) { should be_nil }
29
+ its(:verbose) { should be_nil }
30
+ end
31
+ end
32
+
33
+ describe '#load' do
34
+ subject { loader.load(File.expand_path(File.join(__FILE__, '../../../../fixtures/fixture_dsl.rb'))) }
35
+
36
+ its(:collection) { should eq('foo') }
37
+ its(:out) { should eq('bar') }
38
+ its(:verbose) { should be_true }
39
+ its(:map) { should eq("function () { emit(this.id, this.count); }\n") }
40
+ its(:reduce) { should eq("function (key, values) { return 0; }\n") }
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,87 @@
1
+ module MrMongo
2
+ describe MapReduce do
3
+ let(:context) { Context.new(db: testing_database) }
4
+ let(:map_reduce) { MapReduce.new(context) }
5
+
6
+ describe '#to_options' do
7
+ subject { map_reduce.to_options }
8
+
9
+ context 'some options are specified' do
10
+ before do
11
+ map_reduce.query = {foo: "bar"}
12
+ map_reduce.limit = 50
13
+ map_reduce.verbose = true
14
+ end
15
+
16
+ it { should eq({query: {foo: "bar"}, limit: 50, verbose: true}) }
17
+ end
18
+
19
+ context 'out is inline' do
20
+ before do
21
+ map_reduce.out = {inline: true}
22
+ end
23
+
24
+ it { should eq({out: {inline: true}, raw: true}) }
25
+ end
26
+ end
27
+
28
+ describe 'MapReduce excution', mongo: true do
29
+ let(:expected) do
30
+ [
31
+ {'_id' => 'be', 'value' => 2.0},
32
+ {'_id' => 'not', 'value' => 1.0},
33
+ {'_id' => 'or', 'value' => 1.0},
34
+ {'_id' => 'to', 'value' => 2.0},
35
+ ]
36
+ end
37
+
38
+ shared_examples_for 'executes MapReduce correctly' do
39
+ it { should eq(expected) }
40
+ end
41
+
42
+ before do
43
+ map_reduce.collection = 'foo'
44
+
45
+ map_reduce.insert({word: 'to'})
46
+ map_reduce.insert({word: 'be'})
47
+ map_reduce.insert({word: 'or'})
48
+ map_reduce.insert({word: 'not'})
49
+ map_reduce.insert({word: 'to'})
50
+ map_reduce.insert({word: 'be'})
51
+
52
+ map_reduce.map = <<-EOS
53
+ function () {
54
+ emit(this.word, 1);
55
+ }
56
+ EOS
57
+ map_reduce.reduce = <<-EOS
58
+ function (key, values) {
59
+ var count = 0;
60
+
61
+ values.forEach(function (value) {
62
+ count += value;
63
+ });
64
+
65
+ return count;
66
+ }
67
+ EOS
68
+ end
69
+
70
+ after { drop_testing_database }
71
+
72
+ describe '#exec' do
73
+ subject { map_reduce.exec.find.to_a }
74
+
75
+ before { map_reduce.out = {replace: 'result'} }
76
+
77
+ it_should_behave_like 'executes MapReduce correctly'
78
+ end
79
+
80
+ describe '#exec_on_memory' do
81
+ subject { map_reduce.exec_on_memory['results'] }
82
+
83
+ it_should_behave_like 'executes MapReduce correctly'
84
+ end
85
+ end
86
+ end
87
+ end
metadata ADDED
@@ -0,0 +1,242 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mr_mongo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Yuya Takeyama
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mongo
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.8.4
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.8.4
30
+ - !ruby/object:Gem::Dependency
31
+ name: bson_ext
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.8.4
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.8.4
46
+ - !ruby/object:Gem::Dependency
47
+ name: thor
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 0.18.1
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.18.1
62
+ - !ruby/object:Gem::Dependency
63
+ name: inline_template_loader
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.3.0
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: 0.3.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: bundler
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '1.3'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '1.3'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rake
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rspec
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 2.13.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 2.13.0
126
+ - !ruby/object:Gem::Dependency
127
+ name: guard-rspec
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: 2.5.2
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: 2.5.2
142
+ - !ruby/object:Gem::Dependency
143
+ name: rb-fsevent
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ~>
148
+ - !ruby/object:Gem::Version
149
+ version: 0.9.1
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: 0.9.1
158
+ - !ruby/object:Gem::Dependency
159
+ name: coveralls
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ~>
164
+ - !ruby/object:Gem::Version
165
+ version: 0.6.4
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 0.6.4
174
+ description: MapReduce framework for MongoDB using Ruby DSL
175
+ email:
176
+ - sign.of.the.wolf.pentagram@gmail.com
177
+ executables:
178
+ - mr_mongo
179
+ extensions: []
180
+ extra_rdoc_files: []
181
+ files:
182
+ - .gitignore
183
+ - .rspec
184
+ - .travis.yml
185
+ - ChangeLog.md
186
+ - Gemfile
187
+ - Guardfile
188
+ - LICENSE.txt
189
+ - README.md
190
+ - Rakefile
191
+ - bin/mr_mongo
192
+ - examples/word_count.rb
193
+ - lib/mr_mongo.rb
194
+ - lib/mr_mongo/application.rb
195
+ - lib/mr_mongo/context.rb
196
+ - lib/mr_mongo/dsl.rb
197
+ - lib/mr_mongo/loader.rb
198
+ - lib/mr_mongo/map_reduce.rb
199
+ - lib/mr_mongo/version.rb
200
+ - mr_mongo.gemspec
201
+ - spec/fixtures/fixture_dsl.rb
202
+ - spec/spec_helper.rb
203
+ - spec/unit/lib/mr_mongo/dsl_spec.rb
204
+ - spec/unit/lib/mr_mongo/loader_spec.rb
205
+ - spec/unit/lib/mr_mongo/map_reduce_spec.rb
206
+ homepage: ''
207
+ licenses:
208
+ - MIT
209
+ post_install_message:
210
+ rdoc_options: []
211
+ require_paths:
212
+ - lib
213
+ required_ruby_version: !ruby/object:Gem::Requirement
214
+ none: false
215
+ requirements:
216
+ - - ! '>='
217
+ - !ruby/object:Gem::Version
218
+ version: '0'
219
+ segments:
220
+ - 0
221
+ hash: 1664865836217424745
222
+ required_rubygems_version: !ruby/object:Gem::Requirement
223
+ none: false
224
+ requirements:
225
+ - - ! '>='
226
+ - !ruby/object:Gem::Version
227
+ version: '0'
228
+ segments:
229
+ - 0
230
+ hash: 1664865836217424745
231
+ requirements: []
232
+ rubyforge_project:
233
+ rubygems_version: 1.8.23
234
+ signing_key:
235
+ specification_version: 3
236
+ summary: MapReduce framework for MongoDB using Ruby DSL
237
+ test_files:
238
+ - spec/fixtures/fixture_dsl.rb
239
+ - spec/spec_helper.rb
240
+ - spec/unit/lib/mr_mongo/dsl_spec.rb
241
+ - spec/unit/lib/mr_mongo/loader_spec.rb
242
+ - spec/unit/lib/mr_mongo/map_reduce_spec.rb