state_machine-mongoid 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+ .bundle
21
+
22
+ ## PROJECT::SPECIFIC
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source :rubygems
2
+ gem "bson_ext", "1.0.1"
3
+ gem "mongoid", ">=2.0.0.beta7"
4
+ gem "state_machine", ">=0.9.2"
5
+ gem "activemodel", ">=3.0.0.beta4", :require => "active_model"
6
+
7
+ group :development do
8
+ gem "rspec"
9
+ end
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Marcin Ciunelis
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,21 @@
1
+ = state_machine-mongoid
2
+
3
+ The mongoid integration for pluginaweek's state_machine
4
+
5
+ == TODO
6
+
7
+ * tests!
8
+
9
+ == Note on Patches/Pull Requests
10
+
11
+ * Fork the project.
12
+ * Make your feature addition or bug fix.
13
+ * Add tests for it. This is important so I don't break it in a
14
+ future version unintentionally.
15
+ * Commit, do not mess with rakefile, version, or history.
16
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
17
+ * Send me a pull request. Bonus points for topic branches.
18
+
19
+ == Copyright
20
+
21
+ Copyright (c) 2010 Marcin Ciunelis. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,45 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'bundler'
4
+
5
+ begin
6
+ require 'jeweler'
7
+ Jeweler::Tasks.new do |gem|
8
+ gem.name = "state_machine-mongoid"
9
+ gem.summary = %Q{state_machine mongoid integration}
10
+ gem.description = %Q{a little lack of tests but it works!}
11
+ gem.email = "marcin.ciunelis@gmail.com"
12
+ gem.homepage = "http://github.com/martinciu/state_machine-mongoid"
13
+ gem.authors = ["Marcin Ciunelis"]
14
+ gem.add_bundler_dependencies
15
+ end
16
+ Jeweler::GemcutterTasks.new
17
+ rescue LoadError
18
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
19
+ end
20
+
21
+ require 'spec/rake/spectask'
22
+ Spec::Rake::SpecTask.new(:spec) do |spec|
23
+ spec.libs << 'lib' << 'spec'
24
+ spec.spec_files = FileList['spec/**/*_spec.rb']
25
+ end
26
+
27
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
28
+ spec.libs << 'lib' << 'spec'
29
+ spec.pattern = 'spec/**/*_spec.rb'
30
+ spec.rcov = true
31
+ end
32
+
33
+ task :spec => :check_dependencies
34
+
35
+ task :default => :spec
36
+
37
+ require 'rake/rdoctask'
38
+ Rake::RDocTask.new do |rdoc|
39
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
40
+
41
+ rdoc.rdoc_dir = 'rdoc'
42
+ rdoc.title = "state_machine-mongoid #{version}"
43
+ rdoc.rdoc_files.include('README*')
44
+ rdoc.rdoc_files.include('lib/**/*.rb')
45
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.1
@@ -0,0 +1,321 @@
1
+ module StateMachine
2
+ module Integrations
3
+ module Mongoid
4
+ # The default options to use for state machines using this integration
5
+ class << self; attr_reader :defaults; end
6
+ @defaults = {:action => :save, :use_transactions => false}
7
+
8
+ # Should this integration be used for state machines in the given class?
9
+ # Classes that include Mongoid::Resource will automatically use the
10
+ # Mongoid integration.
11
+ def self.matches?(klass)
12
+ defined?(::Mongoid::Document) && klass <= ::Mongoid::Document
13
+ end
14
+
15
+ protected
16
+
17
+ # Defines an initialization hook into the owner class for setting the
18
+ # initial state of the machine *before* any attributes are set on the
19
+ # object
20
+ def define_state_initializer
21
+
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ # module StateMachine
28
+ # module Integrations #:nodoc:
29
+ # # Adds support for integrating state machines with Mongoid models.
30
+ # #
31
+ # # == Examples
32
+ # #
33
+ # # Below is an example of a simple state machine defined within a
34
+ # # Mongoid model:
35
+ # #
36
+ # # class Vehicle
37
+ # # include Mongoid::Document
38
+ # #
39
+ # # state_machine :initial => :parked do
40
+ # # event :ignite do
41
+ # # transition :parked => :idling
42
+ # # end
43
+ # # end
44
+ # # end
45
+ # #
46
+ # # The examples in the sections below will use the above class as a
47
+ # # reference.
48
+ # #
49
+ # # == Actions
50
+ # #
51
+ # # By default, the action that will be invoked when a state is transitioned
52
+ # # is the +save+ action. This will cause the record to save the changes
53
+ # # made to the state machine's attribute. *Note* that if any other changes
54
+ # # were made to the record prior to transition, then those changes will
55
+ # # be saved as well.
56
+ # #
57
+ # # For example,
58
+ # #
59
+ # # vehicle = Vehicle.create # => #<Vehicle id: 1, name: nil, state: "parked">
60
+ # # vehicle.name = 'Ford Explorer'
61
+ # # vehicle.ignite # => true
62
+ # # vehicle.reload # => #<Vehicle id: 1, name: "Ford Explorer", state: "idling">
63
+ # #
64
+ # # == Events
65
+ # #
66
+ # # As described in StateMachine::InstanceMethods#state_machine, event
67
+ # # attributes are created for every machine that allow transitions to be
68
+ # # performed automatically when the object's action (in this case, :save)
69
+ # # is called.
70
+ # #
71
+ # # In Mongoid, these automated events are run in the following order:
72
+ # # * before validation - Run before callbacks and persist new states, then validate
73
+ # # * before save - If validation was skipped, run before callbacks and persist new states, then save
74
+ # # * after save - Run after callbacks
75
+ # #
76
+ # # For example,
77
+ # #
78
+ # # vehicle = Vehicle.create # => #<Vehicle id: 1, name: nil, state: "parked">
79
+ # # vehicle.state_event # => nil
80
+ # # vehicle.state_event = 'invalid'
81
+ # # vehicle.valid? # => false
82
+ # # vehicle.errors.full_messages # => ["State event is invalid"]
83
+ # #
84
+ # # vehicle.state_event = 'ignite'
85
+ # # vehicle.valid? # => true
86
+ # # vehicle.save # => true
87
+ # # vehicle.state # => "idling"
88
+ # # vehicle.state_event # => nil
89
+ # #
90
+ # # Note that this can also be done on a mass-assignment basis:
91
+ # #
92
+ # # vehicle = Vehicle.create(:state_event => 'ignite') # => #<Vehicle id: 1, name: nil, state: "idling">
93
+ # # vehicle.state # => "idling"
94
+ # #
95
+ # # This technique is always used for transitioning states when the +save+
96
+ # # action (which is the default) is configured for the machine.
97
+ # #
98
+ # # === Security implications
99
+ # #
100
+ # # Beware that public event attributes mean that events can be fired
101
+ # # whenever mass-assignment is being used. If you want to prevent malicious
102
+ # # users from tampering with events through URLs / forms, the attribute
103
+ # # should be protected like so:
104
+ # #
105
+ # # class Vehicle
106
+ # # include Mongoid::Document
107
+ # #
108
+ # # attr_protected :state_event
109
+ # # # attr_accessible ... # Alternative technique
110
+ # #
111
+ # # state_machine do
112
+ # # ...
113
+ # # end
114
+ # # end
115
+ # #
116
+ # # If you want to only have *some* events be able to fire via mass-assignment,
117
+ # # you can build two state machines (one public and one protected) like so:
118
+ # #
119
+ # # class Vehicle
120
+ # # include Mongoid::Document
121
+ # #
122
+ # # attr_protected :state_event # Prevent access to events in the first machine
123
+ # #
124
+ # # state_machine do
125
+ # # # Define private events here
126
+ # # end
127
+ # #
128
+ # # # Public machine targets the same state as the private machine
129
+ # # state_machine :public_state, :attribute => :state do
130
+ # # # Define public events here
131
+ # # end
132
+ # # end
133
+ # #
134
+ # # == Validation errors
135
+ # #
136
+ # # If an event fails to successfully fire because there are no matching
137
+ # # transitions for the current record, a validation error is added to the
138
+ # # record's state attribute to help in determining why it failed and for
139
+ # # reporting via the UI.
140
+ # #
141
+ # # For example,
142
+ # #
143
+ # # vehicle = Vehicle.create(:state => 'idling') # => #<Vehicle id: 1, name: nil, state: "idling">
144
+ # # vehicle.ignite # => false
145
+ # # vehicle.errors.full_messages # => ["State cannot transition via \"ignite\""]
146
+ # #
147
+ # # If an event fails to fire because of a validation error on the record and
148
+ # # *not* because a matching transition was not available, no error messages
149
+ # # will be added to the state attribute.
150
+ # #
151
+ # # == Scopes
152
+ # #
153
+ # # To assist in filtering models with specific states, a series of basic
154
+ # # scopes are defined on the model for finding records with or without a
155
+ # # particular set of states.
156
+ # #
157
+ # # These scopes are essentially the functional equivalent of the following
158
+ # # definitions:
159
+ # #
160
+ # # class Vehicle
161
+ # # include Mongoid::Document
162
+ # #
163
+ # # def self.with_states(*states)
164
+ # # all(:conditions => {:state => {'$in' => states}})
165
+ # # end
166
+ # # # with_states also aliased to with_state
167
+ # #
168
+ # # def self.without_states(*states)
169
+ # # all(:conditions => {:state => {'$nin' => states}})
170
+ # # end
171
+ # # # without_states also aliased to without_state
172
+ # # end
173
+ # #
174
+ # # *Note*, however, that the states are converted to their stored values
175
+ # # before being passed into the query.
176
+ # #
177
+ # # Because of the way named scopes work in Mongoid, they *cannot* be
178
+ # # chained.
179
+ # #
180
+ # # == Callbacks
181
+ # #
182
+ # # All before/after transition callbacks defined for Mongoid models
183
+ # # behave in the same way that other Mongoid callbacks behave. The
184
+ # # object involved in the transition is passed in as an argument.
185
+ # #
186
+ # # For example,
187
+ # #
188
+ # # class Vehicle
189
+ # # include Mongoid::Document
190
+ # #
191
+ # # state_machine :initial => :parked do
192
+ # # before_transition any => :idling do |vehicle|
193
+ # # vehicle.put_on_seatbelt
194
+ # # end
195
+ # #
196
+ # # before_transition do |vehicle, transition|
197
+ # # # log message
198
+ # # end
199
+ # #
200
+ # # event :ignite do
201
+ # # transition :parked => :idling
202
+ # # end
203
+ # # end
204
+ # #
205
+ # # def put_on_seatbelt
206
+ # # ...
207
+ # # end
208
+ # # end
209
+ # #
210
+ # # Note, also, that the transition can be accessed by simply defining
211
+ # # additional arguments in the callback block.
212
+ # module Mongoid
213
+ # include ActiveModel
214
+ #
215
+ # # The default options to use for state machines using this integration
216
+ # @defaults = {:action => :save}
217
+ #
218
+ # # Should this integration be used for state machines in the given class?
219
+ # # Classes that include Mongoid::Document will automatically use the
220
+ # # Mongoid integration.
221
+ # def self.matches?(klass)
222
+ # defined?(::Mongoid::Document) && klass <= ::Mongoid::Document
223
+ # end
224
+ #
225
+ # # Adds a validation error to the given object (no i18n support)
226
+ # def invalidate(object, attribute, message, values = [])
227
+ # object.errors.add(self.attribute(attribute), generate_message(message, values))
228
+ # end
229
+ #
230
+ # protected
231
+ # # Does not support observers
232
+ # def supports_observers?
233
+ # false
234
+ # end
235
+ #
236
+ # # Always adds validation support
237
+ # def supports_validations?
238
+ # true
239
+ # end
240
+ #
241
+ # # Only runs validations on the action if using <tt>:save</tt>
242
+ # def runs_validations_on_action?
243
+ # action == :save
244
+ # end
245
+ #
246
+ # # Always adds dirty tracking support
247
+ # def supports_dirty_tracking?(object)
248
+ # true
249
+ # end
250
+ #
251
+ # # Don't allow callback terminators
252
+ # def callback_terminator
253
+ # end
254
+ #
255
+ # # Defines an initialization hook into the owner class for setting the
256
+ # # initial state of the machine *before* any attributes are set on the
257
+ # # object
258
+ # def define_state_initializer
259
+ # @instance_helper_module.class_eval <<-end_eval, __FILE__, __LINE__
260
+ # def initialize(attrs = {}, *args)
261
+ # from_database = args.first
262
+ #
263
+ # if !from_database && (!attrs || !attrs.stringify_keys.key?('_id'))
264
+ # filtered = respond_to?(:filter_protected_attrs) ? filter_protected_attrs(attrs) : attrs
265
+ # ignore = filtered ? filtered.keys : []
266
+ #
267
+ # initialize_state_machines(:dynamic => false, :ignore => ignore)
268
+ # super
269
+ # initialize_state_machines(:dynamic => true, :ignore => ignore)
270
+ # else
271
+ # super
272
+ # end
273
+ # end
274
+ # end_eval
275
+ # end
276
+ #
277
+ # # Skips defining reader/writer methods since this is done automatically
278
+ # def define_state_accessor
279
+ # owner_class.field(attribute, :type => String) unless owner_class.fields.nil? #.include?(attribute)
280
+ #
281
+ # name = self.name
282
+ # owner_class.validates_each(attribute, :logic => lambda {|*|
283
+ # machine = self.class.state_machine(name)
284
+ # machine.invalidate(self, :state, :invalid) unless machine.states.match(self)
285
+ # })
286
+ # end
287
+ #
288
+ # # Adds support for defining the attribute predicate, while providing
289
+ # # compatibility with the default predicate which determines whether
290
+ # # *anything* is set for the attribute's value
291
+ # def define_state_predicate
292
+ # name = self.name
293
+ #
294
+ # # Still use class_eval here instance of define_instance_method since
295
+ # # we need to be able to call +super+
296
+ # @instance_helper_module.class_eval do
297
+ # define_method("#{name}?") do |*args|
298
+ # args.empty? ? super(*args) : self.class.state_machine(name).states.matches?(self, *args)
299
+ # end
300
+ # end
301
+ # end
302
+ #
303
+ # # Adds hooks into validation for automatically firing events
304
+ # def define_action_helpers
305
+ # super(action == :save ? :create_or_update : action)
306
+ # end
307
+ #
308
+ # # Creates a scope for finding records *with* a particular state or
309
+ # # states for the attribute
310
+ # def create_with_scope(name)
311
+ # lambda {|model, values| model.all(:conditions => {attribute => {'$in' => values}})}
312
+ # end
313
+ #
314
+ # # Creates a scope for finding records *without* a particular state or
315
+ # # states for the attribute
316
+ # def create_without_scope(name)
317
+ # lambda {|model, values| model.all(:conditions => {attribute => {'$nin' => values}})}
318
+ # end
319
+ # end
320
+ # end
321
+ # end
@@ -0,0 +1 @@
1
+ require 'state_machine/integrations/mongoid'
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,25 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ begin
5
+ Bundler.setup(:default, :development)
6
+ rescue Bundler::BundlerError => e
7
+ $stderr.puts e.message
8
+ $stderr.puts "Run `bundle install` to install missing gems"
9
+ exit e.status_code
10
+ end
11
+
12
+ require 'active_model'
13
+ require 'state_machine'
14
+ require 'mongoid'
15
+
16
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
17
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
18
+ require 'state_machine-mongoid'
19
+ require 'spec'
20
+ require 'spec/autorun'
21
+ require 'vehicle'
22
+
23
+ Spec::Runner.configure do |config|
24
+
25
+ end
@@ -0,0 +1,36 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "StateMachineMongoid integration" do
4
+ before(:all) do
5
+ Mongoid.configure do |config|
6
+ name = "state_machine-mongoid"
7
+ host = "localhost"
8
+ config.allow_dynamic_fields = false
9
+ config.master = Mongo::Connection.new.db(name)
10
+ end
11
+ end
12
+
13
+ context "new vehicle" do
14
+ before(:each) do
15
+ @vehicle = Vehicle.new
16
+ end
17
+
18
+ it "should be parked" do
19
+ @vehicle.parked?.should be_true
20
+ @vehicle.state.should == "parked"
21
+ end
22
+
23
+ context "after igniting" do
24
+ before(:each) do
25
+ @vehicle.ignite
26
+ end
27
+
28
+ it "should be ignited" do
29
+ @vehicle.idling?.should be_true
30
+ end
31
+ end
32
+
33
+
34
+ end
35
+
36
+ end
data/spec/vehicle.rb ADDED
@@ -0,0 +1,100 @@
1
+ class Vehicle
2
+ include Mongoid::Document
3
+
4
+ field :state, :type => String, :default => "parked"
5
+ field :alarm_state, :type => String, :default => "active"
6
+
7
+ state_machine :state, :initial => :parked do
8
+ before_transition :parked => any - :parked, :do => :put_on_seatbelt
9
+
10
+ after_transition :on => :crash, :do => :tow
11
+ after_transition :on => :repair, :do => :fix
12
+ after_transition any => :parked do |vehicle, transition|
13
+ vehicle.seatbelt_on = false
14
+ end
15
+
16
+ event :park do
17
+ transition [:idling, :first_gear] => :parked
18
+ end
19
+
20
+ event :ignite do
21
+ transition :stalled => same, :parked => :idling
22
+ end
23
+
24
+ event :idle do
25
+ transition :first_gear => :idling
26
+ end
27
+
28
+ event :shift_up do
29
+ transition :idling => :first_gear, :first_gear => :second_gear, :second_gear => :third_gear
30
+ end
31
+
32
+ event :shift_down do
33
+ transition :third_gear => :second_gear, :second_gear => :first_gear
34
+ end
35
+
36
+ event :crash do
37
+ transition all - [:parked, :stalled] => :stalled, :unless => :auto_shop_busy?
38
+ end
39
+
40
+ event :repair do
41
+ # The first transition that matches the state and passes its conditions
42
+ # will be used
43
+ transition :stalled => :parked, :if => :auto_shop_busy?
44
+ transition :stalled => same
45
+ end
46
+
47
+ state :parked do
48
+ def speed
49
+ 0
50
+ end
51
+ end
52
+
53
+ state :idling, :first_gear do
54
+ def speed
55
+ 10
56
+ end
57
+ end
58
+
59
+ state :second_gear do
60
+ def speed
61
+ 20
62
+ end
63
+ end
64
+ end
65
+
66
+ state_machine :alarm_state, :initial => :active, :namespace => 'alarm' do
67
+ event :enable do
68
+ transition all => :active
69
+ end
70
+
71
+ event :disable do
72
+ transition all => :off
73
+ end
74
+
75
+ state :active, :value => 1
76
+ state :off, :value => 0
77
+ end
78
+
79
+ def initialize
80
+ @seatbelt_on = false
81
+ @time_used = 0
82
+ super() # NOTE: This *must* be called, otherwise states won't get initialized
83
+ end
84
+
85
+ def put_on_seatbelt
86
+ @seatbelt_on = true
87
+ end
88
+
89
+ def auto_shop_busy?
90
+ false
91
+ end
92
+
93
+ def tow
94
+ # tow the vehicle
95
+ end
96
+
97
+ def fix
98
+ # get the vehicle fixed by a mechanic
99
+ end
100
+ end
@@ -0,0 +1,71 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{state_machine-mongoid}
8
+ s.version = "0.1.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Marcin Ciunelis"]
12
+ s.date = %q{2010-06-27}
13
+ s.description = %q{a little lack of tests but it works!}
14
+ s.email = %q{marcin.ciunelis@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ "Gemfile",
23
+ "LICENSE",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "lib/state_machine-mongoid.rb",
28
+ "lib/state_machine/integrations/mongoid.rb",
29
+ "spec/spec.opts",
30
+ "spec/spec_helper.rb",
31
+ "spec/state_machine-mongoid_spec.rb",
32
+ "spec/vehicle.rb",
33
+ "state_machine-mongoid.gemspec"
34
+ ]
35
+ s.homepage = %q{http://github.com/martinciu/state_machine-mongoid}
36
+ s.rdoc_options = ["--charset=UTF-8"]
37
+ s.require_paths = ["lib"]
38
+ s.rubygems_version = %q{1.3.7}
39
+ s.summary = %q{state_machine mongoid integration}
40
+ s.test_files = [
41
+ "spec/spec_helper.rb",
42
+ "spec/state_machine-mongoid_spec.rb",
43
+ "spec/vehicle.rb"
44
+ ]
45
+
46
+ if s.respond_to? :specification_version then
47
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
48
+ s.specification_version = 3
49
+
50
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
+ s.add_runtime_dependency(%q<bson_ext>, ["= 1.0.1"])
52
+ s.add_runtime_dependency(%q<mongoid>, [">= 2.0.0.beta7"])
53
+ s.add_runtime_dependency(%q<state_machine>, [">= 0.9.2"])
54
+ s.add_runtime_dependency(%q<activemodel>, [">= 3.0.0.beta4"])
55
+ s.add_development_dependency(%q<rspec>, [">= 0"])
56
+ else
57
+ s.add_dependency(%q<bson_ext>, ["= 1.0.1"])
58
+ s.add_dependency(%q<mongoid>, [">= 2.0.0.beta7"])
59
+ s.add_dependency(%q<state_machine>, [">= 0.9.2"])
60
+ s.add_dependency(%q<activemodel>, [">= 3.0.0.beta4"])
61
+ s.add_dependency(%q<rspec>, [">= 0"])
62
+ end
63
+ else
64
+ s.add_dependency(%q<bson_ext>, ["= 1.0.1"])
65
+ s.add_dependency(%q<mongoid>, [">= 2.0.0.beta7"])
66
+ s.add_dependency(%q<state_machine>, [">= 0.9.2"])
67
+ s.add_dependency(%q<activemodel>, [">= 3.0.0.beta4"])
68
+ s.add_dependency(%q<rspec>, [">= 0"])
69
+ end
70
+ end
71
+
metadata ADDED
@@ -0,0 +1,162 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: state_machine-mongoid
3
+ version: !ruby/object:Gem::Version
4
+ hash: 25
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
11
+ platform: ruby
12
+ authors:
13
+ - Marcin Ciunelis
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-06-27 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - "="
26
+ - !ruby/object:Gem::Version
27
+ hash: 21
28
+ segments:
29
+ - 1
30
+ - 0
31
+ - 1
32
+ version: 1.0.1
33
+ type: :runtime
34
+ name: bson_ext
35
+ prerelease: false
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: -1848230041
44
+ segments:
45
+ - 2
46
+ - 0
47
+ - 0
48
+ - beta7
49
+ version: 2.0.0.beta7
50
+ type: :runtime
51
+ name: mongoid
52
+ prerelease: false
53
+ version_requirements: *id002
54
+ - !ruby/object:Gem::Dependency
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 63
61
+ segments:
62
+ - 0
63
+ - 9
64
+ - 2
65
+ version: 0.9.2
66
+ type: :runtime
67
+ name: state_machine
68
+ prerelease: false
69
+ version_requirements: *id003
70
+ - !ruby/object:Gem::Dependency
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: -1848230024
77
+ segments:
78
+ - 3
79
+ - 0
80
+ - 0
81
+ - beta4
82
+ version: 3.0.0.beta4
83
+ type: :runtime
84
+ name: activemodel
85
+ prerelease: false
86
+ version_requirements: *id004
87
+ - !ruby/object:Gem::Dependency
88
+ requirement: &id005 !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ hash: 3
94
+ segments:
95
+ - 0
96
+ version: "0"
97
+ type: :development
98
+ name: rspec
99
+ prerelease: false
100
+ version_requirements: *id005
101
+ description: a little lack of tests but it works!
102
+ email: marcin.ciunelis@gmail.com
103
+ executables: []
104
+
105
+ extensions: []
106
+
107
+ extra_rdoc_files:
108
+ - LICENSE
109
+ - README.rdoc
110
+ files:
111
+ - .document
112
+ - .gitignore
113
+ - Gemfile
114
+ - LICENSE
115
+ - README.rdoc
116
+ - Rakefile
117
+ - VERSION
118
+ - lib/state_machine-mongoid.rb
119
+ - lib/state_machine/integrations/mongoid.rb
120
+ - spec/spec.opts
121
+ - spec/spec_helper.rb
122
+ - spec/state_machine-mongoid_spec.rb
123
+ - spec/vehicle.rb
124
+ - state_machine-mongoid.gemspec
125
+ has_rdoc: true
126
+ homepage: http://github.com/martinciu/state_machine-mongoid
127
+ licenses: []
128
+
129
+ post_install_message:
130
+ rdoc_options:
131
+ - --charset=UTF-8
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ none: false
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ hash: 3
140
+ segments:
141
+ - 0
142
+ version: "0"
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ none: false
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ hash: 3
149
+ segments:
150
+ - 0
151
+ version: "0"
152
+ requirements: []
153
+
154
+ rubyforge_project:
155
+ rubygems_version: 1.3.7
156
+ signing_key:
157
+ specification_version: 3
158
+ summary: state_machine mongoid integration
159
+ test_files:
160
+ - spec/spec_helper.rb
161
+ - spec/state_machine-mongoid_spec.rb
162
+ - spec/vehicle.rb