helpful 0.0.1.pre → 1.0.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/helpful.rb +8 -1
- data/lib/helpful/api/accounts.rb +47 -0
- data/lib/helpful/api/conversations.rb +49 -0
- data/lib/helpful/api/messages.rb +27 -0
- data/lib/helpful/api/people.rb +27 -0
- data/lib/helpful/client.rb +39 -0
- data/lib/helpful/error.rb +9 -0
- data/lib/helpful/error/client_error.rb +18 -0
- data/lib/helpful/http_client.rb +123 -0
- data/lib/helpful/http_client/auth_handler.rb +113 -0
- data/lib/helpful/http_client/error_handler.rb +51 -0
- data/lib/helpful/http_client/request_handler.rb +30 -0
- data/lib/helpful/http_client/response.rb +20 -0
- data/lib/helpful/http_client/response_handler.rb +24 -0
- metadata +54 -15
- data/lib/helpful/version.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 472d84181e1393ba4152cee0c2307c56c5cc85c5
|
4
|
+
data.tar.gz: 974104771ae3ffe8e888bac99242040c254cbbba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6198b4f5838633ecd0abc95ab357efed9e8b6fc08cfcf58d90eb79035ab54e6631177624336c72576d4f13a63f6044caee12c263349dde426f991db4f6c1cc6
|
7
|
+
data.tar.gz: b91b230ce161d23a688f0e74a37d1066a77bb70dee3f8cc45fc77fae2f84474553d5666cbd80a761e69fd7d96f5a5ba06c977e8e026d923ee52cf6dcdeabc14e
|
data/lib/helpful.rb
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
module Helpful
|
2
|
+
|
3
|
+
module Api
|
4
|
+
|
5
|
+
# These are like organizations which use Helpful.
|
6
|
+
class Accounts
|
7
|
+
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
end
|
11
|
+
|
12
|
+
# All the accounts the user has access to
|
13
|
+
#
|
14
|
+
# '/accounts' GET
|
15
|
+
def all(options = {})
|
16
|
+
body = options.fetch(:query, {})
|
17
|
+
|
18
|
+
@client.get("/accounts", body, options)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Get an account the user has access to
|
22
|
+
#
|
23
|
+
# '/accounts/:account_id' GET
|
24
|
+
#
|
25
|
+
# account_id - Identifier of the account
|
26
|
+
def get(account_id, options = {})
|
27
|
+
body = options.fetch(:query, {})
|
28
|
+
|
29
|
+
@client.get("/accounts/#{account_id}", body, options)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Update an account the user has access to
|
33
|
+
#
|
34
|
+
# '/accounts/:account_id' PATCH
|
35
|
+
#
|
36
|
+
# account_id - Identifier of the account
|
37
|
+
def update(account_id, options = {})
|
38
|
+
body = options.fetch(:body, {})
|
39
|
+
|
40
|
+
@client.patch("/accounts/#{account_id}", body, options)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Helpful
|
2
|
+
|
3
|
+
module Api
|
4
|
+
|
5
|
+
# Conversations in an account
|
6
|
+
class Conversations
|
7
|
+
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
end
|
11
|
+
|
12
|
+
# List all conversations in an account the user has access to
|
13
|
+
#
|
14
|
+
# '/accounts/:account_id/conversations' GET
|
15
|
+
#
|
16
|
+
# account_id - Identifier of the account
|
17
|
+
def all(account_id, options = {})
|
18
|
+
body = options.fetch(:query, {})
|
19
|
+
|
20
|
+
@client.get("/accounts/#{account_id}/conversations", body, options)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Create an empty conversation in account the user has access to
|
24
|
+
#
|
25
|
+
# '/accounts/:account_id/conversations' POST
|
26
|
+
#
|
27
|
+
# account_id - Identifier of the account
|
28
|
+
def create(account_id, options = {})
|
29
|
+
body = options.fetch(:body, {})
|
30
|
+
|
31
|
+
@client.post("/accounts/#{account_id}/conversations", body, options)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Get a conversation the user has access to
|
35
|
+
#
|
36
|
+
# '/conversations/:conversation_id' GET
|
37
|
+
#
|
38
|
+
# conversation_id - Identifier of the conversation
|
39
|
+
def get(conversation_id, options = {})
|
40
|
+
body = options.fetch(:query, {})
|
41
|
+
|
42
|
+
@client.get("/conversations/#{conversation_id}", body, options)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Helpful
|
2
|
+
|
3
|
+
module Api
|
4
|
+
|
5
|
+
# Messages in a conversation
|
6
|
+
class Messages
|
7
|
+
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
end
|
11
|
+
|
12
|
+
# Get a message the user has access to
|
13
|
+
#
|
14
|
+
# '/messages/:message_id' GET
|
15
|
+
#
|
16
|
+
# message_id - Identifier of the message
|
17
|
+
def get(message_id, options = {})
|
18
|
+
body = options.fetch(:query, {})
|
19
|
+
|
20
|
+
@client.get("/messages/#{message_id}", body, options)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Helpful
|
2
|
+
|
3
|
+
module Api
|
4
|
+
|
5
|
+
# People who operate or interacted with the account
|
6
|
+
class People
|
7
|
+
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
end
|
11
|
+
|
12
|
+
# List all people in the account the user has access to
|
13
|
+
#
|
14
|
+
# '/accounts/:account_id/people' GET
|
15
|
+
#
|
16
|
+
# account_id - Identifier of the account
|
17
|
+
def all(account_id, options = {})
|
18
|
+
body = options.fetch(:query, {})
|
19
|
+
|
20
|
+
@client.get("/accounts/#{account_id}/people", body, options)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "faraday"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
require "helpful/api/accounts"
|
5
|
+
require "helpful/api/people"
|
6
|
+
require "helpful/api/conversations"
|
7
|
+
require "helpful/api/messages"
|
8
|
+
|
9
|
+
module Helpful
|
10
|
+
|
11
|
+
class Client
|
12
|
+
|
13
|
+
def initialize(auth = {}, options = {})
|
14
|
+
@http_client = Helpful::HttpClient::HttpClient.new(auth, options)
|
15
|
+
end
|
16
|
+
|
17
|
+
# These are like organizations which use Helpful.
|
18
|
+
def accounts()
|
19
|
+
Helpful::Api::Accounts.new(@http_client)
|
20
|
+
end
|
21
|
+
|
22
|
+
# People who operate or interacted with the account
|
23
|
+
def people()
|
24
|
+
Helpful::Api::People.new(@http_client)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Conversations in an account
|
28
|
+
def conversations()
|
29
|
+
Helpful::Api::Conversations.new(@http_client)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Messages in a conversation
|
33
|
+
def messages()
|
34
|
+
Helpful::Api::Messages.new(@http_client)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require "helpful/http_client/auth_handler"
|
2
|
+
require "helpful/http_client/error_handler"
|
3
|
+
require "helpful/http_client/request_handler"
|
4
|
+
require "helpful/http_client/response"
|
5
|
+
require "helpful/http_client/response_handler"
|
6
|
+
|
7
|
+
module Helpful
|
8
|
+
|
9
|
+
module HttpClient
|
10
|
+
|
11
|
+
# Main HttpClient which is used by Api classes
|
12
|
+
class HttpClient
|
13
|
+
|
14
|
+
attr_accessor :options, :headers
|
15
|
+
|
16
|
+
def initialize(auth = {}, options = {})
|
17
|
+
|
18
|
+
if auth.is_a?(String)
|
19
|
+
auth = { :access_token => auth }
|
20
|
+
end
|
21
|
+
|
22
|
+
@options = {
|
23
|
+
:base => "https://helpful.io",
|
24
|
+
:api_version => "api",
|
25
|
+
:user_agent => "alpaca/0.2.1 (https://github.com/pksunkara/alpaca)"
|
26
|
+
}
|
27
|
+
|
28
|
+
@options.update(options)
|
29
|
+
|
30
|
+
@headers = {
|
31
|
+
"user-agent" => @options[:user_agent]
|
32
|
+
}
|
33
|
+
|
34
|
+
if @options.has_key?(:headers)
|
35
|
+
@headers.update(Hash[@options[:headers].map { |k, v| [k.downcase, v] }])
|
36
|
+
@options.delete(:headers)
|
37
|
+
end
|
38
|
+
|
39
|
+
@client = Faraday.new(@options[:base]) do |conn|
|
40
|
+
conn.use(Helpful::HttpClient::AuthHandler, auth)
|
41
|
+
conn.use(Helpful::HttpClient::ErrorHandler)
|
42
|
+
|
43
|
+
conn.adapter(Faraday.default_adapter)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def get(path, params = {}, options = {})
|
48
|
+
request(path, nil, "get", options.merge({ :query => params }))
|
49
|
+
end
|
50
|
+
|
51
|
+
def post(path, body = {}, options = {})
|
52
|
+
request(path, body, "post", options)
|
53
|
+
end
|
54
|
+
|
55
|
+
def patch(path, body = {}, options = {})
|
56
|
+
request(path, body, "patch", options)
|
57
|
+
end
|
58
|
+
|
59
|
+
def delete(path, body = {}, options = {})
|
60
|
+
request(path, body, "delete", options)
|
61
|
+
end
|
62
|
+
|
63
|
+
def put(path, body = {}, options = {})
|
64
|
+
request(path, body, "put", options)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Intermediate function which does three main things
|
68
|
+
#
|
69
|
+
# - Transforms the body of request into correct format
|
70
|
+
# - Creates the requests with give parameters
|
71
|
+
# - Returns response body after parsing it into correct format
|
72
|
+
def request(path, body, method, options)
|
73
|
+
options = @options.merge(options)
|
74
|
+
|
75
|
+
options[:headers] = options[:headers] || {}
|
76
|
+
options[:headers] = @headers.merge(Hash[options[:headers].map { |k, v| [k.downcase, v] }])
|
77
|
+
|
78
|
+
options[:body] = body
|
79
|
+
|
80
|
+
if method != "get"
|
81
|
+
options[:body] = options[:body] || {}
|
82
|
+
options = set_body(options)
|
83
|
+
end
|
84
|
+
|
85
|
+
response = create_request(method, path, options)
|
86
|
+
|
87
|
+
body = get_body(response)
|
88
|
+
|
89
|
+
Helpful::HttpClient::Response.new(body, response.status, response.headers)
|
90
|
+
end
|
91
|
+
|
92
|
+
# Creating a request with the given arguments
|
93
|
+
#
|
94
|
+
# If api_version is set, appends it immediately after host
|
95
|
+
def create_request(method, path, options)
|
96
|
+
version = options.has_key?(:api_version) ? "/#{options[:api_version]}" : ""
|
97
|
+
|
98
|
+
path = "#{version}#{path}"
|
99
|
+
|
100
|
+
instance_eval <<-RUBY, __FILE__, __LINE__ + 1
|
101
|
+
@client.#{method}(path) do |req|
|
102
|
+
req.body = options[:body]
|
103
|
+
req.headers.update(options[:headers])
|
104
|
+
req.params.update(options[:query]) if options[:query]
|
105
|
+
end
|
106
|
+
RUBY
|
107
|
+
end
|
108
|
+
|
109
|
+
# Get response body in correct format
|
110
|
+
def get_body(response)
|
111
|
+
Helpful::HttpClient::ResponseHandler.get_body(response)
|
112
|
+
end
|
113
|
+
|
114
|
+
# Set request body in correct format
|
115
|
+
def set_body(options)
|
116
|
+
Helpful::HttpClient::RequestHandler.set_body(options)
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require "base64"
|
2
|
+
|
3
|
+
module Helpful
|
4
|
+
|
5
|
+
module HttpClient
|
6
|
+
|
7
|
+
# AuthHandler takes care of devising the auth type and using it
|
8
|
+
class AuthHandler < Faraday::Middleware
|
9
|
+
|
10
|
+
HTTP_PASSWORD = 0
|
11
|
+
|
12
|
+
URL_SECRET = 2
|
13
|
+
URL_TOKEN = 3
|
14
|
+
|
15
|
+
def initialize(app, auth = {}, options = {})
|
16
|
+
@auth = auth
|
17
|
+
super(app)
|
18
|
+
end
|
19
|
+
|
20
|
+
def call(env)
|
21
|
+
if !@auth.empty?
|
22
|
+
auth = get_auth_type
|
23
|
+
flag = false
|
24
|
+
|
25
|
+
if auth == HTTP_PASSWORD
|
26
|
+
env = http_password(env)
|
27
|
+
flag = true
|
28
|
+
end
|
29
|
+
|
30
|
+
if auth == URL_SECRET
|
31
|
+
env = url_secret(env)
|
32
|
+
flag = true
|
33
|
+
end
|
34
|
+
|
35
|
+
if auth == URL_TOKEN
|
36
|
+
env = url_token(env)
|
37
|
+
flag = true
|
38
|
+
end
|
39
|
+
|
40
|
+
if !flag
|
41
|
+
raise StandardError.new "Unable to calculate authorization method. Please check"
|
42
|
+
end
|
43
|
+
else
|
44
|
+
raise StandardError.new "Server requires authentication to proceed further. Please check"
|
45
|
+
end
|
46
|
+
|
47
|
+
@app.call(env)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Calculating the Authentication Type
|
51
|
+
def get_auth_type()
|
52
|
+
|
53
|
+
if @auth.has_key?(:username) and @auth.has_key?(:password)
|
54
|
+
return HTTP_PASSWORD
|
55
|
+
end
|
56
|
+
|
57
|
+
if @auth.has_key?(:client_id) and @auth.has_key?(:client_secret)
|
58
|
+
return URL_SECRET
|
59
|
+
end
|
60
|
+
|
61
|
+
if @auth.has_key?(:access_token)
|
62
|
+
return URL_TOKEN
|
63
|
+
end
|
64
|
+
|
65
|
+
return -1
|
66
|
+
end
|
67
|
+
|
68
|
+
# Basic Authorization with username and password
|
69
|
+
def http_password(env)
|
70
|
+
code = Base64.encode64 "#{@auth[:username]}:#{@auth[:password]}"
|
71
|
+
|
72
|
+
env[:request_headers]["Authorization"] = "Basic #{code}"
|
73
|
+
|
74
|
+
return env
|
75
|
+
end
|
76
|
+
|
77
|
+
# OAUTH2 Authorization with client secret
|
78
|
+
def url_secret(env)
|
79
|
+
query = {
|
80
|
+
:client_id => @auth[:client_id],
|
81
|
+
:client_secret => @auth[:client_secret]
|
82
|
+
}
|
83
|
+
|
84
|
+
merge_query(env, query)
|
85
|
+
end
|
86
|
+
|
87
|
+
# OAUTH2 Authorization with access token
|
88
|
+
def url_token(env)
|
89
|
+
query = { :access_token => @auth[:access_token] }
|
90
|
+
|
91
|
+
merge_query(env, query)
|
92
|
+
end
|
93
|
+
|
94
|
+
def query_params(url)
|
95
|
+
if url.query.nil? or url.query.empty?
|
96
|
+
{}
|
97
|
+
else
|
98
|
+
Faraday::Utils.parse_query(url.query)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def merge_query(env, query)
|
103
|
+
query = query.update query_params(env[:url])
|
104
|
+
|
105
|
+
env[:url].query = Faraday::Utils.build_query(query)
|
106
|
+
|
107
|
+
return env
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Helpful
|
2
|
+
|
3
|
+
module HttpClient
|
4
|
+
|
5
|
+
# ErrorHanlder takes care of selecting the error message from response body
|
6
|
+
class ErrorHandler < Faraday::Middleware
|
7
|
+
|
8
|
+
def initialize(app)
|
9
|
+
super(app)
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
@app.call(env).on_complete do |env|
|
14
|
+
code = env.status
|
15
|
+
type = env.response_headers["content-type"]
|
16
|
+
|
17
|
+
case code
|
18
|
+
when 500...599
|
19
|
+
raise Helpful::Error::ClientError.new("Error #{code}", code)
|
20
|
+
when 400...499
|
21
|
+
body = Helpful::HttpClient::ResponseHandler.get_body(env)
|
22
|
+
message = ""
|
23
|
+
|
24
|
+
# If HTML, whole body is taken
|
25
|
+
if body.is_a?(String)
|
26
|
+
message = body
|
27
|
+
end
|
28
|
+
|
29
|
+
# If JSON, a particular field is taken and used
|
30
|
+
if type.include?("json") and body.is_a?(Hash)
|
31
|
+
if body.has_key?("error")
|
32
|
+
message = body["error"]
|
33
|
+
else
|
34
|
+
message = "Unable to select error message from json returned by request responsible for error"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
if message == ""
|
39
|
+
message = "Unable to understand the content type of response returned by request responsible for error"
|
40
|
+
end
|
41
|
+
|
42
|
+
raise Helpful::Error::ClientError.new message, code
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Helpful
|
2
|
+
|
3
|
+
module HttpClient
|
4
|
+
|
5
|
+
# RequestHandler takes care of encoding the request body into format given by options
|
6
|
+
class RequestHandler
|
7
|
+
|
8
|
+
def self.set_body(options)
|
9
|
+
type = options.fetch(:request_type, "json")
|
10
|
+
|
11
|
+
# Encoding request body into JSON format
|
12
|
+
if type == "json"
|
13
|
+
options[:body] = options[:body].to_json
|
14
|
+
options[:headers]["content-type"] = "application/json"
|
15
|
+
end
|
16
|
+
|
17
|
+
# Raw body
|
18
|
+
if type == "raw"
|
19
|
+
options[:body] = options[:body].is_a?(Hash) ? "" : options[:body]
|
20
|
+
options[:headers].delete("content-type")
|
21
|
+
end
|
22
|
+
|
23
|
+
return options
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Helpful
|
2
|
+
|
3
|
+
module HttpClient
|
4
|
+
|
5
|
+
# Response object contains the response returned by the client
|
6
|
+
class Response
|
7
|
+
|
8
|
+
attr_accessor :body, :code, :headers
|
9
|
+
|
10
|
+
def initialize(body, code, headers)
|
11
|
+
@body = body
|
12
|
+
@code = code
|
13
|
+
@headers = headers
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Helpful
|
2
|
+
|
3
|
+
module HttpClient
|
4
|
+
|
5
|
+
# ResponseHandler takes care of decoding the response body into suitable type
|
6
|
+
class ResponseHandler
|
7
|
+
|
8
|
+
def self.get_body(response)
|
9
|
+
type = response.headers["content-type"]
|
10
|
+
body = response.body
|
11
|
+
|
12
|
+
# Response body is in JSON
|
13
|
+
if type.include?("json")
|
14
|
+
body = JSON.parse body
|
15
|
+
end
|
16
|
+
|
17
|
+
return body
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
metadata
CHANGED
@@ -1,27 +1,66 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: helpful
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Pavan Kumar Sunkara
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
date: 2014-09-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.9.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.9.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.7.7
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.7.7
|
41
|
+
description: Official Helpful API library client for ruby
|
42
|
+
email: pavan.sss1991@gmail.com
|
17
43
|
executables: []
|
18
44
|
extensions: []
|
19
45
|
extra_rdoc_files: []
|
20
46
|
files:
|
21
47
|
- lib/helpful.rb
|
22
|
-
- lib/helpful/
|
23
|
-
|
24
|
-
|
48
|
+
- lib/helpful/api/accounts.rb
|
49
|
+
- lib/helpful/api/conversations.rb
|
50
|
+
- lib/helpful/api/messages.rb
|
51
|
+
- lib/helpful/api/people.rb
|
52
|
+
- lib/helpful/client.rb
|
53
|
+
- lib/helpful/error.rb
|
54
|
+
- lib/helpful/error/client_error.rb
|
55
|
+
- lib/helpful/http_client.rb
|
56
|
+
- lib/helpful/http_client/auth_handler.rb
|
57
|
+
- lib/helpful/http_client/error_handler.rb
|
58
|
+
- lib/helpful/http_client/request_handler.rb
|
59
|
+
- lib/helpful/http_client/response.rb
|
60
|
+
- lib/helpful/http_client/response_handler.rb
|
61
|
+
homepage: https://helpful.io
|
62
|
+
licenses:
|
63
|
+
- MIT
|
25
64
|
metadata: {}
|
26
65
|
post_install_message:
|
27
66
|
rdoc_options: []
|
@@ -34,13 +73,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
34
73
|
version: '0'
|
35
74
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
75
|
requirements:
|
37
|
-
- - "
|
76
|
+
- - ">="
|
38
77
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
78
|
+
version: '0'
|
40
79
|
requirements: []
|
41
80
|
rubyforge_project:
|
42
|
-
rubygems_version: 2.2.
|
81
|
+
rubygems_version: 2.2.2
|
43
82
|
signing_key:
|
44
83
|
specification_version: 4
|
45
|
-
summary:
|
84
|
+
summary: Official Helpful API library client for ruby
|
46
85
|
test_files: []
|
data/lib/helpful/version.rb
DELETED