assembla_api 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +20 -0
- data/Rakefile +22 -0
- data/lib/assembla_api.rb +130 -0
- data/lib/assembla_api/api.rb +373 -0
- data/lib/assembla_api/api/actions.rb +58 -0
- data/lib/assembla_api/api/arguments.rb +248 -0
- data/lib/assembla_api/api/config.rb +107 -0
- data/lib/assembla_api/api/config/property.rb +30 -0
- data/lib/assembla_api/api/config/property_set.rb +119 -0
- data/lib/assembla_api/api/factory.rb +33 -0
- data/lib/assembla_api/authorization.rb +76 -0
- data/lib/assembla_api/client.rb +21 -0
- data/lib/assembla_api/client/activity.rb +30 -0
- data/lib/assembla_api/client/authorizations.rb +143 -0
- data/lib/assembla_api/client/authorizations/app.rb +98 -0
- data/lib/assembla_api/client/portfolio.rb +19 -0
- data/lib/assembla_api/client/portfolio/invitations.rb +30 -0
- data/lib/assembla_api/client/portfolio/spaces.rb +13 -0
- data/lib/assembla_api/client/portfolio/standup_reports.rb +34 -0
- data/lib/assembla_api/client/portfolio/tasks.rb +13 -0
- data/lib/assembla_api/client/portfolio/ticket_reports.rb +13 -0
- data/lib/assembla_api/client/portfolio/tickets.rb +13 -0
- data/lib/assembla_api/client/portfolio/users.rb +13 -0
- data/lib/assembla_api/client/spaces.rb +140 -0
- data/lib/assembla_api/client/spaces/documents.rb +87 -0
- data/lib/assembla_api/client/spaces/milestones.rb +102 -0
- data/lib/assembla_api/client/spaces/space_tools.rb +65 -0
- data/lib/assembla_api/client/spaces/space_tools/merge_requests.rb +105 -0
- data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions.rb +41 -0
- data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions/comments.rb +34 -0
- data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions/votes.rb +46 -0
- data/lib/assembla_api/client/spaces/ssh.rb +14 -0
- data/lib/assembla_api/client/spaces/ssh/actions.rb +76 -0
- data/lib/assembla_api/client/spaces/ssh/actions/launches.rb +14 -0
- data/lib/assembla_api/client/spaces/ssh/keys.rb +18 -0
- data/lib/assembla_api/client/spaces/ssh/launches.rb +29 -0
- data/lib/assembla_api/client/spaces/ssh/servers.rb +63 -0
- data/lib/assembla_api/client/spaces/standup_away_reports.rb +41 -0
- data/lib/assembla_api/client/spaces/standup_reports.rb +41 -0
- data/lib/assembla_api/client/spaces/tags.rb +96 -0
- data/lib/assembla_api/client/spaces/tickets.rb +154 -0
- data/lib/assembla_api/client/spaces/tickets/associations.rb +57 -0
- data/lib/assembla_api/client/spaces/tickets/comments.rb +45 -0
- data/lib/assembla_api/client/spaces/tickets/custom_fields.rb +57 -0
- data/lib/assembla_api/client/spaces/tickets/statuses.rb +55 -0
- data/lib/assembla_api/client/spaces/user_roles.rb +61 -0
- data/lib/assembla_api/client/spaces/users.rb +11 -0
- data/lib/assembla_api/client/spaces/webhooks.rb +63 -0
- data/lib/assembla_api/client/spaces/wiki_pages.rb +78 -0
- data/lib/assembla_api/client/spaces/wiki_pages/versions.rb +20 -0
- data/lib/assembla_api/client/tasks.rb +72 -0
- data/lib/assembla_api/client/users.rb +49 -0
- data/lib/assembla_api/client/users/keys.rb +97 -0
- data/lib/assembla_api/configuration.rb +71 -0
- data/lib/assembla_api/connection.rb +66 -0
- data/lib/assembla_api/constants.rb +74 -0
- data/lib/assembla_api/core_ext/array.rb +25 -0
- data/lib/assembla_api/core_ext/hash.rb +92 -0
- data/lib/assembla_api/core_ext/ordered_hash.rb +107 -0
- data/lib/assembla_api/deprecation.rb +39 -0
- data/lib/assembla_api/error.rb +37 -0
- data/lib/assembla_api/error/bad_request.rb +14 -0
- data/lib/assembla_api/error/client_error.rb +20 -0
- data/lib/assembla_api/error/forbidden.rb +14 -0
- data/lib/assembla_api/error/internal_server_error.rb +15 -0
- data/lib/assembla_api/error/invalid_options.rb +18 -0
- data/lib/assembla_api/error/not_acceptable.rb +15 -0
- data/lib/assembla_api/error/not_found.rb +14 -0
- data/lib/assembla_api/error/required_params.rb +18 -0
- data/lib/assembla_api/error/service_error.rb +68 -0
- data/lib/assembla_api/error/service_unavailable.rb +15 -0
- data/lib/assembla_api/error/unauthorized.rb +15 -0
- data/lib/assembla_api/error/unknown_media.rb +18 -0
- data/lib/assembla_api/error/unknown_value.rb +18 -0
- data/lib/assembla_api/error/unprocessable_entity.rb +14 -0
- data/lib/assembla_api/error/validations.rb +18 -0
- data/lib/assembla_api/ext/faraday.rb +38 -0
- data/lib/assembla_api/jsonable.rb +18 -0
- data/lib/assembla_api/middleware.rb +31 -0
- data/lib/assembla_api/mime_type.rb +33 -0
- data/lib/assembla_api/normalizer.rb +25 -0
- data/lib/assembla_api/null_encoder.rb +25 -0
- data/lib/assembla_api/page_iterator.rb +142 -0
- data/lib/assembla_api/page_links.rb +45 -0
- data/lib/assembla_api/paged_request.rb +40 -0
- data/lib/assembla_api/pagination.rb +102 -0
- data/lib/assembla_api/parameter_filter.rb +32 -0
- data/lib/assembla_api/params_hash.rb +101 -0
- data/lib/assembla_api/rate_limit.rb +25 -0
- data/lib/assembla_api/request.rb +85 -0
- data/lib/assembla_api/request/basic_auth.rb +33 -0
- data/lib/assembla_api/request/jsonize.rb +53 -0
- data/lib/assembla_api/request/key_auth.rb +31 -0
- data/lib/assembla_api/request/oauth2.rb +42 -0
- data/lib/assembla_api/request/verbs.rb +60 -0
- data/lib/assembla_api/response.rb +28 -0
- data/lib/assembla_api/response/header.rb +76 -0
- data/lib/assembla_api/response/jsonize.rb +29 -0
- data/lib/assembla_api/response/mashify.rb +24 -0
- data/lib/assembla_api/response/raise_error.rb +18 -0
- data/lib/assembla_api/response/xmlize.rb +26 -0
- data/lib/assembla_api/response_wrapper.rb +157 -0
- data/lib/assembla_api/ssl_certs/cacerts.pem +2183 -0
- data/lib/assembla_api/utils/url.rb +59 -0
- data/lib/assembla_api/validations.rb +25 -0
- data/lib/assembla_api/validations/format.rb +24 -0
- data/lib/assembla_api/validations/presence.rb +30 -0
- data/lib/assembla_api/validations/required.rb +24 -0
- data/lib/assembla_api/validations/token.rb +41 -0
- data/lib/assembla_api/version.rb +12 -0
- metadata +347 -0
@@ -0,0 +1,101 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'delegate'
|
4
|
+
require 'base64'
|
5
|
+
|
6
|
+
module Assembla
|
7
|
+
|
8
|
+
# Class responsible for holding request parameters
|
9
|
+
class ParamsHash < DelegateClass(Hash)
|
10
|
+
include Normalizer
|
11
|
+
include MimeType
|
12
|
+
|
13
|
+
def initialize(hash)
|
14
|
+
super(normalize!(Hash[hash]))
|
15
|
+
end
|
16
|
+
|
17
|
+
# Create empty hash
|
18
|
+
#
|
19
|
+
def self.empty
|
20
|
+
new({})
|
21
|
+
end
|
22
|
+
|
23
|
+
# Extract and parse media type param
|
24
|
+
#
|
25
|
+
# [.version].param[+json]
|
26
|
+
#
|
27
|
+
def media
|
28
|
+
parse(delete('media'))
|
29
|
+
end
|
30
|
+
|
31
|
+
# Return accept header if present
|
32
|
+
#
|
33
|
+
def accept
|
34
|
+
if has_key?('accept')
|
35
|
+
delete('accept')
|
36
|
+
elsif has_key?('media')
|
37
|
+
media
|
38
|
+
else
|
39
|
+
nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Extract request data from parameters
|
44
|
+
#
|
45
|
+
def data
|
46
|
+
if has_key?('data') && !self['data'].nil?
|
47
|
+
return delete('data')
|
48
|
+
else
|
49
|
+
return to_hash
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def encoder
|
54
|
+
if has_key?('encoder') && self['encoder']
|
55
|
+
return delete('encoder')
|
56
|
+
else
|
57
|
+
return {}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Any client configuration options
|
62
|
+
#
|
63
|
+
def options
|
64
|
+
opts = has_key?('options') ? delete('options') : {}
|
65
|
+
headers = opts.fetch(:headers) { {} }
|
66
|
+
if value = accept
|
67
|
+
headers[:accept] = value
|
68
|
+
end
|
69
|
+
if value = delete('content_type')
|
70
|
+
headers[:content_type] = value
|
71
|
+
end
|
72
|
+
opts[:raw] = has_key?('raw') ? delete('raw') : false
|
73
|
+
opts[:headers] = headers unless headers.empty?
|
74
|
+
opts
|
75
|
+
end
|
76
|
+
|
77
|
+
# Update hash with default parameters for non existing keys
|
78
|
+
#
|
79
|
+
def merge_default(defaults)
|
80
|
+
if defaults && !defaults.empty?
|
81
|
+
defaults.each do |key, value|
|
82
|
+
self[key] = value unless self.has_key?(key)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
self
|
86
|
+
end
|
87
|
+
|
88
|
+
# Base64 encode string removing newline characters
|
89
|
+
#
|
90
|
+
def strict_encode64(key)
|
91
|
+
value = self[key]
|
92
|
+
encoded = if Base64.respond_to?(:strict_encode64)
|
93
|
+
Base64.strict_encode64(value)
|
94
|
+
else
|
95
|
+
[value].pack("m0")
|
96
|
+
end
|
97
|
+
self[key] = encoded.delete("\n\r")
|
98
|
+
end
|
99
|
+
|
100
|
+
end # ParamsHash
|
101
|
+
end # Assembla
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Assembla
|
4
|
+
module RateLimit
|
5
|
+
|
6
|
+
def ratelimit(*args)
|
7
|
+
arguments(args)
|
8
|
+
|
9
|
+
get_request("/rate_limit", arguments.params).rate.limit
|
10
|
+
end
|
11
|
+
|
12
|
+
def ratelimit_remaining(*args)
|
13
|
+
arguments(args)
|
14
|
+
|
15
|
+
get_request("/rate_limit", arguments.params).rate.remaining
|
16
|
+
end
|
17
|
+
|
18
|
+
def ratelimit_reset(*args)
|
19
|
+
arguments(args)
|
20
|
+
|
21
|
+
get_request("/rate_limit", arguments.params).rate.reset
|
22
|
+
end
|
23
|
+
|
24
|
+
end # RateLimit
|
25
|
+
end # Assembla
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'assembla_api/request/oauth2'
|
4
|
+
require 'assembla_api/request/basic_auth'
|
5
|
+
require 'assembla_api/request/key_auth'
|
6
|
+
require 'assembla_api/request/jsonize'
|
7
|
+
|
8
|
+
require 'assembla_api/connection'
|
9
|
+
|
10
|
+
module Assembla
|
11
|
+
# A class responsible for dispatching http requests
|
12
|
+
class Request
|
13
|
+
include Connection
|
14
|
+
|
15
|
+
HTTP_METHODS = [:get, :head, :post, :put, :delete, :patch]
|
16
|
+
|
17
|
+
METHODS_WITH_BODIES = [:post, :put, :patch]
|
18
|
+
|
19
|
+
# Return http verb
|
20
|
+
#
|
21
|
+
# @return [Symbol]
|
22
|
+
attr_reader :action
|
23
|
+
|
24
|
+
# Return url
|
25
|
+
#
|
26
|
+
# @return [String]
|
27
|
+
attr_accessor :path
|
28
|
+
|
29
|
+
# Return api this request is associated with
|
30
|
+
#
|
31
|
+
# @return [Assembla::API]
|
32
|
+
attr_reader :api
|
33
|
+
|
34
|
+
# Create a new Request
|
35
|
+
#
|
36
|
+
# @return [Assembla::Request]
|
37
|
+
#
|
38
|
+
# @api public
|
39
|
+
def initialize(action, path, api)
|
40
|
+
@action = action
|
41
|
+
@path = path
|
42
|
+
@api = api
|
43
|
+
end
|
44
|
+
|
45
|
+
# Performs a request
|
46
|
+
#
|
47
|
+
# @param [Symbol] method - The Symbol the HTTP verb
|
48
|
+
# @param [String] path - String relative URL to access
|
49
|
+
# @param [ParamsHash] params - ParamsHash to configure the request API
|
50
|
+
#
|
51
|
+
# @return [Assembla::ResponseWrapper]
|
52
|
+
#
|
53
|
+
# @api private
|
54
|
+
def call(current_options, params)
|
55
|
+
unless HTTP_METHODS.include?(action)
|
56
|
+
raise ArgumentError, "unknown http method: #{method}"
|
57
|
+
end
|
58
|
+
|
59
|
+
puts "EXECUTED: #{action} - #{path} with PARAMS: #{params}" if ENV['DEBUG']
|
60
|
+
|
61
|
+
request_options = params.options
|
62
|
+
connection_options = current_options.merge(request_options)
|
63
|
+
conn = connection(api, connection_options)
|
64
|
+
|
65
|
+
if conn.path_prefix != '/' && self.path.index(conn.path_prefix) != 0
|
66
|
+
self.path = (conn.path_prefix + self.path).gsub(/\/(\/)*/, '/')
|
67
|
+
end
|
68
|
+
|
69
|
+
response = conn.send(action) do |request|
|
70
|
+
case action.to_sym
|
71
|
+
when *(HTTP_METHODS - METHODS_WITH_BODIES)
|
72
|
+
request.body = params.data if params.has_key?('data')
|
73
|
+
if params.has_key?('encoder')
|
74
|
+
request.params.params_encoder(params.encoder)
|
75
|
+
end
|
76
|
+
request.url(self.path, params.to_hash)
|
77
|
+
when *METHODS_WITH_BODIES
|
78
|
+
request.url(self.path, connection_options[:query] || {})
|
79
|
+
request.body = params.data unless params.empty?
|
80
|
+
end
|
81
|
+
end
|
82
|
+
ResponseWrapper.new(response, api)
|
83
|
+
end
|
84
|
+
end # Request
|
85
|
+
end # Assembla
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
require 'base64'
|
5
|
+
|
6
|
+
module Assembla
|
7
|
+
class Request
|
8
|
+
class BasicAuth < Faraday::Middleware
|
9
|
+
dependency 'base64'
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
unless @auth.to_s.empty?
|
13
|
+
env[:request_headers].merge!('Authorization' => "Basic #{@auth}\"")
|
14
|
+
end
|
15
|
+
|
16
|
+
@app.call env
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(app, *args)
|
20
|
+
@app = app
|
21
|
+
credentials = ""
|
22
|
+
options = args.extract_options!
|
23
|
+
if options.has_key? :login
|
24
|
+
credentials = "#{options[:login]}:#{options[:password]}"
|
25
|
+
elsif options.has_key? :basic_auth
|
26
|
+
credentials = "#{options[:basic_auth]}"
|
27
|
+
end
|
28
|
+
@auth = Base64.encode64(credentials)
|
29
|
+
@auth.gsub!("\n", "")
|
30
|
+
end
|
31
|
+
end # BasicAuth
|
32
|
+
end # Request
|
33
|
+
end # Assembla
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
|
5
|
+
module Assembla
|
6
|
+
class Request::Jsonize < Faraday::Middleware
|
7
|
+
|
8
|
+
CONTENT_TYPE = 'Content-Type'.freeze
|
9
|
+
MIME_TYPE = 'application/json'.freeze
|
10
|
+
|
11
|
+
dependency 'multi_json'
|
12
|
+
|
13
|
+
def call(env)
|
14
|
+
unless env[:request_headers][CONTENT_TYPE].to_s =~ /^multipart/
|
15
|
+
if request_with_body?(env)
|
16
|
+
env[:request_headers][CONTENT_TYPE] ||= MIME_TYPE
|
17
|
+
env[:body] = encode_body env[:body] unless env[:body].respond_to?(:to_str)
|
18
|
+
else
|
19
|
+
# Ensure valid body for put and post requests
|
20
|
+
if [:put, :patch, :post].include? env[:method]
|
21
|
+
env[:body] = encode_body({})
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
@app.call env
|
27
|
+
end
|
28
|
+
|
29
|
+
def encode_body(value)
|
30
|
+
if MultiJson.respond_to?(:dump)
|
31
|
+
MultiJson.dump(value)
|
32
|
+
else
|
33
|
+
MultiJson.encode(value)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def request_with_body?(env)
|
38
|
+
type = request_type(env)
|
39
|
+
has_body?(env) and (type.empty? or type == MIME_TYPE)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Don't encode bodies in string form
|
43
|
+
def has_body?(env)
|
44
|
+
body = env[:body] and !(body.respond_to?(:to_str) and body.empty?)
|
45
|
+
end
|
46
|
+
|
47
|
+
def request_type(env)
|
48
|
+
type = env[:request_headers][CONTENT_TYPE].to_s
|
49
|
+
type = type.split(';', 2).first if type.index(';')
|
50
|
+
type
|
51
|
+
end
|
52
|
+
end # Request::Jsonize
|
53
|
+
end # Assembla
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
require 'base64'
|
5
|
+
|
6
|
+
module Assembla
|
7
|
+
class Request
|
8
|
+
class KeyAuth < Faraday::Middleware
|
9
|
+
dependency 'base64'
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
unless @api_key.to_s.empty?
|
13
|
+
env[:request_headers].merge!('X-Api-Key' => @api_key,
|
14
|
+
'X-Api-Secret' => @api_secret)
|
15
|
+
end
|
16
|
+
|
17
|
+
@app.call env
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize(app, *args)
|
21
|
+
@app = app
|
22
|
+
options = args.extract_options!
|
23
|
+
|
24
|
+
if options.has_key? :api_key
|
25
|
+
@api_key = options[:api_key]
|
26
|
+
@api_secret = options[:api_secret]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end # KeyAuth
|
30
|
+
end # Request
|
31
|
+
end # Assembla
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
|
5
|
+
module Assembla
|
6
|
+
class Request
|
7
|
+
class OAuth2 < Faraday::Middleware
|
8
|
+
include Assembla::Utils::Url
|
9
|
+
|
10
|
+
ACCESS_TOKEN = 'access_token'.freeze
|
11
|
+
AUTH_HEADER = 'Authorization'.freeze
|
12
|
+
|
13
|
+
dependency 'oauth2'
|
14
|
+
|
15
|
+
def call(env)
|
16
|
+
# Extract parameters from the query
|
17
|
+
params = { ACCESS_TOKEN => @token }.update query_params(env[:url])
|
18
|
+
|
19
|
+
if token = params[ACCESS_TOKEN] and !token.empty?
|
20
|
+
env[:url].query = build_query params
|
21
|
+
env[:request_headers].merge!(AUTH_HEADER => "Token token=\"#{token}\"")
|
22
|
+
end
|
23
|
+
|
24
|
+
@app.call env
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize(app, *args)
|
28
|
+
super app
|
29
|
+
@app = app
|
30
|
+
@token = args.shift
|
31
|
+
end
|
32
|
+
|
33
|
+
def query_params(url)
|
34
|
+
if url.query.nil? or url.query.empty?
|
35
|
+
{}
|
36
|
+
else
|
37
|
+
parse_query url.query
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end # OAuth2
|
41
|
+
end # Request
|
42
|
+
end # Assembla
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Assembla
|
4
|
+
# A class responsible for dispatching http requests
|
5
|
+
class Request
|
6
|
+
|
7
|
+
# Defines HTTP verbs
|
8
|
+
module Verbs
|
9
|
+
# Make a head request
|
10
|
+
#
|
11
|
+
# @api public
|
12
|
+
def head_request(path, params = ParamsHash.empty)
|
13
|
+
Request.new(:head, path, self).call(current_options, params)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Make a get request
|
17
|
+
#
|
18
|
+
# @api public
|
19
|
+
def get_request(path, params = ParamsHash.empty)
|
20
|
+
request = Request.new(:get, path, self).call(current_options, params)
|
21
|
+
request.auto_paginate
|
22
|
+
end
|
23
|
+
|
24
|
+
# Make a patch request
|
25
|
+
#
|
26
|
+
# @api public
|
27
|
+
def patch_request(path, params = ParamsHash.empty)
|
28
|
+
Request.new(:patch, path, self).call(current_options, params)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Make a post request
|
32
|
+
#
|
33
|
+
# @api public
|
34
|
+
def post_request(path, params = ParamsHash.empty)
|
35
|
+
Request.new(:post, path, self).call(current_options, params)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Make a put request
|
39
|
+
#
|
40
|
+
# @api public
|
41
|
+
def put_request(path, params = ParamsHash.empty)
|
42
|
+
Request.new(:put, path, self).call(current_options, params)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Make a delete request
|
46
|
+
#
|
47
|
+
# @api public
|
48
|
+
def delete_request(path, params = ParamsHash.empty)
|
49
|
+
Request.new(:delete, path, self).call(current_options, params)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Make a options request
|
53
|
+
#
|
54
|
+
# @api public
|
55
|
+
def options_request(path, params = ParamsHash.empty)
|
56
|
+
Request.new(:options, path, self).call(current_options, params)
|
57
|
+
end
|
58
|
+
end # Verbs
|
59
|
+
end # Request
|
60
|
+
end # Assembla
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
|
5
|
+
module Assembla
|
6
|
+
# Contains methods and attributes that act on the response returned from the
|
7
|
+
# request
|
8
|
+
class Response < Faraday::Response::Middleware
|
9
|
+
CONTENT_TYPE = 'Content-Type'.freeze
|
10
|
+
|
11
|
+
class << self
|
12
|
+
attr_accessor :parser
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.define_parser(&block)
|
16
|
+
@parser = block
|
17
|
+
end
|
18
|
+
|
19
|
+
def response_type(env)
|
20
|
+
env[:response_headers][CONTENT_TYPE].to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
def parse_response?(env)
|
24
|
+
env[:body].respond_to? :to_str
|
25
|
+
end
|
26
|
+
|
27
|
+
end # Response
|
28
|
+
end # Assembla
|