mongomapper-sweatshop 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/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: