rscrobbler 0.0.6 → 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/lib/lastfm/album.rb +78 -24
- data/lib/lastfm/artist.rb +149 -55
- data/lib/lastfm/auth.rb +19 -8
- data/lib/lastfm/chart.rb +41 -17
- data/lib/lastfm/event.rb +46 -17
- data/lib/lastfm/geo.rb +93 -32
- data/lib/lastfm/group.rb +47 -17
- data/lib/lastfm/library.rb +81 -30
- data/lib/lastfm/playlist.rb +23 -9
- data/lib/lastfm/radio.rb +24 -10
- data/lib/lastfm/tag.rb +57 -17
- data/lib/lastfm/tasteometer.rb +25 -3
- data/lib/lastfm/track.rb +185 -66
- data/lib/lastfm/user.rb +178 -53
- data/lib/lastfm/venue.rb +22 -6
- data/lib/rscrobbler.rb +29 -10
- data/test/unit/lib/lastfm/album_test.rb +0 -0
- data/test/unit/lib/lastfm/artist_test.rb +0 -0
- data/test/unit/lib/lastfm/auth_test.rb +0 -0
- data/test/unit/lib/lastfm/chart_test.rb +0 -0
- data/test/unit/lib/lastfm/event_test.rb +0 -0
- data/test/unit/lib/lastfm/geo_test.rb +0 -0
- data/test/unit/lib/lastfm/group_test.rb +0 -0
- data/test/unit/lib/lastfm/library_test.rb +0 -0
- data/test/unit/lib/lastfm/playlist_test.rb +0 -0
- data/test/unit/lib/lastfm/radio_test.rb +0 -0
- data/test/unit/lib/lastfm/tag_test.rb +0 -0
- data/test/unit/lib/lastfm/tasteometer_test.rb +0 -0
- data/test/unit/lib/lastfm/track_test.rb +0 -0
- data/test/unit/lib/lastfm/user_test.rb +0 -0
- data/test/unit/lib/lastfm/venue_test.rb +0 -0
- data/test/unit/lib/rscrobbler_test.rb +0 -0
- metadata +37 -5
    
        data/lib/lastfm/venue.rb
    CHANGED
    
    | @@ -4,19 +4,35 @@ module LastFM | |
| 4 4 |  | 
| 5 5 | 
             
                  TYPE = 'venue'
         | 
| 6 6 |  | 
| 7 | 
            +
                  # Get a list of upcoming events for a venue.
         | 
| 8 | 
            +
                  #
         | 
| 9 | 
            +
                  # @option params [Fixnum,  required] :venue           the id for the venue to fetch event listings for
         | 
| 10 | 
            +
                  # @option params [Boolean, optional] :festivalsonly   whether only festivals should be returned, or all events
         | 
| 7 11 | 
             
                  # @see http://www.last.fm/api/show?service=394
         | 
| 8 | 
            -
                  def get_events(  | 
| 9 | 
            -
                    LastFM.get( "#{TYPE}.getEvents",  | 
| 12 | 
            +
                  def get_events( params )
         | 
| 13 | 
            +
                    LastFM.get( "#{TYPE}.getEvents", params )
         | 
| 10 14 | 
             
                  end
         | 
| 11 15 |  | 
| 16 | 
            +
                  # Get a paginated list of all the events held at this venue in the past.
         | 
| 17 | 
            +
                  #
         | 
| 18 | 
            +
                  # @option params [Fixnum,  required] :venue           the id for the venue to fetch event listings for
         | 
| 19 | 
            +
                  # @option params [Boolean, optional] :festivalsonly   whether only festivals should be returned, or all events
         | 
| 20 | 
            +
                  # @option params [Fixnum,  optional] :page            the page number to fetch. defaults to first page
         | 
| 21 | 
            +
                  # @option params [Fixnum,  optional] :limit           the number of results to fetch per page. defaults to 50
         | 
| 12 22 | 
             
                  # @see http://www.last.fm/api/show?service=395
         | 
| 13 | 
            -
                  def get_past_events(  | 
| 14 | 
            -
                    LastFM.get( "#{TYPE}.getPastEvents",  | 
| 23 | 
            +
                  def get_past_events( params )
         | 
| 24 | 
            +
                    LastFM.get( "#{TYPE}.getPastEvents", params )
         | 
| 15 25 | 
             
                  end
         | 
| 16 26 |  | 
| 27 | 
            +
                  # Search for a venue by venue name.
         | 
| 28 | 
            +
                  #
         | 
| 29 | 
            +
                  # @option params [String, required] :venue      the venue name to search for
         | 
| 30 | 
            +
                  # @option params [String, optional] :country    a country name used to limit results, as defined by ISO 3166-1
         | 
| 31 | 
            +
                  # @option params [Fixnum, optional] :page       the page number to fetch. defaults to first page
         | 
| 32 | 
            +
                  # @option params [Fixnum, optional] :limit      the number of results to fetch per page. defaults to 50
         | 
| 17 33 | 
             
                  # @see http://www.last.fm/api/show?service=396
         | 
| 18 | 
            -
                  def search(  | 
| 19 | 
            -
                    LastFM.get( "#{TYPE}.search",  | 
| 34 | 
            +
                  def search( params )
         | 
| 35 | 
            +
                    LastFM.get( "#{TYPE}.search", params )
         | 
| 20 36 | 
             
                  end
         | 
| 21 37 |  | 
| 22 38 | 
             
                end
         | 
    
        data/lib/rscrobbler.rb
    CHANGED
    
    | @@ -22,7 +22,7 @@ require 'lastfm/user' | |
| 22 22 | 
             
            require 'lastfm/venue'
         | 
| 23 23 |  | 
| 24 24 | 
             
            module LastFM
         | 
| 25 | 
            -
              VERSION = '0.0 | 
| 25 | 
            +
              VERSION = '0.1.0'
         | 
| 26 26 |  | 
| 27 27 | 
             
              HOST = 'ws.audioscrobbler.com'
         | 
| 28 28 | 
             
              API_VERSION = '2.0'
         | 
| @@ -36,7 +36,7 @@ module LastFM | |
| 36 36 | 
             
                # Configure the module and begin a session. Once established (and successfully
         | 
| 37 37 | 
             
                # executed), the module is ready to send api calls to Last.fm.
         | 
| 38 38 | 
             
                #
         | 
| 39 | 
            -
                #  | 
| 39 | 
            +
                # @example
         | 
| 40 40 | 
             
                #     LastFM.establish_session do |session|
         | 
| 41 41 | 
             
                #       session.username = ...
         | 
| 42 42 | 
             
                #       session.auth_token = ...
         | 
| @@ -62,7 +62,7 @@ module LastFM | |
| 62 62 | 
             
                  [:api_key, :api_secret, :username, :auth_token].each do |cred|
         | 
| 63 63 | 
             
                    raise AuthenticationError, "Missing credential: #{cred}" unless LastFM.send(cred)
         | 
| 64 64 | 
             
                  end
         | 
| 65 | 
            -
                  self.session_key = Auth.get_mobile_session( username, auth_token ).find_first('session/key').content
         | 
| 65 | 
            +
                  self.session_key = Auth.get_mobile_session( username: username, auth_token: auth_token ).find_first('session/key').content
         | 
| 66 66 | 
             
                end
         | 
| 67 67 |  | 
| 68 68 | 
             
                # Has the service been authenticated?
         | 
| @@ -90,14 +90,14 @@ module LastFM | |
| 90 90 | 
             
                # Construct an HTTP GET call from params, and load the response into a LibXML Document.
         | 
| 91 91 | 
             
                #
         | 
| 92 92 | 
             
                # @param [String] method  last.fm api method to call
         | 
| 93 | 
            -
                # @param [ | 
| 93 | 
            +
                # @param [Boolean] secure  whether to sign the request with a method signature and session key
         | 
| 94 94 | 
             
                #   (one exception being auth methods, which require a method signature but no session key)
         | 
| 95 95 | 
             
                # @param [Hash] params  parameters to send, excluding method, api_key, api_sig, and sk
         | 
| 96 96 | 
             
                # @return [LibXML::XML::Document] xml document of the data contained in the response
         | 
| 97 97 | 
             
                # @raise [LastFMError] if the request fails
         | 
| 98 | 
            -
                def get( method,  | 
| 98 | 
            +
                def get( method, params = {}, secure = false )
         | 
| 99 99 | 
             
                  path = generate_path(method, secure, params)
         | 
| 100 | 
            -
                  logger.debug( "Last.fm HTTP GET: #{HOST | 
| 100 | 
            +
                  logger.debug( "Last.fm HTTP GET: #{HOST}#{path}" ) if logger
         | 
| 101 101 | 
             
                  response = Net::HTTP.get_response( HOST, path )
         | 
| 102 102 | 
             
                  validate( LibXML::XML::Parser.string( response.body ).parse )
         | 
| 103 103 | 
             
                end
         | 
| @@ -129,8 +129,10 @@ module LastFM | |
| 129 129 | 
             
                  xml
         | 
| 130 130 | 
             
                end
         | 
| 131 131 |  | 
| 132 | 
            -
                # Normalize the parameter list by converting values to  | 
| 133 | 
            -
                #  | 
| 132 | 
            +
                # Normalize the parameter list by converting boolean values to 0 or 1, array values to
         | 
| 133 | 
            +
                # comma-separated strings, and all other values to a string. Remove any nil values, and
         | 
| 134 | 
            +
                # camel-case the parameter keys. Add method, api key, session key, and api signature
         | 
| 135 | 
            +
                # parameters where necessary.
         | 
| 134 136 | 
             
                #
         | 
| 135 137 | 
             
                # @param [String] method  last.fm api method
         | 
| 136 138 | 
             
                # @param [Boolean] secure  whether to include session key and api signature in the parameters
         | 
| @@ -138,8 +140,12 @@ module LastFM | |
| 138 140 | 
             
                # @return [Hash] complete, normalized parameters
         | 
| 139 141 | 
             
                # @private
         | 
| 140 142 | 
             
                def construct_params( method, secure, params )
         | 
| 141 | 
            -
                  params. | 
| 142 | 
            -
             | 
| 143 | 
            +
                  params = params.each_with_object({}) do |(k,v), h|
         | 
| 144 | 
            +
                    v = v ? 1 : 0 if !!v == v                 # convert booleans into 0 or 1
         | 
| 145 | 
            +
                    v = v.compact.join(',') if v.is_a?(Array) # convert arrays into comma-separated strings
         | 
| 146 | 
            +
                    v = v.to_i if v.is_a?(Time)               # convert times into integer unix timestamps
         | 
| 147 | 
            +
                    h[camel_case(k)] = v.to_s unless v.nil?
         | 
| 148 | 
            +
                  end
         | 
| 143 149 | 
             
                  params['method'] = method
         | 
| 144 150 | 
             
                  params['api_key'] = api_key
         | 
| 145 151 | 
             
                  params['sk'] = session_key if authenticated? && secure
         | 
| @@ -147,6 +153,19 @@ module LastFM | |
| 147 153 | 
             
                  params
         | 
| 148 154 | 
             
                end
         | 
| 149 155 |  | 
| 156 | 
            +
                # Return a the camelCased version of the given string or symbol, with underscores removed,
         | 
| 157 | 
            +
                # word capitalized, and the first letter lower case.
         | 
| 158 | 
            +
                #
         | 
| 159 | 
            +
                # @param [String] str  the string (or symbol) to camel case
         | 
| 160 | 
            +
                # @return [String] the camelcased version of the given string
         | 
| 161 | 
            +
                def camel_case(key)
         | 
| 162 | 
            +
                  exceptions = {playlist_id: 'playlistID', playlist_url: 'playlistURL',
         | 
| 163 | 
            +
                    speed_multiplier: 'speed_multiplier', fingerprint_id: 'fingerprintid'}
         | 
| 164 | 
            +
                  return exceptions[key] if exceptions.include?(key)
         | 
| 165 | 
            +
                  camel = key.to_s.split('_').map{|s| s.capitalize}.join
         | 
| 166 | 
            +
                  camel[0].downcase + camel[1..-1]
         | 
| 167 | 
            +
                end
         | 
| 168 | 
            +
             | 
| 150 169 | 
             
                # Generate the path for a particular method call given params.
         | 
| 151 170 | 
             
                #
         | 
| 152 171 | 
             
                # @param [String] method  last.fm method to call
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rscrobbler
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0 | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,11 +9,11 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2012-01-30 00:00:00.000000000Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: libxml-ruby
         | 
| 16 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &2164437020 !ruby/object:Gem::Requirement
         | 
| 17 17 | 
             
                none: false
         | 
| 18 18 | 
             
                requirements:
         | 
| 19 19 | 
             
                - - ! '>='
         | 
| @@ -21,7 +21,7 @@ dependencies: | |
| 21 21 | 
             
                    version: '0'
         | 
| 22 22 | 
             
              type: :runtime
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *2164437020
         | 
| 25 25 | 
             
            description: rscrobbler is a Ruby gem for accessing Last.fm's API (http://www.last.fm/api).
         | 
| 26 26 | 
             
            email:
         | 
| 27 27 | 
             
            - sgt.floydpepper@gmail.com
         | 
| @@ -46,6 +46,22 @@ files: | |
| 46 46 | 
             
            - lib/lastfm/user.rb
         | 
| 47 47 | 
             
            - lib/lastfm/venue.rb
         | 
| 48 48 | 
             
            - lib/rscrobbler.rb
         | 
| 49 | 
            +
            - test/unit/lib/lastfm/album_test.rb
         | 
| 50 | 
            +
            - test/unit/lib/lastfm/artist_test.rb
         | 
| 51 | 
            +
            - test/unit/lib/lastfm/auth_test.rb
         | 
| 52 | 
            +
            - test/unit/lib/lastfm/chart_test.rb
         | 
| 53 | 
            +
            - test/unit/lib/lastfm/event_test.rb
         | 
| 54 | 
            +
            - test/unit/lib/lastfm/geo_test.rb
         | 
| 55 | 
            +
            - test/unit/lib/lastfm/group_test.rb
         | 
| 56 | 
            +
            - test/unit/lib/lastfm/library_test.rb
         | 
| 57 | 
            +
            - test/unit/lib/lastfm/playlist_test.rb
         | 
| 58 | 
            +
            - test/unit/lib/lastfm/radio_test.rb
         | 
| 59 | 
            +
            - test/unit/lib/lastfm/tag_test.rb
         | 
| 60 | 
            +
            - test/unit/lib/lastfm/tasteometer_test.rb
         | 
| 61 | 
            +
            - test/unit/lib/lastfm/track_test.rb
         | 
| 62 | 
            +
            - test/unit/lib/lastfm/user_test.rb
         | 
| 63 | 
            +
            - test/unit/lib/lastfm/venue_test.rb
         | 
| 64 | 
            +
            - test/unit/lib/rscrobbler_test.rb
         | 
| 49 65 | 
             
            - bin/generate_lastfm_auth_token
         | 
| 50 66 | 
             
            homepage: https://github.com/sgtFloyd/rscrobbler
         | 
| 51 67 | 
             
            licenses: []
         | 
| @@ -71,5 +87,21 @@ rubygems_version: 1.8.12 | |
| 71 87 | 
             
            signing_key: 
         | 
| 72 88 | 
             
            specification_version: 3
         | 
| 73 89 | 
             
            summary: Last.fm API wrapper
         | 
| 74 | 
            -
            test_files: | 
| 90 | 
            +
            test_files:
         | 
| 91 | 
            +
            - test/unit/lib/lastfm/album_test.rb
         | 
| 92 | 
            +
            - test/unit/lib/lastfm/artist_test.rb
         | 
| 93 | 
            +
            - test/unit/lib/lastfm/auth_test.rb
         | 
| 94 | 
            +
            - test/unit/lib/lastfm/chart_test.rb
         | 
| 95 | 
            +
            - test/unit/lib/lastfm/event_test.rb
         | 
| 96 | 
            +
            - test/unit/lib/lastfm/geo_test.rb
         | 
| 97 | 
            +
            - test/unit/lib/lastfm/group_test.rb
         | 
| 98 | 
            +
            - test/unit/lib/lastfm/library_test.rb
         | 
| 99 | 
            +
            - test/unit/lib/lastfm/playlist_test.rb
         | 
| 100 | 
            +
            - test/unit/lib/lastfm/radio_test.rb
         | 
| 101 | 
            +
            - test/unit/lib/lastfm/tag_test.rb
         | 
| 102 | 
            +
            - test/unit/lib/lastfm/tasteometer_test.rb
         | 
| 103 | 
            +
            - test/unit/lib/lastfm/track_test.rb
         | 
| 104 | 
            +
            - test/unit/lib/lastfm/user_test.rb
         | 
| 105 | 
            +
            - test/unit/lib/lastfm/venue_test.rb
         | 
| 106 | 
            +
            - test/unit/lib/rscrobbler_test.rb
         | 
| 75 107 | 
             
            has_rdoc: 
         |