statelogic 1.1 → 1.2

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/CHANGELOG CHANGED
@@ -1,8 +1,14 @@
1
+ 1.2 - 2010-03-16
2
+ - for all defined states also adds named_scopes :"#{attr_name}_is_#{state_name}"
3
+ for example if state is :new, tries to add named_scope :new (it fails) and then
4
+ it adds :state_is_new so the named_scope for state :new is still accessible
5
+ [by Petr Chalupa (http://github.com/pitrch)]
6
+
1
7
  1.1 - 2009-08-11
2
8
  - adds finder methods in the form of find_all_#{state}(*args)
3
9
  - adds named scope named after corresponding state
4
10
  - no longer redefines existing methods with the same names, issues warnings instead
5
11
  - forces state names to underscore notation when used as part of method/scope names
6
12
 
7
- 0.1.2 - 2009-01-10
8
- - Support scoping arbitrary callbacks beyond ActiveRecord's
13
+ 0.1.2 - 2009-01-10
14
+ - Support scoping arbitrary callbacks beyond ActiveRecord's
data/README.rdoc CHANGED
@@ -12,6 +12,13 @@ consistency over merely formal... whatever...
12
12
  - ???????
13
13
  - PROFIT!!!11
14
14
 
15
+ === Changes in v1.2
16
+ _Please review these carefully as they may be incompatible with your existing code._
17
+ - for all defined states also adds named_scopes :"#{attr_name}_is_#{state_name}"
18
+ for example if state is :new, tries to add named_scope :new (it fails) and then
19
+ it adds :state_is_new so the named_scope for state :new is still accessible
20
+ [by Petr Chalupa (http://github.com/pitrch)]
21
+
15
22
  === Changes in v1.1
16
23
  _Please review these carefully as they may be incompatible with your existing code._
17
24
  - adds finder methods in the form of +find_all_#{state}(*args)+ (Order.find_all_ready) sugg. by ares
@@ -20,7 +27,7 @@ _Please review these carefully as they may be incompatible with your existing co
20
27
  - forces state names to underscore notation when used as part of method names
21
28
 
22
29
  === Installation
23
- gem install omg-statelogic --source http://gems.github.com
30
+ gem install statelogic
24
31
 
25
32
  Installable as a plugin too.
26
33
 
@@ -39,7 +46,7 @@ Please report via Github issue tracking.
39
46
  initial_state 'unpaid' do
40
47
  transitions_to 'ready', 'suspended' # won't let you change to wrong states
41
48
  end
42
- state 'ready' do # you get +ready?+, +was_ready?+, +Order.ready+ named scope and +Order.find_all_ready+ finder
49
+ state 'ready' do # you get +ready?+, +was_ready?+; +Order.ready+, +Order.state_is_ready+; named scopes and +Order.find_all_ready+ finder
43
50
  transitions_to 'redeemed', 'suspended'
44
51
  validates_presence_of :txref # scoped validations
45
52
  before_save :prepare_for_plucking # scoped callbacks
@@ -69,13 +76,13 @@ Please report via Github issue tracking.
69
76
  # for something more specific if it's to be displayed to user.
70
77
 
71
78
 
79
+ === Contributors:
80
+ - Petr Chalupa (http://github.com/pitrch)
81
+
72
82
  === See also
73
83
  * http://github.com/omg/threadpool -- Thread pool implementation
74
- * http://github.com/omg/peanuts -- Ruby <-> XML mapping
75
-
76
-
77
- Hint: If you feel like generous today you can tip me at http://tipjoy.com/u/pisuka
78
-
84
+ * http://github.com/omg/peanuts -- Ruby <-> XML mapping
85
+ * http://github.com/omg/slash -- HTTP/REST client
79
86
 
80
87
  Copyright (c) 2009 Igor Gunko, released under the MIT license
81
88
 
@@ -14,7 +14,7 @@ module Statelogic
14
14
  c = meta ? cls.metaclass : cls
15
15
  unless c.method_defined?(name)
16
16
  c.send(:define_method, name, &block)
17
- Util.debug { "Statelogic created #{meta ? 'class' : 'instance'} method #{name} on #{cls.name}." }
17
+ debug { "Statelogic created #{meta ? 'class' : 'instance'} method #{name} on #{cls.name}." }
18
18
  else
19
19
  warn { "Statelogic won't override #{meta ? 'class' : 'instance'} method #{name} already defined on #{cls.name}." }
20
20
  nil
@@ -81,15 +81,16 @@ module Statelogic
81
81
  Util.defmethod(@class, "#{uname}?") { send(attr) == name }
82
82
  Util.defmethod(@class, "was_#{uname}?") { send(attr_was) == name }
83
83
 
84
- unless @class.respond_to?(name)
85
- @class.send(:named_scope, uname, :conditions => {attr.to_sym => name })
86
- Util.debug { "Statelogic has defined named scope #{uname} on #{@class.name}." }
87
- else
88
- Util.warn { "Statelogic won't override class method #{uname} already defined on #{@class.name}." }
84
+ [uname, "#{attr}_is_#{uname}".to_sym].each do |named_scope_name|
85
+ unless @class.respond_to?(named_scope_name)
86
+ @class.send(:named_scope, named_scope_name, :conditions => {attr.to_sym => name })
87
+ Util.debug { "Statelogic has defined named scope #{named_scope_name} on #{@class.name}." }
88
+ else
89
+ Util.warn { "Statelogic won't override class method #{named_scope_name} already defined on #{@class.name}." }
90
+ end
89
91
  end
90
92
 
91
93
  Util.defmethod(@class, "find_all_#{uname}", true) {|*args| send(find_all_by_attr, name, *args) }
92
-
93
94
  StateScopeHelper.new(@class, name, @config).instance_eval(&block) if block_given?
94
95
 
95
96
  @config[:states] << name
data/lib/statelogic.rb CHANGED
@@ -1 +1 @@
1
- # undisturbed void
1
+ # undisturbed void
@@ -1,8 +1,9 @@
1
- # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
-
3
1
  unpaid:
4
2
  state: unpaid
5
3
 
4
+ new:
5
+ state: new
6
+
6
7
  ready:
7
8
  state: ready
8
9
 
@@ -8,11 +8,12 @@ class OrderTest < ActiveSupport::TestCase
8
8
 
9
9
  fixtures :orders
10
10
 
11
- should_have_class_methods :unpaid, :ready, :redeemed, :suspended
12
- should_have_class_methods :find_all_unpaid, :find_all_ready, :find_all_redeemed, :find_all_suspended
11
+ should_have_class_methods :unpaid, :ready, :redeemed, :suspended
12
+ should_have_class_methods :state_is_new, :state_is_unpaid, :state_is_ready, :state_is_redeemed, :state_is_suspended
13
+ should_have_class_methods :find_all_new, :find_all_unpaid, :find_all_ready, :find_all_redeemed, :find_all_suspended
13
14
 
14
- should_have_instance_methods :unpaid?, :ready?, :redeemed?, :suspended?
15
- should_have_instance_methods :was_unpaid?, :was_ready?, :was_redeemed?, :was_suspended?
15
+ should_have_instance_methods :new?, :unpaid?, :ready?, :redeemed?, :suspended?
16
+ should_have_instance_methods :was_new?, :was_unpaid?, :was_ready?, :was_redeemed?, :was_suspended?
16
17
 
17
18
  context 'Finders and scopes' do
18
19
  should 'return adequate shit' do
@@ -28,12 +29,22 @@ class OrderTest < ActiveSupport::TestCase
28
29
  context 'A fresh order' do
29
30
  subject { Order.new }
30
31
 
31
- should_allow_values_for :state, 'unpaid'
32
+ should_allow_values_for :state, 'unpaid', 'new'
32
33
  should_not_allow_values_for :state, 'ready', 'redeemed', 'suspended', 'screwed_up',
33
34
  :message => default_error_message(:inclusion)
34
35
  should_not_require_attributes :txref, :redeemed_at, :facility_id
35
36
  end
36
37
 
38
+ context 'A new order' do
39
+ subject { orders(:new) }
40
+
41
+ should_allow_values_for :state, 'redeemed', 'suspended'
42
+ should_not_allow_values_for :state, 'ready', 'screwed_up',
43
+ :message => default_error_message(:inclusion)
44
+ should_validate_presence_of :txref
45
+ should_not_require_attributes :redeemed_at, :facility_id
46
+ end
47
+
37
48
  context 'An unpaid order' do
38
49
  subject { orders(:unpaid) }
39
50
 
data/test/test_helper.rb CHANGED
@@ -12,7 +12,7 @@ require 'shoulda_macros/statelogic'
12
12
  #ActiveRecord::TestFixtures.fixture_path = 'test/fixtures'
13
13
 
14
14
  ActiveRecord::Base.configurations = {
15
- 'test' => {:adapter => 'sqlite3', :dbfile => ':memory:'}
15
+ 'test' => {:adapter => 'sqlite3', :database => ':memory:'}
16
16
  }
17
17
  ActiveRecord::Base.establish_connection(:test)
18
18
 
metadata CHANGED
@@ -1,7 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: statelogic
3
3
  version: !ruby/object:Gem::Version
4
- version: "1.1"
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 2
8
+ version: "1.2"
5
9
  platform: ruby
6
10
  authors:
7
11
  - Igor Gunko
@@ -9,39 +13,51 @@ autorequire:
9
13
  bindir: bin
10
14
  cert_chain: []
11
15
 
12
- date: 2009-08-11 00:00:00 +03:00
16
+ date: 2010-03-16 00:00:00 +02:00
13
17
  default_executable:
14
18
  dependencies:
15
19
  - !ruby/object:Gem::Dependency
16
20
  name: activerecord
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
21
+ prerelease: false
22
+ requirement: &id001 !ruby/object:Gem::Requirement
20
23
  requirements:
21
24
  - - ">="
22
25
  - !ruby/object:Gem::Version
26
+ segments:
27
+ - 2
28
+ - 3
29
+ - 2
23
30
  version: 2.3.2
24
- version:
31
+ type: :runtime
32
+ version_requirements: *id001
25
33
  - !ruby/object:Gem::Dependency
26
- name: thoughtbot-shoulda
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
34
+ name: shoulda
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
30
37
  requirements:
31
- - - ">="
38
+ - - ~>
32
39
  - !ruby/object:Gem::Version
33
- version: 2.10.2
34
- version:
40
+ segments:
41
+ - 2
42
+ - 10
43
+ - 3
44
+ version: 2.10.3
45
+ type: :development
46
+ version_requirements: *id002
35
47
  - !ruby/object:Gem::Dependency
36
48
  name: sqlite3-ruby
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
49
+ prerelease: false
50
+ requirement: &id003 !ruby/object:Gem::Requirement
40
51
  requirements:
41
52
  - - ">="
42
53
  - !ruby/object:Gem::Version
43
- version: 1.2.4
44
- version:
54
+ segments:
55
+ - 1
56
+ - 2
57
+ - 5
58
+ version: 1.2.5
59
+ type: :development
60
+ version_requirements: *id003
45
61
  description: " Statelogic does kinda this and that... you know.\n"
46
62
  email: tekmon@gmail.com
47
63
  executables: []
@@ -58,7 +74,6 @@ files:
58
74
  - MIT-LICENSE
59
75
  - Rakefile
60
76
  - lib/statelogic.rb
61
- - lib/omg-statelogic.rb
62
77
  - lib/statelogic/activerecord.rb
63
78
  - lib/statelogic/callbacks_ext.rb
64
79
  - rails/init.rb
@@ -77,18 +92,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
77
92
  requirements:
78
93
  - - ">="
79
94
  - !ruby/object:Gem::Version
95
+ segments:
96
+ - 0
80
97
  version: "0"
81
- version:
82
98
  required_rubygems_version: !ruby/object:Gem::Requirement
83
99
  requirements:
84
100
  - - ">="
85
101
  - !ruby/object:Gem::Version
102
+ segments:
103
+ - 0
86
104
  version: "0"
87
- version:
88
105
  requirements: []
89
106
 
90
107
  rubyforge_project:
91
- rubygems_version: 1.3.5
108
+ rubygems_version: 1.3.6
92
109
  signing_key:
93
110
  specification_version: 2
94
111
  summary: Another state machine for ActiveRecord
@@ -1 +0,0 @@
1
- require 'statelogic'