serializable_decorator 0.0.2 → 0.0.3

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/Gemfile CHANGED
@@ -8,3 +8,7 @@ group :test do
8
8
  gem 'spork'
9
9
  gem 'autotest'
10
10
  end
11
+
12
+ group :development do
13
+ gem 'pry'
14
+ end
@@ -44,7 +44,17 @@ class SerializableDecorator < Delegator
44
44
  __getobj__.instance_variable_get(name) || super
45
45
  end
46
46
 
47
+ def as_json
48
+ if __getobj__.respond_to?(:as_json) then
49
+ delegator_instance_vars = Delegator.instance_method(:instance_variables).bind(self).call
50
+ json_hash = Hash[delegator_instance_vars.map { | name | [name.to_s[1..-1], instance_variable_get(name) ] } ]
51
+ json_hash.merge!(__getobj__.as_json)
52
+ else
53
+ instance_values
54
+ end
55
+ end
56
+
47
57
  def to_json
48
- instance_values.to_json
58
+ as_json.to_json
49
59
  end
50
60
  end
@@ -1,5 +1,5 @@
1
1
  module Delegators
2
2
  module SerializableDecorator
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
@@ -4,6 +4,13 @@ class Test
4
4
  attr_accessor :foo
5
5
  end
6
6
 
7
+ class TestJson < Test
8
+ attr_accessor :quux
9
+ def as_json
10
+ { extra: "baz", foo: @foo }
11
+ end
12
+ end
13
+
7
14
  class TestDecorator < SerializableDecorator
8
15
  attr_accessor :bar
9
16
  end
@@ -11,6 +18,7 @@ end
11
18
  describe SerializableDecorator do
12
19
  before(:each) do
13
20
  @td = TestDecorator.new(Test.new)
21
+ @tdj = TestDecorator.new(TestJson.new)
14
22
  end
15
23
 
16
24
  it "Original attributes are still available" do
@@ -75,4 +83,12 @@ describe SerializableDecorator do
75
83
  it "Should not include any extraneous entries in the JSON output" do
76
84
  @td.to_json.should == "{}"
77
85
  end
86
+
87
+ it "Should use the decorated object's as_json if it exists" do
88
+ @tdj.foo = 12
89
+ @tdj.bar = 13
90
+ @tdj.to_json.should include('"foo":12')
91
+ @tdj.to_json.should include('"bar":13')
92
+ @tdj.to_json.should include('"extra":"baz"')
93
+ end
78
94
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serializable_decorator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
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-06-22 00:00:00.000000000 Z
12
+ date: 2012-07-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json