stateful 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/stateful/version.rb +1 -1
- data/lib/stateful.rb +16 -19
- data/spec/mongoid_spec.rb +2 -1
- data/spec/stateful_spec.rb +8 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9261a6a19bbd004baeacff1e9d6b3d33e3096a8c
|
4
|
+
data.tar.gz: 7c4edb733fb8d48880f3cc89538b200c84a69d8c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a2144835b0991988cc9935bdf70891662552774cda5f9f3d124e4ef6887aabee2d542dbee377f871fb76a500241b546e773b62b1a112b74f47da46623f03130
|
7
|
+
data.tar.gz: 13aaa3bcbe79a07d9d8ceae4eaf58c4e789351ce981e9c9fe639d119489deffa20fd906fdaa137334545930014351d2cd0d97d2e365090342976e10a010f02a2
|
data/README.md
CHANGED
data/lib/stateful/version.rb
CHANGED
data/lib/stateful.rb
CHANGED
@@ -8,6 +8,7 @@ module Stateful
|
|
8
8
|
included do
|
9
9
|
if defined?(Mongoid)
|
10
10
|
require 'mongoid/document'
|
11
|
+
require 'stateful/mongoid'
|
11
12
|
include Stateful::Mongoid if included_modules.include?(::Mongoid::Document)
|
12
13
|
end
|
13
14
|
end
|
@@ -35,25 +36,18 @@ module Stateful
|
|
35
36
|
define_method 'change_state' do |new_state, options = {}, &block|
|
36
37
|
return false if new_state == state
|
37
38
|
return false unless state_info.can_transition_to?(new_state)
|
38
|
-
|
39
|
-
# convert shortcut event name to options hash
|
40
|
-
options = {event: options} if options.is_a? Symbol
|
41
|
-
options[:persist_methods] = [:persist_state, :save]
|
42
|
-
|
43
|
-
_change_state(new_state, options, &block)
|
39
|
+
_change_state(new_state, options, [:persist_state, :save], &block)
|
44
40
|
end
|
45
41
|
|
46
42
|
define_method 'change_state!' do |new_state, options = {}, &block|
|
47
|
-
return false if new_state == state
|
48
43
|
raise "transition from #{state} to #{new_state} not allowed" unless state_info.can_transition_to?(new_state)
|
44
|
+
_change_state(new_state, options, [:persist_state!, :save!], &block)
|
45
|
+
end
|
49
46
|
|
47
|
+
define_method '_change_state' do |new_state, options, persist_methods, &block|
|
50
48
|
# convert shortcut event name to options hash
|
51
49
|
options = {event: options} if options.is_a? Symbol
|
52
|
-
options[:persist_methods] = [:persist_state!, :save!]
|
53
|
-
_change_state(new_state, options, &block)
|
54
|
-
end
|
55
50
|
|
56
|
-
define_method '_change_state' do |new_state, options, &block|
|
57
51
|
# do a little magic and infer the event name from the method name used to call change_state
|
58
52
|
# TODO: decide if this is too magical, for now it has been commented out.
|
59
53
|
#unless options[:event]
|
@@ -68,20 +62,23 @@ module Stateful
|
|
68
62
|
callbacks << options[:event] if options[:event]
|
69
63
|
run_callbacks *callbacks do
|
70
64
|
self.state = new_state
|
71
|
-
|
72
|
-
|
65
|
+
|
66
|
+
## if a specific persist method value was provided
|
67
|
+
#if options.has_key?(:persist_method)
|
68
|
+
# # call the method if one was provided
|
69
|
+
# __send__(options[:persist_method]) if options[:persist_method]
|
70
|
+
## if no persist method option was provided than use the defaults
|
71
|
+
#else
|
72
|
+
method = persist_methods.find {|m| respond_to?(m)}
|
73
73
|
__send__(method) if method
|
74
|
-
end
|
75
|
-
if respond_to?(:persist_state)
|
76
|
-
persist_state
|
77
|
-
elsif respond_to?(:save!)
|
78
|
-
save!
|
79
|
-
end
|
74
|
+
#end
|
80
75
|
end
|
81
76
|
true
|
82
77
|
end
|
83
78
|
end
|
84
79
|
|
80
|
+
protected :change_state
|
81
|
+
protected :change_state!
|
85
82
|
private :_change_state
|
86
83
|
|
87
84
|
define_method 'can_transition_to?' do |new_state|
|
data/spec/mongoid_spec.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require './lib/stateful'
|
3
3
|
require 'mongoid'
|
4
|
+
require 'mongoid/document'
|
4
5
|
|
5
6
|
|
6
7
|
class Kata
|
@@ -33,7 +34,7 @@ describe Stateful::Mongoid do
|
|
33
34
|
end
|
34
35
|
|
35
36
|
it 'should support can_transition_to?' do
|
36
|
-
kata.can_transition_to?(:
|
37
|
+
kata.can_transition_to?(:needs_testing).should be_true
|
37
38
|
kata.can_transition_to?(:retired).should be_false
|
38
39
|
end
|
39
40
|
|
data/spec/stateful_spec.rb
CHANGED
@@ -91,15 +91,15 @@ describe Kata do
|
|
91
91
|
|
92
92
|
context 'change_state' do
|
93
93
|
it 'should raise error when an invalid transition state is provided' do
|
94
|
-
expect{kata.
|
94
|
+
expect{kata.send(:change_state!, :retired)}.to raise_error
|
95
95
|
end
|
96
96
|
|
97
97
|
it 'should raise error when a group state is provided' do
|
98
|
-
expect{kata.
|
98
|
+
expect{kata.send(:change_state!, :beta)}.to raise_error
|
99
99
|
end
|
100
100
|
|
101
101
|
it 'should return false when state is the same' do
|
102
|
-
kata.
|
102
|
+
kata.send(:change_state, :draft).should be_false
|
103
103
|
end
|
104
104
|
|
105
105
|
it 'should support state_valid?' do
|
@@ -107,14 +107,14 @@ describe Kata do
|
|
107
107
|
end
|
108
108
|
|
109
109
|
it 'should change the state when a proper state is provided' do
|
110
|
-
kata.
|
110
|
+
kata.send(:change_state, :needs_feedback).should be_true
|
111
111
|
kata.state.should == :needs_feedback
|
112
|
-
kata.
|
112
|
+
kata.send(:change_state, :needs_approval).should be_true
|
113
113
|
kata.state.should == :needs_approval
|
114
|
-
kata.
|
114
|
+
kata.send(:change_state, :draft).should be_true
|
115
115
|
kata.state.should == :draft
|
116
|
-
kata.
|
117
|
-
kata.
|
116
|
+
kata.send(:change_state, :needs_approval).should be_true
|
117
|
+
kata.send(:change_state, :approved).should be_true
|
118
118
|
kata.state.should == :approved
|
119
119
|
end
|
120
120
|
|
@@ -151,8 +151,6 @@ describe Kata do
|
|
151
151
|
Kata.state_infos[:needs_approval].to_transitions.should == [:draft, :approved]
|
152
152
|
|
153
153
|
Kata.state_infos[:retired].to_transitions.should be_empty
|
154
|
-
|
155
|
-
p Kata.instance_methods
|
156
154
|
end
|
157
155
|
end
|
158
156
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stateful
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jake hoffner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|