sidestate 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,20 +8,36 @@ module Sidestate::Hook
8
8
 
9
9
  define_method(aasm_state_object) do
10
10
  aasm_state_collection.last
11
- end
11
+ end
12
+ end
13
+
14
+ base.aasm_state_class.instance_eval do
15
+ belongs_to base.name.underscore.to_sym
12
16
  end
13
17
  end
14
18
 
15
19
  module ClassMethods
20
+ def aasm_state_class
21
+ "#{name}State".constantize
22
+ end
23
+
16
24
  def aasm_state_collection
17
- "#{name}State".pluralize.underscore.to_sym
25
+ aasm_state_class.name.pluralize.underscore.to_sym
18
26
  end
19
27
 
20
28
  def aasm_state_object
21
- "#{name}State".underscore.to_sym
29
+ aasm_state_class.name.underscore.to_sym
22
30
  end
23
31
  end
24
32
 
33
+ def next_states
34
+ self.class.aasm_events.collect { |name, event|
35
+ event.transitions_from_state(aasm_current_state)
36
+ }.flatten.collect { |transition|
37
+ Array(transition.to)
38
+ }.flatten
39
+ end
40
+
25
41
  private
26
42
 
27
43
  def save_aasm_state_object
@@ -1,7 +1,7 @@
1
1
  require 'spec/spec_helper'
2
2
 
3
3
  describe Sidestate::Hook do
4
- context '#article_state' do
4
+ describe '#article_state' do
5
5
  it "should create a new state when a model object is created" do
6
6
  article = Article.create
7
7
  article.article_state.should_not be_nil
@@ -21,7 +21,7 @@ describe Sidestate::Hook do
21
21
  end
22
22
  end
23
23
 
24
- context '#article_states' do
24
+ describe '#article_states' do
25
25
  it "should store all states for a given object" do
26
26
  Timecop.travel 2.days.ago
27
27
  article = Article.create
@@ -36,4 +36,23 @@ describe Sidestate::Hook do
36
36
  }.should == ['draft', 'published', 'flagged']
37
37
  end
38
38
  end
39
+
40
+ describe '#next_states' do
41
+ it "should return the available states the object can move to" do
42
+ Timecop.travel 1.day.ago
43
+ article = Article.create
44
+ Timecop.return
45
+
46
+ article.next_states.should =~ [:published, :deleted]
47
+
48
+ article.publish!
49
+ article.next_states.should =~ [:flagged, :deleted]
50
+ end
51
+ end
52
+
53
+ describe '#article' do
54
+ it "should add the association on the state object" do
55
+ ArticleState.reflect_on_association(:article).should_not be_nil
56
+ end
57
+ end
39
58
  end
@@ -1,3 +1,7 @@
1
+ class ArticleState < ActiveRecord::Base
2
+ #
3
+ end
4
+
1
5
  class Article < ActiveRecord::Base
2
6
  include AASM
3
7
  include Sidestate
@@ -25,7 +29,3 @@ class Article < ActiveRecord::Base
25
29
  transitions :from => [:draft, :published, :flagged], :to => :deleted
26
30
  end
27
31
  end
28
-
29
- class ArticleState < ActiveRecord::Base
30
- #
31
- end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 2
8
8
  - 0
9
- version: 0.1.0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Pat Allan
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-11 00:00:00 +11:00
17
+ date: 2010-03-16 00:00:00 +11:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency