stately 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -9,3 +9,5 @@ test/dummy/db/*.sqlite3
9
9
  test/dummy/log/*.log
10
10
  test/dummy/tmp/
11
11
  test/dummy/.sass-cache
12
+ .ruby-version
13
+ .ruby-gemset
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.3
5
+ - 2.0.0
6
+ branches:
7
+ only:
8
+ - master
9
+ script:
10
+ - bundle exec rake spec
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
+ gem 'rake'
4
+
3
5
  gemspec
data/Gemfile.lock CHANGED
@@ -1,12 +1,16 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- stately (0.2.0)
4
+ stately (0.3.0)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
8
8
  specs:
9
9
  diff-lcs (1.1.3)
10
+ json (1.8.0)
11
+ rake (10.0.4)
12
+ rdoc (4.0.1)
13
+ json (~> 1.4)
10
14
  redcarpet (2.2.2)
11
15
  rspec (2.11.0)
12
16
  rspec-core (~> 2.11.0)
@@ -22,6 +26,8 @@ PLATFORMS
22
26
  ruby
23
27
 
24
28
  DEPENDENCIES
29
+ rake
30
+ rdoc (= 4.0.1)
25
31
  redcarpet (~> 2.2.2)
26
32
  rspec (~> 2.0)
27
33
  stately!
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Stately
2
2
 
3
+ [![Build Status](https://api.travis-ci.org/rtwomey/stately.png)](https://travis-ci.org/rtwomey/stately)
4
+
3
5
  A minimal, elegant state machine for your ruby objects.
4
6
 
5
7
  ![A stately fellow.](https://dl.dropbox.com/u/2754528/exquisite_cat.jpg "A stately fellow.")
@@ -10,12 +12,12 @@ Stately is a state machine for ruby objects, with an elegant, easy-to-read DSL.
10
12
 
11
13
  ```ruby
12
14
  class Order
13
- stately start: :processing do
15
+ stately :start => :processing do
14
16
  state :completed do
15
17
  prevent_from :refunded
16
18
 
17
- before_transition from: :processing, do: :calculate_total
18
- after_transition do: :email_receipt
19
+ before_transition :from => :processing, :do => :calculate_total
20
+ after_transition :do => :email_receipt
19
21
 
20
22
  validate :validates_credit_card
21
23
  end
@@ -27,7 +29,7 @@ class Order
27
29
  state :refunded do
28
30
  allow_from :completed
29
31
 
30
- after_transition do: :email_receipt
32
+ after_transition :do => :email_receipt
31
33
  end
32
34
  end
33
35
  end
@@ -71,12 +73,12 @@ Be sure to run `bundle install` afterwards.
71
73
  The first step is to add the following to your object:
72
74
 
73
75
  ```ruby
74
- stately start: :initial_state, attr: :my_state_attr do
76
+ stately :start => :initial_state, :attr => :my_state_attr do
75
77
  # ...
76
78
  end
77
79
  ```
78
80
 
79
- This sets up Stately to look for an attribute named `my_state_attr`, and initially set it to `initial_state`. If you omit `attr: :my_state_attr`, Stately will automatically look for an attribute named `state`.
81
+ This sets up Stately to look for an attribute named `my_state_attr`, and initially set it to `initial_state`. If you omit `:attr => :my_state_attr`, Stately will automatically look for an attribute named `state`.
80
82
 
81
83
  ## Defining a state
82
84
 
@@ -84,8 +86,8 @@ States make up the core of Stately and define two things: the name of the state
84
86
 
85
87
  ```ruby
86
88
  class Order
87
- stately start: :processing do
88
- state :my_state, action: transition_to_my_state
89
+ stately :start => :processing do
90
+ state :my_state, :action => transition_to_my_state
89
91
  end
90
92
  end
91
93
 
@@ -127,13 +129,13 @@ If you're using Stately with some kind of persistence layer, sych as activerecor
127
129
 
128
130
  ```ruby
129
131
  class Order
130
- stately start: :processing do
132
+ stately :start => :processing do
131
133
  # ...
132
134
 
133
135
  state :completed do
134
- before_transition from: :processing, do: :before_completed
135
- before_transition from: :invalid, do: :cleanup_invalid
136
- after_transition do: :after_completed
136
+ before_transition :from => :processing, :do => :before_completed
137
+ before_transition :from => :invalid, :do => :cleanup_invalid
138
+ after_transition :do => :after_completed
137
139
  end
138
140
  end
139
141
 
@@ -155,9 +157,9 @@ Let's say you are modeling a Bicycle object for your rental shop and you're usin
155
157
 
156
158
  ```ruby
157
159
  class Bicycle < ActiveRecord::Base
158
- stately start: :available do
159
- state :rented, action: :rent do
160
- after_transition do: :save
160
+ stately :start => :available do
161
+ state :rented, :action => :rent do
162
+ after_transition :do => :save
161
163
  end
162
164
  end
163
165
  end
@@ -169,8 +171,8 @@ As you can see, Stately is slightly more verbose than other state machine gems,
169
171
 
170
172
  ## Requirements
171
173
 
172
- Stately requires Ruby 1.9. If you'd like to contribute to Stately, you'll need Rspec 2.0+.
174
+ Stately requires Ruby 1.8.7 or newer. If you'd like to contribute to Stately, you'll need Rspec 2.0+.
173
175
 
174
176
  ## License
175
177
 
176
- Stately is Copyright © 2012 Ryan Twomey. It is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.
178
+ Stately is Copyright © 2013 Ryan Twomey. It is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.
data/lib/stately/state.rb CHANGED
@@ -51,12 +51,12 @@ module Stately
51
51
 
52
52
  private
53
53
 
54
- ACTIONS = { completed: :complete, converting: :convert, invalid: :invalidate,
55
- preparing: :prepare, processing: :process, refunded: :refund, reticulating: :reticulate,
56
- saving: :save, searching: :search, started: :start, stopped: :stop }
54
+ ACTIONS = { :completed => :complete, :converting => :convert, :invalid => :invalidate,
55
+ :preparing => :prepare, :processing => :process, :refunded => :refund, :reticulating => :reticulate,
56
+ :saving => :save, :searching => :search, :started => :start, :stopped => :stop }
57
57
 
58
58
  def guess_action_for(name)
59
- ACTIONS[name.to_sym]
59
+ ACTIONS.fetch(name.to_sym, name)
60
60
  end
61
61
 
62
62
  class StateConfigurator
@@ -1,3 +1,3 @@
1
1
  module Stately
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -4,13 +4,13 @@ require 'spec_helper'
4
4
  describe Stately do
5
5
  before do
6
6
  @order_class = Class.new(OpenStruct) do
7
- stately start: :processing do
7
+ stately :start => :processing do
8
8
  state :completed do
9
9
  prevent_from :refunded
10
10
 
11
- before_transition from: :processing, do: :before_completed
12
- before_transition from: :invalid, do: :cleanup_invalid
13
- after_transition do: :after_completed
11
+ before_transition :from => :processing, :do => :before_completed
12
+ before_transition :from => :invalid, :do => :cleanup_invalid
13
+ after_transition :do => :after_completed
14
14
 
15
15
  validate :validates_amount
16
16
  validate :validates_credit_card
@@ -27,8 +27,8 @@ describe Stately do
27
27
  state :refunded do
28
28
  allow_from :completed
29
29
 
30
- before_transition from: :completed, do: :before_refunded
31
- after_transition from: :completed, do: :after_refunded
30
+ before_transition :from => :completed, :do => :before_refunded
31
+ after_transition :from => :completed, :do => :after_refunded
32
32
  end
33
33
  end
34
34
 
@@ -115,7 +115,7 @@ describe Stately do
115
115
 
116
116
  def self.should_prevent_transition(from, to, action)
117
117
  before do
118
- @order = @order_class.new(amount: 99, cc_number: 123)
118
+ @order = @order_class.new(:amount => 99, :cc_number => 123)
119
119
  @order.state = from
120
120
  end
121
121
 
@@ -141,7 +141,7 @@ describe Stately do
141
141
 
142
142
  describe 'initial state' do
143
143
  before do
144
- @order = @order_class.new(amount: 99, cc_number: 123)
144
+ @order = @order_class.new(:amount => 99, :cc_number => 123)
145
145
  end
146
146
 
147
147
  it 'creates actions for each state' do
@@ -179,7 +179,7 @@ describe Stately do
179
179
 
180
180
  describe '#complete' do
181
181
  before do
182
- @order = @order_class.new(amount: 99, cc_number: 123)
182
+ @order = @order_class.new(:amount => 99, :cc_number => 123)
183
183
  end
184
184
 
185
185
  describe 'from processing' do
@@ -243,7 +243,7 @@ describe Stately do
243
243
  describe '#invalidate' do
244
244
  describe 'from processing' do
245
245
  before do
246
- @order = @order_class.new(amount: 99, cc_number: 123)
246
+ @order = @order_class.new(:amount => 99, :cc_number => 123)
247
247
  @order.invalidate
248
248
  end
249
249
 
@@ -272,7 +272,7 @@ describe Stately do
272
272
 
273
273
  describe 'from completed' do
274
274
  before do
275
- @order = @order_class.new(amount: 99, cc_number: 123)
275
+ @order = @order_class.new(:amount => 99, :cc_number => 123)
276
276
  @order.state = 'completed'
277
277
  end
278
278
 
@@ -43,7 +43,7 @@ describe Stately::Machine do
43
43
  describe 'with name and action' do
44
44
  describe 'of a new state' do
45
45
  before do
46
- @machine.state(:new_state, action: :transition_to_new_state)
46
+ @machine.state(:new_state, :action => :transition_to_new_state)
47
47
  end
48
48
 
49
49
  it 'adds a new state' do
@@ -57,7 +57,7 @@ describe Stately::Machine do
57
57
 
58
58
  describe 'of a previously defined state' do
59
59
  before do
60
- @machine.state(:processing, action: :transition_to_processing)
60
+ @machine.state(:processing, :action => :transition_to_processing)
61
61
  end
62
62
 
63
63
  it "doesn't add a new state" do
@@ -73,7 +73,7 @@ describe Stately::Machine do
73
73
  describe 'with name, action, and block' do
74
74
  describe 'of a new state' do
75
75
  before do
76
- @machine.state(:new_state, action: :transition_to_new_state) do
76
+ @machine.state(:new_state, :action => :transition_to_new_state) do
77
77
  allow_from :completed
78
78
  end
79
79
 
@@ -95,7 +95,7 @@ describe Stately::Machine do
95
95
 
96
96
  describe 'of a previously defined state' do
97
97
  before do
98
- @machine.state(:processing, action: :transition_to_processing) do
98
+ @machine.state(:processing, :action => :transition_to_processing) do
99
99
  allow_from :completed
100
100
  end
101
101
 
@@ -2,6 +2,13 @@ require 'spec_helper'
2
2
 
3
3
  describe Stately::State do
4
4
  describe 'initialize' do
5
+ describe 'with an unrecognized action' do
6
+ it 'should not have an empty string for an action' do
7
+ state = Stately::State.new :pending
8
+ state.action.should == 'pending'
9
+ end
10
+ end
11
+
5
12
  describe 'with a block given' do
6
13
  describe 'new' do
7
14
  before do
@@ -9,10 +16,10 @@ describe Stately::State do
9
16
  allow_from :completed
10
17
  prevent_from :completed, :refunded
11
18
 
12
- before_transition do: :prepare
13
- before_transition from: :processing, do: :before_completed
14
- after_transition do: :cleanup
15
- after_transition from: :processing, do: :after_processing
19
+ before_transition :do => :prepare
20
+ before_transition :from => :processing, :do => :before_completed
21
+ after_transition :do => :cleanup
22
+ after_transition :from => :processing, :do => :after_processing
16
23
 
17
24
  validate :validates_amount
18
25
  validate :validates_credit_card
@@ -25,10 +32,10 @@ describe Stately::State do
25
32
  @state.allow_from_states.should == [:completed]
26
33
  @state.prevent_from_states.should == [:completed, :refunded]
27
34
 
28
- @state.before_transitions.should == [{do: :prepare}, {from: :processing,
29
- do: :before_completed}]
30
- @state.after_transitions.should == [{do: :cleanup}, {from: :processing,
31
- do: :after_processing}]
35
+ @state.before_transitions.should == [{:do => :prepare}, {:from => :processing,
36
+ :do => :before_completed}]
37
+ @state.after_transitions.should == [{:do => :cleanup}, {:from => :processing,
38
+ :do => :after_processing}]
32
39
  @state.validations.should == [:validates_amount, :validates_credit_card]
33
40
  end
34
41
  end
@@ -64,9 +71,9 @@ describe Stately::State do
64
71
 
65
72
  describe 'without a given action' do
66
73
  before do
67
- @actions = { completed: :complete, converting: :convert, invalid: :invalidate,
68
- preparing: :prepare, processing: :process, refunded: :refund, reticulating: :reticulate,
69
- saving: :save, searching: :search, started: :start, stopped: :stop }
74
+ @actions = { :completed => :complete, :converting => :convert, :invalid => :invalidate,
75
+ :preparing => :prepare, :processing => :process, :refunded => :refund, :reticulating => :reticulate,
76
+ :saving => :save, :searching => :search, :started => :start, :stopped => :stop }
70
77
  end
71
78
 
72
79
  it 'should set the correct action verb' do
@@ -6,7 +6,7 @@ describe Stately::InstanceMethods do
6
6
  @test_class = Class.new(Object) do
7
7
  attr_accessor :state
8
8
 
9
- stately start: :processing do
9
+ stately :start => :processing do
10
10
  state :completed
11
11
  end
12
12
  end
data/stately.gemspec CHANGED
@@ -9,6 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.homepage = 'http://github.com/rtwomey/stately'
10
10
  s.summary = 'A simple, elegant state machine for Ruby'
11
11
  s.description = 'Add an elegant state machine to your ruby objects with a simple DSL'
12
+ s.license = 'MIT'
12
13
 
13
14
  s.files = `git ls-files`.split("\n")
14
15
  s.test_files = `git ls-files -- {spec}/*`.split("\n")
@@ -16,7 +17,8 @@ Gem::Specification.new do |s|
16
17
  s.add_development_dependency 'redcarpet', '~> 2.2.2'
17
18
  s.add_development_dependency 'rspec', '~> 2.0'
18
19
  s.add_development_dependency 'yard', '~> 0.8.3'
20
+ s.add_development_dependency 'rdoc', '4.0.1'
19
21
 
20
- s.required_ruby_version = Gem::Requirement.new('>= 1.9.2')
22
+ s.required_ruby_version = Gem::Requirement.new('>= 1.8.7')
21
23
  s.require_paths = ['lib']
22
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stately
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-21 00:00:00.000000000 Z
12
+ date: 2013-09-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redcarpet
@@ -59,6 +59,22 @@ dependencies:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 0.8.3
62
+ - !ruby/object:Gem::Dependency
63
+ name: rdoc
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - '='
68
+ - !ruby/object:Gem::Version
69
+ version: 4.0.1
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - '='
76
+ - !ruby/object:Gem::Version
77
+ version: 4.0.1
62
78
  description: Add an elegant state machine to your ruby objects with a simple DSL
63
79
  email:
64
80
  - rtwomey@gmail.com
@@ -68,6 +84,7 @@ extra_rdoc_files: []
68
84
  files:
69
85
  - .gitignore
70
86
  - .rspec
87
+ - .travis.yml
71
88
  - .yardopts
72
89
  - Gemfile
73
90
  - Gemfile.lock
@@ -87,7 +104,8 @@ files:
87
104
  - spec/unit/stately_spec.rb
88
105
  - stately.gemspec
89
106
  homepage: http://github.com/rtwomey/stately
90
- licenses: []
107
+ licenses:
108
+ - MIT
91
109
  post_install_message:
92
110
  rdoc_options: []
93
111
  require_paths:
@@ -97,16 +115,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
97
115
  requirements:
98
116
  - - ! '>='
99
117
  - !ruby/object:Gem::Version
100
- version: 1.9.2
118
+ version: 1.8.7
101
119
  required_rubygems_version: !ruby/object:Gem::Requirement
102
120
  none: false
103
121
  requirements:
104
122
  - - ! '>='
105
123
  - !ruby/object:Gem::Version
106
124
  version: '0'
125
+ segments:
126
+ - 0
127
+ hash: -4046456697569839142
107
128
  requirements: []
108
129
  rubyforge_project:
109
- rubygems_version: 1.8.24
130
+ rubygems_version: 1.8.25
110
131
  signing_key:
111
132
  specification_version: 3
112
133
  summary: A simple, elegant state machine for Ruby