From 69b1ef7edad32398b778c8449bc3605739a6c59a Mon Sep 17 00:00:00 2001 From: Erik Michaels-Ober Date: Tue, 24 Sep 2013 13:35:06 +0200 Subject: [PATCH] Make Twitter::Base objects immutable --- lib/twitter/base.rb | 3 +-- lib/twitter/relationship.rb | 9 --------- lib/twitter/rest/api/users.rb | 7 +++---- spec/twitter/base_spec.rb | 16 ---------------- spec/twitter/rate_limit_spec.rb | 17 ----------------- spec/twitter/relationship_spec.rb | 8 -------- 6 files changed, 4 insertions(+), 56 deletions(-) diff --git a/lib/twitter/base.rb b/lib/twitter/base.rb index a222b3bc1..e8f608598 100644 --- a/lib/twitter/base.rb +++ b/lib/twitter/base.rb @@ -9,7 +9,6 @@ class Base alias to_h attrs alias to_hash attrs alias to_hsh attrs - def_delegators :attrs, :delete, :update # Define methods that retrieve the value from attributes # @@ -73,7 +72,7 @@ def self.define_attribute_method(key1, klass=nil, key2=nil) else attrs = @attrs.dup value = attrs.delete(key1) - Twitter.const_get(klass).new(value.update(key2 => attrs)) + Twitter.const_get(klass).new(value.merge(key2 => attrs)) end else NullObject.instance diff --git a/lib/twitter/relationship.rb b/lib/twitter/relationship.rb index 9490867b6..c77a3c5cf 100644 --- a/lib/twitter/relationship.rb +++ b/lib/twitter/relationship.rb @@ -13,14 +13,5 @@ def initialize(attrs={}) @attrs = attrs[:relationship] end - # Update the attributes of a Relationship - # - # @param attrs [Hash] - # @return [Twitter::Relationship] - def update(attrs) - @attrs.update(attrs[:relationship]) unless attrs[:relationship].nil? - self - end - end end diff --git a/lib/twitter/rest/api/users.rb b/lib/twitter/rest/api/users.rb index adf92d91b..c6975bf26 100644 --- a/lib/twitter/rest/api/users.rb +++ b/lib/twitter/rest/api/users.rb @@ -31,11 +31,10 @@ module Users # @option options [String] :lang The language which Twitter should render in for this user. The language must be specified by the appropriate two letter ISO 639-1 representation. Currently supported languages are provided by {https://dev.twitter.com/docs/api/1.1/get/help/languages GET help/languages}. def settings(options={}) request_method = options.size.zero? ? :get : :post - settings = object_from_response(Twitter::Settings, request_method, "/1.1/account/settings.json", options) + response = send(request_method.to_sym, "/1.1/account/settings.json", options) # https://dev.twitter.com/issues/59 - trend_location = Array(settings.attrs[:trend_location]).first - settings.update(:trend_location => trend_location) - settings + response.update(:trend_location => Array(response[:trend_location]).first) + Twitter::Settings.from_response(response) end # Returns the requesting user if authentication was successful, otherwise raises {Twitter::Error::Unauthorized} diff --git a/spec/twitter/base_spec.rb b/spec/twitter/base_spec.rb index dce65969d..9263f67f5 100644 --- a/spec/twitter/base_spec.rb +++ b/spec/twitter/base_spec.rb @@ -24,20 +24,4 @@ end end - describe "#delete" do - it "deletes an attribute and returns its value" do - base = Twitter::Base.new(:id => 1) - expect(base.delete(:id)).to eq(1) - expect(base.attrs[:id]).to be_nil - end - end - - describe "#update" do - it "returns a hash of attributes" do - base = Twitter::Base.new(:id => 1) - base.update(:id => 2) - expect(base.attrs[:id]).to eq(2) - end - end - end diff --git a/spec/twitter/rate_limit_spec.rb b/spec/twitter/rate_limit_spec.rb index 329201c39..3851167c9 100644 --- a/spec/twitter/rate_limit_spec.rb +++ b/spec/twitter/rate_limit_spec.rb @@ -56,21 +56,4 @@ end end - describe "#update" do - before do - Timecop.freeze(Time.utc(2012, 6, 6, 17, 22, 0)) - end - after do - Timecop.return - end - it "updates a rate limit" do - rate_limit = Twitter::RateLimit.new("x-rate-limit-reset" => "1339019097") - expect(rate_limit.reset_in).to be_an Integer - expect(rate_limit.reset_in).to eq(15777) - rate_limit.update({"x-rate-limit-reset" => "1339019098"}) - expect(rate_limit.reset_in).to be_an Integer - expect(rate_limit.reset_in).to eq(15778) - end - end - end diff --git a/spec/twitter/relationship_spec.rb b/spec/twitter/relationship_spec.rb index 58885d61f..648005a58 100644 --- a/spec/twitter/relationship_spec.rb +++ b/spec/twitter/relationship_spec.rb @@ -46,12 +46,4 @@ end end - describe "#update" do - it "updates a relationship" do - relationship = Twitter::Relationship.new(:relationship => {:target => {:id => 7505382}}) - relationship.update(:relationship => {:target => {:id => 14100886}}) - expect(relationship.target.id).to eq(14100886) - end - end - end