tweetkit 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,12 +1,14 @@
1
1
  require 'faraday'
2
2
  require 'faraday_middleware'
3
3
  require 'tweetkit/auth'
4
- require 'tweetkit/default'
5
4
  require 'tweetkit/response'
6
5
 
7
6
  module Tweetkit
8
7
  module Connection
9
8
  include Tweetkit::Auth
9
+ include Tweetkit::Response
10
+
11
+ attr_accessor :previous_query, :previous_url
10
12
 
11
13
  BASE_URL = 'https://api.twitter.com/2/'
12
14
 
@@ -14,82 +16,99 @@ module Tweetkit
14
16
  request :get, endpoint, parse_query_and_convenience_headers(options)
15
17
  end
16
18
 
19
+ def post(endpoint, **options)
20
+ request :post, endpoint, parse_query_and_convenience_headers(options)
21
+ end
22
+
23
+ def put(endpoint, **options)
24
+ request :put, endpoint, parse_query_and_convenience_headers(options)
25
+ end
26
+
27
+ def delete(endpoint, **options)
28
+ request :delete, endpoint, parse_query_and_convenience_headers(options)
29
+ end
30
+
17
31
  def request(method, endpoint, data, **options)
18
- auth_type = options.delete(:auth_type)
19
32
  url = URI.parse("#{BASE_URL}#{endpoint}")
33
+ @previous_url = url
34
+ @previous_query = data
20
35
 
21
- if method == :get
22
- conn = Faraday.new(params: data) do |c|
23
- if auth_type == 'oauth1'
24
- c.request :oauth, consumer_key: @consumer_key, consumer_secret: @consumer_secret
25
- else
26
- c.authorization :Bearer, @bearer_token
27
- end
28
- end
29
- response = conn.get(url)
30
- else
31
- conn = Faraday.new do |f|
36
+ connection = Faraday.new do |conn|
37
+ if token_auth?
38
+ conn.request :oauth, consumer_key: @consumer_key, consumer_secret: @consumer_secret,
39
+ token: @access_token, token_secret: @access_token_secret
40
+ elsif bearer_auth?
41
+ conn.request :authorization, 'Bearer', @bearer_token
42
+ else
43
+ raise NotImplementedError, 'No known authentication types were configured'
32
44
  end
33
- response = conn.post(url)
34
45
  end
35
- conn.close
36
- Tweetkit::Response.new(response)
46
+
47
+ response = case method
48
+ when :get
49
+ connection.get(url, data)
50
+ when :post
51
+ connection.post(url, data.to_json, 'Content-Type' => 'application/json')
52
+ when :put
53
+ connection.put(url, data.to_json, 'Content-Type' => 'application/json')
54
+ when :delete
55
+ connection.delete(url, data.to_json, 'Content-Type' => 'application/json')
56
+ end
57
+
58
+ Tweetkit::Response::Tweets.new response, connection: connection, twitter_request: { previous_url: @previous_url, previous_query: @previous_query }
37
59
  rescue StandardError => e
38
60
  raise e
39
61
  end
40
62
 
41
- def auth_token(type = 'bearer')
42
- case type
43
- when 'bearer'
44
- @bearer_token
45
- end
46
- end
47
-
48
63
  def build_fields(options)
49
64
  fields = {}
50
- _fields = options.delete(:fields)
51
- if _fields && _fields.size > 0
52
- _fields.each do |key, value|
53
- if value.is_a?(Array)
54
- _value = value.join(',')
65
+ fields_ = options.delete(:fields)
66
+
67
+ if fields_ && !fields_.empty?
68
+ fields_.each do |field, value|
69
+ if value.is_a? Array
70
+ value = value.join(',')
55
71
  else
56
- _value = value.delete(' ')
72
+ value = value.delete(' ')
57
73
  end
58
- _key = key.to_s.gsub('_', '.')
59
- fields.merge!({ "#{_key}.fields" => _value })
74
+
75
+ field = field.to_s.gsub('_', '.')
76
+ fields.merge!({ "#{field}.fields" => value })
60
77
  end
61
78
  end
79
+
62
80
  options.each do |key, value|
63
- if key.match?('_fields')
64
- if value.is_a?(Array)
65
- _value = value.join(',')
66
- else
67
- _value = value.delete(' ')
68
- end
69
- _key = key.to_s.gsub('_', '.')
70
- options.delete(key)
71
- fields.merge!({ _key => _value })
81
+ next unless key.match? '_fields'
82
+
83
+ options.delete(key)
84
+
85
+ if value.is_a? Array
86
+ value = value.join(',')
87
+ else
88
+ value = value.delete(' ')
72
89
  end
90
+
91
+ key = key.to_s.gsub('_', '.')
92
+ fields.merge!({ key => value })
73
93
  end
94
+
74
95
  fields
75
96
  end
76
97
 
77
98
  def build_expansions(options)
78
- expansions = {}
79
- _expansions = options.delete(:expansions)
80
- if _expansions && _expansions.size > 0
81
- _expansions = _expansions.join(',')
82
- expansions.merge!({ expansions: _expansions })
83
- end
84
- expansions
99
+ expansions = options.delete(:expansions)
100
+ return unless expansions
101
+
102
+ expansions = expansions.join(',') if expansions.is_a? Array
103
+ { expansions: expansions }
85
104
  end
86
105
 
87
106
  def parse_query_and_convenience_headers(options)
88
107
  options = options.dup
89
108
  fields = build_fields(options)
90
- options.merge!(fields)
109
+ options.merge!(fields) if fields
91
110
  expansions = build_expansions(options)
92
- options.merge!(expansions)
111
+ options.merge!(expansions) if expansions
93
112
  options
94
113
  end
95
114
  end
File without changes