gnip-client 0.2.8 → 0.2.10

Sign up to get free protection for your applications and to get access to all the features.
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