statesman 0.5.0 → 0.6.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +7 -0
- data/README.md +4 -3
- data/lib/generators/statesman/active_record_transition_generator.rb +4 -17
- data/lib/generators/statesman/generator_helpers.rb +31 -0
- data/lib/generators/statesman/migration_generator.rb +3 -12
- data/lib/generators/statesman/mongoid_transition_generator.rb +3 -8
- data/lib/generators/statesman/templates/active_record_transition_model.rb.erb +1 -1
- data/lib/generators/statesman/templates/create_migration.rb.erb +2 -1
- data/lib/generators/statesman/templates/mongoid_transition_model.rb.erb +2 -1
- data/lib/generators/statesman/templates/update_migration.rb.erb +3 -1
- data/lib/statesman/adapters/active_record.rb +6 -2
- data/lib/statesman/adapters/active_record_model.rb +2 -2
- data/lib/statesman/adapters/memory_transition.rb +2 -0
- data/lib/statesman/machine.rb +6 -6
- data/lib/statesman/version.rb +1 -1
- data/spec/generators/statesman/active_record_transition_generator_spec.rb +28 -0
- data/spec/generators/statesman/migration_generator_spec.rb +32 -0
- data/spec/generators/statesman/mongoid_transition_generator_spec.rb +23 -0
- data/spec/statesman/adapters/active_record_spec.rb +16 -1
- data/spec/statesman/machine_spec.rb +28 -0
- data/spec/statesman/transition_spec.rb +1 -0
- data/spec/support/generators_shared_examples.rb +33 -0
- data/statesman.gemspec +8 -7
- metadata +35 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b92fb09eece2e17c27b82fcca631fe7104352d64
|
4
|
+
data.tar.gz: 5d998f484ea553dfc739090859711185f6d2b79d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7d61e91e81cab512c7535ff42dc04428554c99db767d7efd43817119fe8387d385d005602b4bd69d10fe1f98c8e037e02ba3bd276aa0f0527a379ce3b3f8b06
|
7
|
+
data.tar.gz: 790bb168d54c53c16bf86290614ad78963484d1577a17f3d03e945a69dc87d1e61f4dea5b3e3be51014c5c6ff091d108ad52f331eba61bc1d76a3d572119ec23
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## v0.6.0, 19 May 2014
|
2
|
+
*Additions*
|
3
|
+
- Generators now handle namespaced classes (patch by [@hrmrebecca](https://github.com/hrmrebecca))
|
4
|
+
|
5
|
+
*Changes*
|
6
|
+
- `Machine#transition_to` now only swallows Statesman generated errors. An exception in your guard or callback will no longer be caught by Statesman (patch by [@paulspringett](https://github.com/paulspringett))
|
7
|
+
|
1
8
|
## v0.5.0, 27 March 2014
|
2
9
|
*Additions*
|
3
10
|
- Scope methods. Adds a module which can be mixed in to an ActiveRecord model to provide `.in_state` and `.not_in_state` query scopes.
|
data/README.md
CHANGED
@@ -63,7 +63,7 @@ class Order < ActiveRecord::Base
|
|
63
63
|
|
64
64
|
private
|
65
65
|
|
66
|
-
def transition_class
|
66
|
+
def self.transition_class
|
67
67
|
OrderTransition
|
68
68
|
end
|
69
69
|
end
|
@@ -231,7 +231,8 @@ Transition to the passed state, returning `true` on success. Raises
|
|
231
231
|
|
232
232
|
#### `Machine#transition_to(:state)`
|
233
233
|
Transition to the passed state, returning `true` on success. Swallows all
|
234
|
-
exceptions and returns false on failure.
|
234
|
+
Statesman exceptions and returns false on failure. (NB. if your guard or
|
235
|
+
callback code throws an exception, it will not be caught.)
|
235
236
|
|
236
237
|
## Model scopes
|
237
238
|
|
@@ -245,7 +246,7 @@ class Order < ActiveRecord::Base
|
|
245
246
|
|
246
247
|
private
|
247
248
|
|
248
|
-
def transition_class
|
249
|
+
def self.transition_class
|
249
250
|
OrderTransition
|
250
251
|
end
|
251
252
|
end
|
@@ -1,12 +1,15 @@
|
|
1
1
|
require "rails/generators"
|
2
|
+
require "generators/statesman/generator_helpers"
|
2
3
|
|
3
4
|
module Statesman
|
4
5
|
class ActiveRecordTransitionGenerator < Rails::Generators::Base
|
6
|
+
include Statesman::GeneratorHelpers
|
7
|
+
|
5
8
|
desc "Create an ActiveRecord-based transition model"\
|
6
9
|
"with the required attributes"
|
7
10
|
|
8
11
|
argument :parent, type: :string, desc: "Your parent model name"
|
9
|
-
argument :klass,
|
12
|
+
argument :klass, type: :string, desc: "Your transition model name"
|
10
13
|
|
11
14
|
source_root File.expand_path('../templates', __FILE__)
|
12
15
|
|
@@ -17,26 +20,10 @@ module Statesman
|
|
17
20
|
|
18
21
|
private
|
19
22
|
|
20
|
-
def next_migration_number
|
21
|
-
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
22
|
-
end
|
23
|
-
|
24
23
|
def migration_file_name
|
25
24
|
"db/migrate/#{next_migration_number}_create_#{table_name}.rb"
|
26
25
|
end
|
27
26
|
|
28
|
-
def model_file_name
|
29
|
-
"app/models/#{klass.underscore}.rb"
|
30
|
-
end
|
31
|
-
|
32
|
-
def table_name
|
33
|
-
klass.underscore.pluralize
|
34
|
-
end
|
35
|
-
|
36
|
-
def parent_id
|
37
|
-
parent.underscore + "_id"
|
38
|
-
end
|
39
|
-
|
40
27
|
def rails_4?
|
41
28
|
Rails.version.split(".").map(&:to_i).first >= 4
|
42
29
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Statesman
|
2
|
+
module GeneratorHelpers
|
3
|
+
def class_name_option
|
4
|
+
", class_name: '#{parent}'" unless parent.underscore == parent_name
|
5
|
+
end
|
6
|
+
|
7
|
+
def model_file_name
|
8
|
+
"app/models/#{klass.underscore}.rb"
|
9
|
+
end
|
10
|
+
|
11
|
+
def migration_class_name
|
12
|
+
klass.gsub(/::/, '').pluralize
|
13
|
+
end
|
14
|
+
|
15
|
+
def next_migration_number
|
16
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
17
|
+
end
|
18
|
+
|
19
|
+
def parent_name
|
20
|
+
parent.demodulize.underscore
|
21
|
+
end
|
22
|
+
|
23
|
+
def parent_id
|
24
|
+
parent_name + "_id"
|
25
|
+
end
|
26
|
+
|
27
|
+
def table_name
|
28
|
+
klass.demodulize.underscore.pluralize
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -1,8 +1,11 @@
|
|
1
1
|
require "rails/generators"
|
2
|
+
require "generators/statesman/generator_helpers"
|
2
3
|
|
3
4
|
# Add statesman attributes to a pre-existing transition class
|
4
5
|
module Statesman
|
5
6
|
class MigrationGenerator < Rails::Generators::Base
|
7
|
+
include Statesman::GeneratorHelpers
|
8
|
+
|
6
9
|
desc "Add the required Statesman attributes to your transition model"
|
7
10
|
|
8
11
|
argument :parent, type: :string, desc: "Your parent model name"
|
@@ -16,20 +19,8 @@ module Statesman
|
|
16
19
|
|
17
20
|
private
|
18
21
|
|
19
|
-
def next_migration_number
|
20
|
-
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
21
|
-
end
|
22
|
-
|
23
22
|
def file_name
|
24
23
|
"db/migrate/#{next_migration_number}_add_statesman_to_#{table_name}.rb"
|
25
24
|
end
|
26
|
-
|
27
|
-
def table_name
|
28
|
-
klass.underscore.pluralize
|
29
|
-
end
|
30
|
-
|
31
|
-
def parent_id
|
32
|
-
parent.underscore + "_id"
|
33
|
-
end
|
34
25
|
end
|
35
26
|
end
|
@@ -1,7 +1,10 @@
|
|
1
1
|
require "rails/generators"
|
2
|
+
require "generators/statesman/generator_helpers"
|
2
3
|
|
3
4
|
module Statesman
|
4
5
|
class MongoidTransitionGenerator < Rails::Generators::Base
|
6
|
+
include Statesman::GeneratorHelpers
|
7
|
+
|
5
8
|
desc "Create a Mongoid-based transition model with the required attributes"
|
6
9
|
|
7
10
|
argument :parent, type: :string, desc: "Your parent model name"
|
@@ -15,16 +18,8 @@ module Statesman
|
|
15
18
|
|
16
19
|
private
|
17
20
|
|
18
|
-
def model_file_name
|
19
|
-
"app/models/#{klass.underscore}.rb"
|
20
|
-
end
|
21
|
-
|
22
21
|
def collection_name
|
23
22
|
klass.underscore.pluralize
|
24
23
|
end
|
25
|
-
|
26
|
-
def parent_id
|
27
|
-
parent.underscore + "_id"
|
28
|
-
end
|
29
24
|
end
|
30
25
|
end
|
@@ -4,5 +4,5 @@ class <%= klass %> < ActiveRecord::Base
|
|
4
4
|
<% unless rails_4? %>
|
5
5
|
attr_accessible :to_state, :metadata, :sort_key
|
6
6
|
<% end %>
|
7
|
-
belongs_to :<%=
|
7
|
+
belongs_to :<%= parent_name %><%= class_name_option %>, inverse_of: :<%= table_name %>
|
8
8
|
end
|
@@ -1,10 +1,11 @@
|
|
1
|
-
class Create<%=
|
1
|
+
class Create<%= migration_class_name %> < ActiveRecord::Migration
|
2
2
|
def change
|
3
3
|
create_table :<%= table_name %> do |t|
|
4
4
|
t.string :to_state
|
5
5
|
t.text :metadata, default: "{}"
|
6
6
|
t.integer :sort_key
|
7
7
|
t.integer :<%= parent_id %>
|
8
|
+
t.timestamps
|
8
9
|
end
|
9
10
|
|
10
11
|
add_index :<%= table_name %>, :<%= parent_id %>
|
@@ -1,5 +1,6 @@
|
|
1
1
|
class <%= klass %>
|
2
2
|
include Mongoid::Document
|
3
|
+
include Mongoid::Timestamps
|
3
4
|
include Statesman::Adapters::MongoidTransition
|
4
5
|
|
5
6
|
field :to_state, type: String
|
@@ -8,6 +9,6 @@ class <%= klass %>
|
|
8
9
|
|
9
10
|
index({ sort_key: 1 })
|
10
11
|
|
11
|
-
belongs_to :<%= parent
|
12
|
+
belongs_to :<%= parent %><%= class_name_option %>, index: true
|
12
13
|
|
13
14
|
end
|
@@ -1,9 +1,11 @@
|
|
1
|
-
class AddStatesmanTo<%=
|
1
|
+
class AddStatesmanTo<%= migration_class_name %> < ActiveRecord::Migration
|
2
2
|
def change
|
3
3
|
add_column :<%= table_name %>, :to_state, :string
|
4
4
|
add_column :<%= table_name %>, :metadata, :text, default: "{}"
|
5
5
|
add_column :<%= table_name %>, :sort_key, :integer
|
6
6
|
add_column :<%= table_name %>, :<%= parent_id %>, :integer
|
7
|
+
add_column :<%= table_name %>, :created_at, :datetime
|
8
|
+
add_column :<%= table_name %>, :updated_at, :datetime
|
7
9
|
|
8
10
|
add_index :<%= table_name %>, :<%= parent_id %>
|
9
11
|
add_index :<%= table_name %>, [:sort_key, :<%= parent_id %>], unique: true
|
@@ -33,11 +33,15 @@ module Statesman
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def history
|
36
|
-
transitions_for_parent.
|
36
|
+
if transitions_for_parent.loaded?
|
37
|
+
transitions_for_parent.sort_by(&:sort_key)
|
38
|
+
else
|
39
|
+
transitions_for_parent.order(:sort_key)
|
40
|
+
end
|
37
41
|
end
|
38
42
|
|
39
43
|
def last
|
40
|
-
@last_transition ||=
|
44
|
+
@last_transition ||= history.last
|
41
45
|
end
|
42
46
|
|
43
47
|
private
|
@@ -9,14 +9,14 @@ module Statesman
|
|
9
9
|
def in_state(*states)
|
10
10
|
joins(transition_name)
|
11
11
|
.joins(transition_join)
|
12
|
-
.where("#{transition_name}.to_state" => states)
|
12
|
+
.where("#{transition_name}.to_state" => states.map(&:to_s))
|
13
13
|
.where("transition2.id" => nil)
|
14
14
|
end
|
15
15
|
|
16
16
|
def not_in_state(*states)
|
17
17
|
joins(transition_name)
|
18
18
|
.joins(transition_join)
|
19
|
-
.where("#{transition_name}.to_state NOT IN (?)", states)
|
19
|
+
.where("#{transition_name}.to_state NOT IN (?)", states.map(&:to_s))
|
20
20
|
.where("transition2.id" => nil)
|
21
21
|
end
|
22
22
|
|
@@ -2,12 +2,14 @@ module Statesman
|
|
2
2
|
module Adapters
|
3
3
|
class MemoryTransition
|
4
4
|
attr_accessor :created_at
|
5
|
+
attr_accessor :updated_at
|
5
6
|
attr_accessor :to_state
|
6
7
|
attr_accessor :sort_key
|
7
8
|
attr_accessor :metadata
|
8
9
|
|
9
10
|
def initialize(to, sort_key, metadata = nil)
|
10
11
|
@created_at = Time.now
|
12
|
+
@updated_at = Time.now
|
11
13
|
@to_state = to
|
12
14
|
@sort_key = sort_key
|
13
15
|
@metadata = metadata
|
data/lib/statesman/machine.rb
CHANGED
@@ -196,7 +196,7 @@ module Statesman
|
|
196
196
|
|
197
197
|
def transition_to(new_state, metadata = nil)
|
198
198
|
self.transition_to!(new_state, metadata)
|
199
|
-
rescue
|
199
|
+
rescue TransitionFailedError, GuardFailedError
|
200
200
|
false
|
201
201
|
end
|
202
202
|
|
@@ -224,16 +224,16 @@ module Statesman
|
|
224
224
|
from = to_s_or_nil(options[:from])
|
225
225
|
to = to_s_or_nil(options[:to])
|
226
226
|
|
227
|
-
# Call all guards, they raise exceptions if they fail
|
228
|
-
guards_for(from: from, to: to).each do |guard|
|
229
|
-
guard.call(@object, last_transition, options[:metadata])
|
230
|
-
end
|
231
|
-
|
232
227
|
successors = self.class.successors[from] || []
|
233
228
|
unless successors.include?(to)
|
234
229
|
raise TransitionFailedError,
|
235
230
|
"Cannot transition from '#{from}' to '#{to}'"
|
236
231
|
end
|
232
|
+
|
233
|
+
# Call all guards, they raise exceptions if they fail
|
234
|
+
guards_for(from: from, to: to).each do |guard|
|
235
|
+
guard.call(@object, last_transition, options[:metadata])
|
236
|
+
end
|
237
237
|
end
|
238
238
|
|
239
239
|
def to_s_or_nil(input)
|
data/lib/statesman/version.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "support/generators_shared_examples"
|
3
|
+
require "generators/statesman/active_record_transition_generator"
|
4
|
+
|
5
|
+
describe Statesman::ActiveRecordTransitionGenerator, type: :generator do
|
6
|
+
|
7
|
+
it_behaves_like "a generator" do
|
8
|
+
let(:migration_name) { 'db/migrate/create_bacon_transitions.rb' }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'properly adds class names' do
|
12
|
+
before { run_generator %w[Yummy::Bacon Yummy::BaconTransition] }
|
13
|
+
subject { file('app/models/yummy/bacon_transition.rb') }
|
14
|
+
|
15
|
+
it { should contain(/:bacon_transition/) }
|
16
|
+
it { should_not contain(/:yummy\/bacon/) }
|
17
|
+
it { should contain(/class_name: 'Yummy::Bacon'/) }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'properly formats without class names' do
|
21
|
+
before { run_generator %w[Bacon BaconTransition] }
|
22
|
+
subject { file('app/models/bacon_transition.rb') }
|
23
|
+
|
24
|
+
it { should_not contain(/class_name:/) }
|
25
|
+
it { should contain(/class BaconTransition/) }
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "support/generators_shared_examples"
|
3
|
+
require "generators/statesman/migration_generator"
|
4
|
+
|
5
|
+
describe Statesman::MigrationGenerator, type: :generator do
|
6
|
+
|
7
|
+
it_behaves_like "a generator" do
|
8
|
+
let(:migration_name) { 'db/migrate/add_statesman_to_bacon_transitions.rb' }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'the model contains the correct words' do
|
12
|
+
let(:migration_number) { '5678309' }
|
13
|
+
|
14
|
+
let(:mock_time) do
|
15
|
+
double('Time', utc: double('UTCTime', strftime: migration_number))
|
16
|
+
end
|
17
|
+
|
18
|
+
subject do
|
19
|
+
file(
|
20
|
+
"db/migrate/#{migration_number}_add_statesman_to_bacon_transitions.rb"
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
before do
|
25
|
+
Time.stub(:now).and_return(mock_time)
|
26
|
+
run_generator %w[Yummy::Bacon Yummy::BaconTransition]
|
27
|
+
end
|
28
|
+
|
29
|
+
it { should contain(/:bacon_transition/) }
|
30
|
+
it { should_not contain(/:yummy\/bacon/) }
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "support/generators_shared_examples"
|
3
|
+
require "generators/statesman/mongoid_transition_generator"
|
4
|
+
|
5
|
+
describe Statesman::MongoidTransitionGenerator, type: :generator do
|
6
|
+
|
7
|
+
describe 'the model contains the correct words' do
|
8
|
+
before { run_generator %w[Yummy::Bacon Yummy::BaconTransition] }
|
9
|
+
subject { file('app/models/yummy/bacon_transition.rb') }
|
10
|
+
|
11
|
+
it { should_not contain(/:yummy\/bacon/) }
|
12
|
+
it { should contain(/class_name: 'Yummy::Bacon'/) }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'the model contains the correct words' do
|
16
|
+
before { run_generator %w[Bacon BaconTransition] }
|
17
|
+
subject { file('app/models/bacon_transition.rb') }
|
18
|
+
|
19
|
+
it { should_not contain(/class_name:/) }
|
20
|
+
it { should_not contain(/CreateYummy::Bacon/) }
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -35,9 +35,12 @@ describe Statesman::Adapters::ActiveRecord do
|
|
35
35
|
described_class.new(MyActiveRecordModelTransition, model, observer)
|
36
36
|
end
|
37
37
|
|
38
|
+
before do
|
39
|
+
adapter.create(:x, :y)
|
40
|
+
end
|
41
|
+
|
38
42
|
context "with a previously looked up transition" do
|
39
43
|
before do
|
40
|
-
adapter.create(:x, :y)
|
41
44
|
adapter.last
|
42
45
|
end
|
43
46
|
|
@@ -54,5 +57,17 @@ describe Statesman::Adapters::ActiveRecord do
|
|
54
57
|
end
|
55
58
|
end
|
56
59
|
end
|
60
|
+
|
61
|
+
context "with a pre-fetched transition history" do
|
62
|
+
before do
|
63
|
+
# inspect the transitions to coerce a [pre-]load
|
64
|
+
model.my_active_record_model_transitions.inspect
|
65
|
+
end
|
66
|
+
|
67
|
+
it "doesn't query the database" do
|
68
|
+
MyActiveRecordModelTransition.should_not_receive(:connection)
|
69
|
+
expect(adapter.last.to_state).to eq("y")
|
70
|
+
end
|
71
|
+
end
|
57
72
|
end
|
58
73
|
end
|
@@ -295,7 +295,9 @@ describe Statesman::Machine do
|
|
295
295
|
machine.class_eval do
|
296
296
|
state :x, initial: true
|
297
297
|
state :y
|
298
|
+
state :z
|
298
299
|
transition from: :x, to: :y
|
300
|
+
transition from: :y, to: :z
|
299
301
|
end
|
300
302
|
end
|
301
303
|
|
@@ -313,6 +315,17 @@ describe Statesman::Machine do
|
|
313
315
|
let(:new_state) { :y }
|
314
316
|
it { should be_false }
|
315
317
|
end
|
318
|
+
|
319
|
+
context "and is guarded" do
|
320
|
+
let(:guard_cb) { -> { false } }
|
321
|
+
let(:new_state) { :z }
|
322
|
+
before { machine.guard_transition(to: new_state, &guard_cb) }
|
323
|
+
|
324
|
+
it "does not fire guard" do
|
325
|
+
guard_cb.should_not_receive(:call)
|
326
|
+
should be_false
|
327
|
+
end
|
328
|
+
end
|
316
329
|
end
|
317
330
|
|
318
331
|
context "when the transition valid" do
|
@@ -427,6 +440,21 @@ describe Statesman::Machine do
|
|
427
440
|
end
|
428
441
|
it { should be_false }
|
429
442
|
end
|
443
|
+
|
444
|
+
context "when a non statesman exception is raised" do
|
445
|
+
before do
|
446
|
+
instance.stub(:transition_to!).and_raise(RuntimeError,
|
447
|
+
'user defined exception')
|
448
|
+
end
|
449
|
+
|
450
|
+
it "should not rescue the exception" do
|
451
|
+
expectation = expect do
|
452
|
+
instance.transition_to(:some_state, metadata)
|
453
|
+
end
|
454
|
+
|
455
|
+
expectation.to raise_error(RuntimeError, 'user defined exception')
|
456
|
+
end
|
457
|
+
end
|
430
458
|
end
|
431
459
|
|
432
460
|
shared_examples "a callback filter" do |definer, phase|
|
@@ -9,6 +9,7 @@ describe Statesman::Adapters::MemoryTransition do
|
|
9
9
|
|
10
10
|
specify { expect(create.to_state).to equal(to) }
|
11
11
|
specify { expect(create.created_at).to be_a(Time) }
|
12
|
+
specify { expect(create.updated_at).to be_a(Time) }
|
12
13
|
specify { expect(create.sort_key).to be(sort_key) }
|
13
14
|
|
14
15
|
context "with metadata passed" do
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require "rails/version"
|
2
|
+
require "ammeter/init"
|
3
|
+
|
4
|
+
TMP_GENERATOR_PATH = File.expand_path('../generator-tmp', __FILE__)
|
5
|
+
|
6
|
+
shared_examples 'a generator' do
|
7
|
+
destination TMP_GENERATOR_PATH
|
8
|
+
before { prepare_destination }
|
9
|
+
let(:gen) { generator %w[Yummy::Bacon Yummy::BaconTransition] }
|
10
|
+
|
11
|
+
it 'invokes create_model_file method' do
|
12
|
+
expect(gen).to receive(:create_model_file)
|
13
|
+
capture(:stdout) { gen.invoke_all }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'it runs the generator and check things out' do
|
17
|
+
|
18
|
+
before { run_generator %w[Yummy::Bacon Yummy::BaconTransition] }
|
19
|
+
|
20
|
+
describe 'it generates a correctly named file' do
|
21
|
+
subject { file(migration_name) }
|
22
|
+
it { should be_a_migration }
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
RSpec.configure do |config|
|
30
|
+
config.after :all do
|
31
|
+
FileUtils.rm_rf(TMP_GENERATOR_PATH)
|
32
|
+
end
|
33
|
+
end
|
data/statesman.gemspec
CHANGED
@@ -18,13 +18,14 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_development_dependency "bundler",
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
|
-
spec.add_development_dependency "rspec",
|
24
|
-
spec.add_development_dependency "guard-rspec",
|
25
|
-
spec.add_development_dependency "rubocop",
|
23
|
+
spec.add_development_dependency "rspec", "~> 2.14.1"
|
24
|
+
spec.add_development_dependency "guard-rspec", "~> 3.0.2"
|
25
|
+
spec.add_development_dependency "rubocop", "~> 0.18.1"
|
26
26
|
spec.add_development_dependency "guard-rubocop", "~> 0.2.2"
|
27
|
-
spec.add_development_dependency "
|
28
|
-
spec.add_development_dependency "
|
29
|
-
spec.add_development_dependency "
|
27
|
+
spec.add_development_dependency "sqlite3", "~> 1.3.8"
|
28
|
+
spec.add_development_dependency "mongoid", "~> 3.1.5"
|
29
|
+
spec.add_development_dependency "rails", "~> 3.2"
|
30
|
+
spec.add_development_dependency "ammeter", "~> 1.0.0"
|
30
31
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: statesman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Harry Marr
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-05-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -96,47 +96,61 @@ dependencies:
|
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: 0.2.2
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
|
-
name:
|
99
|
+
name: sqlite3
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
102
|
- - ~>
|
103
103
|
- !ruby/object:Gem::Version
|
104
|
-
version:
|
104
|
+
version: 1.3.8
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
109
|
- - ~>
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version:
|
111
|
+
version: 1.3.8
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
|
-
name:
|
113
|
+
name: mongoid
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
116
|
- - ~>
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version: 1.
|
118
|
+
version: 3.1.5
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - ~>
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: 1.
|
125
|
+
version: 3.1.5
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
|
-
name:
|
127
|
+
name: rails
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
130
|
- - ~>
|
131
131
|
- !ruby/object:Gem::Version
|
132
|
-
version: 3.
|
132
|
+
version: '3.2'
|
133
133
|
type: :development
|
134
134
|
prerelease: false
|
135
135
|
version_requirements: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
137
|
- - ~>
|
138
138
|
- !ruby/object:Gem::Version
|
139
|
-
version: 3.
|
139
|
+
version: '3.2'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: ammeter
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ~>
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: 1.0.0
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ~>
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: 1.0.0
|
140
154
|
description: A statesmanlike state machine library
|
141
155
|
email:
|
142
156
|
- developers@gocardless.com
|
@@ -155,6 +169,7 @@ files:
|
|
155
169
|
- Rakefile
|
156
170
|
- circle.yml
|
157
171
|
- lib/generators/statesman/active_record_transition_generator.rb
|
172
|
+
- lib/generators/statesman/generator_helpers.rb
|
158
173
|
- lib/generators/statesman/migration_generator.rb
|
159
174
|
- lib/generators/statesman/mongoid_transition_generator.rb
|
160
175
|
- lib/generators/statesman/templates/active_record_transition_model.rb.erb
|
@@ -175,6 +190,9 @@ files:
|
|
175
190
|
- lib/statesman/guard.rb
|
176
191
|
- lib/statesman/machine.rb
|
177
192
|
- lib/statesman/version.rb
|
193
|
+
- spec/generators/statesman/active_record_transition_generator_spec.rb
|
194
|
+
- spec/generators/statesman/migration_generator_spec.rb
|
195
|
+
- spec/generators/statesman/mongoid_transition_generator_spec.rb
|
178
196
|
- spec/spec_helper.rb
|
179
197
|
- spec/statesman/adapters/active_record_model_spec.rb
|
180
198
|
- spec/statesman/adapters/active_record_spec.rb
|
@@ -188,6 +206,7 @@ files:
|
|
188
206
|
- spec/statesman/machine_spec.rb
|
189
207
|
- spec/statesman/transition_spec.rb
|
190
208
|
- spec/support/active_record.rb
|
209
|
+
- spec/support/generators_shared_examples.rb
|
191
210
|
- spec/support/mongoid.rb
|
192
211
|
- statesman.gemspec
|
193
212
|
homepage: https://github.com/gocardless/statesman
|
@@ -210,11 +229,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
229
|
version: '0'
|
211
230
|
requirements: []
|
212
231
|
rubyforge_project:
|
213
|
-
rubygems_version: 2.
|
232
|
+
rubygems_version: 2.2.2
|
214
233
|
signing_key:
|
215
234
|
specification_version: 4
|
216
235
|
summary: A statesmanlike state machine library
|
217
236
|
test_files:
|
237
|
+
- spec/generators/statesman/active_record_transition_generator_spec.rb
|
238
|
+
- spec/generators/statesman/migration_generator_spec.rb
|
239
|
+
- spec/generators/statesman/mongoid_transition_generator_spec.rb
|
218
240
|
- spec/spec_helper.rb
|
219
241
|
- spec/statesman/adapters/active_record_model_spec.rb
|
220
242
|
- spec/statesman/adapters/active_record_spec.rb
|
@@ -228,4 +250,5 @@ test_files:
|
|
228
250
|
- spec/statesman/machine_spec.rb
|
229
251
|
- spec/statesman/transition_spec.rb
|
230
252
|
- spec/support/active_record.rb
|
253
|
+
- spec/support/generators_shared_examples.rb
|
231
254
|
- spec/support/mongoid.rb
|