representable 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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