statesman 1.1.0 → 1.2.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/.rubocop.yml +7 -1
- data/.travis.yml +19 -4
- data/CHANGELOG.md +30 -0
- data/README.md +11 -35
- data/lib/generators/statesman/add_constraints_to_most_recent_generator.rb +28 -0
- data/lib/generators/statesman/add_most_recent_generator.rb +25 -0
- data/lib/generators/statesman/generator_helpers.rb +6 -2
- data/lib/generators/statesman/templates/add_constraints_to_most_recent_migration.rb.erb +13 -0
- data/lib/generators/statesman/templates/add_most_recent_migration.rb.erb +9 -0
- data/lib/generators/statesman/templates/create_migration.rb.erb +4 -3
- data/lib/generators/statesman/templates/update_migration.rb.erb +5 -4
- data/lib/statesman.rb +1 -0
- data/lib/statesman/adapters/active_record.rb +23 -8
- data/lib/statesman/adapters/active_record_queries.rb +62 -15
- data/lib/statesman/railtie.rb +9 -0
- data/lib/statesman/version.rb +1 -1
- data/lib/tasks/statesman.rake +49 -0
- data/spec/fixtures/add_constraints_to_most_recent_for_bacon_transitions.rb +13 -0
- data/spec/fixtures/add_most_recent_to_bacon_transitions.rb +9 -0
- data/spec/generators/statesman/active_record_transition_generator_spec.rb +0 -2
- data/spec/generators/statesman/add_constraints_to_most_recent_generator_spec.rb +38 -0
- data/spec/generators/statesman/add_most_recent_generator_spec.rb +35 -0
- data/spec/generators/statesman/migration_generator_spec.rb +10 -1
- data/spec/generators/statesman/mongoid_transition_generator_spec.rb +0 -2
- data/spec/spec_helper.rb +22 -7
- data/spec/statesman/adapters/active_record_queries_spec.rb +110 -28
- data/spec/statesman/adapters/active_record_spec.rb +61 -31
- data/spec/statesman/adapters/mongoid_spec.rb +8 -17
- data/spec/statesman/adapters/shared_examples.rb +10 -17
- data/spec/statesman/callback_spec.rb +2 -6
- data/spec/statesman/config_spec.rb +2 -5
- data/spec/statesman/guard_spec.rb +3 -9
- data/spec/statesman/machine_spec.rb +91 -129
- data/spec/support/active_record.rb +35 -4
- data/spec/support/generators_shared_examples.rb +1 -4
- data/statesman.gemspec +5 -3
- metadata +52 -10
@@ -1,8 +1,6 @@
|
|
1
1
|
require "support/active_record"
|
2
2
|
require "json"
|
3
3
|
|
4
|
-
DB = Pathname.new("test.sqlite3")
|
5
|
-
|
6
4
|
class MyStateMachine
|
7
5
|
include Statesman::Machine
|
8
6
|
|
@@ -16,14 +14,21 @@ end
|
|
16
14
|
|
17
15
|
class MyActiveRecordModel < ActiveRecord::Base
|
18
16
|
has_many :my_active_record_model_transitions
|
17
|
+
alias_method :transitions, :my_active_record_model_transitions
|
19
18
|
|
20
19
|
def state_machine
|
21
20
|
@state_machine ||= MyStateMachine.new(
|
22
21
|
self, transition_class: MyActiveRecordModelTransition)
|
23
22
|
end
|
23
|
+
|
24
|
+
def metadata
|
25
|
+
super || {}
|
26
|
+
end
|
24
27
|
end
|
25
28
|
|
26
29
|
class MyActiveRecordModelTransition < ActiveRecord::Base
|
30
|
+
include Statesman::Adapters::ActiveRecordTransition
|
31
|
+
|
27
32
|
belongs_to :my_active_record_model
|
28
33
|
serialize :metadata, JSON
|
29
34
|
end
|
@@ -38,16 +43,42 @@ class CreateMyActiveRecordModelMigration < ActiveRecord::Migration
|
|
38
43
|
end
|
39
44
|
|
40
45
|
# TODO: make this a module we can extend from the app? Or a generator?
|
46
|
+
# rubocop:disable MethodLength
|
41
47
|
class CreateMyActiveRecordModelTransitionMigration < ActiveRecord::Migration
|
42
48
|
def change
|
43
49
|
create_table :my_active_record_model_transitions do |t|
|
44
50
|
t.string :to_state
|
45
51
|
t.integer :my_active_record_model_id
|
46
52
|
t.integer :sort_key
|
47
|
-
t.
|
53
|
+
t.boolean :most_recent, default: true, null: false
|
54
|
+
|
55
|
+
# MySQL doesn't allow default values on text fields
|
56
|
+
if ActiveRecord::Base.connection.adapter_name == 'Mysql2'
|
57
|
+
t.text :metadata
|
58
|
+
else
|
59
|
+
t.text :metadata, default: '{}'
|
60
|
+
end
|
61
|
+
|
48
62
|
t.timestamps(null: false)
|
49
63
|
end
|
50
64
|
|
51
|
-
add_index :my_active_record_model_transitions,
|
65
|
+
add_index :my_active_record_model_transitions,
|
66
|
+
[:my_active_record_model_id, :sort_key],
|
67
|
+
unique: true, name: "sort_key_index"
|
68
|
+
add_index :my_active_record_model_transitions,
|
69
|
+
[:my_active_record_model_id, :most_recent],
|
70
|
+
unique: true, where: "most_recent",
|
71
|
+
name: "index_my_active_record_model_transitions_"\
|
72
|
+
"parent_most_recent"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
# rubocop:enable MethodLength
|
76
|
+
|
77
|
+
class DropMostRecentColumn < ActiveRecord::Migration
|
78
|
+
def change
|
79
|
+
remove_index :my_active_record_model_transitions,
|
80
|
+
name: "index_my_active_record_model_transitions_"\
|
81
|
+
"parent_most_recent"
|
82
|
+
remove_column :my_active_record_model_transitions, :most_recent
|
52
83
|
end
|
53
84
|
end
|
@@ -10,20 +10,17 @@ shared_examples 'a generator' do
|
|
10
10
|
|
11
11
|
it 'invokes create_model_file method' do
|
12
12
|
expect(gen).to receive(:create_model_file)
|
13
|
-
|
13
|
+
gen.invoke_all
|
14
14
|
end
|
15
15
|
|
16
16
|
describe 'it runs the generator and check things out' do
|
17
|
-
|
18
17
|
before { run_generator %w(Yummy::Bacon Yummy::BaconTransition) }
|
19
18
|
|
20
19
|
describe 'it generates a correctly named file' do
|
21
20
|
subject { file(migration_name) }
|
22
21
|
it { is_expected.to be_a_migration }
|
23
22
|
end
|
24
|
-
|
25
23
|
end
|
26
|
-
|
27
24
|
end
|
28
25
|
|
29
26
|
RSpec.configure do |config|
|
data/statesman.gemspec
CHANGED
@@ -23,10 +23,12 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency "rspec", "~> 3.1"
|
24
24
|
spec.add_development_dependency "rspec-its", "~> 1.1"
|
25
25
|
spec.add_development_dependency "guard-rspec", "~> 4.3"
|
26
|
-
spec.add_development_dependency "rubocop", "~> 0.
|
26
|
+
spec.add_development_dependency "rubocop", "~> 0.29.1"
|
27
27
|
spec.add_development_dependency "guard-rubocop", "~> 1.2"
|
28
28
|
spec.add_development_dependency "sqlite3", "~> 1.3"
|
29
|
-
spec.add_development_dependency "mongoid", "
|
30
|
-
spec.add_development_dependency "activerecord", "
|
29
|
+
spec.add_development_dependency "mongoid", ">= 3.1"
|
30
|
+
spec.add_development_dependency "activerecord", ">= 3.2"
|
31
|
+
spec.add_development_dependency "pg", "~> 0.18"
|
32
|
+
spec.add_development_dependency "mysql2", "~> 0.3"
|
31
33
|
spec.add_development_dependency "ammeter", "~> 1.1"
|
32
34
|
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: 1.
|
4
|
+
version: 1.2.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:
|
12
|
+
date: 2015-03-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -87,14 +87,14 @@ dependencies:
|
|
87
87
|
requirements:
|
88
88
|
- - ~>
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
90
|
+
version: 0.29.1
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - ~>
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
97
|
+
version: 0.29.1
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: guard-rubocop
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -125,32 +125,60 @@ dependencies:
|
|
125
125
|
version: '1.3'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: mongoid
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '3.1'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - '>='
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '3.1'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: activerecord
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - '>='
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '3.2'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - '>='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '3.2'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: pg
|
128
156
|
requirement: !ruby/object:Gem::Requirement
|
129
157
|
requirements:
|
130
158
|
- - ~>
|
131
159
|
- !ruby/object:Gem::Version
|
132
|
-
version: '
|
160
|
+
version: '0.18'
|
133
161
|
type: :development
|
134
162
|
prerelease: false
|
135
163
|
version_requirements: !ruby/object:Gem::Requirement
|
136
164
|
requirements:
|
137
165
|
- - ~>
|
138
166
|
- !ruby/object:Gem::Version
|
139
|
-
version: '
|
167
|
+
version: '0.18'
|
140
168
|
- !ruby/object:Gem::Dependency
|
141
|
-
name:
|
169
|
+
name: mysql2
|
142
170
|
requirement: !ruby/object:Gem::Requirement
|
143
171
|
requirements:
|
144
172
|
- - ~>
|
145
173
|
- !ruby/object:Gem::Version
|
146
|
-
version: '
|
174
|
+
version: '0.3'
|
147
175
|
type: :development
|
148
176
|
prerelease: false
|
149
177
|
version_requirements: !ruby/object:Gem::Requirement
|
150
178
|
requirements:
|
151
179
|
- - ~>
|
152
180
|
- !ruby/object:Gem::Version
|
153
|
-
version: '
|
181
|
+
version: '0.3'
|
154
182
|
- !ruby/object:Gem::Dependency
|
155
183
|
name: ammeter
|
156
184
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,10 +212,14 @@ files:
|
|
184
212
|
- Rakefile
|
185
213
|
- circle.yml
|
186
214
|
- lib/generators/statesman/active_record_transition_generator.rb
|
215
|
+
- lib/generators/statesman/add_constraints_to_most_recent_generator.rb
|
216
|
+
- lib/generators/statesman/add_most_recent_generator.rb
|
187
217
|
- lib/generators/statesman/generator_helpers.rb
|
188
218
|
- lib/generators/statesman/migration_generator.rb
|
189
219
|
- lib/generators/statesman/mongoid_transition_generator.rb
|
190
220
|
- lib/generators/statesman/templates/active_record_transition_model.rb.erb
|
221
|
+
- lib/generators/statesman/templates/add_constraints_to_most_recent_migration.rb.erb
|
222
|
+
- lib/generators/statesman/templates/add_most_recent_migration.rb.erb
|
191
223
|
- lib/generators/statesman/templates/create_migration.rb.erb
|
192
224
|
- lib/generators/statesman/templates/mongoid_transition_model.rb.erb
|
193
225
|
- lib/generators/statesman/templates/update_migration.rb.erb
|
@@ -205,8 +237,14 @@ files:
|
|
205
237
|
- lib/statesman/exceptions.rb
|
206
238
|
- lib/statesman/guard.rb
|
207
239
|
- lib/statesman/machine.rb
|
240
|
+
- lib/statesman/railtie.rb
|
208
241
|
- lib/statesman/version.rb
|
242
|
+
- lib/tasks/statesman.rake
|
243
|
+
- spec/fixtures/add_constraints_to_most_recent_for_bacon_transitions.rb
|
244
|
+
- spec/fixtures/add_most_recent_to_bacon_transitions.rb
|
209
245
|
- spec/generators/statesman/active_record_transition_generator_spec.rb
|
246
|
+
- spec/generators/statesman/add_constraints_to_most_recent_generator_spec.rb
|
247
|
+
- spec/generators/statesman/add_most_recent_generator_spec.rb
|
210
248
|
- spec/generators/statesman/migration_generator_spec.rb
|
211
249
|
- spec/generators/statesman/mongoid_transition_generator_spec.rb
|
212
250
|
- spec/spec_helper.rb
|
@@ -245,12 +283,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
245
283
|
version: '0'
|
246
284
|
requirements: []
|
247
285
|
rubyforge_project:
|
248
|
-
rubygems_version: 2.4.
|
286
|
+
rubygems_version: 2.4.2
|
249
287
|
signing_key:
|
250
288
|
specification_version: 4
|
251
289
|
summary: A statesmanlike state machine library
|
252
290
|
test_files:
|
291
|
+
- spec/fixtures/add_constraints_to_most_recent_for_bacon_transitions.rb
|
292
|
+
- spec/fixtures/add_most_recent_to_bacon_transitions.rb
|
253
293
|
- spec/generators/statesman/active_record_transition_generator_spec.rb
|
294
|
+
- spec/generators/statesman/add_constraints_to_most_recent_generator_spec.rb
|
295
|
+
- spec/generators/statesman/add_most_recent_generator_spec.rb
|
254
296
|
- spec/generators/statesman/migration_generator_spec.rb
|
255
297
|
- spec/generators/statesman/mongoid_transition_generator_spec.rb
|
256
298
|
- spec/spec_helper.rb
|