From 19bebb87cbee7bf4958b3c121619f66d4f828aea Mon Sep 17 00:00:00 2001 From: Erik Michaels-Ober Date: Fri, 14 Oct 2011 13:08:58 -0700 Subject: [PATCH] Add new Configuration class --- README.md | 35 +++++++++++++++--------------- lib/twitter.rb | 1 + lib/twitter/client/help.rb | 6 +++-- lib/twitter/configuration.rb | 23 ++++++++++++++++++++ spec/twitter/client/help_spec.rb | 4 ++-- spec/twitter/configuration_spec.rb | 20 +++++++++++++++++ spec/twitter/photo_spec.rb | 2 +- 7 files changed, 69 insertions(+), 22 deletions(-) create mode 100644 lib/twitter/configuration.rb create mode 100644 spec/twitter/configuration_spec.rb diff --git a/README.md b/README.md index 3ffe90881..b5cfb5a84 100644 --- a/README.md +++ b/README.md @@ -32,23 +32,24 @@ wiki][apps]! [ci]: http://travis-ci.org/jnunemaker/twitter ## What new in version 2? -This version introduces 15 new classes: - -1. `Twitter::Cursor` -2. `Twitter::DirectMessage` -3. `Twitter::Language` -4. `Twitter::List` -5. `Twitter::Photo` -6. `Twitter::Place` -7. `Twitter::Point` -8. `Twitter::Polygon` -9. `Twitter::RateLimitStatus` -10. `Twitter::Relationship` -11. `Twitter::SavedSearch` -12. `Twitter::Settings` -13. `Twitter::Size` -14. `Twitter::Status` -15. `Twitter::User` +This version introduces 16 new classes: + +1. `Twitter::Configuration` +2. `Twitter::Cursor` +3. `Twitter::DirectMessage` +4. `Twitter::Language` +5. `Twitter::List` +6. `Twitter::Photo` +7. `Twitter::Place` +8. `Twitter::Point` +9. `Twitter::Polygon` +10. `Twitter::RateLimitStatus` +11. `Twitter::Relationship` +12. `Twitter::SavedSearch` +13. `Twitter::Settings` +14. `Twitter::Size` +15. `Twitter::Status` +16. `Twitter::User` These classes (plus Ruby primitives) have replaced all instances of `Hashie::Mash`. This allows us to remove the gem's dependency on [hashie][] and diff --git a/lib/twitter.rb b/lib/twitter.rb index 5e95f0254..1b18b6ea7 100644 --- a/lib/twitter.rb +++ b/lib/twitter.rb @@ -1,5 +1,6 @@ require 'twitter/client' require 'twitter/config' +require 'twitter/configuration' require 'twitter/cursor' require 'twitter/direct_message' require 'twitter/language' diff --git a/lib/twitter/client/help.rb b/lib/twitter/client/help.rb index ea9931816..cb3f05563 100644 --- a/lib/twitter/client/help.rb +++ b/lib/twitter/client/help.rb @@ -1,3 +1,4 @@ +require 'twitter/configuration' require 'twitter/language' module Twitter @@ -9,11 +10,12 @@ module Help # @see https://dev.twitter.com/docs/api/1/get/help/configuration # @rate_limited Yes # @requires_authentication No - # @return [Hash] Twitter's configuration. + # @return [Twitter::Configuration] Twitter's configuration. # @example Return the current configuration used by Twitter # Twitter.configuration def configuration(options={}) - get("/1/help/configuration.json", options) + configuration = get("/1/help/configuration.json", options) + Twitter::Configuration.new(configuration) end # Returns the list of languages supported by Twitter diff --git a/lib/twitter/configuration.rb b/lib/twitter/configuration.rb new file mode 100644 index 000000000..eac072cf4 --- /dev/null +++ b/lib/twitter/configuration.rb @@ -0,0 +1,23 @@ +require 'active_support/core_ext/enumerable' +require 'twitter/base' +require 'twitter/size' + +module Twitter + class Configuration < Twitter::Base + attr_reader :characters_reserved_per_media, :max_media_per_upload, + :non_username_paths, :photo_size_limit, :photo_sizes, :short_url_length, + :short_url_length_https + + def initialize(configuration={}) + @characters_reserved_per_media = configuration['characters_reserved_per_media'] + @max_media_per_upload = configuration['max_media_per_upload'] + @non_username_paths = configuration['non_username_paths'] + @photo_size_limit = configuration['photo_size_limit'] + @photo_sizes = configuration['photo_sizes'].each_with_object({}) do |(key, value), object| + object[key] = Twitter::Size.new(value) + end unless configuration['photo_sizes'].nil? + @short_url_length = configuration['short_url_length'] + @short_url_length_https = configuration['short_url_length_https'] + end + end +end diff --git a/spec/twitter/client/help_spec.rb b/spec/twitter/client/help_spec.rb index 7fc2b2f17..6534292cd 100644 --- a/spec/twitter/client/help_spec.rb +++ b/spec/twitter/client/help_spec.rb @@ -20,8 +20,8 @@ it "should return Twitter's current configuration" do configuration = @client.configuration - configuration.should be_a Hash - configuration['characters_reserved_per_media'].should == 20 + configuration.should be_a Twitter::Configuration + configuration.characters_reserved_per_media.should == 20 end end diff --git a/spec/twitter/configuration_spec.rb b/spec/twitter/configuration_spec.rb new file mode 100644 index 000000000..082b141c1 --- /dev/null +++ b/spec/twitter/configuration_spec.rb @@ -0,0 +1,20 @@ +require 'helper' + +describe Twitter::Configuration do + + describe "#photo_sizes" do + + it "should return a hash of sizes when photo_sizes is set" do + photo_sizes = Twitter::Configuration.new('photo_sizes' => {'small' => {'h' => 226, 'w' => 340, 'resize' => 'fit'}, 'large' => {'h' => 466, 'w' => 700, 'resize' => 'fit'}, 'medium' => {'h' => 399, 'w' => 600, 'resize' => 'fit'}, 'thumb' => {'h' => 150, 'w' => 150, 'resize' => 'crop'}}).photo_sizes + photo_sizes.should be_a Hash + photo_sizes['small'].should be_a Twitter::Size + end + + it "should return nil when photo_sizes is not set" do + photo_sizes = Twitter::Configuration.new.photo_sizes + photo_sizes.should be_nil + end + + end + +end diff --git a/spec/twitter/photo_spec.rb b/spec/twitter/photo_spec.rb index f3503d1c2..d14c00421 100644 --- a/spec/twitter/photo_spec.rb +++ b/spec/twitter/photo_spec.rb @@ -32,7 +32,7 @@ sizes['small'].should be_a Twitter::Size end - it "should return nil when status is not set" do + it "should return nil when sizes is not set" do sizes = Twitter::Photo.new.sizes sizes.should be_nil end