can_has_state 0.3.0 → 0.3.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.
@@ -3,7 +3,8 @@ module CanHasState
3
3
 
4
4
  attr_reader :column, :states, :initial_state, :triggers
5
5
 
6
- def initialize(column_name, &block)
6
+ def initialize(column_name, parent_context, &block)
7
+ @parent_context = parent_context
7
8
  @column = column_name.to_sym
8
9
  @states = {}
9
10
  @triggers = []
@@ -49,12 +50,12 @@ module CanHasState
49
50
  when :on_enter
50
51
  @triggers << {:from=>["*"], :to=>[state_name], :trigger=>Array(val), :type=>:on_enter}
51
52
  when :on_enter_deferred
52
- raise(ArgumentError, "use of deferred triggers requires support for #after_save callbacks") unless respond_to?(:after_save)
53
+ raise(ArgumentError, "use of deferred triggers requires support for #after_save callbacks") unless @parent_context.respond_to?(:after_save)
53
54
  @triggers << {:from=>["*"], :to=>[state_name], :trigger=>Array(val), :type=>:on_enter, :deferred=>true}
54
55
  when :on_exit
55
56
  @triggers << {:from=>[state_name], :to=>["*"], :trigger=>Array(val), :type=>:on_exit}
56
57
  when :on_exit_deferred
57
- raise(ArgumentError, "use of deferred triggers requires support for #after_save callbacks") unless respond_to?(:after_save)
58
+ raise(ArgumentError, "use of deferred triggers requires support for #after_save callbacks") unless @parent_context.respond_to?(:after_save)
58
59
  @triggers << {:from=>[state_name], :to=>["*"], :trigger=>Array(val), :type=>:on_exit, :deferred=>true}
59
60
  end
60
61
  end
@@ -66,7 +67,7 @@ module CanHasState
66
67
  def on(pairs)
67
68
  trigger = pairs.delete :trigger
68
69
  deferred = pairs.delete :deferred
69
- raise(ArgumentError, "use of deferred triggers requires support for #after_save callbacks") if deferred && !respond_to?(:after_save)
70
+ raise(ArgumentError, "use of deferred triggers requires support for #after_save callbacks") if deferred && !@parent_context.respond_to?(:after_save)
70
71
  pairs.each do |from, to|
71
72
  @triggers << {:from=>Array(from).map(&:to_s), :to=>Array(to).map(&:to_s),
72
73
  :trigger=>Array(trigger), :type=>:trigger, :deferred=>!!deferred}
@@ -5,7 +5,7 @@ module CanHasState
5
5
  module ClassMethods
6
6
 
7
7
  def state_machine(column, &block)
8
- d = Definition.new(column, &block)
8
+ d = Definition.new(column, self, &block)
9
9
 
10
10
  define_method "allow_#{column}?" do |to|
11
11
  state_machine_allow?(column.to_sym, to.to_s)
@@ -1,3 +1,3 @@
1
1
  module CanHasState
2
- VERSION = '0.3.0'
2
+ VERSION = '0.3.1'
3
3
  end
@@ -61,6 +61,14 @@ class UserPreState
61
61
  include ActiveModel::Validations::Callbacks
62
62
  include CanHasState::Machine
63
63
  end
64
+ class UserPreState2
65
+ include ActiveModel::Validations
66
+ include ActiveModel::Validations::Callbacks
67
+ include CanHasState::Machine
68
+ def self.after_save(*_)
69
+ # dummy to allow deferred triggers
70
+ end
71
+ end
64
72
 
65
73
  class CanHasStateTest < MiniTest::Unit::TestCase #Minitest::Test
66
74
 
@@ -123,6 +131,27 @@ class CanHasStateTest < MiniTest::Unit::TestCase #Minitest::Test
123
131
  end
124
132
  end
125
133
 
134
+ def test_deferred_available
135
+ UserPreState2.class_eval do
136
+ state_machine :state_one do
137
+ state :one, on_enter_deferred: ->{ puts 'Hello' }
138
+ end
139
+ end
140
+
141
+ UserPreState2.class_eval do
142
+ state_machine :state_two do
143
+ state :two, on_exit_deferred: ->{ puts 'Hello' }
144
+ end
145
+ end
146
+
147
+ UserPreState2.class_eval do
148
+ state_machine :state_three do
149
+ state :three
150
+ on :* => :*, trigger: ->{ puts 'Hello' }, deferred: true
151
+ end
152
+ end
153
+ end
154
+
126
155
  def test_builder_complex
127
156
  assert_equal 1, Account.state_machines.size
128
157
  sm = Account.state_machines[0][1]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: can_has_state
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: