twitter_with_auto_pagination 0.7.1 → 0.8.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.
- checksums.yaml +4 -4
- data/lib/twitter_with_auto_pagination/rest/favorites.rb +1 -1
- data/lib/twitter_with_auto_pagination/rest/friends_and_followers.rb +2 -4
- data/lib/twitter_with_auto_pagination/rest/search.rb +1 -2
- data/lib/twitter_with_auto_pagination/rest/timelines.rb +3 -3
- data/lib/twitter_with_auto_pagination/rest/users.rb +3 -3
- data/lib/twitter_with_auto_pagination/rest/utils.rb +18 -123
- data/twitter_with_auto_pagination.gemspec +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 842345d2afa01f05557856bde019188e1ffe7183
         | 
| 4 | 
            +
              data.tar.gz: ea0998abb411f7c0668ed9dbdff054fde3ef7c9a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f8cff32cee7e020cb481428a24acf78b325464b4064ede0e71066681bd7bec297b305f0c0b7c6ffa2bfb99aaf410db23fb299eed5841ccc2c9b4fea6c4b5bd58
         | 
| 7 | 
            +
              data.tar.gz: beb7cc9f6678583ce5ba52b6c33f4d1a4d0ff0643a883d30dcee9db105a3caef0a7e8a994ccabd24c63525d5ea47a8fb51f69bc5f7c940a0d17469e71efbcc59
         | 
| @@ -11,7 +11,7 @@ module TwitterWithAutoPagination | |
| 11 11 | 
             
                    args[0] = verify_credentials.id if args.empty?
         | 
| 12 12 | 
             
                    instrument(__method__, nil, options) do
         | 
| 13 13 | 
             
                      fetch_cache_or_call_api(__method__, args[0], options) do
         | 
| 14 | 
            -
                        collect_with_max_id(method(__method__).super_method, *args, options)
         | 
| 14 | 
            +
                        collect_with_max_id(method(__method__).super_method, *args, options).map { |s| s.attrs }
         | 
| 15 15 | 
             
                      end
         | 
| 16 16 | 
             
                    end
         | 
| 17 17 | 
             
                  end
         | 
| @@ -46,11 +46,10 @@ module TwitterWithAutoPagination | |
| 46 46 |  | 
| 47 47 | 
             
                  def _friends_serially(*args)
         | 
| 48 48 | 
             
                    options = {count: 200, include_user_entities: true, cursor: -1}.merge(args.extract_options!)
         | 
| 49 | 
            -
                    options[:reduce] = false unless options.has_key?(:reduce)
         | 
| 50 49 | 
             
                    args[0] = verify_credentials.id if args.empty?
         | 
| 51 50 | 
             
                    instrument(__method__, nil, options) do
         | 
| 52 51 | 
             
                      fetch_cache_or_call_api(:friends, args[0], options) do
         | 
| 53 | 
            -
                        collect_with_cursor(method(:friends).super_method, *args, options)
         | 
| 52 | 
            +
                        collect_with_cursor(method(:friends).super_method, *args, options).map { |u| u.to_hash }
         | 
| 54 53 | 
             
                      end
         | 
| 55 54 | 
             
                    end
         | 
| 56 55 | 
             
                  end
         | 
| @@ -74,11 +73,10 @@ module TwitterWithAutoPagination | |
| 74 73 |  | 
| 75 74 | 
             
                  def _followers_serially(*args)
         | 
| 76 75 | 
             
                    options = {count: 200, include_user_entities: true, cursor: -1}.merge(args.extract_options!)
         | 
| 77 | 
            -
                    options[:reduce] = false unless options.has_key?(:reduce)
         | 
| 78 76 | 
             
                    args[0] = verify_credentials.id if args.empty?
         | 
| 79 77 | 
             
                    instrument(__method__, nil, options) do
         | 
| 80 78 | 
             
                      fetch_cache_or_call_api(:followers, args[0], options) do
         | 
| 81 | 
            -
                        collect_with_cursor(method(:followers).super_method, *args, options)
         | 
| 79 | 
            +
                        collect_with_cursor(method(:followers).super_method, *args, options).map { |u| u.to_hash }
         | 
| 82 80 | 
             
                      end
         | 
| 83 81 | 
             
                    end
         | 
| 84 82 | 
             
                  end
         | 
| @@ -7,10 +7,9 @@ module TwitterWithAutoPagination | |
| 7 7 |  | 
| 8 8 | 
             
                  def search(*args)
         | 
| 9 9 | 
             
                    options = {count: 100, result_type: :recent, call_limit: 1}.merge(args.extract_options!)
         | 
| 10 | 
            -
                    options[:reduce] = false
         | 
| 11 10 | 
             
                    instrument(__method__, nil, options) do
         | 
| 12 11 | 
             
                      fetch_cache_or_call_api(__method__, args[0], options) do
         | 
| 13 | 
            -
                        collect_with_max_id(method(__method__).super_method, *args, options) { |response| response.attrs[:statuses] }
         | 
| 12 | 
            +
                        collect_with_max_id(method(__method__).super_method, *args, options) { |response| response.attrs[:statuses] }.map { |s| s.to_hash }
         | 
| 14 13 | 
             
                      end
         | 
| 15 14 | 
             
                    end
         | 
| 16 15 | 
             
                  end
         | 
| @@ -9,7 +9,7 @@ module TwitterWithAutoPagination | |
| 9 9 | 
             
                    options = {count: 200, include_rts: true, call_limit: 3}.merge(args.extract_options!)
         | 
| 10 10 | 
             
                    instrument(__method__, nil, options) do
         | 
| 11 11 | 
             
                      fetch_cache_or_call_api(__method__, verify_credentials.id, options) do
         | 
| 12 | 
            -
                        collect_with_max_id(method(__method__).super_method, options)
         | 
| 12 | 
            +
                        collect_with_max_id(method(__method__).super_method, options).map { |s| s.attrs }
         | 
| 13 13 | 
             
                      end
         | 
| 14 14 | 
             
                    end
         | 
| 15 15 | 
             
                  end
         | 
| @@ -19,7 +19,7 @@ module TwitterWithAutoPagination | |
| 19 19 | 
             
                    args[0] = verify_credentials.id if args.empty?
         | 
| 20 20 | 
             
                    instrument(__method__, nil, options) do
         | 
| 21 21 | 
             
                      fetch_cache_or_call_api(__method__, args[0], options) do
         | 
| 22 | 
            -
                        collect_with_max_id(method(__method__).super_method, *args, options)
         | 
| 22 | 
            +
                        collect_with_max_id(method(__method__).super_method, *args, options).map { |s| s.attrs }
         | 
| 23 23 | 
             
                      end
         | 
| 24 24 | 
             
                    end
         | 
| 25 25 | 
             
                  end
         | 
| @@ -28,7 +28,7 @@ module TwitterWithAutoPagination | |
| 28 28 | 
             
                    options = {count: 200, include_rts: true, call_limit: 1}.merge(args.extract_options!)
         | 
| 29 29 | 
             
                    instrument(__method__, nil, options) do
         | 
| 30 30 | 
             
                      fetch_cache_or_call_api(__method__, verify_credentials.id, options) do
         | 
| 31 | 
            -
                        collect_with_max_id(method(__method__).super_method, options)
         | 
| 31 | 
            +
                        collect_with_max_id(method(__method__).super_method, options).map { |s| s.attrs }
         | 
| 32 32 | 
             
                      end
         | 
| 33 33 | 
             
                    end
         | 
| 34 34 | 
             
                  end
         | 
| @@ -10,7 +10,7 @@ module TwitterWithAutoPagination | |
| 10 10 | 
             
                    options = {skip_status: true}.merge(args.extract_options!)
         | 
| 11 11 | 
             
                    instrument(__method__, nil, options) do
         | 
| 12 12 | 
             
                      fetch_cache_or_call_api(__method__, args) do
         | 
| 13 | 
            -
                        call_api(method(__method__).super_method, *args, options)
         | 
| 13 | 
            +
                        call_api(method(__method__).super_method, *args, options).to_hash
         | 
| 14 14 | 
             
                      end
         | 
| 15 15 | 
             
                    end
         | 
| 16 16 | 
             
                  end
         | 
| @@ -30,7 +30,7 @@ module TwitterWithAutoPagination | |
| 30 30 | 
             
                    args[0] = verify_credentials.id if args.empty?
         | 
| 31 31 | 
             
                    instrument(__method__, nil, options) do
         | 
| 32 32 | 
             
                      fetch_cache_or_call_api(__method__, args[0], options) do
         | 
| 33 | 
            -
                        call_api(method(__method__).super_method, *args, options)
         | 
| 33 | 
            +
                        call_api(method(__method__).super_method, *args, options).to_hash
         | 
| 34 34 | 
             
                      end
         | 
| 35 35 | 
             
                    end
         | 
| 36 36 | 
             
                  end
         | 
| @@ -48,7 +48,7 @@ module TwitterWithAutoPagination | |
| 48 48 | 
             
                    instrument(__method__, nil, options) do
         | 
| 49 49 | 
             
                      Parallel.each_with_index(users_per_workers, in_threads: thread_size) do |users_per_worker, i|
         | 
| 50 50 | 
             
                        _users = fetch_cache_or_call_api(__method__, users_per_worker, options) do
         | 
| 51 | 
            -
                          call_api(method(__method__).super_method, users_per_worker, options)
         | 
| 51 | 
            +
                          call_api(method(__method__).super_method, users_per_worker, options).map { |u| u.to_hash }
         | 
| 52 52 | 
             
                        end
         | 
| 53 53 |  | 
| 54 54 | 
             
                        processed_users << {i: i, users: _users}
         | 
| @@ -132,7 +132,8 @@ module TwitterWithAutoPagination | |
| 132 132 | 
             
                              "#{options[:super_operation]}-ids#{delim}#{Digest::MD5.hexdigest(user.join(','))}"
         | 
| 133 133 | 
             
                            when user.kind_of?(Array) && user.first.kind_of?(String)
         | 
| 134 134 | 
             
                              "#{options[:super_operation]}-sns#{delim}#{Digest::MD5.hexdigest(user.join(','))}"
         | 
| 135 | 
            -
                            else | 
| 135 | 
            +
                            else
         | 
| 136 | 
            +
                              raise "#{method_name.inspect} #{user.inspect}"
         | 
| 136 137 | 
             
                          end
         | 
| 137 138 | 
             
                        when user.kind_of?(Integer)
         | 
| 138 139 | 
             
                          "id#{delim}#{user.to_s}"
         | 
| @@ -144,7 +145,8 @@ module TwitterWithAutoPagination | |
| 144 145 | 
             
                          "sn#{delim}#{user}"
         | 
| 145 146 | 
             
                        when user.kind_of?(Twitter::User)
         | 
| 146 147 | 
             
                          "user#{delim}#{user.id.to_s}"
         | 
| 147 | 
            -
                        else | 
| 148 | 
            +
                        else
         | 
| 149 | 
            +
                          raise "#{method_name.inspect} #{user.inspect}"
         | 
| 148 150 | 
             
                      end
         | 
| 149 151 |  | 
| 150 152 | 
             
                    "#{method_name}#{delim}#{identifier}"
         | 
| @@ -154,132 +156,25 @@ module TwitterWithAutoPagination | |
| 154 156 | 
             
                    file_cache_key(method_name, user, options)
         | 
| 155 157 | 
             
                  end
         | 
| 156 158 |  | 
| 157 | 
            -
                   | 
| 158 | 
            -
                      id
         | 
| 159 | 
            -
                      name
         | 
| 160 | 
            -
                      screen_name
         | 
| 161 | 
            -
                      location
         | 
| 162 | 
            -
                      description
         | 
| 163 | 
            -
                      url
         | 
| 164 | 
            -
                      protected
         | 
| 165 | 
            -
                      followers_count
         | 
| 166 | 
            -
                      friends_count
         | 
| 167 | 
            -
                      listed_count
         | 
| 168 | 
            -
                      favourites_count
         | 
| 169 | 
            -
                      utc_offset
         | 
| 170 | 
            -
                      time_zone
         | 
| 171 | 
            -
                      geo_enabled
         | 
| 172 | 
            -
                      verified
         | 
| 173 | 
            -
                      statuses_count
         | 
| 174 | 
            -
                      lang
         | 
| 175 | 
            -
                      status
         | 
| 176 | 
            -
                      profile_image_url_https
         | 
| 177 | 
            -
                      profile_banner_url
         | 
| 178 | 
            -
                      profile_link_color
         | 
| 179 | 
            -
                      suspended
         | 
| 180 | 
            -
                      verified
         | 
| 181 | 
            -
                      entities
         | 
| 182 | 
            -
                      created_at
         | 
| 183 | 
            -
                    )
         | 
| 159 | 
            +
                  CODER = JSON
         | 
| 184 160 |  | 
| 185 | 
            -
                   | 
| 186 | 
            -
                     | 
| 187 | 
            -
             | 
| 188 | 
            -
                    text
         | 
| 189 | 
            -
                    source
         | 
| 190 | 
            -
                    truncated
         | 
| 191 | 
            -
                    coordinates
         | 
| 192 | 
            -
                    place
         | 
| 193 | 
            -
                    entities
         | 
| 194 | 
            -
                    user
         | 
| 195 | 
            -
                    contributors
         | 
| 196 | 
            -
                    is_quote_status
         | 
| 197 | 
            -
                    retweet_count
         | 
| 198 | 
            -
                    favorite_count
         | 
| 199 | 
            -
                    favorited
         | 
| 200 | 
            -
                    retweeted
         | 
| 201 | 
            -
                    possibly_sensitive
         | 
| 202 | 
            -
                    lang
         | 
| 203 | 
            -
                  )
         | 
| 204 | 
            -
             | 
| 205 | 
            -
                  # encode
         | 
| 206 | 
            -
                  def encode_json(obj, caller_name, options = {})
         | 
| 207 | 
            -
                    options[:reduce] = true unless options.has_key?(:reduce)
         | 
| 208 | 
            -
                    case caller_name
         | 
| 209 | 
            -
                      when :user_timeline, :home_timeline, :mentions_timeline, :favorites # Twitter::Tweet
         | 
| 210 | 
            -
                        JSON.pretty_generate(obj.map { |o| o.attrs })
         | 
| 211 | 
            -
             | 
| 212 | 
            -
                      when :search # Hash
         | 
| 213 | 
            -
                        data =
         | 
| 214 | 
            -
                          if options[:reduce]
         | 
| 215 | 
            -
                            obj.map { |o| o.to_hash.slice(*STATUS_SAVE_KEYS) }
         | 
| 216 | 
            -
                          else
         | 
| 217 | 
            -
                            obj.map { |o| o.to_hash }
         | 
| 218 | 
            -
                          end
         | 
| 219 | 
            -
                        JSON.pretty_generate(data)
         | 
| 220 | 
            -
             | 
| 221 | 
            -
                      when :friends, :followers # Hash
         | 
| 222 | 
            -
                        data =
         | 
| 223 | 
            -
                          if options[:reduce]
         | 
| 224 | 
            -
                            obj.map { |o| o.to_hash.slice(*PROFILE_SAVE_KEYS) }
         | 
| 225 | 
            -
                          else
         | 
| 226 | 
            -
                            obj.map { |o| o.to_hash }
         | 
| 227 | 
            -
                          end
         | 
| 228 | 
            -
                        JSON.pretty_generate(data)
         | 
| 229 | 
            -
             | 
| 230 | 
            -
                      when :friend_ids, :follower_ids # Integer
         | 
| 231 | 
            -
                        JSON.pretty_generate(obj)
         | 
| 232 | 
            -
             | 
| 233 | 
            -
                      when :verify_credentials # Twitter::User
         | 
| 234 | 
            -
                        JSON.pretty_generate(obj.to_hash.slice(*PROFILE_SAVE_KEYS))
         | 
| 235 | 
            -
             | 
| 236 | 
            -
                      when :user # Twitter::User
         | 
| 237 | 
            -
                        JSON.pretty_generate(obj.to_hash.slice(*PROFILE_SAVE_KEYS))
         | 
| 238 | 
            -
             | 
| 239 | 
            -
                      when :users, :friends_parallelly, :followers_parallelly # Twitter::User
         | 
| 240 | 
            -
                        data =
         | 
| 241 | 
            -
                          if options[:reduce]
         | 
| 242 | 
            -
                            obj.map { |o| o.to_hash.slice(*PROFILE_SAVE_KEYS) }
         | 
| 243 | 
            -
                          else
         | 
| 244 | 
            -
                            obj.map { |o| o.to_hash }
         | 
| 245 | 
            -
                          end
         | 
| 246 | 
            -
                        JSON.pretty_generate(data)
         | 
| 247 | 
            -
             | 
| 248 | 
            -
                      when :user? # true or false
         | 
| 249 | 
            -
                        obj
         | 
| 250 | 
            -
             | 
| 251 | 
            -
                      when :friendship? # true or false
         | 
| 252 | 
            -
                        obj
         | 
| 161 | 
            +
                  def encode(obj)
         | 
| 162 | 
            +
                    obj.in?([true, false]) ? obj : CODER.dump(obj)
         | 
| 163 | 
            +
                  end
         | 
| 253 164 |  | 
| 254 | 
            -
             | 
| 255 | 
            -
             | 
| 256 | 
            -
                     | 
| 165 | 
            +
                  def decode(str)
         | 
| 166 | 
            +
                    obj = str.kind_of?(String) ? CODER.load(str) : str
         | 
| 167 | 
            +
                    _to_mash(obj)
         | 
| 257 168 | 
             
                  end
         | 
| 258 169 |  | 
| 259 | 
            -
                   | 
| 260 | 
            -
                  def decode_json(json_str, caller_name, options = {})
         | 
| 261 | 
            -
                    obj = json_str.kind_of?(String) ? JSON.parse(json_str) : json_str
         | 
| 170 | 
            +
                  def _to_mash(obj)
         | 
| 262 171 | 
             
                    case
         | 
| 263 | 
            -
                      when obj. | 
| 264 | 
            -
                        obj
         | 
| 265 | 
            -
             | 
| 266 | 
            -
                      when obj.kind_of?(Array) && obj.first.kind_of?(Hash)
         | 
| 267 | 
            -
                        obj.map { |o| Hashie::Mash.new(o) }
         | 
| 268 | 
            -
             | 
| 269 | 
            -
                      when obj.kind_of?(Array) && obj.first.kind_of?(Integer)
         | 
| 270 | 
            -
                        obj
         | 
| 271 | 
            -
             | 
| 172 | 
            +
                      when obj.kind_of?(Array)
         | 
| 173 | 
            +
                        obj.map { |o| _to_mash(o) }
         | 
| 272 174 | 
             
                      when obj.kind_of?(Hash)
         | 
| 273 | 
            -
                        Hashie::Mash.new(obj)
         | 
| 274 | 
            -
             | 
| 275 | 
            -
                      when obj === true || obj === false
         | 
| 276 | 
            -
                        obj
         | 
| 277 | 
            -
             | 
| 278 | 
            -
                      when obj.kind_of?(Array) && obj.empty?
         | 
| 279 | 
            -
                        obj
         | 
| 280 | 
            -
             | 
| 175 | 
            +
                        Hashie::Mash.new(obj.map { |k, v| [k, _to_mash(v)] }.to_h)
         | 
| 281 176 | 
             
                      else
         | 
| 282 | 
            -
                         | 
| 177 | 
            +
                        obj
         | 
| 283 178 | 
             
                    end
         | 
| 284 179 | 
             
                  end
         | 
| 285 180 |  | 
| @@ -292,11 +187,11 @@ module TwitterWithAutoPagination | |
| 292 187 | 
             
                      else
         | 
| 293 188 | 
             
                        cache.fetch(key, expires_in: 1.hour, race_condition_ttl: 5.minutes) do
         | 
| 294 189 | 
             
                          block_result = yield
         | 
| 295 | 
            -
                          instrument('serialize', key, caller: method_name) {  | 
| 190 | 
            +
                          instrument('serialize', key, caller: method_name) { encode(block_result) }
         | 
| 296 191 | 
             
                        end
         | 
| 297 192 | 
             
                      end
         | 
| 298 193 |  | 
| 299 | 
            -
                    instrument('deserialize', key, caller: method_name) {  | 
| 194 | 
            +
                    instrument('deserialize', key, caller: method_name) { decode(fetch_result) }
         | 
| 300 195 | 
             
                  end
         | 
| 301 196 | 
             
                end
         | 
| 302 197 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: twitter_with_auto_pagination
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.8.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Shinohara Teruki
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016-07- | 
| 11 | 
            +
            date: 2016-07-20 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: twitter
         |