representable 1.3.0 → 1.3.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.
@@ -1,3 +1,7 @@
1
+ h2. 1.3.1
2
+
3
+ * Bringing back `:as`. For some strange reasons "we" lost that commit from @csexton!!!
4
+
1
5
  h2. 1.3.0
2
6
 
3
7
  * Remove @:exclude@ option.
data/README.md CHANGED
@@ -454,8 +454,7 @@ Since representable-1.2 `false` values _are_ considered when parsing and renderi
454
454
 
455
455
  If you want `nil` values to be included when rendering, use the `:render_nil` option.
456
456
 
457
- property :track, render_nil: true
458
-
457
+ property :track, render_nil: true
459
458
 
460
459
  ## Coercion
461
460
 
@@ -469,7 +468,6 @@ Use the `:type` option to specify the conversion target. Note that `:default` st
469
468
 
470
469
  module SongRepresenter
471
470
  include Representable::JSON
472
- include Virtus
473
471
  include Representable::Coercion
474
472
 
475
473
  property :title
@@ -36,7 +36,7 @@ module Representable
36
36
  end
37
37
 
38
38
  def from
39
- (options[:from] || name).to_s
39
+ (options[:from] || options[:as] || name).to_s
40
40
  end
41
41
 
42
42
  def default_for(value)
@@ -1,3 +1,3 @@
1
1
  module Representable
2
- VERSION = "1.3.0"
2
+ VERSION = "1.3.1"
3
3
  end
@@ -25,9 +25,7 @@ class VirtusCoercionTest < MiniTest::Spec
25
25
 
26
26
  describe "on class level" do
27
27
  class ImmigrantSong
28
- attr_accessor :track
29
28
  include Representable::JSON
30
- include Virtus
31
29
  include Representable::Coercion
32
30
 
33
31
  property :composed_at, :type => DateTime, :default => "May 12th, 2012"
@@ -35,8 +33,6 @@ class VirtusCoercionTest < MiniTest::Spec
35
33
  end
36
34
 
37
35
  it "coerces into the provided type" do
38
- skip "Virtus is still not correctly treating coercion on class level?"
39
-
40
36
  song = ImmigrantSong.new.from_json("{\"composed_at\":\"November 18th, 1983\",\"track\":\"18\"}")
41
37
  assert_equal DateTime.parse("Fri, 18 Nov 1983 00:00:00 +0000"), song.composed_at
42
38
  assert_equal 18, song.track
@@ -286,6 +286,24 @@ module JsonTest
286
286
  end
287
287
  end
288
288
 
289
+ describe ":as => :songName" do
290
+ class Song
291
+ include Representable::JSON
292
+ property :name, :as => :songName
293
+ attr_accessor :name
294
+ end
295
+
296
+ it "respects :as in #from_json" do
297
+ song = Song.from_json({:songName => "Run To The Hills"}.to_json)
298
+ assert_equal "Run To The Hills", song.name
299
+ end
300
+
301
+ it "respects :as in #to_json" do
302
+ song = Song.new; song.name = "22 Acacia Avenue"
303
+ assert_json '{"songName":"22 Acacia Avenue"}', song.to_json
304
+ end
305
+ end
306
+
289
307
  describe ":default => :value" do
290
308
  before do
291
309
  @Album = Class.new do
@@ -417,29 +435,35 @@ end
417
435
 
418
436
  class HashTest < MiniTest::Spec
419
437
  describe "hash :songs" do
420
- before do
421
- representer = Module.new do
422
- include Representable::JSON
423
- hash :songs
424
- end
425
-
426
- class SongList
427
- attr_accessor :songs
428
- end
429
-
430
- @list = SongList.new.extend(representer)
438
+ representer!(Representable::JSON) do
439
+ hash :songs
431
440
  end
432
441
 
442
+ subject { OpenStruct.new.extend(representer) }
443
+
433
444
  it "renders with #to_json" do
434
- @list.songs = {:one => "65", :two => "Emo Boy"}
435
- assert_json "{\"songs\":{\"one\":\"65\",\"two\":\"Emo Boy\"}}", @list.to_json
445
+ subject.songs = {:one => "65", :two => "Emo Boy"}
446
+ assert_json "{\"songs\":{\"one\":\"65\",\"two\":\"Emo Boy\"}}", subject.to_json
436
447
  end
437
448
 
438
449
  it "parses with #from_json" do
439
- assert_equal({"one" => "65", "two" => ["Emo Boy"]}, @list.from_json("{\"songs\":{\"one\":\"65\",\"two\":[\"Emo Boy\"]}}").songs)
450
+ assert_equal({"one" => "65", "two" => ["Emo Boy"]}, subject.from_json("{\"songs\":{\"one\":\"65\",\"two\":[\"Emo Boy\"]}}").songs)
440
451
  end
441
452
  end
442
453
 
454
+ describe "hash :songs, :class => Song" do
455
+ representer!(Representable::JSON) do
456
+ hash :songs, :extend => Module.new { include Representable::JSON; property :name }, :class => Song
457
+ end
458
+
459
+ it "renders" do
460
+ OpenStruct.new(:songs => {"7" => Song.new("Contemplation")}).extend(representer).to_hash.must_equal("songs"=>{"7"=>{"name"=>"Contemplation"}})
461
+ end
462
+
463
+ it "parses" do
464
+ OpenStruct.new.extend(representer).from_hash("songs"=>{"7"=>{"name"=>"Contemplation"}}).songs.must_equal({"7"=>Song.new("Contemplation")})
465
+ end
466
+ end
443
467
  end
444
468
 
445
469
 
@@ -161,6 +161,11 @@ class RepresentableTest < MiniTest::Spec
161
161
  band = Class.new(Band) { property :friends, :from => :friend }
162
162
  assert_equal "friend", band.representable_attrs.last.from
163
163
  end
164
+
165
+ it "can be set explicitly with as" do
166
+ band = Class.new(Band) { property :friends, :as => :friend }
167
+ assert_equal "friend", band.representable_attrs.last.from
168
+ end
164
169
 
165
170
  it "is infered from the name implicitly" do
166
171
  band = Class.new(Band) { property :friends }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: representable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.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: 2013-01-23 00:00:00.000000000 Z
12
+ date: 2013-01-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri