ridley 0.2.0 → 0.2.1

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.
@@ -5,6 +5,7 @@ module Ridley
5
5
  include ActiveModel::AttributeMethods
6
6
  include ActiveModel::Validations
7
7
  include ActiveModel::Serializers::JSON
8
+ include Comparable
8
9
 
9
10
  included do
10
11
  attribute_method_suffix('=')
@@ -287,15 +288,23 @@ module Ridley
287
288
  # @param [Object] other
288
289
  #
289
290
  # @return [Boolean]
291
+ def <=>(other)
292
+ self.chef_id <=> other.chef_id
293
+ end
294
+
290
295
  def ==(other)
291
- self.attributes == other.attributes
296
+ self.chef_id == other.chef_id
292
297
  end
293
298
 
294
299
  # @param [Object] other
295
300
  #
296
301
  # @return [Boolean]
297
302
  def eql?(other)
298
- other.is_a?(self.class) && send(:==, other)
303
+ self.class == other.class && self == other
304
+ end
305
+
306
+ def hash
307
+ self.chef_id.hash
299
308
  end
300
309
 
301
310
  private
@@ -1,3 +1,3 @@
1
1
  module Ridley
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -211,4 +211,86 @@ describe Ridley::Resource do
211
211
  subject.attributes[:name].should eql("reset")
212
212
  end
213
213
  end
214
+
215
+ describe "comparable" do
216
+ subject do
217
+ Class.new do
218
+ include Ridley::Resource
219
+
220
+ set_chef_id "name"
221
+
222
+ attribute "name"
223
+ attribute "other_extra"
224
+ attribute "extra"
225
+ end
226
+ end
227
+
228
+ let(:one) { subject.new(connection) }
229
+ let(:two) { subject.new(connection) }
230
+
231
+ context "given two objects with the same value for their 'chef_id'" do
232
+ before(:each) do
233
+ one.attributes = { name: "reset", other_extra: "stuff" }
234
+ two.attributes = { name: "reset", extra: "stuff" }
235
+ end
236
+
237
+ it "is equal" do
238
+ one.should be_eql(two)
239
+ end
240
+ end
241
+
242
+ context "given two objects with different values for their 'chef_id'" do
243
+ before(:each) do
244
+ one.attributes = { name: "jamie", other_extra: "stuff" }
245
+ two.attributes = { name: "winsor", extra: "stuff" }
246
+ end
247
+
248
+ it "is not equal" do
249
+ one.should_not be_eql(two)
250
+ end
251
+ end
252
+ end
253
+
254
+ describe "uniqueness" do
255
+ subject do
256
+ Class.new do
257
+ include Ridley::Resource
258
+
259
+ set_chef_id "name"
260
+
261
+ attribute "name"
262
+ attribute "other_extra"
263
+ attribute "extra"
264
+ end
265
+ end
266
+
267
+ let(:one) { subject.new(connection) }
268
+ let(:two) { subject.new(connection) }
269
+
270
+ context "given an array of objects with the same value for their 'chef_id'" do
271
+ let(:nodes) do
272
+ one.attributes = { name: "reset", other_extra: "stuff" }
273
+ two.attributes = { name: "reset", extra: "stuff" }
274
+
275
+ [ one, two ]
276
+ end
277
+
278
+ it "returns only one unique element" do
279
+ nodes.uniq.should have(1).item
280
+ end
281
+ end
282
+
283
+ context "given an array of objects with different values for their 'chef_id'" do
284
+ let(:nodes) do
285
+ one.attributes = { name: "jamie", other_extra: "stuff" }
286
+ two.attributes = { name: "winsor", extra: "stuff" }
287
+
288
+ [ one, two ]
289
+ end
290
+
291
+ it "returns all of the elements" do
292
+ nodes.uniq.should have(2).item
293
+ end
294
+ end
295
+ end
214
296
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ridley
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-11 00:00:00.000000000 Z
12
+ date: 2012-10-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: chozo
@@ -434,7 +434,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
434
434
  version: '0'
435
435
  segments:
436
436
  - 0
437
- hash: 1117487299346141240
437
+ hash: -1603548164029238966
438
438
  requirements: []
439
439
  rubyforge_project:
440
440
  rubygems_version: 1.8.23