maintain 0.1.5 → 0.1.6
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 +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: []
|