delighted 1.4.0.rc1 → 1.4.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d8beec1cb9744f320e1fc4f9616446777b36310f
4
- data.tar.gz: 119d1aa1d03033a91984a59408d430a6bf45688b
3
+ metadata.gz: 0fa8281430a51548a8010a39f65cdafcdb70019e
4
+ data.tar.gz: c6c74bef892f5e83bfdb3019fe561480d51363d5
5
5
  SHA512:
6
- metadata.gz: 108ff82e7a3c7f4be0ade2b17d6319d197038952c169b2ad779cf729726944d0557cebea63d5a4c2c04d22dcadb9297cafd5cfb173742f1e30d6e4f1396dc2af
7
- data.tar.gz: 72efad36ac7309e3f232309badfdc1cb2ce81d66c59b0cfc3dbe51ca11e7cc850f0d3a09c77a9bb048fa598fe00308b5c76d08288830704625f9d3dc7d89d597
6
+ metadata.gz: b3650ee32960f335aa669eec0187dd96d800fba8a95e598cc96bac63247b9892c49a4de59823e592e172589b62d2d8a7d67ab44d2adfa1eaefcba3f9469b3e03
7
+ data.tar.gz: 0d78aa7a4f04ffd4ac9a7b23d79150466999e6b056027de9ba24cb9794ca8fc9fc51ffdc5f0b7363c27fbd41485ccbc37cd1cd72928f3c6bef302ddf0c2c05fb
data/USAGE.md CHANGED
@@ -96,7 +96,6 @@ survey_response4.save #=> #<Delighted::SurveyResponse:...>
96
96
  survey_responses_page_1 = Delighted::SurveyResponse.all
97
97
  survey_responses_page_2 = Delighted::SurveyResponse.all(:page => 2)
98
98
 
99
- ```ruby
100
99
  # List all survey responses, 20 per page, expanding person object
101
100
  survey_responses_page_1_expanded = Delighted::SurveyResponse.all(:expand => ['person'])
102
101
  survey_responses_page_1_expanded[0].person #=> #<Delighted::Person:...>
@@ -3,7 +3,8 @@ module Delighted
3
3
  REQUEST_CLASSES = {
4
4
  :get => Net::HTTP::Get,
5
5
  :post => Net::HTTP::Post,
6
- :delete => Net::HTTP::Delete
6
+ :delete => Net::HTTP::Delete,
7
+ :put => Net::HTTP::Put
7
8
  }
8
9
 
9
10
  def request(method, uri, headers = {}, data = nil)
@@ -11,8 +11,9 @@ module Delighted
11
11
 
12
12
  module Pluralton
13
13
  module ClassMethods
14
- def retrieve(id, client = Delighted.shared_client)
15
- json = client.get_json(path(id))
14
+ def retrieve(id, opts = {}, client = Delighted.shared_client)
15
+ opts = Utils.serialize_values(opts)
16
+ json = client.get_json(path(id), opts)
16
17
  new(json)
17
18
  end
18
19
 
@@ -8,7 +8,8 @@ module Delighted
8
8
  end
9
9
 
10
10
  def save(client = Delighted.shared_client)
11
- params = Utils.hash_without_key(attributes, :id)
11
+ params = Utils.hash_without_key(to_hash, :id)
12
+ params = params.merge(:expand => expanded_attribute_names) unless expanded_attribute_names.empty?
12
13
  params = Utils.serialize_values(params)
13
14
  json = client.put_json(self.class.path(id), params)
14
15
  self.class.new(json)
@@ -1,16 +1,11 @@
1
1
  module Delighted
2
2
  class Resource
3
3
  class << self
4
- def path=(path)
5
- @path = path
6
- end
7
-
8
- def path
9
- @path
10
- end
4
+ attr_accessor :path
5
+ attr_writer :singleton_resource, :expandable_attributes
11
6
 
12
- def singleton_resource=(singleton_resource)
13
- @singleton_resource = singleton_resource
7
+ def expandable_attributes
8
+ @expandable_attributes ||= {}
14
9
  end
15
10
 
16
11
  def singleton_resource?
@@ -28,20 +23,46 @@ module Delighted
28
23
  build_from_attributes(attributes)
29
24
  end
30
25
 
26
+ # Attributes used for serialization
31
27
  def to_hash
32
- attributes
28
+ serialized_attributes = attributes.dup
29
+
30
+ self.class.expandable_attributes.each_pair.select do |attribute_name, expanded_class|
31
+ if expanded_class === attributes[attribute_name]
32
+ serialized_attributes[attribute_name] = serialized_attributes[attribute_name].id
33
+ end
34
+ end
35
+
36
+ serialized_attributes
33
37
  end
34
38
  alias_method :to_h, :to_hash
35
39
 
36
- protected
40
+ private
41
+
42
+ def expanded_attribute_names
43
+ names = Set.new
44
+
45
+ self.class.expandable_attributes.each_pair.select do |attribute_name, expanded_class|
46
+ if expanded_class === attributes[attribute_name]
47
+ names << attribute_name
48
+ end
49
+ end
50
+
51
+ names
52
+ end
37
53
 
38
54
  def build_from_attributes(attributes)
39
55
  @attributes = Utils.hash_without_key(attributes, :id)
56
+
57
+ self.class.expandable_attributes.each_pair do |attribute_name, expanded_class|
58
+ if Hash === @attributes[attribute_name]
59
+ @attributes[attribute_name] = expanded_class.new(@attributes.delete(attribute_name))
60
+ end
61
+ end
62
+
40
63
  define_attribute_accessors(@attributes.keys)
41
64
  end
42
65
 
43
- private
44
-
45
66
  def define_id_reader
46
67
  Utils.eigenclass(self).instance_eval do
47
68
  attr_reader :id
@@ -1,30 +1,11 @@
1
1
  module Delighted
2
2
  class SurveyResponse < Resource
3
3
  self.path = "/survey_responses"
4
+ self.expandable_attributes = { :person => Person }
4
5
 
5
6
  include Operations::Create
6
7
  include Operations::All
7
8
  include Operations::Update
8
9
  include Operations::Retrieve
9
-
10
- def to_hash
11
- if Person === attributes[:person]
12
- Utils.hash_without_key(attributes, :person)
13
- else
14
- attributes
15
- end
16
- end
17
-
18
- protected
19
-
20
- def build_from_attributes(attributes)
21
- attributes_dup = attributes.dup
22
-
23
- if Hash === attributes_dup[:person]
24
- attributes_dup[:person] = Person.new(attributes_dup.delete(:person))
25
- end
26
-
27
- super(attributes_dup)
28
- end
29
10
  end
30
11
  end
@@ -48,7 +48,7 @@ module Delighted
48
48
  memo[k] = serialize_values(v)
49
49
  memo
50
50
  }
51
- when Array
51
+ when Array, Set
52
52
  object.map { |v| serialize_values(v) }
53
53
  else
54
54
  object
@@ -1,3 +1,3 @@
1
1
  module Delighted
2
- VERSION = "1.4.0.rc1"
2
+ VERSION = "1.4.0.rc2"
3
3
  end
@@ -97,6 +97,22 @@ class Delighted::SurveyResponseTest < Delighted::TestCase
97
97
  assert_equal '456', survey_response.id
98
98
  end
99
99
 
100
+ def test_retrieving_a_survey_response_expand_person
101
+ uri = URI.parse("https://api.delightedapp.com/v1/survey_responses/456?expand%5B%5D=person")
102
+ headers = { 'Authorization' => "Basic #{["123abc:"].pack('m0')}", "Accept" => "application/json", 'User-Agent' => "Delighted RubyGem #{Delighted::VERSION}" }
103
+ response = Delighted::HTTPResponse.new(200, {}, Delighted::JSON.dump({ :id => '456', :person => { :id => '123', :email => 'foo@bar.com' }, :score => 10 }))
104
+ mock_http_adapter.expects(:request).with(:get, uri, headers).once.returns(response)
105
+
106
+ survey_response = Delighted::SurveyResponse.retrieve('456', :expand => ['person'])
107
+ assert_kind_of Delighted::SurveyResponse, survey_response
108
+ assert_equal({ :person => '123', :score => 10 }, survey_response.to_hash)
109
+ assert_kind_of Delighted::Person, survey_response.person
110
+ assert_equal '123', survey_response.person.id
111
+ assert_equal({ :email => 'foo@bar.com' }, survey_response.person.to_hash)
112
+ assert_equal 10, survey_response.score
113
+ assert_equal '456', survey_response.id
114
+ end
115
+
100
116
  def test_updating_a_survey_response
101
117
  uri = URI.parse("https://api.delightedapp.com/v1/survey_responses/456")
102
118
  headers = { 'Authorization' => "Basic #{["123abc:"].pack('m0')}", "Accept" => "application/json", 'Content-Type' => 'application/json', 'User-Agent' => "Delighted RubyGem #{Delighted::VERSION}" }
@@ -141,13 +157,13 @@ class Delighted::SurveyResponseTest < Delighted::TestCase
141
157
  survey_responses = Delighted::SurveyResponse.all(:expand => ['person'])
142
158
  assert_kind_of Delighted::EnumerableResourceCollection, survey_responses
143
159
  assert_kind_of Delighted::SurveyResponse, survey_responses[0]
144
- assert_equal({ :comment => 'One' }, survey_responses[0].to_hash)
160
+ assert_equal({ :person => '123', :comment => 'One' }, survey_responses[0].to_hash)
145
161
  assert_equal 'One', survey_responses[0].comment
146
162
  assert_equal '123', survey_responses[0].id
147
163
  assert_kind_of Delighted::Person, survey_responses[0].person
148
164
  assert_equal({ :email => 'foo@bar.com' }, survey_responses[0].person.to_hash)
149
165
  assert_kind_of Delighted::SurveyResponse, survey_responses[1]
150
- assert_equal({ :comment => 'Two' }, survey_responses[1].to_hash)
166
+ assert_equal({ :person => '123', :comment => 'Two' }, survey_responses[1].to_hash)
151
167
  assert_equal 'Two', survey_responses[1].comment
152
168
  assert_equal '456', survey_responses[1].id
153
169
  assert_kind_of Delighted::Person, survey_responses[1].person
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delighted
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0.rc1
4
+ version: 1.4.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Dodwell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-18 00:00:00.000000000 Z
11
+ date: 2014-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json