simple_states 1.1.0.rc3 → 1.1.0.rc5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/simple_states.rb +1 -2
- data/lib/simple_states/event.rb +15 -5
- data/lib/simple_states/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 08cd20b4c3fb3a7f24851e71a511e0ceec335e80
|
4
|
+
data.tar.gz: 22d653ec211a6507ee79ad774bcc604096dfced6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2de3393af9bf9bc2c78a96efc52c77022d4feeda20e093fb40a6a6542105b13471f2e5c4c1bfb39efc38949a7786531cb1ccf80773fee149bd0d66103451bb13
|
7
|
+
data.tar.gz: ef5b76be5af7dca69d302ac4bf0005153b3087c9c31d452c2dd7b963d831c749d58c7310d1ca6bc9ecc37750b8dad7ad8f21e22a4e1fb1de4893152df7e452ec
|
data/Gemfile.lock
CHANGED
data/lib/simple_states.rb
CHANGED
@@ -73,8 +73,7 @@ module SimpleStates
|
|
73
73
|
|
74
74
|
def reset_state
|
75
75
|
self.state = self.class.initial_state
|
76
|
-
|
77
|
-
states.each { |state| self.send(:"#{state}_at=", nil) if respond_to?(:"#{state}_at=") }
|
76
|
+
self.class.events.map { |*args| Event.new(*args).reset(self) }
|
78
77
|
end
|
79
78
|
|
80
79
|
def past_states
|
data/lib/simple_states/event.rb
CHANGED
@@ -28,6 +28,10 @@ module SimpleStates
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
def reset(object)
|
32
|
+
set_timestamp(object, nil)
|
33
|
+
end
|
34
|
+
|
31
35
|
protected
|
32
36
|
|
33
37
|
def save?
|
@@ -51,10 +55,17 @@ module SimpleStates
|
|
51
55
|
end
|
52
56
|
|
53
57
|
def set_state(object, args)
|
54
|
-
|
58
|
+
data = args.last.is_a?(Hash) ? args.last : {}
|
59
|
+
state = data[:state].try(:to_sym) || target_state
|
55
60
|
object.past_states << object.state.to_sym if object.state
|
56
61
|
object.state = state.to_sym if set_state?(object, state)
|
57
|
-
object
|
62
|
+
set_timestamp(object, data[:"#{target_state}_at"] || now)
|
63
|
+
end
|
64
|
+
|
65
|
+
def set_timestamp(object, time)
|
66
|
+
reader, writer = :"#{target_state}_at", :"#{target_state}_at="
|
67
|
+
return unless object.respond_to?(writer) && object.respond_to?(reader) && object.send(reader).nil?
|
68
|
+
object.send(writer, time)
|
58
69
|
end
|
59
70
|
|
60
71
|
def set_state?(object, state)
|
@@ -64,9 +75,8 @@ module SimpleStates
|
|
64
75
|
lft && rgt && lft < rgt
|
65
76
|
end
|
66
77
|
|
67
|
-
def target_state
|
68
|
-
|
69
|
-
state || options.to || "#{name}ed".sub(/eed$/, 'ed').to_sym
|
78
|
+
def target_state
|
79
|
+
options.to || "#{name}ed".sub(/eed$/, 'ed').to_sym
|
70
80
|
end
|
71
81
|
|
72
82
|
def send_methods(object, methods, args)
|