maintain 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/maintain/maintainer.rb +12 -3
- data/lib/maintain.rb +13 -10
- data/maintain.gemspec +4 -3
- data/spec/active_record_spec.rb +4 -3
- data/spec/comparing_state_spec.rb +13 -13
- data/spec/spec.opts +1 -0
- metadata +4 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.6
|
data/lib/maintain/maintainer.rb
CHANGED
@@ -20,7 +20,12 @@ module Maintain
|
|
20
20
|
end
|
21
21
|
# Now define the state
|
22
22
|
if @active_record && method_free?(name, true)
|
23
|
-
|
23
|
+
conditions = {:conditions => {@attribute => options.map{|value| states[value]}}}
|
24
|
+
if defined?(ActiveRecord::VERSION) && ActiveRecord::VERSION::STRING >= "3"
|
25
|
+
maintainee.scope name, conditions
|
26
|
+
else
|
27
|
+
maintainee.named_scope name, conditions
|
28
|
+
end
|
24
29
|
end
|
25
30
|
end
|
26
31
|
|
@@ -105,8 +110,12 @@ module Maintain
|
|
105
110
|
states[name] = {:compare_value => !@bitmask && value.is_a?(Integer) ? value : @increment, :value => value}
|
106
111
|
@increment += 1
|
107
112
|
if @active_record && !maintainee.respond_to?(name)
|
108
|
-
conditions = {}
|
109
|
-
|
113
|
+
conditions = {:conditions => {@attribute => value.is_a?(Symbol) ? value.to_s : value}}
|
114
|
+
if defined?(ActiveRecord::VERSION) && ActiveRecord::VERSION::STRING >= "3"
|
115
|
+
maintainee.scope name, conditions
|
116
|
+
else
|
117
|
+
maintainee.named_scope name, conditions
|
118
|
+
end
|
110
119
|
end
|
111
120
|
|
112
121
|
# Now we're going to add proxies to test for state. These methods only get added if a
|
data/lib/maintain.rb
CHANGED
@@ -54,23 +54,25 @@ module Maintain
|
|
54
54
|
# If we can find the maintainer on this attribute, we'll use it to set values.
|
55
55
|
if maintainer = self.class.maintainers[#{attribute.to_sym.inspect}]
|
56
56
|
# First, we instantiate a value on this maintainer if we haven't already
|
57
|
-
@#{attribute} ||= maintainer.value
|
57
|
+
# @#{attribute} ||= maintainer.value#{"(read_attribute(:#{attribute}))" if active_record}
|
58
58
|
|
59
59
|
# Then run the exit hook if we're changing the value
|
60
|
-
maintainer.hook(:exit,
|
60
|
+
maintainer.hook(:exit, #{attribute}.value, self)
|
61
61
|
|
62
62
|
# Then set the value itself. Maintainer::State will return the value you set,
|
63
63
|
# so if we're setting to nil we get rid of the attribute entirely - it's not
|
64
64
|
# needed and we want the getter to return nil in that case.
|
65
|
-
unless
|
66
|
-
|
67
|
-
|
65
|
+
# unless
|
66
|
+
#{attribute}.set_value(value)
|
67
|
+
# @#{attribute} = nil
|
68
|
+
# Nevermind - all of our test methods rely on that attribute existing, no
|
69
|
+
# matter what (e.g. maintain(:state) { state :one } and calling "one?" will
|
70
|
+
# throw an error if we null out our maintainer)
|
71
|
+
# end#{%{
|
68
72
|
|
69
73
|
# If this is ActiveRecord::Base or a subclass of it, we'll make sure calling the
|
70
74
|
# setter writes a DB-friendly value.
|
71
|
-
|
72
|
-
write_attribute(:#{attribute}, @#{attribute} ? @#{attribute}.value.to_s : nil)
|
73
|
-
end
|
75
|
+
write_attribute(#{attribute.to_s.inspect}, @#{attribute} ? @#{attribute}.value.to_s : nil)
|
74
76
|
} if active_record}
|
75
77
|
|
76
78
|
# Last but not least, run the enter hooks for the new value - cause that's how we
|
@@ -96,9 +98,10 @@ module Maintain
|
|
96
98
|
# If'n it doesn't already exist AND this maintained attribute has a default value (and
|
97
99
|
# bitmasks must have at least a 0 value), we'll instantiate a Maintainer::State and return
|
98
100
|
# it.
|
99
|
-
if self.class.maintainers[#{attribute.to_sym.inspect}].default? || self.class.maintainers[#{attribute.to_sym.inspect}].bitmask?#{" || attributes['#{attribute}']" if active_record}
|
101
|
+
# if self.class.maintainers[#{attribute.to_sym.inspect}].default? || self.class.maintainers[#{attribute.to_sym.inspect}].bitmask?#{" || attributes['#{attribute}']" if active_record}
|
102
|
+
# Always return a State, no matter what
|
100
103
|
@#{attribute} = self.class.maintainers[#{attribute.to_sym.inspect}].value#{"(read_attribute(:#{attribute}))" if active_record}
|
101
|
-
end
|
104
|
+
# end
|
102
105
|
end
|
103
106
|
EOC
|
104
107
|
|
data/maintain.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{maintain}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Flip Sasser"]
|
12
|
-
s.date = %q{2010-04-
|
12
|
+
s.date = %q{2010-04-24}
|
13
13
|
s.description = %q{
|
14
14
|
Maintain is a simple state machine mixin for Ruby objects. It supports comparisons, bitmasks,
|
15
15
|
and hooks that really work. It can be used for multiple attributes and will always do its best to
|
@@ -38,7 +38,8 @@ Gem::Specification.new do |s|
|
|
38
38
|
"spec/maintain_spec.rb",
|
39
39
|
"spec/object_spec.rb",
|
40
40
|
"spec/proxy_spec.rb",
|
41
|
-
"spec/setting_state_spec.rb"
|
41
|
+
"spec/setting_state_spec.rb",
|
42
|
+
"spec/spec.opts"
|
42
43
|
]
|
43
44
|
s.homepage = %q{http://github.com/flipsasser/maintain}
|
44
45
|
s.rdoc_options = ["--charset=UTF-8"]
|
data/spec/active_record_spec.rb
CHANGED
@@ -4,9 +4,10 @@
|
|
4
4
|
proceed = false
|
5
5
|
begin
|
6
6
|
require 'rubygems'
|
7
|
+
gem 'activerecord', '2.3.5'
|
7
8
|
require 'active_record'
|
8
9
|
proceed = true
|
9
|
-
rescue LoadError
|
10
|
+
rescue Gem::LoadError, LoadError
|
10
11
|
puts 'Not testing ActiveRecord (unavailable)'
|
11
12
|
end
|
12
13
|
|
@@ -55,12 +56,12 @@ if proceed
|
|
55
56
|
describe "named_scopes" do
|
56
57
|
it "should create named_scopes for all states" do
|
57
58
|
ActiveMaintainTest.should respond_to(:old)
|
58
|
-
ActiveMaintainTest.old.should
|
59
|
+
ActiveMaintainTest.old.should respond_to(:each)
|
59
60
|
end
|
60
61
|
|
61
62
|
it "should create named_scopes for all aggregates" do
|
62
63
|
ActiveMaintainTest.should respond_to(:everything)
|
63
|
-
ActiveMaintainTest.everything.should
|
64
|
+
ActiveMaintainTest.everything.should respond_to(:each)
|
64
65
|
end
|
65
66
|
end
|
66
67
|
end
|
@@ -139,19 +139,19 @@ describe Maintain do
|
|
139
139
|
@maintainer = MaintainTest.new
|
140
140
|
end
|
141
141
|
|
142
|
-
it "should work with case statements" do
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
end
|
142
|
+
# it "should work with case statements" do
|
143
|
+
# result = case @maintainer.state
|
144
|
+
# when :overdue
|
145
|
+
# nil
|
146
|
+
# when :closed
|
147
|
+
# nil
|
148
|
+
# when :new
|
149
|
+
# "foo"
|
150
|
+
# else
|
151
|
+
# nil
|
152
|
+
# end
|
153
|
+
# result.should == "foo"
|
154
|
+
# end
|
155
155
|
end
|
156
156
|
|
157
157
|
describe "integer states" do
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 6
|
9
|
+
version: 0.1.6
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Flip Sasser
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-04-
|
17
|
+
date: 2010-04-24 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|
@@ -48,6 +48,7 @@ files:
|
|
48
48
|
- spec/object_spec.rb
|
49
49
|
- spec/proxy_spec.rb
|
50
50
|
- spec/setting_state_spec.rb
|
51
|
+
- spec/spec.opts
|
51
52
|
has_rdoc: true
|
52
53
|
homepage: http://github.com/flipsasser/maintain
|
53
54
|
licenses: []
|