aasm 4.11.0 → 4.12.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.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +16 -17
  3. data/Appraisals +44 -0
  4. data/CHANGELOG.md +24 -1
  5. data/CONTRIBUTING.md +24 -0
  6. data/Gemfile +4 -21
  7. data/README.md +81 -34
  8. data/Rakefile +6 -1
  9. data/TESTING.md +25 -0
  10. data/aasm.gemspec +5 -2
  11. data/gemfiles/rails_3.2.gemfile +13 -0
  12. data/gemfiles/rails_4.0.gemfile +8 -9
  13. data/gemfiles/rails_4.2.gemfile +9 -9
  14. data/gemfiles/rails_4.2_mongoid_5.gemfile +5 -9
  15. data/gemfiles/rails_5.0.gemfile +7 -16
  16. data/lib/aasm/aasm.rb +9 -3
  17. data/lib/aasm/base.rb +3 -1
  18. data/lib/aasm/configuration.rb +4 -0
  19. data/lib/aasm/core/event.rb +19 -9
  20. data/lib/aasm/core/state.rb +7 -0
  21. data/lib/aasm/core/transition.rb +9 -0
  22. data/lib/aasm/instance_base.rb +8 -8
  23. data/lib/aasm/persistence/active_record_persistence.rb +1 -1
  24. data/lib/aasm/persistence/base.rb +3 -3
  25. data/lib/aasm/persistence/mongoid_persistence.rb +48 -9
  26. data/lib/aasm/persistence.rb +0 -3
  27. data/lib/aasm/state_machine.rb +4 -2
  28. data/lib/aasm/state_machine_store.rb +5 -2
  29. data/lib/aasm/version.rb +1 -1
  30. data/lib/generators/active_record/aasm_generator.rb +1 -1
  31. data/lib/motion-aasm.rb +0 -1
  32. data/spec/en.yml +3 -0
  33. data/spec/generators/active_record_generator_spec.rb +42 -34
  34. data/spec/generators/mongoid_generator_spec.rb +4 -6
  35. data/spec/models/{invalid_persistor.rb → active_record/invalid_persistor.rb} +0 -2
  36. data/spec/models/{silent_persistor.rb → active_record/silent_persistor.rb} +0 -2
  37. data/spec/models/active_record/simple_new_dsl.rb +2 -2
  38. data/spec/models/{transactor.rb → active_record/transactor.rb} +0 -2
  39. data/spec/models/{validator.rb → active_record/validator.rb} +6 -3
  40. data/spec/models/callbacks/basic.rb +5 -2
  41. data/spec/models/guard_with_params.rb +24 -0
  42. data/spec/models/guard_with_params_multiple.rb +18 -0
  43. data/spec/models/mongoid/invalid_persistor_mongoid.rb +39 -0
  44. data/spec/models/mongoid/silent_persistor_mongoid.rb +39 -0
  45. data/spec/models/mongoid/simple_mongoid.rb +2 -2
  46. data/spec/models/mongoid/validator_mongoid.rb +100 -0
  47. data/spec/models/multi_transitioner.rb +10 -0
  48. data/spec/models/multiple_transitions_that_differ_only_by_guard.rb +31 -0
  49. data/spec/models/parametrised_event.rb +7 -0
  50. data/spec/models/simple_multiple_example.rb +12 -0
  51. data/spec/models/sub_class.rb +34 -0
  52. data/spec/spec_helper.rb +0 -33
  53. data/spec/spec_helpers/active_record.rb +7 -0
  54. data/spec/spec_helpers/dynamoid.rb +33 -0
  55. data/spec/spec_helpers/mongoid.rb +7 -0
  56. data/spec/spec_helpers/redis.rb +7 -0
  57. data/spec/spec_helpers/remove_warnings.rb +1 -0
  58. data/spec/spec_helpers/sequel.rb +7 -0
  59. data/spec/unit/api_spec.rb +76 -73
  60. data/spec/unit/callbacks_spec.rb +5 -0
  61. data/spec/unit/event_spec.rb +12 -0
  62. data/spec/unit/guard_with_params_multiple_spec.rb +10 -0
  63. data/spec/unit/guard_with_params_spec.rb +14 -0
  64. data/spec/unit/inspection_spec.rb +5 -0
  65. data/spec/unit/localizer_spec.rb +55 -53
  66. data/spec/unit/multiple_transitions_that_differ_only_by_guard_spec.rb +14 -0
  67. data/spec/unit/override_warning_spec.rb +8 -0
  68. data/spec/unit/persistence/active_record_persistence_multiple_spec.rb +452 -445
  69. data/spec/unit/persistence/active_record_persistence_spec.rb +523 -490
  70. data/spec/unit/persistence/dynamoid_persistence_multiple_spec.rb +4 -9
  71. data/spec/unit/persistence/dynamoid_persistence_spec.rb +4 -9
  72. data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +87 -10
  73. data/spec/unit/persistence/mongoid_persistence_spec.rb +89 -10
  74. data/spec/unit/persistence/redis_persistence_spec.rb +3 -7
  75. data/spec/unit/persistence/sequel_persistence_multiple_spec.rb +4 -9
  76. data/spec/unit/persistence/sequel_persistence_spec.rb +4 -9
  77. data/spec/unit/simple_multiple_example_spec.rb +28 -0
  78. data/spec/unit/subclassing_multiple_spec.rb +37 -2
  79. data/spec/unit/subclassing_spec.rb +17 -2
  80. metadata +77 -32
  81. data/gemfiles/rails_3.2_stable.gemfile +0 -15
  82. data/gemfiles/rails_4.0_mongo_mapper.gemfile +0 -17
  83. data/gemfiles/rails_4.2_mongo_mapper.gemfile +0 -18
  84. data/lib/aasm/persistence/mongo_mapper_persistence.rb +0 -163
  85. data/spec/models/mongo_mapper/complex_mongo_mapper_example.rb +0 -37
  86. data/spec/models/mongo_mapper/no_scope_mongo_mapper.rb +0 -21
  87. data/spec/models/mongo_mapper/simple_mongo_mapper.rb +0 -23
  88. data/spec/models/mongo_mapper/simple_new_dsl_mongo_mapper.rb +0 -25
  89. data/spec/unit/persistence/mongo_mapper_persistence_multiple_spec.rb +0 -146
  90. data/spec/unit/persistence/mongo_mapper_persistence_spec.rb +0 -93
  91. /data/spec/models/{worker.rb → active_record/worker.rb} +0 -0
@@ -1,146 +0,0 @@
1
- describe 'mongo_mapper' do
2
- begin
3
- require 'mongo_mapper'
4
- require 'logger'
5
- require 'spec_helper'
6
-
7
- Dir[File.dirname(__FILE__) + "/../../models/mongo_mapper/*.rb"].sort.each do |f|
8
- require File.expand_path(f)
9
- end
10
-
11
- before(:all) do
12
- config = {
13
- 'test' => {
14
- 'database' => "mongo_mapper_#{Process.pid}"
15
- }
16
- }
17
-
18
- MongoMapper.setup(config, 'test') #, :logger => Logger.new(STDERR))
19
- end
20
-
21
- after do
22
- # Clear Out all non-system Mongo collections between tests
23
- MongoMapper.database.collections.each do |collection|
24
- collection.drop unless collection.capped? || (collection.name =~ /\Asystem/)
25
- end
26
- end
27
-
28
- describe "named scopes with the old DSL" do
29
-
30
- context "Does not already respond_to? the scope name" do
31
- it "should add a scope" do
32
- expect(SimpleMongoMapperMultiple).to respond_to(:unknown_scope)
33
- expect(SimpleMongoMapperMultiple.unknown_scope.class).to eq(MongoMapper::Plugins::Querying::DecoratedPluckyQuery)
34
- #expect(SimpleMongoMapperMultiple.unknown_scope.is_a?(ActiveRecord::Relation)).to be_truthy
35
- end
36
- end
37
-
38
- context "Already respond_to? the scope name" do
39
- it "should not add a scope" do
40
- expect(SimpleMongoMapperMultiple).to respond_to(:next)
41
- expect(SimpleMongoMapperMultiple.new.class).to eq(SimpleMongoMapperMultiple)
42
- end
43
- end
44
-
45
- end
46
-
47
- describe "named scopes with the new DSL" do
48
-
49
- context "Does not already respond_to? the scope name" do
50
- it "should add a scope" do
51
- expect(SimpleNewDslMongoMapperMultiple).to respond_to(:unknown_scope)
52
- expect(SimpleNewDslMongoMapperMultiple.unknown_scope.class).to eq(MongoMapper::Plugins::Querying::DecoratedPluckyQuery)
53
- end
54
- end
55
-
56
- context "Already respond_to? the scope name" do
57
- it "should not add a scope" do
58
- expect(SimpleNewDslMongoMapperMultiple).to respond_to(:next)
59
- expect(SimpleNewDslMongoMapperMultiple.new.class).to eq(SimpleNewDslMongoMapperMultiple)
60
- end
61
- end
62
-
63
- it "does not create scopes if requested" do
64
- expect(NoScopeMongoMapperMultiple).not_to respond_to(:ignored_scope)
65
- end
66
-
67
- end
68
-
69
- describe "instance methods" do
70
-
71
- let(:simple) {SimpleNewDslMongoMapperMultiple.new}
72
-
73
- it "should call aasm_ensure_initial_state on validation before create" do
74
- expect(SimpleNewDslMongoMapperMultiple.aasm(:left).initial_state).to eq(:unknown_scope)
75
- expect(SimpleNewDslMongoMapperMultiple.aasm(:left).attribute_name).to eq(:status)
76
- expect(simple.status).to eq(nil)
77
- simple.valid?
78
- expect(simple.status).to eq('unknown_scope')
79
- end
80
-
81
- it "should call aasm_ensure_initial_state before create, even if skipping validations" do
82
- expect(simple.status).to eq(nil)
83
- simple.save(:validate => false)
84
- expect(simple.status).to eq('unknown_scope')
85
- end
86
- end
87
-
88
- describe "complex example" do
89
- it "works" do
90
- record = ComplexMongoMapperExample.new
91
- expect(record.aasm(:left).current_state).to eql :one
92
- expect(record.left).to be_nil
93
- expect(record.aasm(:right).current_state).to eql :alpha
94
- expect(record.right).to be_nil
95
-
96
- record.save!
97
- expect_aasm_states record, :one, :alpha
98
- record.reload
99
- expect_aasm_states record, :one, :alpha
100
-
101
- record.increment!
102
- expect_aasm_states record, :two, :alpha
103
- record.reload
104
- expect_aasm_states record, :two, :alpha
105
-
106
- record.level_up!
107
- expect_aasm_states record, :two, :beta
108
- record.reload
109
- expect_aasm_states record, :two, :beta
110
-
111
- record.increment!
112
- expect { record.increment! }.to raise_error(AASM::InvalidTransition)
113
- expect_aasm_states record, :three, :beta
114
- record.reload
115
- expect_aasm_states record, :three, :beta
116
-
117
- record.level_up!
118
- expect_aasm_states record, :three, :gamma
119
- record.reload
120
- expect_aasm_states record, :three, :gamma
121
-
122
- record.level_down # without saving
123
- expect_aasm_states record, :three, :beta
124
- record.reload
125
- expect_aasm_states record, :three, :gamma
126
-
127
- record.level_down # without saving
128
- expect_aasm_states record, :three, :beta
129
- record.reset!
130
- expect_aasm_states record, :one, :beta
131
- end
132
-
133
- def expect_aasm_states(record, left_state, right_state)
134
- expect(record.aasm(:left).current_state).to eql left_state.to_sym
135
- expect(record.left).to eql left_state.to_s
136
- expect(record.aasm(:right).current_state).to eql right_state.to_sym
137
- expect(record.right).to eql right_state.to_s
138
- end
139
- end
140
-
141
- rescue LoadError
142
- puts "--------------------------------------------------------------------------"
143
- puts "Not running MongoMapper specs because mongo_mapper gem is not installed!!!"
144
- puts "--------------------------------------------------------------------------"
145
- end
146
- end
@@ -1,93 +0,0 @@
1
- describe 'mongo_mapper' do
2
- begin
3
- require 'mongo_mapper'
4
- require 'logger'
5
- require 'spec_helper'
6
-
7
- Dir[File.dirname(__FILE__) + "/../../models/mongo_mapper/*.rb"].sort.each do |f|
8
- require File.expand_path(f)
9
- end
10
-
11
- before(:all) do
12
- config = {
13
- 'test' => {
14
- 'database' => "mongo_mapper_#{Process.pid}"
15
- }
16
- }
17
-
18
- MongoMapper.setup(config, 'test') #, :logger => Logger.new(STDERR))
19
- end
20
-
21
- after do
22
- # Clear Out all non-system Mongo collections between tests
23
- MongoMapper.database.collections.each do |collection|
24
- collection.drop unless collection.capped? || (collection.name =~ /\Asystem/)
25
- end
26
- end
27
-
28
- describe "named scopes with the old DSL" do
29
-
30
- context "Does not already respond_to? the scope name" do
31
- it "should add a scope" do
32
- expect(SimpleMongoMapper).to respond_to(:unknown_scope)
33
- expect(SimpleMongoMapper.unknown_scope.class).to eq(MongoMapper::Plugins::Querying::DecoratedPluckyQuery)
34
- #expect(SimpleMongoMapper.unknown_scope.is_a?(ActiveRecord::Relation)).to be_truthy
35
- end
36
- end
37
-
38
- context "Already respond_to? the scope name" do
39
- it "should not add a scope" do
40
- expect(SimpleMongoMapper).to respond_to(:next)
41
- expect(SimpleMongoMapper.new.class).to eq(SimpleMongoMapper)
42
- end
43
- end
44
-
45
- end
46
-
47
- describe "named scopes with the new DSL" do
48
-
49
- context "Does not already respond_to? the scope name" do
50
- it "should add a scope" do
51
- expect(SimpleNewDslMongoMapper).to respond_to(:unknown_scope)
52
- expect(SimpleNewDslMongoMapper.unknown_scope.class).to eq(MongoMapper::Plugins::Querying::DecoratedPluckyQuery)
53
- end
54
- end
55
-
56
- context "Already respond_to? the scope name" do
57
- it "should not add a scope" do
58
- expect(SimpleNewDslMongoMapper).to respond_to(:next)
59
- expect(SimpleNewDslMongoMapper.new.class).to eq(SimpleNewDslMongoMapper)
60
- end
61
- end
62
-
63
- it "does not create scopes if requested" do
64
- expect(NoScopeMongoMapper).not_to respond_to(:ignored_scope)
65
- end
66
-
67
- end
68
-
69
- describe "instance methods" do
70
-
71
- let(:simple) {SimpleNewDslMongoMapper.new}
72
-
73
- it "should call aasm_ensure_initial_state on validation before create" do
74
- expect(SimpleNewDslMongoMapper.aasm.initial_state).to eq(:unknown_scope)
75
- expect(SimpleNewDslMongoMapper.aasm.attribute_name).to eq(:status)
76
- expect(simple.status).to eq(nil)
77
- simple.valid?
78
- expect(simple.status).to eq('unknown_scope')
79
- end
80
-
81
- it "should call aasm_ensure_initial_state before create, even if skipping validations" do
82
- expect(simple.status).to eq(nil)
83
- simple.save(:validate => false)
84
- expect(simple.status).to eq('unknown_scope')
85
- end
86
- end
87
-
88
- rescue LoadError
89
- puts "--------------------------------------------------------------------------"
90
- puts "Not running MongoMapper multiple-specs because mongo_mapper gem is not installed!!!"
91
- puts "--------------------------------------------------------------------------"
92
- end
93
- end
File without changes