maintain 0.2.23 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -88,7 +88,8 @@ module Maintain
88
88
  self == #{value_name.inspect}
89
89
  end
90
90
  EOC
91
- # Calling `method` on ourselves fails. Something to do w/subclasses. Meh.
91
+ # Calling `method` on ourselves fails. Something to do
92
+ # w/subclasses. Meh.
92
93
  return self == value_name
93
94
  when '!'
94
95
  self.class.class_eval <<-EOC
@@ -125,7 +126,7 @@ module Maintain
125
126
  end
126
127
 
127
128
  def state_value_for(state, value)
128
- if (state.is_a?(String) || state.is_a?(Symbol))
129
+ if state.is_a?(String) || state.is_a?(Symbol)
129
130
  if !state.to_s.strip.empty? && state_hash = @state.states[state.to_sym]
130
131
  state_hash[value]
131
132
  else
@@ -136,4 +137,4 @@ module Maintain
136
137
  end
137
138
  end
138
139
  end
139
- end
140
+ end
@@ -1,34 +1,21 @@
1
1
  # Some specs to check against ActiveRecord conflicts. Rails tends to blow
2
2
  # shit up when you build it outside of Rails. We'll see how this goes...
3
3
 
4
- proceed = false
5
- begin
6
- require 'rubygems'
7
- gem 'activerecord', '>= 2.3.5'
8
- require 'active_record'
9
- require 'logger'
10
- proceed = true
11
- ActiveRecord::Base.logger = Logger.new(STDOUT)
12
- ActiveRecord::Base.logger.level = Logger::Severity::UNKNOWN
13
- rescue Gem::LoadError, LoadError
14
- puts 'Not testing ActiveRecord (unavailable)'
15
- end
16
-
17
- if proceed
18
- # Use load to have it evaluate the ActiveRecord::Base extension logic again, in the event
19
- # that we've already done that with a previous test.
4
+ active_record_tests = lambda do |version|
5
+ # Use load to have it evaluate the ActiveRecord::Base extension logic again,
6
+ # in the event that we've already done that with a previous test.
20
7
  load 'maintain.rb'
21
- describe Maintain, "ActiveRecord::Base" do
8
+ describe Maintain, "ActiveRecord::Base version #{version}" do
22
9
  it "should automatically be extended" do
23
10
  ActiveRecord::Base.should respond_to(:maintain)
24
11
  end
25
12
 
26
13
  before :each do
27
- ActiveRecord::Base.establish_connection({:adapter => 'sqlite3', :database => ':memory:', :pool => 5, :timeout => 5000})
14
+ ActiveRecord::Base.establish_connection({adapter: 'sqlite3', database: ':memory:', pool: 5, timeout: 5000})
28
15
  class ::ActiveMaintainTest < ActiveRecord::Base; end
29
16
  silence_stream(STDOUT) do
30
17
  ActiveRecord::Schema.define do
31
- create_table :active_maintain_tests, :force => true do |t|
18
+ create_table :active_maintain_tests, force: true do |t|
32
19
  t.string :status
33
20
  t.integer :permissions
34
21
  end
@@ -39,12 +26,12 @@ if proceed
39
26
  describe "accessors" do
40
27
  before :all do
41
28
  ActiveMaintainTest.maintain :status do
42
- state :new, :default => true
29
+ state :new, default: true
43
30
  state :old
44
31
  state :foo
45
32
  state :bar
46
- aggregate :everything, :as => [:new, :old, :foo, :bar]
47
- aggregate :fakes, :as => [:foo, :bar]
33
+ aggregate :everything, as: [:new, :old, :foo, :bar]
34
+ aggregate :fakes, as: [:foo, :bar]
48
35
  end
49
36
  end
50
37
 
@@ -54,7 +41,7 @@ if proceed
54
41
  end
55
42
 
56
43
  it "should allow us to update its status to 'old'" do
57
- active_maintain_test = ActiveMaintainTest.new(:status => 'old')
44
+ active_maintain_test = ActiveMaintainTest.new(status: 'old')
58
45
  active_maintain_test.status.should == 'old'
59
46
  lambda {
60
47
  active_maintain_test.save!
@@ -64,7 +51,7 @@ if proceed
64
51
 
65
52
  it "should allow us to update statuses using update_attributes" do
66
53
  active_maintain_test = ActiveMaintainTest.new
67
- active_maintain_test.update_attributes(:status => :bar)
54
+ active_maintain_test.update_attributes(status: :bar)
68
55
  ActiveMaintainTest.first.status.should == :bar
69
56
  end
70
57
 
@@ -75,66 +62,73 @@ if proceed
75
62
  end
76
63
 
77
64
  it "should return the correct name when told to" do
78
- active_maintain_test = ActiveMaintainTest.create(:status => 'old')
65
+ ActiveMaintainTest.create!(status: 'old')
79
66
  ActiveMaintainTest.first.status.name.should == 'old'
80
67
  end
68
+
69
+ it "sets the value with a bang method" do
70
+ active_maintain_test = ActiveMaintainTest.create!
71
+ active_maintain_test.bar!
72
+ active_maintain_test.save!
73
+ ActiveMaintainTest.first.status.should == :bar
74
+ end
81
75
  end
82
76
 
83
77
  describe "bitmasks" do
84
78
  before :all do
85
- ActiveMaintainTest.maintain :permissions, :bitmask => true do
79
+ ActiveMaintainTest.maintain :permissions, bitmask: true do
86
80
  state :add, 0
87
81
  state :delete, 1
88
82
  state :foo, 2
89
83
  state :bar, 3
90
84
 
91
- aggregate :everything, :as => [:new, :old, :foo, :bar]
92
- aggregate :fakes, :as => [:foo, :bar]
85
+ aggregate :everything, as: [:new, :old, :foo, :bar]
86
+ aggregate :fakes, as: [:foo, :bar]
93
87
  end
94
88
  end
95
89
 
96
90
  it "should allow me to set a bitmask value" do
97
- active_maintain_test = ActiveMaintainTest.create(:permissions => 'add')
98
- ActiveMaintainTest.last.permissions.add?.should be_true
91
+ active_maintain_test = ActiveMaintainTest.create(permissions: 'add')
92
+ active_maintain_test.permissions.add?.should be_true
99
93
  end
100
94
 
101
95
  it "should allow me to set multiple bitmask values" do
102
- active_maintain_test = ActiveMaintainTest.create(:permissions => ['add', 'delete'])
103
- ActiveMaintainTest.last.permissions.add?.should be_true
104
- ActiveMaintainTest.last.permissions.delete?.should be_true
96
+ active_maintain_test = ActiveMaintainTest.create(permissions: ['add', 'delete'])
97
+ active_maintain_test.permissions.add?.should be_true
98
+ active_maintain_test.permissions.delete?.should be_true
105
99
  end
106
100
 
107
101
  it "should allow me to set a blank string as bitmask values" do
108
- active_maintain_test = ActiveMaintainTest.create(:permissions => '')
109
- ActiveMaintainTest.last.permissions.should == 0
102
+ active_maintain_test = ActiveMaintainTest.create(permissions: '')
103
+ active_maintain_test.permissions.should == 0
110
104
  end
111
105
 
112
106
  it "should allow me to set an empty array as bitmask values" do
113
- active_maintain_test = ActiveMaintainTest.create(:permissions => [])
114
- ActiveMaintainTest.last.permissions.should == 0
107
+ active_maintain_test = ActiveMaintainTest.create(permissions: [])
108
+ active_maintain_test.permissions.should == 0
115
109
  end
116
110
 
117
111
  it "should allow me to set an array with empty strings as bitmask values" do
118
- active_maintain_test = ActiveMaintainTest.create(:permissions => [''])
119
- ActiveMaintainTest.last.permissions.should == 0
112
+ active_maintain_test = ActiveMaintainTest.create(permissions: [''])
113
+ active_maintain_test.permissions.should == 0
120
114
  end
121
115
  end
122
116
 
123
117
  describe "hooks" do
124
118
  before :all do
125
119
  ActiveMaintainTest.maintain :status do
126
- state :new, :default => true
120
+ state :new, default: true
127
121
  state :old
128
122
  state :foo
129
123
  state :bar
130
- aggregate :everything, :as => [:new, :old, :foo, :bar]
131
- aggregate :fakes, :as => [:foo, :bar]
124
+ aggregate :everything, as: [:new, :old, :foo, :bar]
125
+ aggregate :fakes, as: [:foo, :bar]
132
126
 
133
127
  on :enter, :old, :do_something
134
128
  on :exit, :foo, :do_something_else
135
- on :enter, :bar, lambda { hello! }, :if => :run_hello?
136
- on :exit, :bar, lambda { hello! }, :unless => :run_hello?
137
- on :enter, :bar, :show_my_id, :after => true
129
+ on :enter, :bar, lambda { hello! }, if: :run_hello?
130
+ on :exit, :bar, lambda { hello! }, unless: :run_hello?
131
+ on :enter, :bar, :show_my_id, after: true
138
132
  end
139
133
 
140
134
  ActiveMaintainTest.class_eval do
@@ -147,11 +141,11 @@ if proceed
147
141
  end
148
142
 
149
143
  def hello!
150
-
144
+
151
145
  end
152
146
 
153
147
  def run_hello!
154
- @run_hello = !@run_hello# ? false : true
148
+ @run_hello = !@run_hello
155
149
  end
156
150
 
157
151
  def run_hello?
@@ -159,7 +153,7 @@ if proceed
159
153
  end
160
154
 
161
155
  def show_my_id
162
- puts id
156
+ logger.info id
163
157
  end
164
158
  end
165
159
  end
@@ -202,7 +196,7 @@ if proceed
202
196
  end
203
197
 
204
198
  it "should not run the :bar exit hook if run_hello? returns true" do
205
- active_maintain_test = ActiveMaintainTest.create(:status => :bar)
199
+ active_maintain_test = ActiveMaintainTest.create(status: :bar)
206
200
  active_maintain_test.run_hello!
207
201
  active_maintain_test.run_hello?.should be_true
208
202
  active_maintain_test.should_not_receive(:hello!)
@@ -211,7 +205,7 @@ if proceed
211
205
  end
212
206
 
213
207
  it "should run the :bar exit hook if run_hello? returns false" do
214
- active_maintain_test = ActiveMaintainTest.create(:status => :bar)
208
+ active_maintain_test = ActiveMaintainTest.create(status: :bar)
215
209
  active_maintain_test.run_hello?.should be_false
216
210
  active_maintain_test.should_receive(:hello!)
217
211
  active_maintain_test.status = :foo
@@ -219,9 +213,9 @@ if proceed
219
213
  end
220
214
 
221
215
  it "should ONLY run the :bar / :show_my_id exit hook AFTER the record is saved" do
222
- active_maintain_test = ActiveMaintainTest.new(:status => :foo)
216
+ active_maintain_test = ActiveMaintainTest.new(status: :foo)
223
217
  active_maintain_test.status = :bar
224
- active_maintain_test.should_receive(:puts).with(1)
218
+ ActiveRecord::Base.logger.should_receive(:info).with(1)
225
219
  active_maintain_test.save!
226
220
  end
227
221
  end
@@ -229,12 +223,12 @@ if proceed
229
223
  describe "named_scopes" do
230
224
  before :all do
231
225
  ActiveMaintainTest.maintain :status do
232
- state :new, :default => true
226
+ state :new, default: true
233
227
  state :old
234
228
  state :foo
235
229
  state :bar
236
- aggregate :everything, :as => [:new, :old, :foo, :bar]
237
- aggregate :fakes, :as => [:foo, :bar]
230
+ aggregate :everything, as: [:new, :old, :foo, :bar]
231
+ aggregate :fakes, as: [:foo, :bar]
238
232
  end
239
233
  end
240
234
 
@@ -250,10 +244,10 @@ if proceed
250
244
 
251
245
  it "should return the correct collections on aggregates" do
252
246
  ActiveMaintainTest.destroy_all
253
- one = ActiveMaintainTest.create(:status => :foo)
254
- two = ActiveMaintainTest.create(:status => :bar)
255
- three = ActiveMaintainTest.create(:status => :new)
256
- four = ActiveMaintainTest.create(:status => :old)
247
+ one = ActiveMaintainTest.create(status: :foo)
248
+ two = ActiveMaintainTest.create(status: :bar)
249
+ three = ActiveMaintainTest.create(status: :new)
250
+ four = ActiveMaintainTest.create(status: :old)
257
251
  ActiveMaintainTest.fakes.should == [one, two]
258
252
  ActiveMaintainTest.everything.should == [one, two, three, four]
259
253
  end
@@ -263,21 +257,39 @@ if proceed
263
257
  describe "serialization" do
264
258
  before :all do
265
259
  ActiveMaintainTest.maintain :status do
266
- state :new, :default => true
260
+ state :new, default: true
267
261
  state :old
268
262
  state :foo
269
263
  state :bar
270
- aggregate :everything, :as => [:new, :old, :foo, :bar]
271
- aggregate :fakes, :as => [:foo, :bar]
264
+ aggregate :everything, as: [:new, :old, :foo, :bar]
265
+ aggregate :fakes, as: [:foo, :bar]
272
266
  end
273
267
  end
274
268
 
275
269
  it "should not screw with to_json" do
276
270
  foo = ActiveMaintainTest.create
277
- json_hash = {:active_maintain_test => {:id => foo.id, :permissions => 0, :status => :new}.stringify_keys}.stringify_keys
271
+ json_hash = {id: foo.id, permissions: 0, status: :new}.stringify_keys
278
272
  foo.as_json.should == json_hash
279
273
  json_hash.to_json.should == json_hash.to_json
280
274
  end
281
275
  end
282
276
  end
283
277
  end
278
+
279
+ active_record_versions = ENV["VERSIONS"] && ENV["VERSIONS"].split(",") || %w(2 3 4)
280
+ require 'rubygems'
281
+ active_record_versions.each do |version|
282
+ begin
283
+ gem 'activerecord', "< #{version.to_i + 1}"
284
+ require 'active_record'
285
+ require 'logger'
286
+ ActiveRecord::Base.logger = Logger.new(STDOUT)
287
+ ActiveRecord::Base.logger.level = Logger::Severity::UNKNOWN
288
+ ActiveRecord::Base.include_root_in_json = false
289
+ puts "Testing ActiveRecord version #{version}"
290
+ active_record_tests.call(version)
291
+ rescue Gem::LoadError, LoadError
292
+ puts "Cannot test ActiveRecord #{version} (unavailable)"
293
+ end
294
+ end
295
+
@@ -12,9 +12,9 @@ describe Maintain do
12
12
 
13
13
  describe "bitmask", "class methods" do
14
14
  it "should allow multiple defaults" do
15
- MaintainTest.maintain :permissions, :bitmask => true do
16
- state :edit, 1, :default => true
17
- state :delete, 2, :default => true
15
+ MaintainTest.maintain :permissions, bitmask: true do
16
+ state :edit, 1, default: true
17
+ state :delete, 2, default: true
18
18
  state :update, 3
19
19
  end
20
20
  @maintainer = MaintainTest.new
@@ -26,7 +26,7 @@ describe Maintain do
26
26
 
27
27
  describe "bitmask", "instance methods" do
28
28
  before :each do
29
- MaintainTest.maintain :permissions, :bitmask => true do
29
+ MaintainTest.maintain :permissions, bitmask: true do
30
30
  state :edit, 1
31
31
  state :delete, 2
32
32
  state :update, 3
@@ -21,7 +21,7 @@ describe Maintain do
21
21
  end
22
22
 
23
23
  it "should provide a hash of key/value stores in an Integer case, too" do
24
- MaintainTest.maintain :state_two, :integer => true do
24
+ MaintainTest.maintain :state_two, integer: true do
25
25
  state :new, 1
26
26
  state :overdue, 2
27
27
  state :closed, 3
@@ -42,4 +42,4 @@ describe Maintain do
42
42
  MaintainTest.foo.should == "foo"
43
43
  MaintainTest.maintain_foo.should == [:new, :overdue, :closed]
44
44
  end
45
- end
45
+ end
@@ -17,7 +17,7 @@ describe Maintain do
17
17
 
18
18
  extend Maintain
19
19
 
20
- maintains :state, :default => :new do
20
+ maintains :state, default: :new do
21
21
  state :new
22
22
  state :overdue
23
23
  state :closed
@@ -28,7 +28,7 @@ describe Maintain do
28
28
  describe "testing" do
29
29
  describe "string states" do
30
30
  before :each do
31
- MaintainTest.maintain :state, :default => :new do
31
+ MaintainTest.maintain :state, default: :new do
32
32
  state :new
33
33
  state :overdue
34
34
  state :closed
@@ -48,7 +48,7 @@ describe Maintain do
48
48
  describe "boolean methods" do
49
49
  describe "on the accessor" do
50
50
  it "should work" do
51
- MaintainTest.maintain :state, :default => :new do
51
+ MaintainTest.maintain :state, default: :new do
52
52
  state :new
53
53
  state :overdue
54
54
  state :closed
@@ -69,7 +69,7 @@ describe Maintain do
69
69
 
70
70
  describe "on the class itself" do
71
71
  it "should work, too" do
72
- MaintainTest.maintain :state, :default => :new do
72
+ MaintainTest.maintain :state, default: :new do
73
73
  state :new
74
74
  state :overdue
75
75
  state :closed
@@ -81,7 +81,7 @@ describe Maintain do
81
81
  end
82
82
 
83
83
  it "should work with an attribute name prefix, too!" do
84
- MaintainTest.maintain :state, :default => :new do
84
+ MaintainTest.maintain :state, default: :new do
85
85
  state :new
86
86
  state :overdue
87
87
  state :closed
@@ -99,7 +99,7 @@ describe Maintain do
99
99
  end
100
100
 
101
101
  it "greater than method" do
102
- MaintainTest.maintain :state, :default => :closed do
102
+ MaintainTest.maintain :state, default: :closed do
103
103
  state :new
104
104
  state :overdue
105
105
  state :closed
@@ -116,7 +116,7 @@ describe Maintain do
116
116
  end
117
117
 
118
118
  it "greater-than-or-equal-to method" do
119
- MaintainTest.maintain :state, :default => :closed do
119
+ MaintainTest.maintain :state, default: :closed do
120
120
  state :new
121
121
  state :overdue
122
122
  state :closed
@@ -130,7 +130,7 @@ describe Maintain do
130
130
  end
131
131
 
132
132
  it "less-than-or-equal-to method" do
133
- MaintainTest.maintain :state, :default => :new do
133
+ MaintainTest.maintain :state, default: :new do
134
134
  state :new
135
135
  state :overdue
136
136
  state :closed
@@ -147,7 +147,7 @@ describe Maintain do
147
147
 
148
148
  describe "identity comparison" do
149
149
  before :each do
150
- MaintainTest.maintain :state, :default => :new do
150
+ MaintainTest.maintain :state, default: :new do
151
151
  state :new, 1
152
152
  state :overdue, 2
153
153
  state :closed, 3
@@ -172,7 +172,7 @@ describe Maintain do
172
172
 
173
173
  describe "integer states" do
174
174
  before :each do
175
- MaintainTest.maintain :state, :default => :new do
175
+ MaintainTest.maintain :state, default: :new do
176
176
  state :new, 1
177
177
  state :overdue, 2
178
178
  state :closed, 3
@@ -188,7 +188,7 @@ describe Maintain do
188
188
  end
189
189
 
190
190
  it "greater than method" do
191
- MaintainTest.maintain :state, :default => :closed do
191
+ MaintainTest.maintain :state, default: :closed do
192
192
  state :new, 1
193
193
  state :overdue, 2
194
194
  state :closed, 3
@@ -205,7 +205,7 @@ describe Maintain do
205
205
  end
206
206
 
207
207
  it "greater-than-or-equal-to method" do
208
- MaintainTest.maintain :state, :default => :closed do
208
+ MaintainTest.maintain :state, default: :closed do
209
209
  state :new, 1
210
210
  state :overdue, 2
211
211
  state :closed, 3
@@ -219,7 +219,7 @@ describe Maintain do
219
219
  end
220
220
 
221
221
  it "less-than-or-equal-to method" do
222
- MaintainTest.maintain :state, :default => :new do
222
+ MaintainTest.maintain :state, default: :new do
223
223
  state :new, 1
224
224
  state :overdue, 2
225
225
  state :closed, 3
@@ -233,4 +233,4 @@ describe Maintain do
233
233
  end
234
234
  end
235
235
  end
236
- end
236
+ end