simple_states 0.1.1 → 1.0.0

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/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
data/Gemfile.lock CHANGED
@@ -1,23 +1,23 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- simple_states (0.1.0.pre3)
4
+ simple_states (0.1.1)
5
5
  activesupport
6
6
  hashr (~> 0.0.10)
7
7
 
8
8
  GEM
9
- remote: http://rubygems.org/
9
+ remote: https://rubygems.org/
10
10
  specs:
11
- activesupport (3.2.3)
12
- i18n (~> 0.6)
11
+ activesupport (3.2.13)
12
+ i18n (= 0.6.1)
13
13
  multi_json (~> 1.0)
14
- hashr (0.0.21)
15
- i18n (0.6.0)
14
+ hashr (0.0.22)
15
+ i18n (0.6.1)
16
16
  metaclass (0.0.1)
17
- mocha (0.11.3)
17
+ mocha (0.14.0)
18
18
  metaclass (~> 0.0.1)
19
- multi_json (1.3.4)
20
- rake (0.9.2.2)
19
+ multi_json (1.7.3)
20
+ rake (0.9.6)
21
21
  test_declarative (0.0.5)
22
22
 
23
23
  PLATFORMS
@@ -24,10 +24,11 @@ module SimpleStates
24
24
 
25
25
  raise_invalid_transition(object) unless can_transition?(object)
26
26
  run_callbacks(object, :before, args)
27
+ set_state(object)
27
28
 
28
29
  yield.tap do
29
- set_state(object)
30
30
  run_callbacks(object, :after, args)
31
+ raise_unknown_target_state(object) unless known_target_state?(object)
31
32
  object.save! if @saving
32
33
  end
33
34
  end
@@ -48,26 +49,23 @@ module SimpleStates
48
49
  end
49
50
 
50
51
  def can_transition?(object)
51
- !options.from || object.state && Array(options.from).include?(object.state)
52
+ !options.from || object.state && Array(options.from).include?(object.state.to_sym)
52
53
  end
53
54
 
54
55
  def run_callbacks(object, type, args)
56
+ object.save! if @saving
55
57
  send_methods(object, options.send(type), args)
56
58
  end
57
59
 
58
60
  def set_state(object)
59
- if state = target_state(object)
60
- object.past_states << object.state if object.state
61
- object.state = state.to_sym
62
- object.send(:"#{state}_at=", now) if object.respond_to?(:"#{state}_at=") && object.respond_to?(:"#{state}_at") && object.send(:"#{state}_at").nil?
63
- object.save! if @saving
64
- end
61
+ state = target_state
62
+ object.past_states << object.state if object.state
63
+ object.state = state.to_sym
64
+ object.send(:"#{state}_at=", now) if object.respond_to?(:"#{state}_at=") && object.respond_to?(:"#{state}_at") && object.send(:"#{state}_at").nil?
65
65
  end
66
66
 
67
- def target_state(object)
68
- options.to || :"#{name}ed".tap do |state|
69
- raise_unknown_target_state(object) unless object.class.states.include?(state)
70
- end
67
+ def target_state
68
+ options.to || :"#{name}ed"
71
69
  end
72
70
 
73
71
  def send_methods(object, methods, args)
@@ -88,12 +86,16 @@ module SimpleStates
88
86
  Time.respond_to?(:zone) && Time.zone ? Time.zone.now : Time.now.utc
89
87
  end
90
88
 
89
+ def known_target_state?(object)
90
+ object.state && object.class.states.include?(object.state.to_sym)
91
+ end
92
+
91
93
  def raise_invalid_transition(object)
92
94
  raise TransitionException, "#{object.inspect} can not receive event #{name.inspect} while in state #{object.state.inspect}."
93
95
  end
94
96
 
95
97
  def raise_unknown_target_state(object)
96
- raise TransitionException, "can not find target state for #{object.inspect} for event #{name.inspect}."
98
+ raise TransitionException, "unknown target state #{object.state.inspect} for #{object.inspect} for event #{name.inspect}. known states are #{object.class.states.inspect}"
97
99
  end
98
100
  end
99
101
  end
@@ -1,3 +1,3 @@
1
1
  module SimpleStates
2
- VERSION = '0.1.1'
2
+ VERSION = '1.0.0'
3
3
  end
data/lib/simple_states.rb CHANGED
@@ -1,6 +1,3 @@
1
- require 'active_support/concern'
2
- require 'active_support/core_ext/class/attribute'
3
- require 'active_support/core_ext/kernel/singleton_class'
4
1
  require 'active_support/core_ext/object/try'
5
2
 
6
3
  module SimpleStates
@@ -9,16 +6,21 @@ module SimpleStates
9
6
  autoload :Event, 'simple_states/event'
10
7
  autoload :States, 'simple_states/states'
11
8
 
12
- extend ActiveSupport::Concern
13
-
14
- included do
15
- class_attribute :state_names, :initial_state, :events
16
- after_initialize :init_state if respond_to?(:after_initialize)
17
- self.initial_state = :created
18
- self.events = []
9
+ def self.included(base)
10
+ base.extend SimpleStates::ClassMethods
11
+ # Add class level attribute accessors
12
+ added_class_accessors = [ :state_names, :initial_state, :events ]
13
+ base.singleton_class.send :attr_accessor, *added_class_accessors
14
+ base.public_class_method *added_class_accessors
15
+ base.public_class_method *added_class_accessors.map{|att| "#{att}=".to_sym }
16
+ # default states
17
+ base.after_initialize :init_state if base.respond_to?(:after_initialize)
18
+ base.initial_state = :created
19
+ base.events = []
19
20
  end
20
21
 
21
22
  module ClassMethods
23
+
22
24
  def new(*)
23
25
  super.tap { |object| States.init(object) }
24
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_states
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-30 00:00:00.000000000 Z
12
+ date: 2013-05-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70324948858120 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70324948858120
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: hashr
27
- requirement: &70324948857460 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 0.0.10
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70324948857460
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.0.10
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rake
38
- requirement: &70324948856640 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: 0.9.2
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70324948856640
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.9.2
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: test_declarative
49
- requirement: &70324948855800 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70324948855800
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: mocha
60
- requirement: &70324948854880 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,7 +85,12 @@ dependencies:
65
85
  version: '0'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *70324948854880
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  description: ! '[description]'
70
95
  email: svenfuchs@artweb-design.de
71
96
  executables: []
@@ -102,8 +127,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
127
  version: '0'
103
128
  requirements: []
104
129
  rubyforge_project: ! '[none]'
105
- rubygems_version: 1.8.11
130
+ rubygems_version: 1.8.23
106
131
  signing_key:
107
132
  specification_version: 3
108
133
  summary: ! '[summary]'
109
134
  test_files: []
135
+ has_rdoc: