twittercounter 0.1.0
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/.document +5 -0
- data/.rspec +1 -0
- data/.watchr +18 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +38 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +60 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/lib/twittercounter.rb +60 -0
- data/spec/fixtures/vcr_cassettes/invalid_credentials.yml +28 -0
- data/spec/fixtures/vcr_cassettes/invalid_twitter_id.yml +28 -0
- data/spec/fixtures/vcr_cassettes/invalid_twitter_username.yml +82 -0
- data/spec/fixtures/vcr_cassettes/twitter_id_15160529.yml +28 -0
- data/spec/fixtures/vcr_cassettes/twitter_username_zigotto.yml +88 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/twittercounter_spec.rb +104 -0
- data/twittercounter.gemspec +78 -0
- metadata +162 -0
    
        data/.document
    ADDED
    
    
    
        data/.rspec
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            --color
         | 
    
        data/.watchr
    ADDED
    
    | @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            def run_spec(file)
         | 
| 2 | 
            +
              unless File.exist?(file)
         | 
| 3 | 
            +
                puts "#{file} does not exist"
         | 
| 4 | 
            +
                return
         | 
| 5 | 
            +
              end
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              puts "Running #{file}"
         | 
| 8 | 
            +
              system "bundle exec rspec #{file}"
         | 
| 9 | 
            +
              puts
         | 
| 10 | 
            +
            end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            watch("spec/.*/*_spec\.rb") do |match|
         | 
| 13 | 
            +
              run_spec match[0]
         | 
| 14 | 
            +
            end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            watch("lib/(.*)\.rb") do |match|
         | 
| 17 | 
            +
              run_spec %{spec/#{match[1]}_spec.rb}
         | 
| 18 | 
            +
            end
         | 
    
        data/Gemfile
    ADDED
    
    
    
        data/Gemfile.lock
    ADDED
    
    | @@ -0,0 +1,38 @@ | |
| 1 | 
            +
            GEM
         | 
| 2 | 
            +
              remote: http://rubygems.org/
         | 
| 3 | 
            +
              specs:
         | 
| 4 | 
            +
                crack (0.1.8)
         | 
| 5 | 
            +
                diff-lcs (1.1.2)
         | 
| 6 | 
            +
                fakeweb (1.3.0)
         | 
| 7 | 
            +
                git (1.2.5)
         | 
| 8 | 
            +
                httparty (0.7.4)
         | 
| 9 | 
            +
                  crack (= 0.1.8)
         | 
| 10 | 
            +
                jeweler (1.6.4)
         | 
| 11 | 
            +
                  bundler (~> 1.0)
         | 
| 12 | 
            +
                  git (>= 1.2.5)
         | 
| 13 | 
            +
                  rake
         | 
| 14 | 
            +
                rake (0.9.2)
         | 
| 15 | 
            +
                rcov (0.9.9)
         | 
| 16 | 
            +
                rspec (2.3.0)
         | 
| 17 | 
            +
                  rspec-core (~> 2.3.0)
         | 
| 18 | 
            +
                  rspec-expectations (~> 2.3.0)
         | 
| 19 | 
            +
                  rspec-mocks (~> 2.3.0)
         | 
| 20 | 
            +
                rspec-core (2.3.1)
         | 
| 21 | 
            +
                rspec-expectations (2.3.0)
         | 
| 22 | 
            +
                  diff-lcs (~> 1.1.2)
         | 
| 23 | 
            +
                rspec-mocks (2.3.0)
         | 
| 24 | 
            +
                vcr (1.10.0)
         | 
| 25 | 
            +
                watchr (0.7)
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            PLATFORMS
         | 
| 28 | 
            +
              ruby
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            DEPENDENCIES
         | 
| 31 | 
            +
              bundler (~> 1.0.0)
         | 
| 32 | 
            +
              fakeweb
         | 
| 33 | 
            +
              httparty
         | 
| 34 | 
            +
              jeweler (~> 1.6.4)
         | 
| 35 | 
            +
              rcov
         | 
| 36 | 
            +
              rspec (~> 2.3.0)
         | 
| 37 | 
            +
              vcr
         | 
| 38 | 
            +
              watchr
         | 
    
        data/LICENSE.txt
    ADDED
    
    | @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            Copyright (c) 2011 Jesus Lopes
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Permission is hereby granted, free of charge, to any person obtaining
         | 
| 4 | 
            +
            a copy of this software and associated documentation files (the
         | 
| 5 | 
            +
            "Software"), to deal in the Software without restriction, including
         | 
| 6 | 
            +
            without limitation the rights to use, copy, modify, merge, publish,
         | 
| 7 | 
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         | 
| 8 | 
            +
            permit persons to whom the Software is furnished to do so, subject to
         | 
| 9 | 
            +
            the following conditions:
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            The above copyright notice and this permission notice shall be
         | 
| 12 | 
            +
            included in all copies or substantial portions of the Software.
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         | 
| 15 | 
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         | 
| 16 | 
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         | 
| 17 | 
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         | 
| 18 | 
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         | 
| 19 | 
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         | 
| 20 | 
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         | 
    
        data/README.rdoc
    ADDED
    
    | @@ -0,0 +1,60 @@ | |
| 1 | 
            +
            = twittercounter
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Simple library to access Twitter Counter API.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            == Basic Usage
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            You'll need the API key for Twitter Counter. See the Twitter Counter API[http://twittercounter.com/pages/api] for request an API key.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              Twittercounter::Client.new(:apikey => "12345", :twitter_id => "18770991")
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            Returns object with methods:
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              version             : the current API version
         | 
| 14 | 
            +
              username            : Twitter username of the requested user
         | 
| 15 | 
            +
              url                 : URL of the request user
         | 
| 16 | 
            +
              avatar              : avatar URL of the requested user
         | 
| 17 | 
            +
              followers_current   : current followers count of the requested user
         | 
| 18 | 
            +
              date_updated        : the latest statistics update for the requested user
         | 
| 19 | 
            +
              follow_days         : the number of days Twitter Counter has been tracking the requested user
         | 
| 20 | 
            +
              started_followers   : the number of followers when we started tracking the requested user
         | 
| 21 | 
            +
              growth_since        : the number of followers gained since we started tracking the requested user
         | 
| 22 | 
            +
              average_growth      : the average growth per day of the requested user
         | 
| 23 | 
            +
              tomorrow            : our followers prediction for tomorrow for the requested user
         | 
| 24 | 
            +
              next_month          : our followers prediction for the next month for the requested user
         | 
| 25 | 
            +
              followers_yesterday : the number of followers for the previous day for the requested user
         | 
| 26 | 
            +
              rank                : the requested user's rank as calculated by Twitter Counter
         | 
| 27 | 
            +
              followersperdate    : a list of dates and the followers count on that date. The list is formatted like this: date{yyyy-mm-dd} : {followers_count}
         | 
| 28 | 
            +
              last_update         : a UNIX timestamp of when this record was last updated
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              Other methods are:
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              followers_2w_ago, growth_since_2w, average_growth_2w, tomorrow_2w and next_month_2w  
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            You can specify twitter username instead of twitter id, see:
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              info = Twittercounter::Client.new(:apikey => "12345", :twitter_username => "zigotto")
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              info.twitter_id
         | 
| 39 | 
            +
              => 18770991
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              ...
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            == More details
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            Please, see Twitter Counter API[http://twittercounter.com/pages/api].
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            == Contributing to twittercounter
         | 
| 48 | 
            +
             
         | 
| 49 | 
            +
            * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
         | 
| 50 | 
            +
            * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
         | 
| 51 | 
            +
            * Fork the project
         | 
| 52 | 
            +
            * Start a feature/bugfix branch
         | 
| 53 | 
            +
            * Commit and push until you are happy with your contribution
         | 
| 54 | 
            +
            * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
         | 
| 55 | 
            +
            * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            == Copyright
         | 
| 58 | 
            +
             | 
| 59 | 
            +
            Copyright (c) 2011 Zigotto. See LICENSE.txt for
         | 
| 60 | 
            +
            further details.
         | 
    
        data/Rakefile
    ADDED
    
    | @@ -0,0 +1,49 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'rubygems'
         | 
| 4 | 
            +
            require 'bundler'
         | 
| 5 | 
            +
            begin
         | 
| 6 | 
            +
              Bundler.setup(:default, :development)
         | 
| 7 | 
            +
            rescue Bundler::BundlerError => e
         | 
| 8 | 
            +
              $stderr.puts e.message
         | 
| 9 | 
            +
              $stderr.puts "Run `bundle install` to install missing gems"
         | 
| 10 | 
            +
              exit e.status_code
         | 
| 11 | 
            +
            end
         | 
| 12 | 
            +
            require 'rake'
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            require 'jeweler'
         | 
| 15 | 
            +
            Jeweler::Tasks.new do |gem|
         | 
| 16 | 
            +
              # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
         | 
| 17 | 
            +
              gem.name = "twittercounter"
         | 
| 18 | 
            +
              gem.homepage = "http://github.com/zigotto/twittercounter"
         | 
| 19 | 
            +
              gem.license = "MIT"
         | 
| 20 | 
            +
              gem.summary = %Q{Library to access Twitter Counter API}
         | 
| 21 | 
            +
              gem.description = %Q{Simple library to access Twitter Counter API}
         | 
| 22 | 
            +
              gem.email = "jlopes@zigotto.com.br"
         | 
| 23 | 
            +
              gem.authors = ["Jesus Lopes"]
         | 
| 24 | 
            +
              # dependencies defined in Gemfile
         | 
| 25 | 
            +
            end
         | 
| 26 | 
            +
            Jeweler::RubygemsDotOrgTasks.new
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            require 'rspec/core'
         | 
| 29 | 
            +
            require 'rspec/core/rake_task'
         | 
| 30 | 
            +
            RSpec::Core::RakeTask.new(:spec) do |spec|
         | 
| 31 | 
            +
              spec.pattern = FileList['spec/**/*_spec.rb']
         | 
| 32 | 
            +
            end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            RSpec::Core::RakeTask.new(:rcov) do |spec|
         | 
| 35 | 
            +
              spec.pattern = 'spec/**/*_spec.rb'
         | 
| 36 | 
            +
              spec.rcov = true
         | 
| 37 | 
            +
            end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            task :default => :spec
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            require 'rake/rdoctask'
         | 
| 42 | 
            +
            Rake::RDocTask.new do |rdoc|
         | 
| 43 | 
            +
              version = File.exist?('VERSION') ? File.read('VERSION') : ""
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              rdoc.rdoc_dir = 'rdoc'
         | 
| 46 | 
            +
              rdoc.title = "twittercounter #{version}"
         | 
| 47 | 
            +
              rdoc.rdoc_files.include('README*')
         | 
| 48 | 
            +
              rdoc.rdoc_files.include('lib/**/*.rb')
         | 
| 49 | 
            +
            end
         | 
    
        data/VERSION
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            0.1.0
         | 
| @@ -0,0 +1,60 @@ | |
| 1 | 
            +
            require "httparty"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Twittercounter
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              class Request
         | 
| 6 | 
            +
                include HTTParty
         | 
| 7 | 
            +
              end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              class Client
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                attr_accessor :apikey, :twitter_id
         | 
| 12 | 
            +
                attr_accessor :version, :username, :url, :avatar, :followers_current, :date_updated, :follow_days, 
         | 
| 13 | 
            +
                  :started_followers, :growth_since, :average_growth, :tomorrow, :next_month, :followers_yesterday, 
         | 
| 14 | 
            +
                  :rank, :followers_2w_ago, :growth_since_2w, :average_growth_2w, :tomorrow_2w, :next_month_2w, :followersperdate, :last_update
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def initialize(options={})
         | 
| 17 | 
            +
                  options = {:output => "json", :count => "14"}.merge!(options)
         | 
| 18 | 
            +
                  raise "apikey is required" if options[:apikey].blank?
         | 
| 19 | 
            +
                  raise "twitter_id or twitter_username is required" if options[:twitter_id].blank? && options[:twitter_username].blank?
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  if options.has_key?(:twitter_username)
         | 
| 22 | 
            +
                    twitter_id = Request.get("http://api.twitter.com/users/show.json", :query => {:screen_name => options.delete(:twitter_username)})["id"]
         | 
| 23 | 
            +
                    options.merge!(:twitter_id => twitter_id)
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  self.apikey = options[:apikey]
         | 
| 27 | 
            +
                  self.twitter_id = options[:twitter_id]
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  response = Request.get("http://api.twittercounter.com", :query => options)
         | 
| 30 | 
            +
                  if response.code == 200
         | 
| 31 | 
            +
                    self.version             = response["version"]
         | 
| 32 | 
            +
                    self.username            = response["username"]
         | 
| 33 | 
            +
                    self.url                 = response["url"]
         | 
| 34 | 
            +
                    self.avatar              = response["avatar"]
         | 
| 35 | 
            +
                    self.followers_current   = response["followers_current"]
         | 
| 36 | 
            +
                    self.date_updated        = response["date_updated"]
         | 
| 37 | 
            +
                    self.follow_days         = response["follow_days"]
         | 
| 38 | 
            +
                    self.started_followers   = response["started_followers"]
         | 
| 39 | 
            +
                    self.growth_since        = response["growth_since"]
         | 
| 40 | 
            +
                    self.average_growth      = response["average_growth"]
         | 
| 41 | 
            +
                    self.tomorrow            = response["tomorrow"]
         | 
| 42 | 
            +
                    self.next_month          = response["next_month"]
         | 
| 43 | 
            +
                    self.followers_yesterday = response["followers_yesterday"]
         | 
| 44 | 
            +
                    self.rank                = response["rank"]
         | 
| 45 | 
            +
                    self.followers_2w_ago    = response["followers_2w_ago"]
         | 
| 46 | 
            +
                    self.growth_since_2w     = response["growth_since_2w"]
         | 
| 47 | 
            +
                    self.average_growth_2w   = response["average_growth_2w"]
         | 
| 48 | 
            +
                    self.tomorrow_2w         = response["tomorrow_2w"]
         | 
| 49 | 
            +
                    self.next_month_2w       = response["next_month_2w"]
         | 
| 50 | 
            +
                    self.followersperdate    = response["followersperdate"]
         | 
| 51 | 
            +
                    self.last_update         = response["last_update"]
         | 
| 52 | 
            +
                  else
         | 
| 53 | 
            +
                    raise "#{response.code} #{response.message}"
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            end
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            --- 
         | 
| 2 | 
            +
            - !ruby/struct:VCR::HTTPInteraction 
         | 
| 3 | 
            +
              request: !ruby/struct:VCR::Request 
         | 
| 4 | 
            +
                method: :get
         | 
| 5 | 
            +
                uri: http://api.twittercounter.com:80/?output=json&count=14&apikey=invalid_api&twitter_id=1123invalid
         | 
| 6 | 
            +
                body: 
         | 
| 7 | 
            +
                headers: 
         | 
| 8 | 
            +
              response: !ruby/struct:VCR::Response 
         | 
| 9 | 
            +
                status: !ruby/struct:VCR::ResponseStatus 
         | 
| 10 | 
            +
                  code: 401
         | 
| 11 | 
            +
                  message: Unauthorized
         | 
| 12 | 
            +
                headers: 
         | 
| 13 | 
            +
                  date: 
         | 
| 14 | 
            +
                  - Tue, 26 Jul 2011 05:01:33 GMT
         | 
| 15 | 
            +
                  server: 
         | 
| 16 | 
            +
                  - Apache/2.2.17 (Fedora)
         | 
| 17 | 
            +
                  x-powered-by: 
         | 
| 18 | 
            +
                  - PHP/5.3.3
         | 
| 19 | 
            +
                  cache-control: 
         | 
| 20 | 
            +
                  - no-cache, must-revalidate
         | 
| 21 | 
            +
                  expires: 
         | 
| 22 | 
            +
                  - Mon, 26 Jul 1997 05:00:00 GMT
         | 
| 23 | 
            +
                  content-length: 
         | 
| 24 | 
            +
                  - "57"
         | 
| 25 | 
            +
                  content-type: 
         | 
| 26 | 
            +
                  - application/json
         | 
| 27 | 
            +
                body: "{\"version\":\"1.1\",\"error\":\"API credentials are incorrect\"}"
         | 
| 28 | 
            +
                http_version: "1.1"
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            --- 
         | 
| 2 | 
            +
            - !ruby/struct:VCR::HTTPInteraction 
         | 
| 3 | 
            +
              request: !ruby/struct:VCR::Request 
         | 
| 4 | 
            +
                method: :get
         | 
| 5 | 
            +
                uri: http://api.twittercounter.com:80/?output=json&count=14&apikey=e9335031a759f251ee9b4e2e6634e1c5&twitter_id=123invalid456ID
         | 
| 6 | 
            +
                body: 
         | 
| 7 | 
            +
                headers: 
         | 
| 8 | 
            +
              response: !ruby/struct:VCR::Response 
         | 
| 9 | 
            +
                status: !ruby/struct:VCR::ResponseStatus 
         | 
| 10 | 
            +
                  code: 404
         | 
| 11 | 
            +
                  message: Not Found
         | 
| 12 | 
            +
                headers: 
         | 
| 13 | 
            +
                  date: 
         | 
| 14 | 
            +
                  - Tue, 26 Jul 2011 03:37:53 GMT
         | 
| 15 | 
            +
                  server: 
         | 
| 16 | 
            +
                  - Apache/2.2.17 (Fedora)
         | 
| 17 | 
            +
                  x-powered-by: 
         | 
| 18 | 
            +
                  - PHP/5.3.3
         | 
| 19 | 
            +
                  cache-control: 
         | 
| 20 | 
            +
                  - no-cache, must-revalidate
         | 
| 21 | 
            +
                  expires: 
         | 
| 22 | 
            +
                  - Mon, 26 Jul 1997 05:00:00 GMT
         | 
| 23 | 
            +
                  content-length: 
         | 
| 24 | 
            +
                  - "67"
         | 
| 25 | 
            +
                  content-type: 
         | 
| 26 | 
            +
                  - application/json
         | 
| 27 | 
            +
                body: "{\"version\":\"1.1\",\"error\":\"Could not load statistics for this user\"}"
         | 
| 28 | 
            +
                http_version: "1.1"
         | 
| @@ -0,0 +1,82 @@ | |
| 1 | 
            +
            --- 
         | 
| 2 | 
            +
            - !ruby/struct:VCR::HTTPInteraction 
         | 
| 3 | 
            +
              request: !ruby/struct:VCR::Request 
         | 
| 4 | 
            +
                method: :get
         | 
| 5 | 
            +
                uri: http://api.twitter.com:80/users/show.json?screen_name=123invalid456ID
         | 
| 6 | 
            +
                body: 
         | 
| 7 | 
            +
                headers: 
         | 
| 8 | 
            +
              response: !ruby/struct:VCR::Response 
         | 
| 9 | 
            +
                status: !ruby/struct:VCR::ResponseStatus 
         | 
| 10 | 
            +
                  code: 404
         | 
| 11 | 
            +
                  message: Not Found
         | 
| 12 | 
            +
                headers: 
         | 
| 13 | 
            +
                  date: 
         | 
| 14 | 
            +
                  - Tue, 26 Jul 2011 04:35:38 GMT
         | 
| 15 | 
            +
                  server: 
         | 
| 16 | 
            +
                  - hi
         | 
| 17 | 
            +
                  status: 
         | 
| 18 | 
            +
                  - 404 Not Found
         | 
| 19 | 
            +
                  x-transaction: 
         | 
| 20 | 
            +
                  - 1311654938-43980-14664
         | 
| 21 | 
            +
                  x-ratelimit-limit: 
         | 
| 22 | 
            +
                  - "150"
         | 
| 23 | 
            +
                  x-frame-options: 
         | 
| 24 | 
            +
                  - SAMEORIGIN
         | 
| 25 | 
            +
                  last-modified: 
         | 
| 26 | 
            +
                  - Tue, 26 Jul 2011 04:35:38 GMT
         | 
| 27 | 
            +
                  x-ratelimit-remaining: 
         | 
| 28 | 
            +
                  - "109"
         | 
| 29 | 
            +
                  content-type: 
         | 
| 30 | 
            +
                  - application/json; charset=utf-8
         | 
| 31 | 
            +
                  content-length: 
         | 
| 32 | 
            +
                  - "80"
         | 
| 33 | 
            +
                  pragma: 
         | 
| 34 | 
            +
                  - no-cache
         | 
| 35 | 
            +
                  x-ratelimit-class: 
         | 
| 36 | 
            +
                  - api
         | 
| 37 | 
            +
                  x-revision: 
         | 
| 38 | 
            +
                  - DEV
         | 
| 39 | 
            +
                  expires: 
         | 
| 40 | 
            +
                  - Tue, 31 Mar 1981 05:00:00 GMT
         | 
| 41 | 
            +
                  cache-control: 
         | 
| 42 | 
            +
                  - no-cache, no-store, must-revalidate, pre-check=0, post-check=0
         | 
| 43 | 
            +
                  x-mid: 
         | 
| 44 | 
            +
                  - 071266308458f6c6b96c2cc6b218ca95e3979a05
         | 
| 45 | 
            +
                  x-ratelimit-reset: 
         | 
| 46 | 
            +
                  - "1311655885"
         | 
| 47 | 
            +
                  set-cookie: 
         | 
| 48 | 
            +
                  - k=201.23.177.72.1311654938689734; path=/; expires=Tue, 02-Aug-11 04:35:38 GMT; domain=.twitter.com
         | 
| 49 | 
            +
                  - guest_id=v1%3A13116549386953595; domain=.twitter.com; path=/; expires=Thu, 25 Jul 2013 16:35:38 GMT
         | 
| 50 | 
            +
                  - _twitter_sess=BAh7CDoPY3JlYXRlZF9hdGwrCEgIumQxAToHaWQiJWMxNWI0MzA3OTY3ZGVh%250AYmRkYzg4NDFkMWY4OTYyN2YwIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVy%250AOjpGbGFzaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--5cab84a84a8327447e4631d3810db95b5861fd47; domain=.twitter.com; path=/; HttpOnly
         | 
| 51 | 
            +
                  vary: 
         | 
| 52 | 
            +
                  - Accept-Encoding
         | 
| 53 | 
            +
                body: "{\"error\":\"Not found\",\"request\":\"\\/users\\/show.json?screen_name=123invalid456ID\"}"
         | 
| 54 | 
            +
                http_version: "1.1"
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            - !ruby/struct:VCR::HTTPInteraction 
         | 
| 57 | 
            +
              request: !ruby/struct:VCR::Request 
         | 
| 58 | 
            +
                method: :get
         | 
| 59 | 
            +
                uri: http://api.twittercounter.com:80/?output=json&count=14&apikey=e9335031a759f251ee9b4e2e6634e1c5&twitter_id=
         | 
| 60 | 
            +
                body: 
         | 
| 61 | 
            +
                headers: 
         | 
| 62 | 
            +
              response: !ruby/struct:VCR::Response 
         | 
| 63 | 
            +
                status: !ruby/struct:VCR::ResponseStatus 
         | 
| 64 | 
            +
                  code: 404
         | 
| 65 | 
            +
                  message: Not Found
         | 
| 66 | 
            +
                headers: 
         | 
| 67 | 
            +
                  date: 
         | 
| 68 | 
            +
                  - Tue, 26 Jul 2011 04:42:23 GMT
         | 
| 69 | 
            +
                  server: 
         | 
| 70 | 
            +
                  - Apache/2.2.17 (Fedora)
         | 
| 71 | 
            +
                  x-powered-by: 
         | 
| 72 | 
            +
                  - PHP/5.3.3
         | 
| 73 | 
            +
                  cache-control: 
         | 
| 74 | 
            +
                  - no-cache, must-revalidate
         | 
| 75 | 
            +
                  expires: 
         | 
| 76 | 
            +
                  - Mon, 26 Jul 1997 05:00:00 GMT
         | 
| 77 | 
            +
                  content-length: 
         | 
| 78 | 
            +
                  - "58"
         | 
| 79 | 
            +
                  content-type: 
         | 
| 80 | 
            +
                  - application/json
         | 
| 81 | 
            +
                body: "{\"version\":\"1.1\",\"error\":\"Invalid username or twitter_id\"}"
         | 
| 82 | 
            +
                http_version: "1.1"
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            --- 
         | 
| 2 | 
            +
            - !ruby/struct:VCR::HTTPInteraction 
         | 
| 3 | 
            +
              request: !ruby/struct:VCR::Request 
         | 
| 4 | 
            +
                method: :get
         | 
| 5 | 
            +
                uri: http://api.twittercounter.com:80/?output=json&count=14&apikey=e9335031a759f251ee9b4e2e6634e1c5&twitter_id=15160529
         | 
| 6 | 
            +
                body: 
         | 
| 7 | 
            +
                headers: 
         | 
| 8 | 
            +
              response: !ruby/struct:VCR::Response 
         | 
| 9 | 
            +
                status: !ruby/struct:VCR::ResponseStatus 
         | 
| 10 | 
            +
                  code: 200
         | 
| 11 | 
            +
                  message: OK
         | 
| 12 | 
            +
                headers: 
         | 
| 13 | 
            +
                  date: 
         | 
| 14 | 
            +
                  - Tue, 26 Jul 2011 03:28:09 GMT
         | 
| 15 | 
            +
                  server: 
         | 
| 16 | 
            +
                  - Apache/2.2.17 (Fedora)
         | 
| 17 | 
            +
                  x-powered-by: 
         | 
| 18 | 
            +
                  - PHP/5.3.3
         | 
| 19 | 
            +
                  cache-control: 
         | 
| 20 | 
            +
                  - max-age=1800, must-revalidate
         | 
| 21 | 
            +
                  expires: 
         | 
| 22 | 
            +
                  - Tue, 26 Jul 2011 03:58:10 GMT
         | 
| 23 | 
            +
                  content-length: 
         | 
| 24 | 
            +
                  - "872"
         | 
| 25 | 
            +
                  content-type: 
         | 
| 26 | 
            +
                  - application/json
         | 
| 27 | 
            +
                body: "{\"version\":\"1.1\",\"username\":\"TheCounter\",\"url\":\"http:\\/\\/twittercounter.com\\/\",\"avatar\":\"http:\\/\\/a1.twimg.com\\/profile_images\\/481277925\\/twc_logo_normal.png\",\"followers_current\":10305,\"date_updated\":\"2011-07-25\",\"follow_days\":\"663\",\"started_followers\":\"3617\",\"growth_since\":6688,\"average_growth\":\"10\",\"tomorrow\":\"10315\",\"next_month\":\"10605\",\"followers_yesterday\":10299,\"rank\":\"38148\",\"followers_2w_ago\":10139,\"growth_since_2w\":166,\"average_growth_2w\":\"12\",\"tomorrow_2w\":\"10317\",\"next_month_2w\":\"10665\",\"followersperdate\":{\"date2011-07-25\":10305,\"date2011-07-24\":10299,\"date2011-07-23\":10308,\"date2011-07-22\":10300,\"date2011-07-21\":10284,\"date2011-07-20\":10268,\"date2011-07-19\":10252,\"date2011-07-18\":10236,\"date2011-07-17\":10220,\"date2011-07-16\":10216,\"date2011-07-15\":10199,\"date2011-07-14\":10175,\"date2011-07-13\":10160,\"date2011-07-12\":10154},\"last_update\":1311650890}"
         | 
| 28 | 
            +
                http_version: "1.1"
         | 
| @@ -0,0 +1,88 @@ | |
| 1 | 
            +
            --- 
         | 
| 2 | 
            +
            - !ruby/struct:VCR::HTTPInteraction 
         | 
| 3 | 
            +
              request: !ruby/struct:VCR::Request 
         | 
| 4 | 
            +
                method: :get
         | 
| 5 | 
            +
                uri: http://api.twitter.com:80/users/show.json?screen_name=zigotto
         | 
| 6 | 
            +
                body: 
         | 
| 7 | 
            +
                headers: 
         | 
| 8 | 
            +
              response: !ruby/struct:VCR::Response 
         | 
| 9 | 
            +
                status: !ruby/struct:VCR::ResponseStatus 
         | 
| 10 | 
            +
                  code: 200
         | 
| 11 | 
            +
                  message: OK
         | 
| 12 | 
            +
                headers: 
         | 
| 13 | 
            +
                  date: 
         | 
| 14 | 
            +
                  - Tue, 26 Jul 2011 04:16:02 GMT
         | 
| 15 | 
            +
                  server: 
         | 
| 16 | 
            +
                  - hi
         | 
| 17 | 
            +
                  status: 
         | 
| 18 | 
            +
                  - 200 OK
         | 
| 19 | 
            +
                  x-transaction: 
         | 
| 20 | 
            +
                  - 1311653762-27604-12924
         | 
| 21 | 
            +
                  x-ratelimit-limit: 
         | 
| 22 | 
            +
                  - "150"
         | 
| 23 | 
            +
                  etag: 
         | 
| 24 | 
            +
                  - "\"20f09e76f4e18e5a84c5a1776ceb6088\""
         | 
| 25 | 
            +
                  x-frame-options: 
         | 
| 26 | 
            +
                  - SAMEORIGIN
         | 
| 27 | 
            +
                  last-modified: 
         | 
| 28 | 
            +
                  - Tue, 26 Jul 2011 04:16:02 GMT
         | 
| 29 | 
            +
                  x-ratelimit-remaining: 
         | 
| 30 | 
            +
                  - "119"
         | 
| 31 | 
            +
                  x-runtime: 
         | 
| 32 | 
            +
                  - "0.02314"
         | 
| 33 | 
            +
                  x-transaction-mask: 
         | 
| 34 | 
            +
                  - a6183ffa5f8ca943ff1b53b5644ef114b15be17f
         | 
| 35 | 
            +
                  content-type: 
         | 
| 36 | 
            +
                  - application/json; charset=utf-8
         | 
| 37 | 
            +
                  content-length: 
         | 
| 38 | 
            +
                  - "1987"
         | 
| 39 | 
            +
                  pragma: 
         | 
| 40 | 
            +
                  - no-cache
         | 
| 41 | 
            +
                  x-ratelimit-class: 
         | 
| 42 | 
            +
                  - api
         | 
| 43 | 
            +
                  x-revision: 
         | 
| 44 | 
            +
                  - DEV
         | 
| 45 | 
            +
                  expires: 
         | 
| 46 | 
            +
                  - Tue, 31 Mar 1981 05:00:00 GMT
         | 
| 47 | 
            +
                  cache-control: 
         | 
| 48 | 
            +
                  - no-cache, no-store, must-revalidate, pre-check=0, post-check=0
         | 
| 49 | 
            +
                  x-mid: 
         | 
| 50 | 
            +
                  - 35391f55fcd3c1ef007504e90dcf0d4283e95e8f
         | 
| 51 | 
            +
                  x-ratelimit-reset: 
         | 
| 52 | 
            +
                  - "1311655885"
         | 
| 53 | 
            +
                  set-cookie: 
         | 
| 54 | 
            +
                  - k=201.23.177.72.1311653762806791; path=/; expires=Tue, 02-Aug-11 04:16:02 GMT; domain=.twitter.com
         | 
| 55 | 
            +
                  - guest_id=v1%3A131165376295821549; domain=.twitter.com; path=/; expires=Thu, 25 Jul 2013 16:16:02 GMT
         | 
| 56 | 
            +
                  - _twitter_sess=BAh7CDoPY3JlYXRlZF9hdGwrCJEXqGQxAToHaWQiJWFlMTQxOGJkMThlN2Ni%250AZDRhZmY2MmI5NjI1Njk0ZDY1IgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVy%250AOjpGbGFzaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--e542ca3175dcd4bb1b76c29853d5df29cb266cbc; domain=.twitter.com; path=/; HttpOnly
         | 
| 57 | 
            +
                  vary: 
         | 
| 58 | 
            +
                  - Accept-Encoding
         | 
| 59 | 
            +
                body: "{\"default_profile_image\":false,\"default_profile\":false,\"statuses_count\":264,\"profile_sidebar_border_color\":\"eeeeee\",\"protected\":false,\"contributors_enabled\":false,\"following\":false,\"time_zone\":\"Greenland\",\"favourites_count\":0,\"url\":\"http:\\/\\/www.zigotto.com.br\",\"name\":\"Zigotto\",\"is_translator\":false,\"verified\":false,\"notifications\":false,\"profile_use_background_image\":true,\"follow_request_sent\":false,\"utc_offset\":-10800,\"created_at\":\"Thu Jan 08 17:30:09 +0000 2009\",\"friends_count\":15,\"profile_background_color\":\"f7f7f7\",\"profile_background_image_url\":\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/172928449\\/bg_site.jpg\",\"status\":{\"in_reply_to_status_id_str\":null,\"coordinates\":null,\"in_reply_to_screen_name\":null,\"in_reply_to_status_id\":null,\"in_reply_to_user_id_str\":null,\"contributors\":null,\"retweeted\":false,\"created_at\":\"Tue Jun 28 21:11:29 +0000 2011\",\"text\":\"Aten\\u00e7\\u00e3o desenvolvedores do Vale do Para\\u00edba, n\\u00e3o percam www.agilevale.com.br #AgileVale\",\"in_reply_to_user_id\":null,\"place\":null,\"geo\":null,\"retweet_count\":1,\"source\":\"\\u003Ca href=\\\"http:\\/\\/itunes.apple.com\\/us\\/app\\/twitter\\/id409789998?mt=12\\\" rel=\\\"nofollow\\\"\\u003ETwitter for Mac\\u003C\\/a\\u003E\",\"truncated\":false,\"id\":85817618442895360,\"id_str\":\"85817618442895360\",\"favorited\":false},\"profile_text_color\":\"333333\",\"description\":\"Desenvolvimento Web.\",\"listed_count\":15,\"lang\":\"en\",\"profile_sidebar_fill_color\":\"e0e0e0\",\"profile_image_url\":\"http:\\/\\/a3.twimg.com\\/profile_images\\/1267147803\\/zigotto-twitter_normal.jpg\",\"show_all_inline_media\":false,\"geo_enabled\":true,\"profile_background_tile\":true,\"followers_count\":224,\"profile_background_image_url_https\":\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/172928449\\/bg_site.jpg\",\"screen_name\":\"zigotto\",\"id\":18770991,\"id_str\":\"18770991\",\"profile_link_color\":\"941896\",\"profile_image_url_https\":\"https:\\/\\/si0.twimg.com\\/profile_images\\/1267147803\\/zigotto-twitter_normal.jpg\",\"location\":\"S\\u00e3o Jos\\u00e9 dos Campos, SP, Brazi\"}"
         | 
| 60 | 
            +
                http_version: "1.1"
         | 
| 61 | 
            +
             | 
| 62 | 
            +
            - !ruby/struct:VCR::HTTPInteraction 
         | 
| 63 | 
            +
              request: !ruby/struct:VCR::Request 
         | 
| 64 | 
            +
                method: :get
         | 
| 65 | 
            +
                uri: http://api.twittercounter.com:80/?output=json&count=14&apikey=e9335031a759f251ee9b4e2e6634e1c5&twitter_id=18770991
         | 
| 66 | 
            +
                body: 
         | 
| 67 | 
            +
                headers: 
         | 
| 68 | 
            +
              response: !ruby/struct:VCR::Response 
         | 
| 69 | 
            +
                status: !ruby/struct:VCR::ResponseStatus 
         | 
| 70 | 
            +
                  code: 200
         | 
| 71 | 
            +
                  message: OK
         | 
| 72 | 
            +
                headers: 
         | 
| 73 | 
            +
                  date: 
         | 
| 74 | 
            +
                  - Tue, 26 Jul 2011 04:22:54 GMT
         | 
| 75 | 
            +
                  server: 
         | 
| 76 | 
            +
                  - Apache/2.2.17 (Fedora)
         | 
| 77 | 
            +
                  x-powered-by: 
         | 
| 78 | 
            +
                  - PHP/5.3.3
         | 
| 79 | 
            +
                  cache-control: 
         | 
| 80 | 
            +
                  - max-age=1800, must-revalidate
         | 
| 81 | 
            +
                  expires: 
         | 
| 82 | 
            +
                  - Tue, 26 Jul 2011 04:52:58 GMT
         | 
| 83 | 
            +
                  content-length: 
         | 
| 84 | 
            +
                  - "448"
         | 
| 85 | 
            +
                  content-type: 
         | 
| 86 | 
            +
                  - application/json
         | 
| 87 | 
            +
                body: "{\"version\":\"1.1\",\"username\":\"zigotto\",\"url\":\"http:\\/\\/www.zigotto.com.br\",\"avatar\":\"http:\\/\\/a3.twimg.com\\/profile_images\\/1267147803\\/zigotto-twitter_normal.jpg\",\"followers_current\":224,\"date_updated\":\"2011-07-25\",\"follow_days\":\"15181\",\"started_followers\":null,\"growth_since\":224,\"average_growth\":\"0\",\"tomorrow\":\"224\",\"next_month\":\"224\",\"followers_yesterday\":null,\"rank\":\"340176\",\"followersperdate\":{\"date2011-07-25\":224},\"last_update\":1311653970}"
         | 
| 88 | 
            +
                http_version: "1.1"
         | 
    
        data/spec/spec_helper.rb
    ADDED
    
    | @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
         | 
| 2 | 
            +
            $LOAD_PATH.unshift(File.dirname(__FILE__))
         | 
| 3 | 
            +
            require 'rspec'
         | 
| 4 | 
            +
            require 'vcr'
         | 
| 5 | 
            +
            require 'twittercounter'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            # Requires supporting files with custom matchers and macros, etc,
         | 
| 8 | 
            +
            # in ./support/ and its subdirectories.
         | 
| 9 | 
            +
            Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            RSpec.configure do |config|
         | 
| 12 | 
            +
              config.extend VCR::RSpec::Macros
         | 
| 13 | 
            +
            end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            VCR.config do |c|
         | 
| 16 | 
            +
              c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
         | 
| 17 | 
            +
              c.stub_with :fakeweb
         | 
| 18 | 
            +
              c.default_cassette_options = { :record => :once }
         | 
| 19 | 
            +
              c.allow_http_connections_when_no_cassette = false
         | 
| 20 | 
            +
            end
         | 
| @@ -0,0 +1,104 @@ | |
| 1 | 
            +
            require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Twittercounter do
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              context "when use a invalid credentials" do
         | 
| 6 | 
            +
                use_vcr_cassette "invalid_credentials"
         | 
| 7 | 
            +
                it { expect { Twittercounter::Client.new(:apikey => "invalid_api", :twitter_id => "1123invalid")}.to raise_error(/401 Unauthorized/) }
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              context "when use a invalid twitter id" do
         | 
| 11 | 
            +
                use_vcr_cassette "invalid_twitter_id"
         | 
| 12 | 
            +
                it { expect { Twittercounter::Client.new(:apikey => "e9335031a759f251ee9b4e2e6634e1c5", :twitter_id => "123invalid456ID")}.to raise_error(/404 Not Found/) }
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              context "when use a invalid twitter username" do
         | 
| 16 | 
            +
                use_vcr_cassette "invalid_twitter_username"
         | 
| 17 | 
            +
                it { expect { Twittercounter::Client.new(:apikey => "e9335031a759f251ee9b4e2e6634e1c5", :twitter_username => "123invalid456ID")}.to raise_error(/404 Not Found/) }
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              context "when invalid required parameters" do
         | 
| 21 | 
            +
                it "should raise exception when apikey is blank" do
         | 
| 22 | 
            +
                  expect { Twittercounter::Client.new(:apikey => nil, :twitter_id => "15160529")}.to raise_error(/apikey is required/)
         | 
| 23 | 
            +
                  expect { Twittercounter::Client.new(:twitter_id => "15160529")}.to raise_error(/apikey is required/)
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
                it "should raise exception when twitter_id is blank" do
         | 
| 26 | 
            +
                  expect { Twittercounter::Client.new(:apikey => "adfas123", :twitter_id => nil)}.to raise_error(/twitter_id or twitter_username is required/)
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
                it "should raise exception when twitter_username is blank" do
         | 
| 29 | 
            +
                  expect { Twittercounter::Client.new(:apikey => "adfas123", :twitter_username => nil)}.to raise_error(/twitter_id or twitter_username is required/)
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              context "provides information about a twitter username" do
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                use_vcr_cassette "twitter_username_zigotto"
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                let(:info) do
         | 
| 38 | 
            +
                  Twittercounter::Client.new(
         | 
| 39 | 
            +
                    :apikey => "e9335031a759f251ee9b4e2e6634e1c5",
         | 
| 40 | 
            +
                    :twitter_username => "zigotto"
         | 
| 41 | 
            +
                  )
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                it { info.twitter_id.should == 18770991 }
         | 
| 45 | 
            +
                it { info.username.should == "zigotto" }
         | 
| 46 | 
            +
                it { info.followers_current.should == 224 }
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              context "provides information about a twitter id" do
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                use_vcr_cassette "twitter_id_15160529"
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                let(:info) do
         | 
| 55 | 
            +
                  Twittercounter::Client.new(
         | 
| 56 | 
            +
                    :apikey => "e9335031a759f251ee9b4e2e6634e1c5",
         | 
| 57 | 
            +
                    :twitter_id => "15160529"
         | 
| 58 | 
            +
                  )
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                it { info.apikey.should == "e9335031a759f251ee9b4e2e6634e1c5" }
         | 
| 62 | 
            +
                it { info.twitter_id.should == "15160529" }
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                it { info.version.should == "1.1" }
         | 
| 65 | 
            +
                it { info.username.should == "TheCounter" }
         | 
| 66 | 
            +
                it { info.url.should == "http://twittercounter.com/" }
         | 
| 67 | 
            +
                it { info.avatar.should == "http://a1.twimg.com/profile_images/481277925/twc_logo_normal.png" }
         | 
| 68 | 
            +
                it { info.followers_current.should == 10305 }
         | 
| 69 | 
            +
                it { info.date_updated.should == Date.new(2011, 07, 25) }
         | 
| 70 | 
            +
                it { info.follow_days.should == "663" }
         | 
| 71 | 
            +
                it { info.started_followers.should == "3617" }
         | 
| 72 | 
            +
                it { info.growth_since.should == 6688 }
         | 
| 73 | 
            +
                it { info.average_growth.should == "10" }
         | 
| 74 | 
            +
                it { info.tomorrow.should == "10315" }
         | 
| 75 | 
            +
                it { info.next_month.should == "10605" }
         | 
| 76 | 
            +
                it { info.followers_yesterday.should == 10299 }
         | 
| 77 | 
            +
                it { info.rank.should == "38148" }
         | 
| 78 | 
            +
                it { info.followers_2w_ago.should == 10139 }
         | 
| 79 | 
            +
                it { info.growth_since_2w.should == 166 }
         | 
| 80 | 
            +
                it { info.average_growth_2w.should == "12" }
         | 
| 81 | 
            +
                it { info.tomorrow_2w.should == "10317" }
         | 
| 82 | 
            +
                it { info.next_month_2w.should == "10665" }
         | 
| 83 | 
            +
                it { info.followersperdate.should == {
         | 
| 84 | 
            +
                  "date2011-07-25"=>10305,
         | 
| 85 | 
            +
                  "date2011-07-24"=>10299,
         | 
| 86 | 
            +
                  "date2011-07-23"=>10308,
         | 
| 87 | 
            +
                  "date2011-07-22"=>10300,
         | 
| 88 | 
            +
                  "date2011-07-21"=>10284,
         | 
| 89 | 
            +
                  "date2011-07-20"=>10268,
         | 
| 90 | 
            +
                  "date2011-07-19"=>10252,
         | 
| 91 | 
            +
                  "date2011-07-18"=>10236,
         | 
| 92 | 
            +
                  "date2011-07-17"=>10220,
         | 
| 93 | 
            +
                  "date2011-07-16"=>10216,
         | 
| 94 | 
            +
                  "date2011-07-15"=>10199,
         | 
| 95 | 
            +
                  "date2011-07-14"=>10175,
         | 
| 96 | 
            +
                  "date2011-07-13"=>10160,
         | 
| 97 | 
            +
                  "date2011-07-12"=>10154
         | 
| 98 | 
            +
                  }
         | 
| 99 | 
            +
                }
         | 
| 100 | 
            +
                it { info.last_update.should == 1311650890 }
         | 
| 101 | 
            +
             | 
| 102 | 
            +
              end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
            end
         | 
| @@ -0,0 +1,78 @@ | |
| 1 | 
            +
            # Generated by jeweler
         | 
| 2 | 
            +
            # DO NOT EDIT THIS FILE DIRECTLY
         | 
| 3 | 
            +
            # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
         | 
| 4 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            Gem::Specification.new do |s|
         | 
| 7 | 
            +
              s.name = %q{twittercounter}
         | 
| 8 | 
            +
              s.version = "0.1.0"
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 | 
            +
              s.authors = ["Jesus Lopes"]
         | 
| 12 | 
            +
              s.date = %q{2011-07-26}
         | 
| 13 | 
            +
              s.description = %q{Simple library to access Twitter Counter API}
         | 
| 14 | 
            +
              s.email = %q{jlopes@zigotto.com.br}
         | 
| 15 | 
            +
              s.extra_rdoc_files = [
         | 
| 16 | 
            +
                "LICENSE.txt",
         | 
| 17 | 
            +
                "README.rdoc"
         | 
| 18 | 
            +
              ]
         | 
| 19 | 
            +
              s.files = [
         | 
| 20 | 
            +
                ".document",
         | 
| 21 | 
            +
                ".rspec",
         | 
| 22 | 
            +
                ".watchr",
         | 
| 23 | 
            +
                "Gemfile",
         | 
| 24 | 
            +
                "Gemfile.lock",
         | 
| 25 | 
            +
                "LICENSE.txt",
         | 
| 26 | 
            +
                "README.rdoc",
         | 
| 27 | 
            +
                "Rakefile",
         | 
| 28 | 
            +
                "VERSION",
         | 
| 29 | 
            +
                "lib/twittercounter.rb",
         | 
| 30 | 
            +
                "spec/fixtures/vcr_cassettes/invalid_credentials.yml",
         | 
| 31 | 
            +
                "spec/fixtures/vcr_cassettes/invalid_twitter_id.yml",
         | 
| 32 | 
            +
                "spec/fixtures/vcr_cassettes/invalid_twitter_username.yml",
         | 
| 33 | 
            +
                "spec/fixtures/vcr_cassettes/twitter_id_15160529.yml",
         | 
| 34 | 
            +
                "spec/fixtures/vcr_cassettes/twitter_username_zigotto.yml",
         | 
| 35 | 
            +
                "spec/spec_helper.rb",
         | 
| 36 | 
            +
                "spec/twittercounter_spec.rb",
         | 
| 37 | 
            +
                "twittercounter.gemspec"
         | 
| 38 | 
            +
              ]
         | 
| 39 | 
            +
              s.homepage = %q{http://github.com/zigotto/twittercounter}
         | 
| 40 | 
            +
              s.licenses = ["MIT"]
         | 
| 41 | 
            +
              s.require_paths = ["lib"]
         | 
| 42 | 
            +
              s.rubygems_version = %q{1.7.2}
         | 
| 43 | 
            +
              s.summary = %q{Library to access Twitter Counter API}
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              if s.respond_to? :specification_version then
         | 
| 46 | 
            +
                s.specification_version = 3
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
         | 
| 49 | 
            +
                  s.add_runtime_dependency(%q<httparty>, [">= 0"])
         | 
| 50 | 
            +
                  s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
         | 
| 51 | 
            +
                  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
         | 
| 52 | 
            +
                  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
         | 
| 53 | 
            +
                  s.add_development_dependency(%q<rcov>, [">= 0"])
         | 
| 54 | 
            +
                  s.add_development_dependency(%q<vcr>, [">= 0"])
         | 
| 55 | 
            +
                  s.add_development_dependency(%q<fakeweb>, [">= 0"])
         | 
| 56 | 
            +
                  s.add_development_dependency(%q<watchr>, [">= 0"])
         | 
| 57 | 
            +
                else
         | 
| 58 | 
            +
                  s.add_dependency(%q<httparty>, [">= 0"])
         | 
| 59 | 
            +
                  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
         | 
| 60 | 
            +
                  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
         | 
| 61 | 
            +
                  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
         | 
| 62 | 
            +
                  s.add_dependency(%q<rcov>, [">= 0"])
         | 
| 63 | 
            +
                  s.add_dependency(%q<vcr>, [">= 0"])
         | 
| 64 | 
            +
                  s.add_dependency(%q<fakeweb>, [">= 0"])
         | 
| 65 | 
            +
                  s.add_dependency(%q<watchr>, [">= 0"])
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
              else
         | 
| 68 | 
            +
                s.add_dependency(%q<httparty>, [">= 0"])
         | 
| 69 | 
            +
                s.add_dependency(%q<rspec>, ["~> 2.3.0"])
         | 
| 70 | 
            +
                s.add_dependency(%q<bundler>, ["~> 1.0.0"])
         | 
| 71 | 
            +
                s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
         | 
| 72 | 
            +
                s.add_dependency(%q<rcov>, [">= 0"])
         | 
| 73 | 
            +
                s.add_dependency(%q<vcr>, [">= 0"])
         | 
| 74 | 
            +
                s.add_dependency(%q<fakeweb>, [">= 0"])
         | 
| 75 | 
            +
                s.add_dependency(%q<watchr>, [">= 0"])
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
            end
         | 
| 78 | 
            +
             | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,162 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification 
         | 
| 2 | 
            +
            name: twittercounter
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            +
              prerelease: 
         | 
| 5 | 
            +
              version: 0.1.0
         | 
| 6 | 
            +
            platform: ruby
         | 
| 7 | 
            +
            authors: 
         | 
| 8 | 
            +
            - Jesus Lopes
         | 
| 9 | 
            +
            autorequire: 
         | 
| 10 | 
            +
            bindir: bin
         | 
| 11 | 
            +
            cert_chain: []
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            date: 2011-07-26 00:00:00 Z
         | 
| 14 | 
            +
            dependencies: 
         | 
| 15 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 16 | 
            +
              name: httparty
         | 
| 17 | 
            +
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 18 | 
            +
                none: false
         | 
| 19 | 
            +
                requirements: 
         | 
| 20 | 
            +
                - - ">="
         | 
| 21 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 22 | 
            +
                    version: "0"
         | 
| 23 | 
            +
              type: :runtime
         | 
| 24 | 
            +
              prerelease: false
         | 
| 25 | 
            +
              version_requirements: *id001
         | 
| 26 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 27 | 
            +
              name: rspec
         | 
| 28 | 
            +
              requirement: &id002 !ruby/object:Gem::Requirement 
         | 
| 29 | 
            +
                none: false
         | 
| 30 | 
            +
                requirements: 
         | 
| 31 | 
            +
                - - ~>
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 33 | 
            +
                    version: 2.3.0
         | 
| 34 | 
            +
              type: :development
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: *id002
         | 
| 37 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 38 | 
            +
              name: bundler
         | 
| 39 | 
            +
              requirement: &id003 !ruby/object:Gem::Requirement 
         | 
| 40 | 
            +
                none: false
         | 
| 41 | 
            +
                requirements: 
         | 
| 42 | 
            +
                - - ~>
         | 
| 43 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 44 | 
            +
                    version: 1.0.0
         | 
| 45 | 
            +
              type: :development
         | 
| 46 | 
            +
              prerelease: false
         | 
| 47 | 
            +
              version_requirements: *id003
         | 
| 48 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 49 | 
            +
              name: jeweler
         | 
| 50 | 
            +
              requirement: &id004 !ruby/object:Gem::Requirement 
         | 
| 51 | 
            +
                none: false
         | 
| 52 | 
            +
                requirements: 
         | 
| 53 | 
            +
                - - ~>
         | 
| 54 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 55 | 
            +
                    version: 1.6.4
         | 
| 56 | 
            +
              type: :development
         | 
| 57 | 
            +
              prerelease: false
         | 
| 58 | 
            +
              version_requirements: *id004
         | 
| 59 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 60 | 
            +
              name: rcov
         | 
| 61 | 
            +
              requirement: &id005 !ruby/object:Gem::Requirement 
         | 
| 62 | 
            +
                none: false
         | 
| 63 | 
            +
                requirements: 
         | 
| 64 | 
            +
                - - ">="
         | 
| 65 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 66 | 
            +
                    version: "0"
         | 
| 67 | 
            +
              type: :development
         | 
| 68 | 
            +
              prerelease: false
         | 
| 69 | 
            +
              version_requirements: *id005
         | 
| 70 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 71 | 
            +
              name: vcr
         | 
| 72 | 
            +
              requirement: &id006 !ruby/object:Gem::Requirement 
         | 
| 73 | 
            +
                none: false
         | 
| 74 | 
            +
                requirements: 
         | 
| 75 | 
            +
                - - ">="
         | 
| 76 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 77 | 
            +
                    version: "0"
         | 
| 78 | 
            +
              type: :development
         | 
| 79 | 
            +
              prerelease: false
         | 
| 80 | 
            +
              version_requirements: *id006
         | 
| 81 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 82 | 
            +
              name: fakeweb
         | 
| 83 | 
            +
              requirement: &id007 !ruby/object:Gem::Requirement 
         | 
| 84 | 
            +
                none: false
         | 
| 85 | 
            +
                requirements: 
         | 
| 86 | 
            +
                - - ">="
         | 
| 87 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 88 | 
            +
                    version: "0"
         | 
| 89 | 
            +
              type: :development
         | 
| 90 | 
            +
              prerelease: false
         | 
| 91 | 
            +
              version_requirements: *id007
         | 
| 92 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 93 | 
            +
              name: watchr
         | 
| 94 | 
            +
              requirement: &id008 !ruby/object:Gem::Requirement 
         | 
| 95 | 
            +
                none: false
         | 
| 96 | 
            +
                requirements: 
         | 
| 97 | 
            +
                - - ">="
         | 
| 98 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 99 | 
            +
                    version: "0"
         | 
| 100 | 
            +
              type: :development
         | 
| 101 | 
            +
              prerelease: false
         | 
| 102 | 
            +
              version_requirements: *id008
         | 
| 103 | 
            +
            description: Simple library to access Twitter Counter API
         | 
| 104 | 
            +
            email: jlopes@zigotto.com.br
         | 
| 105 | 
            +
            executables: []
         | 
| 106 | 
            +
             | 
| 107 | 
            +
            extensions: []
         | 
| 108 | 
            +
             | 
| 109 | 
            +
            extra_rdoc_files: 
         | 
| 110 | 
            +
            - LICENSE.txt
         | 
| 111 | 
            +
            - README.rdoc
         | 
| 112 | 
            +
            files: 
         | 
| 113 | 
            +
            - .document
         | 
| 114 | 
            +
            - .rspec
         | 
| 115 | 
            +
            - .watchr
         | 
| 116 | 
            +
            - Gemfile
         | 
| 117 | 
            +
            - Gemfile.lock
         | 
| 118 | 
            +
            - LICENSE.txt
         | 
| 119 | 
            +
            - README.rdoc
         | 
| 120 | 
            +
            - Rakefile
         | 
| 121 | 
            +
            - VERSION
         | 
| 122 | 
            +
            - lib/twittercounter.rb
         | 
| 123 | 
            +
            - spec/fixtures/vcr_cassettes/invalid_credentials.yml
         | 
| 124 | 
            +
            - spec/fixtures/vcr_cassettes/invalid_twitter_id.yml
         | 
| 125 | 
            +
            - spec/fixtures/vcr_cassettes/invalid_twitter_username.yml
         | 
| 126 | 
            +
            - spec/fixtures/vcr_cassettes/twitter_id_15160529.yml
         | 
| 127 | 
            +
            - spec/fixtures/vcr_cassettes/twitter_username_zigotto.yml
         | 
| 128 | 
            +
            - spec/spec_helper.rb
         | 
| 129 | 
            +
            - spec/twittercounter_spec.rb
         | 
| 130 | 
            +
            - twittercounter.gemspec
         | 
| 131 | 
            +
            homepage: http://github.com/zigotto/twittercounter
         | 
| 132 | 
            +
            licenses: 
         | 
| 133 | 
            +
            - MIT
         | 
| 134 | 
            +
            post_install_message: 
         | 
| 135 | 
            +
            rdoc_options: []
         | 
| 136 | 
            +
             | 
| 137 | 
            +
            require_paths: 
         | 
| 138 | 
            +
            - lib
         | 
| 139 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         | 
| 140 | 
            +
              none: false
         | 
| 141 | 
            +
              requirements: 
         | 
| 142 | 
            +
              - - ">="
         | 
| 143 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 144 | 
            +
                  hash: -3982709042434259989
         | 
| 145 | 
            +
                  segments: 
         | 
| 146 | 
            +
                  - 0
         | 
| 147 | 
            +
                  version: "0"
         | 
| 148 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 149 | 
            +
              none: false
         | 
| 150 | 
            +
              requirements: 
         | 
| 151 | 
            +
              - - ">="
         | 
| 152 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 153 | 
            +
                  version: "0"
         | 
| 154 | 
            +
            requirements: []
         | 
| 155 | 
            +
             | 
| 156 | 
            +
            rubyforge_project: 
         | 
| 157 | 
            +
            rubygems_version: 1.7.2
         | 
| 158 | 
            +
            signing_key: 
         | 
| 159 | 
            +
            specification_version: 3
         | 
| 160 | 
            +
            summary: Library to access Twitter Counter API
         | 
| 161 | 
            +
            test_files: []
         | 
| 162 | 
            +
             |