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