gnip-client 0.2.8 → 0.2.10

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 10d62de62aef3c39ccb8e252fdc2a96475eccd6b
4
- data.tar.gz: ce806b0202a126ea6d6a1ee8fda9783c4f56e909
2
+ SHA256:
3
+ metadata.gz: 9532acf9b31580567a9a5f08a890c69f3257fbe857c8ddcad47d3756f424ce35
4
+ data.tar.gz: cdb63f1eb9928c4a9629fd464875d2117aadb38823d5cc1bcd5d467dfb87c748
5
5
  SHA512:
6
- metadata.gz: 2ba8c066c65f17053cdd5b3272c68f10f6f33b3c0f34ee9fe3d6a84f3f9a12df7f36050a776f93dbe55d11bbb3445b7d661912c9c9578f4b27f49b28e08fa9ad
7
- data.tar.gz: 3101f09f806928ee1b7ba400494885590bb071b7f84a6979dbfc46a6185d16e8e72ada65322c10255f6a74c46b125d38897ec8da4f4d979ee899f1ad75f01af3
6
+ metadata.gz: 8f42e308a70a49c6068e3f7184be2366f8d0cb5b790020b24895a836d748404195745ae22cff2546379eebc142a44392f747bb44d50b98c96832560cb00515ab
7
+ data.tar.gz: 567b32506f5df10732acfe0694bba4ecd222a37a08e42ec8be20693510fa3057208cb7b9920a6e817a4cdfbaf97ca48bc31b3affe6ad10a423d838b50cde1286
data/.gitignore CHANGED
@@ -8,3 +8,4 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  .idea/
11
+ TAGS
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3.3
1
+ 2.6.1
data/.travis.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.1
4
- - 2.2.2
5
- - 2.3.3
3
+ - 2.6.1
4
+ script:
5
+ - bundle exec rspec spec
6
+ cache: bundler
data/gnip.gemspec CHANGED
@@ -1,5 +1,6 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'gnip/version'
5
6
 
@@ -9,7 +10,7 @@ Gem::Specification.new do |spec|
9
10
  spec.authors = ['Duccio Giovannelli']
10
11
  spec.email = ['giovannelli@extendi.it']
11
12
 
12
- spec.summary = %q{A Ruby library for accessing the Gnip API. See https://gnip.com/ for full details and to sign up for an account.}
13
+ spec.summary = 'A Ruby library for accessing the Gnip API. See https://gnip.com/ for full details and to sign up for an account.'
13
14
  spec.homepage = 'https://github.com/giovannelli/gnip-client'
14
15
  spec.license = 'MIT'
15
16
 
@@ -19,11 +20,11 @@ Gem::Specification.new do |spec|
19
20
  spec.require_paths = ['lib']
20
21
 
21
22
  spec.add_development_dependency 'bundler', '~> 1.9'
22
- spec.add_development_dependency 'rake', '~> 10.0'
23
23
  spec.add_development_dependency 'pry', '~> 0'
24
- spec.add_development_dependency 'rspec', '~> 0'
25
-
26
- spec.add_dependency 'httparty', '~> 0'
27
- spec.add_dependency 'em-http-request', '~> 1'
24
+ spec.add_development_dependency 'rake', '~> 10.0'
25
+ spec.add_development_dependency 'rspec', '~> 3'
26
+
28
27
  spec.add_dependency 'activesupport', '>= 4.2'
28
+ spec.add_dependency 'em-http-request', '~> 1'
29
+ spec.add_dependency 'httparty', '~> 0.16.4'
29
30
  end
@@ -1,14 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gnip
2
4
  module GnipFullArchive
3
5
  class FullArchive
4
-
5
6
  class InvalidRequestException < StandardError; end
6
7
 
7
8
  include HTTParty
8
9
 
9
10
  attr_reader :search_url, :counts_url
10
11
 
11
- #alias :total :total_entries
12
+ # alias :total :total_entries
12
13
 
13
14
  def initialize(client)
14
15
  @search_url = "https://data-api.twitter.com/search/fullarchive/accounts/#{client.account}/#{client.label}.json"
@@ -24,61 +25,75 @@ module Gnip
24
25
  # options[:cursor_next] cursor to the next page
25
26
  def search(options = {})
26
27
  search_options = {}
27
- search_options[:query] = options[:query]||''
28
- search_options[:maxResults] = options[:per_page]||500
28
+ search_options[:query] = options[:query] || ''
29
+ search_options[:maxResults] = options[:per_page] || 500
29
30
  search_options[:fromDate] = Gnip.format_date(options[:date_from]) if options[:date_from]
30
31
  search_options[:toDate] = Gnip.format_date(options[:date_to]) if options[:date_to]
31
- search_options[:next] = options[:next_cursor] if options[:next_cursor]
32
- url = [self.search_url, search_options.to_query].join('?')
32
+ search_options[:next] = options[:next_cursor] if options[:next_cursor]
33
+ url = [search_url, search_options.to_query].join('?')
33
34
  begin
34
35
  gnip_call = self.class.get(url, basic_auth: @auth)
35
36
  response = gnip_call.response
36
37
  parsed_response = gnip_call.parsed_response
37
- parsed_response = (parsed_response||{}).with_indifferent_access
38
- raise response.message if !parsed_response.present?
38
+ parsed_response = (parsed_response || {}).with_indifferent_access
39
+ raise response.message unless parsed_response.present?
40
+
39
41
  if parsed_response[:error].present?
40
- response = { results: [], next: nil, error: parsed_response[:error][:message], code: response.code.to_i }
42
+ response = { results: [],
43
+ next: nil,
44
+ url: url,
45
+ error: parsed_response[:error][:message],
46
+ code: response.code.to_i }
41
47
  else
42
- response = { results: parsed_response[:results], next: parsed_response[:next], code: response.code.to_i }
48
+ response = { results: parsed_response[:results],
49
+ url: url,
50
+ next: parsed_response[:next],
51
+ code: response.code.to_i }
43
52
  end
44
- rescue Exception => e
45
- response = { results: [], next: nil, error: e.message, code: 500 }
53
+ rescue StandardError => e
54
+ response = { results: [],
55
+ url: url,
56
+ next: nil,
57
+ error: e.message,
58
+ code: 500 }
46
59
  end
47
- return response
60
+ response
48
61
  end
49
62
 
50
63
  # full aarchive search endpoints return total contents by day, minute, hour paginated
51
64
  # so to get totals across time period passed may need to run more than one call, the stop condition is cursor nil
52
65
  # bucket: must be one of [minute, hour, day]
53
- def total_by_time_period(options={})
54
- response = options[:response]||{}
66
+ def total_by_time_period(options = {})
67
+ response = options[:response] || {}
55
68
  search_options = {}
56
- search_options[:query] = options[:query]||''
57
- search_options[:bucket] = options[:bucket]||'day'
69
+ search_options[:query] = options[:query] || ''
70
+ search_options[:bucket] = options[:bucket] || 'day'
58
71
  search_options[:fromDate] = Gnip.format_date(options[:date_from]) if options[:date_from]
59
72
  search_options[:toDate] = Gnip.format_date(options[:date_to]) if options[:date_to]
60
73
  search_options[:next] = options[:next_cursor] if options[:next_cursor]
61
74
 
62
- url = [self.counts_url, search_options.to_query].join('?')
75
+ url = [counts_url, search_options.to_query].join('?')
76
+ call_done = 0
63
77
 
64
78
  begin
65
79
  gnip_call = self.class.get(url, basic_auth: @auth)
66
80
 
67
81
  parsed_response = gnip_call.parsed_response
68
- parsed_response = (parsed_response||{}).with_indifferent_access
82
+ parsed_response = (parsed_response || {}).with_indifferent_access
69
83
 
70
- raise gnip_call.response.message if !parsed_response.present?
84
+ raise gnip_call.response.message unless parsed_response.present?
71
85
 
72
86
  if parsed_response[:error].present?
73
- response = { results: [], next: nil, error: parsed_response[:error][:message], code: gnip_call.response.code.to_i, calls: (response[:calls]||0) + 1 }
87
+ response = { results: [], next: nil, error: parsed_response[:error][:message], code: gnip_call.response.code.to_i, calls: (response[:calls] || 0) + 1 }
74
88
  else
89
+ call_done = 1 # we have received a valid response
75
90
  parsed_response[:results].each_with_index do |item, i|
76
91
  parsed_response[:results][i] = item.merge(timePeriod: DateTime.parse(item[:timePeriod]).to_s)
77
92
  end
78
- response = { results: (response[:results]||[]) + parsed_response[:results], next: parsed_response[:next], code: gnip_call.response.code.to_i, calls: (response[:calls]||0) + 1 }
93
+ response = { results: (response[:results] || []) + parsed_response[:results], next: parsed_response[:next], code: gnip_call.response.code.to_i, calls: (response[:calls] || 0) + 1 }
79
94
  end
80
- rescue Exception => e
81
- response = { results: [], next: nil, error: e.message, code: 500 }
95
+ rescue StandardError => e
96
+ response = { results: [], next: nil, error: e.message, code: 500, calls: (response[:calls] || 0) + call_done }
82
97
  end
83
98
  # If the next cursor is not present we fetched all the data
84
99
  # It happens that twitter returns the same cursor, in that case we stop
@@ -93,14 +108,12 @@ module Gnip
93
108
  end
94
109
 
95
110
  # return total contents in a specific date interval with a passed query
96
- def total(options={})
111
+ def total(options = {})
97
112
  extra = {}
98
113
  response = total_by_time_period(options)
99
114
  extra = { error: response[:error] } if response[:error].present?
100
- return { query: options[:query], total: response[:results].map{|item| item[:count]}.reduce(:+) }.merge!(extra)
115
+ { query: options[:query], total: response[:results].map { |item| item[:count] }.reduce(:+), calls: response[:calls] }.merge!(extra)
101
116
  end
102
-
103
117
  end
104
-
105
118
  end
106
119
  end
@@ -1,16 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gnip
2
4
  module GnipRules
3
5
  class Rules
4
-
5
6
  include HTTParty
6
-
7
+
7
8
  attr_reader :rules_url, :version
8
-
9
- def initialize(client, replay=false)
9
+
10
+ def initialize(client, replay = false)
10
11
  @version = client.power_track_version
11
- case self.version
12
+ case version
12
13
  when '1.0'
13
- @rules_url = "https://api.gnip.com:443/accounts/#{client.account}/publishers/#{client.publisher}/#{replay ? "replay" : "streams"}/track/#{client.label}/rules.json"
14
+ @rules_url = "https://api.gnip.com:443/accounts/#{client.account}/publishers/#{client.publisher}/#{replay ? 'replay' : 'streams'}/track/#{client.label}/rules.json"
14
15
  when '2.0'
15
16
  if replay
16
17
  @rules_url = "https://gnip-api.twitter.com/rules/powertrack-replay/accounts/#{client.account}/publishers/#{client.publisher}/#{client.replay_label}.json"
@@ -18,111 +19,99 @@ module Gnip
18
19
  @rules_url = "https://gnip-api.twitter.com/rules/powertrack/accounts/#{client.account}/publishers/#{client.publisher}/#{client.label}.json"
19
20
  end
20
21
  else
21
- raise Exception.new("version #{self.version} is not supported from this gem.")
22
+ raise Exception, "version #{version} is not supported from this gem."
22
23
  end
23
24
  @auth = { username: client.username, password: client.password }
24
25
  end
25
-
26
- #Add rules to PowerTrack rules
27
- #rules should be an hash in the format {"rules": [{"value": "rule1", "tag": "tag1"}, {"value":"rule2"}]}"
26
+
27
+ # Add rules to PowerTrack rules
28
+ # rules should be an hash in the format {"rules": [{"value": "rule1", "tag": "tag1"}, {"value":"rule2"}]}"
28
29
  def add(rules)
29
- begin
30
- response = self.class.post( self.rules_url, basic_auth: @auth, body: rules.to_json, headers: { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }, type: :json )
31
- parsed_response = safe_parsed_response(response.parsed_response)
32
- if parsed_response.present? && parsed_response["error"].present?
33
- { status: :error, code: response.response.code, error: parsed_response["error"]["message"] }
34
- else
35
- { status: :success, code: 200, response: parsed_response }
36
- end
37
- rescue Exception => e
38
- { status: :error, code: 500, error: e.message }
30
+ response = self.class.post(rules_url, basic_auth: @auth, body: rules.to_json, headers: { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }, type: :json)
31
+ parsed_response = safe_parsed_response(response.parsed_response)
32
+ if parsed_response.present? && parsed_response['error'].present?
33
+ { status: :error, code: response.response.code, error: parsed_response['error']['message'] }
34
+ else
35
+ { status: :success, code: 200, response: parsed_response }
39
36
  end
40
-
37
+ rescue Exception => e
38
+ { status: :error, code: 500, error: e.message }
41
39
  end
42
-
43
- #Remove rules from PowerTrack rules
44
- #rules should be an hash in the format {"rules": [{"value": "rule1", "tag": "tag1"}, {"value":"rule2"}]}"
40
+
41
+ # Remove rules from PowerTrack rules
42
+ # rules should be an hash in the format {"rules": [{"value": "rule1", "tag": "tag1"}, {"value":"rule2"}]}"
45
43
  def remove(rules)
46
- begin
47
- response = self.class.post(self.rules_url, query: { _method: 'delete'}, basic_auth: @auth, body: rules.to_json)
48
- parsed_response = safe_parsed_response(response.parsed_response)
49
- if parsed_response.present? && parsed_response["error"].present?
50
- { status: :error, code: response.response.code, error: parsed_response["error"]["message"] }
51
- else
52
- { status: :success, code: 200, response: parsed_response }
53
- end
54
- rescue Exception => e
55
- { status: :error, code: 500, error: e.message }
44
+ response = self.class.post(rules_url, query: { _method: 'delete' }, basic_auth: @auth, body: rules.to_json)
45
+ parsed_response = safe_parsed_response(response.parsed_response)
46
+ if parsed_response.present? && parsed_response['error'].present?
47
+ { status: :error, code: response.response.code, error: parsed_response['error']['message'] }
48
+ else
49
+ { status: :success, code: 200, response: parsed_response }
56
50
  end
57
-
51
+ rescue Exception => e
52
+ { status: :error, code: 500, error: e.message }
58
53
  end
59
-
60
- #Get the full list of rules
54
+
55
+ # Get the full list of rules
61
56
  def list
62
- begin
63
- response = self.class.get(self.rules_url, basic_auth: @auth, headers: { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }, type: :json )
64
- parsed_response = safe_parsed_response(response.parsed_response)
65
- if parsed_response.present? && parsed_response["error"].present?
66
- { status: :error, code: response.response.code, error: parsed_response["error"]["message"] }
67
- else
68
- { status: :success, code: 200, rules: parsed_response["rules"] }
69
- end
70
- rescue Exception => e
71
- { status: :error, code: 500, error: e.message }
57
+ response = self.class.get(rules_url, basic_auth: @auth, headers: { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }, type: :json)
58
+ parsed_response = safe_parsed_response(response.parsed_response)
59
+ if parsed_response.present? && parsed_response['error'].present?
60
+ { status: :error, code: response.response.code, error: parsed_response['error']['message'] }
61
+ else
62
+ { status: :success, code: 200, rules: parsed_response['rules'] }
72
63
  end
64
+ rescue Exception => e
65
+ { status: :error, code: 500, error: e.message }
73
66
  end
74
-
75
- #Get the full list of rules by tag
67
+
68
+ # Get the full list of rules by tag
76
69
  def list_by_tag(tag)
77
- begin
78
- response = self.class.get(self.rules_url, basic_auth: @auth)
79
- parsed_response = safe_parsed_response(response.parsed_response)
80
- if parsed_response.present? && parsed_response["error"].present?
81
- { status: :error, code: response.response.code, error: parsed_response["error"]["message"] }
82
- else
83
- rules = parsed_response["rules"]
84
- { status: :success, code: 200, rules: rules.select{ |rule| rule["tag"] == tag } }
85
- end
86
- rescue Exception => e
87
- { status: :error, code: 500, error: e.message }
70
+ response = self.class.get(rules_url, basic_auth: @auth)
71
+ parsed_response = safe_parsed_response(response.parsed_response)
72
+ if parsed_response.present? && parsed_response['error'].present?
73
+ { status: :error, code: response.response.code, error: parsed_response['error']['message'] }
74
+ else
75
+ rules = parsed_response['rules']
76
+ { status: :success, code: 200, rules: rules.select { |rule| rule['tag'] == tag } }
88
77
  end
89
-
78
+ rescue Exception => e
79
+ { status: :error, code: 500, error: e.message }
90
80
  end
91
-
92
- #delete all rules from PowerTrack
93
- #http://support.gnip.com/apis/powertrack/api_reference.html#DeleteRules
94
- #Request Body Size Limit 1 MB (~5000 rules)
81
+
82
+ # delete all rules from PowerTrack
83
+ # http://support.gnip.com/apis/powertrack/api_reference.html#DeleteRules
84
+ # Request Body Size Limit 1 MB (~5000 rules)
95
85
  def delete_all!
96
86
  retry_times = 0
97
87
  begin
98
- rules_list = self.list
99
- (rules_list[:rules]||[]).in_groups_of(2, false).each do |group_of_rules|
100
- self.remove({ "rules": group_of_rules })
88
+ rules_list = list
89
+ (rules_list[:rules] || []).in_groups_of(2, false).each do |group_of_rules|
90
+ remove("rules": group_of_rules)
101
91
  end
102
92
  sleep 0.05
103
- rules_list = self.list
104
- if !(rules_list[:rules]||[]).size.zero?
105
- self.delete_all!
93
+ rules_list = list
94
+ if !(rules_list[:rules] || []).size.zero?
95
+ delete_all!
106
96
  else
107
- return { status: :success, code: 200, rules: []}
97
+ return { status: :success, code: 200, rules: [] }
108
98
  end
109
99
  rescue Exception => e
110
100
  retry_times += 1
111
101
  if retry_times <= 3
112
102
  retry
113
103
  else
114
- { status: :error, code: 500, error: e.message}
115
- end
104
+ { status: :error, code: 500, error: e.message }
105
+ end
116
106
  end
117
-
118
107
  end
119
-
108
+
120
109
  private
110
+
121
111
  def safe_parsed_response(parsed_response)
122
112
  ret = parsed_response.present? ? (parsed_response.is_a?(String) ? JSON.parse(parsed_response).with_indifferent_access : parsed_response) : nil
123
113
  ret
124
114
  end
125
-
126
115
  end
127
116
  end
128
117
  end
@@ -1,8 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gnip
2
4
  module GnipStream
3
-
4
5
  class ErrorReconnect
5
-
6
6
  def initialize(source_class, method_name)
7
7
  @source_class = source_class
8
8
  @method_name = method_name
@@ -12,7 +12,7 @@ module Gnip
12
12
  def attempt_to_reconnect(error_message)
13
13
  @error_message = error_message
14
14
  if @reconnect_attempts < 5
15
- @reconnect_attempts +=1
15
+ @reconnect_attempts += 1
16
16
  sleep(2)
17
17
  @source_class.send(@method_name)
18
18
  else
@@ -23,7 +23,6 @@ module Gnip
23
23
  def reconnect_failed_raise_error
24
24
  raise @error_message
25
25
  end
26
-
27
26
  end
28
27
  end
29
- end
28
+ end
@@ -1,13 +1,12 @@
1
1
  module Gnip
2
2
  module GnipStream
3
- class JsonDataBuffer
4
-
3
+ class JsonDataBuffer
5
4
  attr_accessor :split_pattern, :check_pattern
6
-
5
+
7
6
  def initialize(split_pattern, check_pattern)
8
7
  @split_pattern = split_pattern
9
8
  @check_pattern = check_pattern
10
- @buffer = ""
9
+ @buffer = ''
11
10
  end
12
11
 
13
12
  def process(chunk)
@@ -21,11 +20,10 @@ module Gnip
21
20
  activities = @buffer.split(split_pattern)
22
21
  entries << activities.shift
23
22
  @buffer = activities.join(split_pattern)
24
- @buffer = @buffer + "\r\n" if @buffer.size > 0 && new_line
23
+ @buffer += "\r\n" if !@buffer.empty? && new_line
25
24
  end
26
- entries.select{ |entry| entry.size > 0 }
25
+ entries.reject(&:empty?)
27
26
  end
28
27
  end
29
-
30
28
  end
31
- end
29
+ end
@@ -1,27 +1,27 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gnip
2
4
  class PowerTrackClient
3
-
4
5
  attr_accessor :publisher, :label, :account,
5
6
  :username, :password,
6
7
  :backfill_client, :replay_label
7
-
8
+
8
9
  attr_reader :rules, :replay_rules, :full_archive, :stream, :replay, :power_track_version
9
-
10
+
10
11
  def initialize(options = {})
11
12
  @account = options[:account]
12
- @publisher = options[:publisher]||"twitter"
13
- @label = options[:label]||"dev"
14
- @replay_label = options[:replay_label]||@label
13
+ @publisher = options[:publisher] || 'twitter'
14
+ @label = options[:label] || 'dev'
15
+ @replay_label = options[:replay_label] || @label
15
16
  @username = options[:username]
16
17
  @password = options[:password]
17
- @backfill_client = options[:backfill_client]||nil
18
- @power_track_version = options[:power_track_version]||'2.0'
18
+ @backfill_client = options[:backfill_client] || nil
19
+ @power_track_version = options[:power_track_version] || '2.0'
19
20
  @rules = Gnip::GnipRules::Rules.new(self)
20
21
  @replay_rules = Gnip::GnipRules::Rules.new(self, true)
21
22
  @full_archive = Gnip::GnipFullArchive::FullArchive.new(self)
22
23
  @stream = Gnip::GnipStream::Stream.new(self)
23
24
  @replay = Gnip::GnipStream::Replay.new(self)
24
25
  end
25
-
26
26
  end
27
27
  end
data/lib/gnip/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gnip
2
- VERSION = '0.2.8'
3
- end
4
+ VERSION = '0.2.10'
5
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gnip-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Duccio Giovannelli
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-09 00:00:00.000000000 Z
11
+ date: 2019-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -25,61 +25,61 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.9'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: pry
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: pry
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '10.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '10.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '3'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '3'
69
69
  - !ruby/object:Gem::Dependency
70
- name: httparty
70
+ name: activesupport
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '4.2'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '4.2'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: em-http-request
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -95,19 +95,19 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1'
97
97
  - !ruby/object:Gem::Dependency
98
- name: activesupport
98
+ name: httparty
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '4.2'
103
+ version: 0.16.4
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '4.2'
110
+ version: 0.16.4
111
111
  description:
112
112
  email:
113
113
  - giovannelli@extendi.it
@@ -155,8 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
155
  - !ruby/object:Gem::Version
156
156
  version: '0'
157
157
  requirements: []
158
- rubyforge_project:
159
- rubygems_version: 2.5.2
158
+ rubygems_version: 3.0.1
160
159
  signing_key:
161
160
  specification_version: 4
162
161
  summary: A Ruby library for accessing the Gnip API. See https://gnip.com/ for full