mongomapper-sweatshop 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'mongo_mapper'
4
+ gem 'bson_ext'
5
+ gem 'randexp'
6
+
7
+ group :development do
8
+ gem 'jeweler'
9
+ gem 'rspec'
10
+ gem 'simplecov'
11
+ gem 'yard'
12
+ gem 'redcarpet'
13
+ gem 'database_cleaner'
14
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,64 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.2.8)
5
+ activesupport (= 3.2.8)
6
+ builder (~> 3.0.0)
7
+ activesupport (3.2.8)
8
+ i18n (~> 0.6)
9
+ multi_json (~> 1.0)
10
+ bson (1.7.0)
11
+ bson_ext (1.7.0)
12
+ bson (~> 1.7.0)
13
+ builder (3.0.4)
14
+ database_cleaner (0.9.1)
15
+ diff-lcs (1.1.3)
16
+ git (1.2.5)
17
+ i18n (0.6.1)
18
+ jeweler (1.8.4)
19
+ bundler (~> 1.0)
20
+ git (>= 1.2.5)
21
+ rake
22
+ rdoc
23
+ json (1.7.5)
24
+ mongo (1.7.0)
25
+ bson (~> 1.7.0)
26
+ mongo_mapper (0.12.0)
27
+ activemodel (~> 3.0)
28
+ activesupport (~> 3.0)
29
+ plucky (~> 0.5.2)
30
+ multi_json (1.3.6)
31
+ plucky (0.5.2)
32
+ mongo (~> 1.5)
33
+ rake (0.9.2.2)
34
+ randexp (0.1.7)
35
+ rdoc (3.12)
36
+ json (~> 1.4)
37
+ redcarpet (2.2.2)
38
+ rspec (2.11.0)
39
+ rspec-core (~> 2.11.0)
40
+ rspec-expectations (~> 2.11.0)
41
+ rspec-mocks (~> 2.11.0)
42
+ rspec-core (2.11.1)
43
+ rspec-expectations (2.11.3)
44
+ diff-lcs (~> 1.1.3)
45
+ rspec-mocks (2.11.3)
46
+ simplecov (0.7.1)
47
+ multi_json (~> 1.0)
48
+ simplecov-html (~> 0.7.1)
49
+ simplecov-html (0.7.1)
50
+ yard (0.8.3)
51
+
52
+ PLATFORMS
53
+ ruby
54
+
55
+ DEPENDENCIES
56
+ bson_ext
57
+ database_cleaner
58
+ jeweler
59
+ mongo_mapper
60
+ randexp
61
+ redcarpet
62
+ rspec
63
+ simplecov
64
+ yard
data/README.md ADDED
@@ -0,0 +1,32 @@
1
+ MongoMapper Sweatshop, Extracted from @goalsforgiving
2
+ ====================================================
3
+
4
+ https://github.com/datamapper/dm-sweatshop/ shamelessly rewritten for mongo_mapper
5
+
6
+ ###Requirements
7
+
8
+ * mongo_mapper
9
+
10
+
11
+
12
+ #### Installation: (Gemfile)
13
+ gem "mongo-sweatshop"
14
+
15
+
16
+ ####Usage:
17
+
18
+ User.fix {
19
+ {
20
+ #randexp is included for you
21
+ name: /\w+/.gen,
22
+ email: /\w@\w\.com/.gen
23
+ }
24
+ }
25
+
26
+ # create a user (#create)
27
+ User.gen
28
+
29
+ # make a user (#new)
30
+ User.make
31
+
32
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,13 @@
1
+ require File.dirname(__FILE__) + '/mongo-sweatshop/sweatshop'
2
+ require File.dirname(__FILE__) + '/mongo-sweatshop/model'
3
+
4
+ module MongoSweatShop
5
+ extend ActiveSupport::Concern
6
+
7
+ include MongoSweatShop::Model
8
+
9
+ included do
10
+
11
+ end
12
+ end
13
+ MongoMapper::Document.plugin(MongoSweatShop)
@@ -0,0 +1,41 @@
1
+ module MongoSweatShop
2
+ module Model
3
+
4
+ module ClassMethods
5
+
6
+ @@fixtures = {}
7
+
8
+ # Creates a fixture
9
+ # @param name [Symbol] fixture name, :default is default
10
+ # @param block [Proc] the fixture to be lazily evaluated
11
+ # @return [Proc] the block passed
12
+ def fix name=:default, &block
13
+ if name.is_a? Proc
14
+ block, name = name, :default
15
+ end
16
+ SweatShop[self, name] = block
17
+ #@@fixtures[name] = block
18
+ end
19
+ alias :fixture :fix
20
+
21
+ # Generates a fixture and saves it to the test db
22
+ # @param name [Symbol] name of fixture, :default is default
23
+ # @param overrides [Hash] hash of attributes to override what may be defined in the fixture
24
+ # @return [Class] instance of the class this is currently included
25
+ def gen name=:default, overrides={}
26
+ self.create SweatShop[self, name, overrides]
27
+ end
28
+ alias :generate :gen
29
+
30
+
31
+ # Generates a fixture without saving to the db
32
+ # @param name [Symbol] name of fixture, :default is default
33
+ # @param overrides [Hash] Hash of attributes to merge into the generated fixture
34
+ # @return [Class] instance of the class
35
+ def make name=:default, overrides={}
36
+ self.new SweatShop[self, name, overrides]
37
+ end
38
+
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,37 @@
1
+ # @author lamp
2
+ module MongoSweatShop
3
+ class SweatShop
4
+
5
+ # the model to fixture map
6
+ # @!attribute [rw] models
7
+ # @return [Hash] Hash of models to scopes and their lazily loaded attributes
8
+ @@models = {}
9
+
10
+ class NoFixtureError < Exception; end
11
+
12
+ class << self
13
+
14
+ # Stores a fixture
15
+ # @param klass [Class] klass is the class to provide a fixture
16
+ # @param name [Symbol] defines the scope of the fixture, defaults to :default
17
+ # @param proc [Proc] the attribute list to lazily evaled
18
+ # @return [Proc] The proc originally passed
19
+ def []= klass, name=:default, proc
20
+ ((@@models[klass] ||= {})[name] ||= []) << proc
21
+ end
22
+
23
+ # Gets a fixture
24
+ # @param klass [Class] The class to scope the fixture query by
25
+ # @param name [Symbol] the fixture name to scope the query by
26
+ # @param overrides [Hash] the overrides that may be provided
27
+ # @return [Mixed] the results of the proc, or false
28
+ def [] klass, name=:default, overrides={}
29
+ overrides, name = name, :default if name.is_a? Hash
30
+ @@models[klass][name].last.call.merge(overrides)
31
+ rescue NoFixtureError
32
+ puts "A fixture with that name has not been defined, using the default"
33
+ @@models[klass][:default].last.call.merge(overrides)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,72 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "mongomapper-sweatshop"
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["lamp"]
12
+ s.date = "2012-10-30"
13
+ s.description = "MongoMapper plugin for generating fixtures"
14
+ s.email = "matthew.gradidge@gmail.com"
15
+ s.extra_rdoc_files = [
16
+ "README.md"
17
+ ]
18
+ s.files = [
19
+ "Gemfile",
20
+ "Gemfile.lock",
21
+ "README.md",
22
+ "VERSION",
23
+ "lib/mongo-sweatshop.rb",
24
+ "lib/mongo-sweatshop/model.rb",
25
+ "lib/mongo-sweatshop/sweatshop.rb",
26
+ "mongomapper-sweatshop.gemspec",
27
+ "spec/mongo-sweatshop/model_spec.rb",
28
+ "spec/mongo-sweatshop/sweatshop_spec.rb",
29
+ "spec/spec_helper.rb"
30
+ ]
31
+ s.homepage = "http://github.com/lamp/mongomapper-sweatshop"
32
+ s.require_paths = ["lib"]
33
+ s.rubygems_version = "1.8.24"
34
+ s.summary = "MongoMapper plugin for generating fixtures"
35
+
36
+ if s.respond_to? :specification_version then
37
+ s.specification_version = 3
38
+
39
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
40
+ s.add_runtime_dependency(%q<mongo_mapper>, [">= 0"])
41
+ s.add_runtime_dependency(%q<bson_ext>, [">= 0"])
42
+ s.add_runtime_dependency(%q<randexp>, [">= 0"])
43
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
44
+ s.add_development_dependency(%q<rspec>, [">= 0"])
45
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
46
+ s.add_development_dependency(%q<yard>, [">= 0"])
47
+ s.add_development_dependency(%q<redcarpet>, [">= 0"])
48
+ s.add_development_dependency(%q<database_cleaner>, [">= 0"])
49
+ else
50
+ s.add_dependency(%q<mongo_mapper>, [">= 0"])
51
+ s.add_dependency(%q<bson_ext>, [">= 0"])
52
+ s.add_dependency(%q<randexp>, [">= 0"])
53
+ s.add_dependency(%q<jeweler>, [">= 0"])
54
+ s.add_dependency(%q<rspec>, [">= 0"])
55
+ s.add_dependency(%q<simplecov>, [">= 0"])
56
+ s.add_dependency(%q<yard>, [">= 0"])
57
+ s.add_dependency(%q<redcarpet>, [">= 0"])
58
+ s.add_dependency(%q<database_cleaner>, [">= 0"])
59
+ end
60
+ else
61
+ s.add_dependency(%q<mongo_mapper>, [">= 0"])
62
+ s.add_dependency(%q<bson_ext>, [">= 0"])
63
+ s.add_dependency(%q<randexp>, [">= 0"])
64
+ s.add_dependency(%q<jeweler>, [">= 0"])
65
+ s.add_dependency(%q<rspec>, [">= 0"])
66
+ s.add_dependency(%q<simplecov>, [">= 0"])
67
+ s.add_dependency(%q<yard>, [">= 0"])
68
+ s.add_dependency(%q<redcarpet>, [">= 0"])
69
+ s.add_dependency(%q<database_cleaner>, [">= 0"])
70
+ end
71
+ end
72
+
@@ -0,0 +1,94 @@
1
+ require 'spec_helper'
2
+
3
+ describe MongoSweatShop::Model::ClassMethods do
4
+
5
+ subject do
6
+ class User
7
+ include MongoMapper::Document
8
+ end
9
+ end
10
+
11
+ it { should_not be_nil }
12
+
13
+ context "method definition" do
14
+ %w(gen generate fix make).each do |method|
15
+
16
+ specify "#{method}" do
17
+ subject.respond_to?(method).should eq(true)
18
+ end
19
+ end
20
+ end
21
+
22
+ context "fixture creation" do
23
+
24
+ subject do
25
+ class User
26
+ include MongoMapper::Document
27
+ end
28
+ end
29
+
30
+ let :attrs do
31
+ { foo: 'bar' }
32
+ end
33
+
34
+ let :callable do
35
+ proc { attrs }
36
+ end
37
+
38
+ specify do
39
+ expect do
40
+ User.fix { attrs }
41
+ end.to_not raise_error
42
+ end
43
+
44
+ specify do
45
+ MongoSweatShop::SweatShop.should_receive(:[]=)
46
+ User.fix { attrs }
47
+ end
48
+
49
+ specify do
50
+ MongoSweatShop::SweatShop.should_receive(:[]=).with(User, :default, callable)
51
+ User.fix callable
52
+ end
53
+ end
54
+
55
+ context "fixture generation" do
56
+
57
+ context "making a new instance" do
58
+
59
+ before :all do
60
+ User.fix do
61
+ { foo: 'bar' }
62
+ end
63
+ end
64
+
65
+ subject do
66
+ class User
67
+ include MongoMapper::Document
68
+
69
+ key :foo, String
70
+ end
71
+ end
72
+
73
+ specify do
74
+ expect do
75
+ User.make
76
+ end.to_not raise_error
77
+ end
78
+
79
+ specify do
80
+ User.make.attributes.should include({ foo: 'bar' })
81
+ end
82
+
83
+ context "with overrides" do
84
+ specify do
85
+ User.make({ bar: 'foo' }).attributes.should include({ foo: 'bar', bar: 'foo' })
86
+ end
87
+ end
88
+ end
89
+
90
+ context "creating a new instance" do
91
+
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+ describe MongoSweatShop::SweatShop do
3
+
4
+ before :all do
5
+ class User; end
6
+ end
7
+
8
+ subject { described_class }
9
+
10
+ it { should_not be_nil }
11
+
12
+ context "method definition" do
13
+ %w([] []=).each do |method|
14
+
15
+ it do
16
+ should respond_to(method)
17
+ end
18
+ end
19
+ end
20
+
21
+ context "define fixture" do
22
+
23
+ let :callable do
24
+ proc { { foo: 'bar' }}
25
+ end
26
+
27
+ specify do
28
+ expect do
29
+ subject[User, :default]= callable
30
+ end.to_not raise_error
31
+ end
32
+
33
+ specify do
34
+ (subject[User, :default]=(callable)).should eq(callable)
35
+ end
36
+
37
+ context "optional arguments" do
38
+
39
+ specify do
40
+ (subject[User]=(callable)).should eq(callable)
41
+ end
42
+
43
+ specify do
44
+ expect do
45
+ (subject[User]=(callable)).should eq(callable)
46
+ end.to_not raise_error
47
+ end
48
+ end
49
+ end
50
+
51
+ context "getting a fixture" do
52
+
53
+ let :callable do
54
+ proc { { foo: 'bar' }}
55
+ end
56
+
57
+ before :all do
58
+ subject[User, :default]= callable
59
+ end
60
+
61
+ specify do
62
+ expect do
63
+ subject[User, :default]
64
+ end.to_not raise_error
65
+ end
66
+
67
+ specify do
68
+ subject[User, :default].should eq(callable.call)
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,24 @@
1
+ require 'mongo_mapper'
2
+ require 'randexp'
3
+ require 'active_support'
4
+ require 'simplecov'
5
+ SimpleCov.start
6
+ require 'mongo-sweatshop'
7
+ require 'database_cleaner'
8
+
9
+ Randexp::Dictionary.load_dictionary
10
+
11
+ RSpec.configure do |config|
12
+
13
+ MongoMapper.connection = Mongo::Connection.new('localhost', 27017, :pool_size => 5, :pool_timeout => 5)
14
+ MongoMapper.database = 'test_db'
15
+
16
+ config.before :suite do
17
+ DatabaseCleaner[:mongo_mapper].strategy = :truncation
18
+ end
19
+
20
+ config.after :suite do
21
+ DatabaseCleaner.clean_with(:truncation)
22
+ end
23
+
24
+ end
metadata ADDED
@@ -0,0 +1,201 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mongomapper-sweatshop
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - lamp
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mongo_mapper
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
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: '0'
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: '0'
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: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: randexp
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
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'
62
+ - !ruby/object:Gem::Dependency
63
+ name: jeweler
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rspec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
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: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: simplecov
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: yard
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '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: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: redcarpet
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
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: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: database_cleaner
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
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'
158
+ description: MongoMapper plugin for generating fixtures
159
+ email: matthew.gradidge@gmail.com
160
+ executables: []
161
+ extensions: []
162
+ extra_rdoc_files:
163
+ - README.md
164
+ files:
165
+ - Gemfile
166
+ - Gemfile.lock
167
+ - README.md
168
+ - VERSION
169
+ - lib/mongo-sweatshop.rb
170
+ - lib/mongo-sweatshop/model.rb
171
+ - lib/mongo-sweatshop/sweatshop.rb
172
+ - mongomapper-sweatshop.gemspec
173
+ - spec/mongo-sweatshop/model_spec.rb
174
+ - spec/mongo-sweatshop/sweatshop_spec.rb
175
+ - spec/spec_helper.rb
176
+ homepage: http://github.com/lamp/mongomapper-sweatshop
177
+ licenses: []
178
+ post_install_message:
179
+ rdoc_options: []
180
+ require_paths:
181
+ - lib
182
+ required_ruby_version: !ruby/object:Gem::Requirement
183
+ none: false
184
+ requirements:
185
+ - - ! '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ required_rubygems_version: !ruby/object:Gem::Requirement
189
+ none: false
190
+ requirements:
191
+ - - ! '>='
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ requirements: []
195
+ rubyforge_project:
196
+ rubygems_version: 1.8.24
197
+ signing_key:
198
+ specification_version: 3
199
+ summary: MongoMapper plugin for generating fixtures
200
+ test_files: []
201
+ has_rdoc: