spoonsix-ssm 0.1.4 → 0.1.5

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 (2) hide show
  1. data/lib/ssm.rb +21 -8
  2. metadata +1 -1
data/lib/ssm.rb CHANGED
@@ -40,7 +40,7 @@ require File.join(File.dirname(__FILE__), 'state_machine')
40
40
  #--
41
41
  module SSM
42
42
 
43
- VERSION = '0.1.2';
43
+ VERSION = '0.1.5';
44
44
 
45
45
  class InvalidTransition < RuntimeError; end
46
46
  class UndefinedState < RuntimeError; end
@@ -91,9 +91,7 @@ module SSM
91
91
  instance.instance_eval("def #{sm.property_name}; @#{sm.property_name}; end") unless instance.respond_to?(sm.property_name)
92
92
  instance.instance_eval("def #{sm.property_name}=(v); @#{sm.property_name} = v; end") unless instance.respond_to?("#{sm.property_name}=".to_sym)
93
93
 
94
- # Set up default state
95
- initial_state_value = sm.use_property_index == true ? sm.get_state_index_by_name(sm.initial_state.name) : sm.initial_state.name
96
- instance.instance_variable_set("@#{sm.property_name}".to_sym, initial_state_value)
94
+ instance.send(:_synchronize_state)
97
95
  end
98
96
  end
99
97
 
@@ -215,7 +213,7 @@ module SSM
215
213
 
216
214
  # Create StateMachine and create method associated with this StateTransition
217
215
  SSM::TemplateStateMachines[self] << SSM::Event.new(name, SSM::StateTransition.new(from, to), &block)
218
- define_method("#{name.to_s}") { |*args| _update_ssm_state unless _state_up_to_date?; _ssm_trigger_event(name, args) }
216
+ define_method("#{name.to_s}") { |*args| _synchronize_state; _ssm_trigger_event(name, args) }
219
217
  end
220
218
 
221
219
  def template_state_machine #:nodoc:
@@ -261,7 +259,7 @@ module SSM
261
259
  # door.open
262
260
  # door.is?(:opened) #=> true
263
261
  def is?(state_name_or_symbol)
264
- _update_ssm_state unless _state_up_to_date?
262
+ _synchronize_state
265
263
  @ssm_state_machine.current_state.name.to_sym == state_name_or_symbol.to_sym
266
264
  end
267
265
 
@@ -287,13 +285,14 @@ module SSM
287
285
  # door.open
288
286
  # door.is?(:closed) #=> false
289
287
  def is_not?(state_name_or_symbol)
290
- _update_ssm_state unless _state_up_to_date?
288
+ _synchronize_state
291
289
  @ssm_state_machine.current_state.name.to_sym != state_name_or_symbol.to_sym
292
290
  end
293
291
 
294
292
  private
295
293
 
296
294
  def _ssm_trigger_event(event_name_or_symbol, args)
295
+ _synchronize_state
297
296
  event = @ssm_state_machine.get_event_by_name(event_name_or_symbol)
298
297
 
299
298
  @ssm_state_machine.transition(event.transition)
@@ -329,6 +328,20 @@ module SSM
329
328
  end
330
329
  end
331
330
 
331
+
332
+ def _synchronize_state
333
+
334
+ if instance_variable_get("@#{@ssm_state_machine.property_name}".to_sym).nil?
335
+ state_value = @ssm_state_machine.use_property_index == true ?
336
+ @ssm_state_machine.get_state_index_by_name(@ssm_state_machine.current_state.name) :
337
+ @ssm_state_machine.current_state.name
338
+ send("#{@ssm_state_machine.property_name}=".to_sym, state_value)
339
+ else
340
+ _update_ssm_state unless _state_up_to_date?
341
+ end
342
+ true
343
+ end
344
+
332
345
  # Checks whether the StateMachine and the property in the instance are in sync
333
346
  def _state_up_to_date?
334
347
  unless @ssm_state_machine.property_name.nil?
@@ -346,7 +359,7 @@ module SSM
346
359
  # Updates the StateMachine based on the value of the state property of the instance
347
360
  def _update_ssm_state
348
361
  unless @ssm_state_machine.property_name.nil?
349
- state_value = self.send("#{@ssm_state_machine.property_name}".to_sym)
362
+ state_value = send("#{@ssm_state_machine.property_name}".to_sym)
350
363
  @ssm_state_machine.current_state = @ssm_state_machine.use_property_index == true ? @ssm_state_machine.get_state_by_index(state_value) : @ssm_state_machine.get_state_by_name(state_value)
351
364
  end
352
365
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spoonsix-ssm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luis Correa d'Almeida