aasm 5.0.1 → 5.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ea455b8d666bb3c526bec4b9be0736719a3b38a5
4
- data.tar.gz: 3987011c8c53b930f369f76399b37194966bd170
3
+ metadata.gz: 972a54f67c50af93041d8c104cb61069ad8ae6f4
4
+ data.tar.gz: e4004fe73c08fdcf208afb45fa4e91904d2d97e0
5
5
  SHA512:
6
- metadata.gz: b35a314d950405db70775b44f8cb06617d5b4987d1f07e586069e19dcab525e761d71551019c53340b622733a8600de5ce238a44cf685854801696203cdda4d0
7
- data.tar.gz: 3852368590562313ea46427efb3c41d1f414c9a379e522880d7af472807014350a109ab65c2ebe445dbbd6132cee531375e20bb0fd36a83eea425d4cf054d377
6
+ metadata.gz: 3e2da17ffaa34ca4a299b3c9b7e7d8832c7fb09cfb07fbfe1315092fbea01cbdb4ee7b7ceca3847533b421a60db97c151b71a57a8c75f42c0e4627881ad5b9f0
7
+ data.tar.gz: f759c915e858f503d4b168c93b909aa497ba6ac4a3327ad51593dcbe44301e485166f76a5d09a4cd5c470c75cbb98b0085a675c2767e5267cfc0925ad32b777b
@@ -2,9 +2,15 @@ sudo: false
2
2
  language: ruby
3
3
  cache: bundler
4
4
 
5
+ before_install:
6
+ - rvm list
7
+ - gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
8
+ - gem install bundler -v '1.16.1'
9
+ - bundle _1.16.1_ install
10
+
5
11
  rvm:
6
- - 2.2.6
7
- - 2.3.3
12
+ - 2.3.0
13
+ - 2.5.0
8
14
  - jruby-9.1.12.0
9
15
 
10
16
  services:
@@ -16,7 +22,6 @@ addons:
16
22
 
17
23
  gemfile:
18
24
  - gemfiles/rails_3.2.gemfile
19
- - gemfiles/rails_4.0.gemfile
20
25
  - gemfiles/rails_4.2.gemfile
21
26
  - gemfiles/rails_4.2_mongoid_5.gemfile
22
27
  - gemfiles/rails_4.2_nobrainer.gemfile
@@ -36,10 +41,20 @@ script:
36
41
 
37
42
  matrix:
38
43
  exclude:
39
- - rvm: 2.2.6
40
- gemfile: gemfiles/rails_3.2.gemfile
41
- - rvm: 2.3.3
44
+ - rvm: 2.3.0
45
+ gemfile: gemfiles/rails_5.0.gemfile
46
+ - rvm: 2.3.0
47
+ gemfile: gemfiles/rails_5.0_nobrainer.gemfile
48
+ - rvm: 2.3.0
49
+ gemfile: gemfiles/rails_5.1.gemfile
50
+ - rvm: 2.5.0
42
51
  gemfile: gemfiles/rails_3.2.gemfile
52
+ - rvm: 2.5.0
53
+ gemfile: gemfiles/rails_4.2.gemfile
54
+ - rvm: 2.5.0
55
+ gemfile: gemfiles/rails_4.2_mongoid_5.gemfile
56
+ - rvm: 2.5.0
57
+ gemfile: gemfiles/rails_4.2_nobrainer.gemfile
43
58
  - rvm: jruby-9.1.12.0
44
59
  gemfile: gemfiles/rails_5.0.gemfile
45
60
  - rvm: jruby-9.1.12.0
data/Appraisals CHANGED
@@ -4,17 +4,7 @@ appraise 'rails_3.2' do
4
4
  gem 'sequel'
5
5
  gem 'bson_ext', platforms: :ruby
6
6
  gem 'test-unit', '~> 3.0'
7
- gem 'activerecord-jdbcsqlite3-adapter', '1.3.24', platforms: :jruby
8
- end
9
-
10
- appraise 'rails_4.0' do
11
- gem 'mime-types', '~> 2', platforms: %i[ruby_19 jruby]
12
- gem 'rails', '4.0.13'
13
- gem 'mongoid', '~> 4.0'
14
- gem 'sequel'
15
- gem 'dynamoid', '~> 1', platforms: :ruby
16
- gem 'aws-sdk', '~> 2', platforms: :ruby
17
- gem 'redis-objects'
7
+ gem 'minitest'
18
8
  gem 'activerecord-jdbcsqlite3-adapter', '1.3.24', platforms: :jruby
19
9
  end
20
10
 
@@ -2,6 +2,17 @@
2
2
 
3
3
  ## unreleased
4
4
 
5
+ ## 5.0.2
6
+
7
+ * Clear failed callbacks, [#600](https://github.com/aasm/aasm/pull/600), thanks to
8
+ [nedgar](https://github.com/nedgar)
9
+ * README improvements, [#594](https://github.com/aasm/aasm/pull/594),
10
+ [#589](https://github.com/aasm/aasm/pull/589), [#587](https://github.com/aasm/aasm/pull/587),
11
+ [#597](https://github.com/aasm/aasm/pull/597), thanks to [jackscotti](https://github.com/jackscotti), [krmbzds](https://github.com/krmbzds),
12
+ [zegomesjf](https://github.com/zegomesjf), [BKSpurgeon](https://github.com/BKSpurgeon)
13
+ * Update InvalidTransition to include state_machine_name [#592](https://github.com/aasm/aasm/pull/592), thanks to [a14m](https://github.com/a14m)
14
+ * Do not add migration if model and column already exists [#586](https://github.com/aasm/aasm/pull/586), thanks to [KiranJosh](https://github.com/KiranJosh)
15
+
5
16
  ## 5.0.1
6
17
 
7
18
  * Fix failures array in transition not being reset [#383](https://github.com/aasm/aasm/issues/383)
data/Dockerfile CHANGED
@@ -1,4 +1,9 @@
1
- FROM ruby:2.3.4-slim
1
+ ARG RVM_RUBY_VERSIONS="2.4.0 2.5.0"
2
+ ARG RVM_RUBY_DEFAULT="2.4.0"
3
+ FROM msati/docker-rvm
4
+
5
+ # After Ruby versions are installed we continue as non-root rvm user
6
+ USER ${RVM_USER}
2
7
 
3
8
  LABEL maintainer="AASM"
4
9
 
data/Gemfile CHANGED
@@ -2,5 +2,5 @@ source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'sqlite3', :platforms => :ruby
5
+ gem 'sqlite3', '~> 1.3.5', :platforms => :ruby
6
6
  gem 'rails', '5.1.4'
data/README.md CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/aasm.svg)](http://badge.fury.io/rb/aasm)
4
4
  [![Build Status](https://travis-ci.org/aasm/aasm.svg?branch=master)](https://travis-ci.org/aasm/aasm)
5
- [![Dependency Status](https://gemnasium.com/aasm/aasm.svg)](https://gemnasium.com/aasm/aasm)
6
5
  [![Code Climate](https://codeclimate.com/github/aasm/aasm/badges/gpa.svg)](https://codeclimate.com/github/aasm/aasm)
7
6
 
8
7
  ## Index
@@ -385,6 +384,21 @@ If you prefer a more Ruby-like guard syntax, you can use `if` and `unless` as we
385
384
  end
386
385
  ```
387
386
 
387
+ You can invoke a Class instead a method since this Class responds to `call`
388
+
389
+ ```ruby
390
+ event :sleep do
391
+ transitions :from => :running, :to => :sleeping, :guards => Dog
392
+ end
393
+ ```
394
+ ```ruby
395
+ class Dog
396
+ def call
397
+ cleaning_needed? && walked?
398
+ end
399
+ ...
400
+ end
401
+ ```
388
402
 
389
403
  ### Transitions
390
404
 
@@ -1178,7 +1192,15 @@ the 'instance method symbol / string' way whenever possible when defining guardi
1178
1192
 
1179
1193
  #### RSpec
1180
1194
 
1181
- AASM provides some matchers for [RSpec](http://rspec.info): `transition_from`, `have_state`, `allow_event` and `allow_transition_to`. Add `require 'aasm/rspec'` to your `spec_helper.rb` file and use them like this:
1195
+ AASM provides some matchers for [RSpec](http://rspec.info):
1196
+ *`transition_from`,
1197
+ * `have_state`, `allow_event`
1198
+ * and `allow_transition_to`.
1199
+
1200
+ ##### Installation Instructions:
1201
+ * Add `require 'aasm/rspec'` to your `spec_helper.rb` file.
1202
+
1203
+ ##### Examples Of Usage in Rspec:
1182
1204
 
1183
1205
  ```ruby
1184
1206
  # classes with only the default state machine
@@ -1191,7 +1213,7 @@ expect(job).to allow_event :run
1191
1213
  expect(job).to_not allow_event :clean
1192
1214
  expect(job).to allow_transition_to(:running)
1193
1215
  expect(job).to_not allow_transition_to(:cleaning)
1194
- # on_event also accept arguments
1216
+ # on_event also accept multiple arguments
1195
1217
  expect(job).to transition_from(:sleeping).to(:running).on_event(:run, :defragmentation)
1196
1218
 
1197
1219
  # classes with multiple state machine
@@ -1225,6 +1247,9 @@ AASM provides assertions and rspec-like expectations for [Minitest](https://gith
1225
1247
 
1226
1248
  List of supported assertions: `assert_have_state`, `refute_have_state`, `assert_transitions_from`, `refute_transitions_from`, `assert_event_allowed`, `refute_event_allowed`, `assert_transition_to_allowed`, `refute_transition_to_allowed`.
1227
1249
 
1250
+
1251
+ ##### Examples Of Usage (Minitest):
1252
+
1228
1253
  Add `require 'aasm/minitest'` to your `test_helper.rb` file and use them like this:
1229
1254
 
1230
1255
  ```ruby
@@ -2,12 +2,13 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "sqlite3", platforms: :ruby
5
+ gem "sqlite3", "~> 1.3.5", platforms: :ruby
6
6
  gem "rails", "~> 3.2.22"
7
7
  gem "mongoid", "~> 3.1"
8
8
  gem "sequel"
9
9
  gem "bson_ext", platforms: :ruby
10
10
  gem "test-unit", "~> 3.0"
11
+ gem "minitest"
11
12
  gem "activerecord-jdbcsqlite3-adapter", "1.3.24", platforms: :jruby
12
13
 
13
14
  gemspec path: "../"
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "sqlite3", platforms: :ruby
5
+ gem "sqlite3", "~> 1.3.5", platforms: :ruby
6
6
  gem "rails", "4.2.5"
7
7
  gem "nokogiri", "1.6.8.1", platforms: [:ruby_19]
8
8
  gem "mime-types", "~> 2", platforms: [:ruby_19, :jruby]
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "sqlite3", platforms: :ruby
5
+ gem "sqlite3", "~> 1.3.5", platforms: :ruby
6
6
  gem "rails", "4.2.5"
7
7
  gem "mime-types", "~> 2", platforms: [:ruby_19, :jruby]
8
8
  gem "mongoid", "~> 5.0"
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "sqlite3", platforms: :ruby
5
+ gem "sqlite3", "~> 1.3.5", platforms: :ruby
6
6
  gem "rails", "4.2.5"
7
7
  gem "nobrainer", "~> 0.33.0"
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "sqlite3", platforms: :ruby
5
+ gem "sqlite3", "~> 1.3.5", platforms: :ruby
6
6
  gem "rails", "5.0.0"
7
7
  gem "mongoid", "~> 6.0"
8
8
  gem "sequel"
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "sqlite3", platforms: :ruby
5
+ gem "sqlite3", "~> 1.3.5", platforms: :ruby
6
6
  gem "rails", "5.0.0"
7
7
  gem "nobrainer", "~> 0.33.0"
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "sqlite3", platforms: :ruby
5
+ gem "sqlite3", "~> 1.3.5", platforms: :ruby
6
6
  gem "rails", "5.1"
7
7
  gem "mongoid", "~>6.0"
8
8
  gem "sequel"
@@ -125,6 +125,7 @@ module AASM::Core
125
125
 
126
126
  def _fire(obj, options={}, to_state=::AASM::NO_VALUE, *args)
127
127
  result = options[:test_only] ? false : nil
128
+ clear_failed_callbacks
128
129
  transitions = @transitions.select { |t| t.from == obj.aasm(state_machine.name).current_state || t.from == nil}
129
130
  return result if transitions.size == 0
130
131
 
@@ -139,7 +140,6 @@ module AASM::Core
139
140
  end
140
141
 
141
142
  transitions.each do |transition|
142
- transition.failures.clear #https://github.com/aasm/aasm/issues/383
143
143
  next if to_state and !Array(transition.to).include?(to_state)
144
144
  if (options.key?(:may_fire) && transition.eql?(options[:may_fire])) ||
145
145
  (!options.key?(:may_fire) && transition.allowed?(obj, *args))
@@ -158,6 +158,11 @@ module AASM::Core
158
158
  result
159
159
  end
160
160
 
161
+ def clear_failed_callbacks
162
+ # https://github.com/aasm/aasm/issues/383, https://github.com/aasm/aasm/issues/599
163
+ transitions.each { |transition| transition.failures.clear }
164
+ end
165
+
161
166
  def invoke_callbacks(code, record, args)
162
167
  Invoker.new(code, record, args)
163
168
  .with_default_return_value(false)
@@ -3,10 +3,11 @@ module AASM
3
3
  class UnknownStateMachineError < RuntimeError; end
4
4
 
5
5
  class InvalidTransition < RuntimeError
6
- attr_reader :object, :event_name, :originating_state, :failures
6
+ attr_reader :object, :event_name, :originating_state, :failures, :state_machine_name
7
7
 
8
8
  def initialize(object, event_name, state_machine_name, failures = [])
9
9
  @object, @event_name, @originating_state, @failures = object, event_name, object.aasm(state_machine_name).current_state, failures
10
+ @state_machine_name = state_machine_name
10
11
  super("Event '#{event_name}' cannot transition from '#{originating_state}'.#{reasoning}")
11
12
  end
12
13
 
@@ -1,3 +1,3 @@
1
1
  module AASM
2
- VERSION = "5.0.1"
2
+ VERSION = "5.0.2"
3
3
  end
@@ -22,6 +22,12 @@ RUBY
22
22
 
23
23
  private
24
24
 
25
+ def column_exists?
26
+ table_name.singularize.humanize.constantize.column_names.include?(column_name.to_s)
27
+ rescue NameError
28
+ false
29
+ end
30
+
25
31
  def model_exists?
26
32
  File.exists?(File.join(destination_root, model_path))
27
33
  end
@@ -11,7 +11,9 @@ module ActiveRecord
11
11
  source_root File.expand_path("../templates", __FILE__)
12
12
 
13
13
  def copy_aasm_migration
14
- if model_exists?
14
+ if column_exists?
15
+ puts "Both model and column exists"
16
+ elsif model_exists?
15
17
  migration_template "migration_existing.rb", "db/migrate/add_#{column_name}_to_#{table_name}.rb"
16
18
  else
17
19
  migration_template "migration.rb", "db/migrate/aasm_create_#{table_name}.rb"
@@ -20,6 +20,10 @@ ActiveRecord::Migration.suppress_messages do
20
20
  t.string "right"
21
21
  end
22
22
 
23
+ ActiveRecord::Migration.create_table "works", :force => true do |t|
24
+ t.string "status"
25
+ end
26
+
23
27
  %w(validators multiple_validators workers invalid_persistors multiple_invalid_persistors silent_persistors multiple_silent_persistors).each do |table_name|
24
28
  ActiveRecord::Migration.create_table table_name, :force => true do |t|
25
29
  t.string "name"
@@ -43,5 +43,11 @@ if defined?(ActiveRecord)
43
43
  assert_migration "db/migrate/add_state_to_jobs.rb"
44
44
  end
45
45
 
46
+ it "dont add column if column is already exists" do
47
+ require 'models/active_record/work.rb'
48
+ load_schema
49
+ run_generator %w(work status)
50
+ assert_no_migration "db/migrate/add_status_to_jobs.rb"
51
+ end
46
52
  end
47
53
  end
@@ -0,0 +1,3 @@
1
+ class Work < ActiveRecord::Base
2
+ include AASM
3
+ end
@@ -203,6 +203,32 @@ describe 'callbacks for the new DSL' do
203
203
  }.to raise_error(AASM::InvalidTransition)
204
204
  end
205
205
 
206
+ it "does not propagate failures to next attempt of same transition" do
207
+ callback = Callbacks::Basic.new(:log => false, :fail_transition_guard => true)
208
+
209
+ expect {
210
+ callback.close!
211
+ }.to raise_error(AASM::InvalidTransition, "Event 'close' cannot transition from 'open'. Failed callback(s): [:transition_guard].")
212
+
213
+ expect {
214
+ callback.close!
215
+ }.to raise_error(AASM::InvalidTransition, "Event 'close' cannot transition from 'open'. Failed callback(s): [:transition_guard].")
216
+ end
217
+
218
+ it "does not propagate failures to next attempt of same event when no transition is applicable" do
219
+ callback = Callbacks::Basic.new(:log => false, :fail_transition_guard => true)
220
+
221
+ expect {
222
+ callback.close!
223
+ }.to raise_error(AASM::InvalidTransition, "Event 'close' cannot transition from 'open'. Failed callback(s): [:transition_guard].")
224
+
225
+ callback.aasm.current_state = :closed
226
+
227
+ expect {
228
+ callback.close!
229
+ }.to raise_error(AASM::InvalidTransition, "Event 'close' cannot transition from 'closed'.")
230
+ end
231
+
206
232
  it "does not run transition_guard twice for multiple permitted transitions" do
207
233
  show_debug_log = false
208
234
  callback = Callbacks::MultipleTransitionsTransitionGuard.new(:log => show_debug_log, :fail_transition_guard => true)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aasm
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1
4
+ version: 5.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thorsten Boettger
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-09-07 00:00:00.000000000 Z
12
+ date: 2019-03-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: concurrent-ruby
@@ -138,7 +138,6 @@ files:
138
138
  - callbacks.txt
139
139
  - docker-compose.yml
140
140
  - gemfiles/rails_3.2.gemfile
141
- - gemfiles/rails_4.0.gemfile
142
141
  - gemfiles/rails_4.2.gemfile
143
142
  - gemfiles/rails_4.2_mongoid_5.gemfile
144
143
  - gemfiles/rails_4.2_nobrainer.gemfile
@@ -224,6 +223,7 @@ files:
224
223
  - spec/models/active_record/with_enum_without_column.rb
225
224
  - spec/models/active_record/with_false_enum.rb
226
225
  - spec/models/active_record/with_true_enum.rb
226
+ - spec/models/active_record/work.rb
227
227
  - spec/models/active_record/worker.rb
228
228
  - spec/models/active_record/writer.rb
229
229
  - spec/models/basic_two_state_machines_example.rb
@@ -424,6 +424,7 @@ test_files:
424
424
  - spec/models/active_record/with_enum_without_column.rb
425
425
  - spec/models/active_record/with_false_enum.rb
426
426
  - spec/models/active_record/with_true_enum.rb
427
+ - spec/models/active_record/work.rb
427
428
  - spec/models/active_record/worker.rb
428
429
  - spec/models/active_record/writer.rb
429
430
  - spec/models/basic_two_state_machines_example.rb
@@ -1,15 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "sqlite3", platforms: :ruby
6
- gem "rails", "4.0.13"
7
- gem "mime-types", "~> 2", platforms: [:ruby_19, :jruby]
8
- gem "mongoid", "~> 4.0"
9
- gem "sequel"
10
- gem "dynamoid", "~> 1", platforms: :ruby
11
- gem "aws-sdk", "~> 2", platforms: :ruby
12
- gem "redis-objects"
13
- gem "activerecord-jdbcsqlite3-adapter", "1.3.24", platforms: :jruby
14
-
15
- gemspec path: "../"