dm-is-persistent_state_machine 0.1.2 → 0.1.3
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/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{dm-is-persistent_state_machine}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["michael"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-02-03}
|
13
13
|
s.description = %q{A persistent State Machine for DataMapper}
|
14
14
|
s.email = %q{ma@zive.at}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -64,10 +64,11 @@ class StateChange
|
|
64
64
|
|
65
65
|
property :from_id, Integer, :required => true, :min => 1
|
66
66
|
property :to_id, Integer, :required => true, :min => 1
|
67
|
-
|
67
|
+
property :user_id, Integer
|
68
68
|
property :created_at, DateTime
|
69
69
|
|
70
70
|
# associations
|
71
|
+
belongs_to :user
|
71
72
|
belongs_to :from, "State"
|
72
73
|
belongs_to :to, "State"
|
73
74
|
end
|
@@ -112,8 +113,9 @@ module DataMapper
|
|
112
113
|
|
113
114
|
after :save do
|
114
115
|
if (@prev_state && @prev_state != state)
|
115
|
-
StateChange.create(:from => @prev_state, :to => state, :created_at => DateTime.now)
|
116
|
+
@state_change = StateChange.create(:from => @prev_state, :to => state, :created_at => DateTime.now, :user => @user)
|
116
117
|
@prev_state = nil # clean up cache
|
118
|
+
@user = nil
|
117
119
|
end
|
118
120
|
end
|
119
121
|
|
@@ -129,9 +131,10 @@ module DataMapper
|
|
129
131
|
end # ClassMethods
|
130
132
|
|
131
133
|
module InstanceMethods
|
132
|
-
def trigger_event!(event_code)
|
133
|
-
# cache the
|
134
|
+
def trigger_event!(event_code, user)
|
135
|
+
# cache prev_state and the user that is triggering the event
|
134
136
|
@prev_state = self.state
|
137
|
+
@user = user
|
135
138
|
|
136
139
|
# delegate to State#trigger!
|
137
140
|
self.state.trigger_event!(self, event_code)
|
@@ -5,6 +5,9 @@ describe DataMapper::Is::PersistentStateMachine do
|
|
5
5
|
before(:all) do
|
6
6
|
DataMapper.auto_migrate!
|
7
7
|
|
8
|
+
# create a user
|
9
|
+
john_doe = User.create(:name => "John Doe")
|
10
|
+
|
8
11
|
# add some states
|
9
12
|
open = ProjectState.create(:name => "Open", :code => "open")
|
10
13
|
reviewed = ProjectState.create(:name => "Reviewed", :code => "reviewed")
|
@@ -19,8 +22,7 @@ describe DataMapper::Is::PersistentStateMachine do
|
|
19
22
|
reviewed_confirmed = StateTransition.create(:state => reviewed, :target => confirmed, :state_event => confirm_evt)
|
20
23
|
end
|
21
24
|
|
22
|
-
describe "
|
23
|
-
|
25
|
+
describe "at least" do
|
24
26
|
before :each do
|
25
27
|
Project.auto_migrate!
|
26
28
|
StateChange.auto_migrate!
|
@@ -29,13 +31,14 @@ describe DataMapper::Is::PersistentStateMachine do
|
|
29
31
|
it "should log state changes" do
|
30
32
|
@project = Project.create(:name => "Operation X", :state => ProjectState.first(:code => "open"))
|
31
33
|
@project.state.code.should == "open"
|
32
|
-
@project.trigger_event!('review')
|
34
|
+
@project.trigger_event!('review', User.first)
|
33
35
|
Project.first(:name => "Operation X").state.code.should == "open" # not persistent yet
|
34
36
|
|
35
37
|
StateChange.count.should == 0
|
36
38
|
@project.state.code.should == "reviewed"
|
37
39
|
@project.save
|
38
40
|
StateChange.count.should == 1
|
41
|
+
StateChange.first.user.name.should == "John Doe"
|
39
42
|
end
|
40
43
|
end
|
41
44
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-is-persistent_state_machine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- michael
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-02-03 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|