state-fu 0.13.0 → 0.13.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.
data/Rakefile CHANGED
@@ -7,12 +7,6 @@ require "rubygems"
7
7
 
8
8
  load File.join( File.dirname(__FILE__),"/lib/tasks/state_fu.rake" )
9
9
 
10
- module Rakefile
11
- def self.windows?
12
- /djgpp|(cyg|ms|bcc)win|mingw/ =~ RUBY_PLATFORM
13
- end
14
- end
15
-
16
10
  load 'lib/tasks/spec_last.rake'
17
11
  load 'lib/tasks/state_fu.rake'
18
12
 
@@ -67,7 +61,7 @@ namespace :spec do
67
61
  desc "Run all specs with profiling & backtrace"
68
62
  Spec::Rake::SpecTask.new(:prof) do |t|
69
63
  t.spec_files = FileList["spec/**/*_spec.rb"]
70
- t.spec_opts = ['-c','-b','-u','-f','profile','-R','-L','mtime']
64
+ t.spec_opts = ['-c','-b','-f','profile','-R','-L','mtime']
71
65
  end
72
66
 
73
67
  desc "Print Specdoc for all specs (eaxcluding plugin specs)"
@@ -10,7 +10,7 @@ module StateFu
10
10
  attr_reader :binding, :machine
11
11
 
12
12
  # An instance of MethodFactory is created to define methods on a specific StateFu::Binding, and
13
- # on the object it is bound to.
13
+ # on the object / class it is bound to.
14
14
 
15
15
  def initialize(_binding)
16
16
  @binding = _binding
@@ -20,7 +20,7 @@ module StateFu
20
20
  end
21
21
 
22
22
  def self.method_definitions_for(machine, name)
23
- returning({}) do |method_definitions|
23
+ returning Hash.new do |method_definitions|
24
24
  simple_events, complex_events = machine.events.partition &:simple?
25
25
 
26
26
  # simple event methods
@@ -40,7 +40,7 @@ module StateFu
40
40
  end
41
41
  end
42
42
 
43
- # complex event methods
43
+ # "complex" event methods (for events with more than one possible target)
44
44
  # the first argument is the target state
45
45
  # any remaining arguments are passed into the transition / transition query
46
46
 
@@ -58,7 +58,7 @@ module StateFu
58
58
  #
59
59
  # as per the method above, except that it also fires the event
60
60
 
61
- # object.can_event_name? [:target], *arguments
61
+ # object.can_<event_name>? [:target], *arguments
62
62
  #
63
63
  # tests that calling event_name or event_name! would not raise an error
64
64
  # ie, the transition is legal and is valid with the arguments supplied
@@ -82,9 +82,10 @@ module StateFu
82
82
  end
83
83
  end
84
84
 
85
- # methods dedicated to a combination of event and target
86
- # all arguments are passed into the transition / transition query
87
-
85
+ # methods for a "complex" event with a specific target
86
+ # eg progress_to_deleted!(*args)
87
+ # is equivalent to progress!(:deleted, *args)
88
+
88
89
  (simple_events + complex_events).each do |event|
89
90
  event.targets.each do |target|
90
91
  method_definitions["#{event.name}_to_#{target.name}"] = lambda do |*args|
@@ -100,6 +101,8 @@ module StateFu
100
101
  end
101
102
  end unless event.targets.nil?
102
103
  end
104
+
105
+ # sugar: query methods for determining the current state
103
106
 
104
107
  machine.states.each do |state|
105
108
  method_definitions["#{state.name}?"] = lambda do
@@ -113,8 +116,10 @@ module StateFu
113
116
  # Class Methods
114
117
  #
115
118
 
116
- # This should be called once per class using StateFu. It aliases and redefines
117
- # method_missing for the class.
119
+ # This should be called once per machine bound to a class.
120
+ # It defines methods for the machine as standard methods,
121
+ # if the machine is the default machine or the options passed to the machine include
122
+ # :define_methods => true .
118
123
  #
119
124
  # Note this happens when a machine is first bound to the class,
120
125
  # not when StateFu is included.
@@ -140,6 +145,8 @@ module StateFu
140
145
  define_event_methods_on @binding.object if @binding.options[:define_methods] && @binding.options[:singleton]
141
146
  end
142
147
 
148
+ private
149
+
143
150
  #
144
151
  # For each event, on the given object, define three methods.
145
152
  # - The first method is the same as the event name.
@@ -8,7 +8,7 @@ module StateFu
8
8
 
9
9
  # this adds a before_save hook to ensure that the field is initialized
10
10
  # (and the initial state set) before create.
11
- klass.send :before_create, :state_fu!
11
+ klass.send :before_validation_on_create, :state_fu!
12
12
 
13
13
  # it's usually a good idea to do this:
14
14
  # validates_presence_of _field_name
@@ -15,8 +15,10 @@ module StateFu
15
15
  end
16
16
 
17
17
  # calling result() will cause the set of transitions to be calculated -
18
- # the cat will then be either dead or alive; until then it's a litte from
19
- # column A, a little from column B.
18
+ # the cat will then be either dead or alive; until then it's anyone's guess.
19
+
20
+ # this is a cheap way of passing any call to #each, #length, etc to result().
21
+ # TODO: be explicit, eg using delegate, and remove method_missing.
20
22
  def method_missing(method_name, *args, &block)
21
23
  if result.respond_to?(method_name, true)
22
24
  result.__send__(method_name, *args, &block)
@@ -33,16 +35,6 @@ module StateFu
33
35
  self
34
36
  end
35
37
 
36
- # build a list of possible transition destinations ([event, target])
37
- # without actually constructing any transition objects
38
- # def all_destinations
39
- # binding.events.inject([]){ |arr, evt| arr += evt.targets.map{|tgt| [evt,tgt] }; arr}.uniq
40
- # end
41
- #
42
- # def all_destination_names
43
- # all_destinations.map {|tuple| tuple.map(&:to_sym) }
44
- # end
45
-
46
38
  #
47
39
  # Chainable Filters
48
40
  #
data/spec/spec.opts CHANGED
@@ -2,7 +2,6 @@
2
2
  --loadby
3
3
  mtime
4
4
  --reverse
5
- --debugger
6
5
  --require
7
6
  spec/custom_formatter.rb
8
7
  --format
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: state-fu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.13.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Lee
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-17 00:00:00 +11:00
12
+ date: 2009-10-18 00:00:00 +11:00
13
13
  default_executable:
14
14
  dependencies: []
15
15