assembla_api 0.1.2
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 +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,37 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'descendants_tracker'
|
|
4
|
+
|
|
5
|
+
module Assembla
|
|
6
|
+
module Error
|
|
7
|
+
class AssemblaError < StandardError
|
|
8
|
+
extend DescendantsTracker
|
|
9
|
+
|
|
10
|
+
attr_reader :response_message, :response_headers
|
|
11
|
+
|
|
12
|
+
# Initialize a new Assembla error object.
|
|
13
|
+
#
|
|
14
|
+
def initialize(message=$!)
|
|
15
|
+
if message.respond_to?(:backtrace)
|
|
16
|
+
super(message.message)
|
|
17
|
+
@response_message = message
|
|
18
|
+
else
|
|
19
|
+
super(message.to_s)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def backtrace
|
|
24
|
+
@response_message ? @response_message.backtrace : super
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end # AssemblaError
|
|
28
|
+
end # Error
|
|
29
|
+
end # Assembla
|
|
30
|
+
|
|
31
|
+
require 'assembla_api/error/service_error'
|
|
32
|
+
require 'assembla_api/error/client_error'
|
|
33
|
+
Dir[File.dirname(__FILE__) + '/error/*.rb'].sort.each do |path|
|
|
34
|
+
filename = File.basename(path)
|
|
35
|
+
next if ['service_error.rb', 'client_error.rb'].include?(filename)
|
|
36
|
+
require "assembla_api/error/#{filename}"
|
|
37
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla
|
|
4
|
+
module Error
|
|
5
|
+
# Raised when Assembla returns the HTTP status code 400
|
|
6
|
+
class BadRequest < ServiceError
|
|
7
|
+
http_status_code 400
|
|
8
|
+
|
|
9
|
+
def initialize(response)
|
|
10
|
+
super(response)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end # Assembla
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla #:nodoc
|
|
4
|
+
# Raised when Assembla returns the HTTP status code 404
|
|
5
|
+
module Error
|
|
6
|
+
class ClientError < AssemblaError
|
|
7
|
+
attr_reader :problem, :summary, :resolution
|
|
8
|
+
|
|
9
|
+
def initialize(message)
|
|
10
|
+
super(message)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def generate_message(attributes)
|
|
14
|
+
"\nProblem:\n #{attributes[:problem]}"+
|
|
15
|
+
"\nSummary:\n #{attributes[:summary]}"+
|
|
16
|
+
"\nResolution:\n #{attributes[:resolution]}"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end # Error
|
|
20
|
+
end # Assembla
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla #:nodoc
|
|
4
|
+
# Raised when Assembla returns the HTTP status code 403
|
|
5
|
+
module Error
|
|
6
|
+
class Forbidden < ServiceError
|
|
7
|
+
http_status_code 403
|
|
8
|
+
|
|
9
|
+
def initialize(response)
|
|
10
|
+
super(response)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end # Error
|
|
14
|
+
end # Assembla
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla #:nodoc
|
|
4
|
+
# Raised when Assembla returns the HTTP status code 500
|
|
5
|
+
module Error
|
|
6
|
+
class InternalServerError < ServiceError
|
|
7
|
+
http_status_code 500
|
|
8
|
+
|
|
9
|
+
def initialize(response)
|
|
10
|
+
super(response)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end # InternalServerError
|
|
14
|
+
end # Error
|
|
15
|
+
end # Assembla
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla #:nodoc
|
|
4
|
+
# Raised when invalid options are passed to a request body
|
|
5
|
+
module Error
|
|
6
|
+
class InvalidOptions < ClientError
|
|
7
|
+
def initialize(invalid, valid)
|
|
8
|
+
super(
|
|
9
|
+
generate_message(
|
|
10
|
+
:problem => "Invalid option #{invalid.keys.join(', ')} provided for this request.",
|
|
11
|
+
:summary => "Assembla gem checks the request parameters passed to ensure that assembla api is not hit unnecessairly and to fail fast.",
|
|
12
|
+
:resolution => "Valid options are: #{valid.join(', ')}, make sure these are the ones you are using"
|
|
13
|
+
)
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end # Error
|
|
18
|
+
end # Assembla
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla #:nodoc
|
|
4
|
+
# Raised when Assembla returns the HTTP status code 406
|
|
5
|
+
module Error
|
|
6
|
+
class NotAcceptable < ServiceError
|
|
7
|
+
http_status_code 406
|
|
8
|
+
|
|
9
|
+
def initialize(response)
|
|
10
|
+
super(response)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end # NotAcceptable
|
|
14
|
+
end # Error
|
|
15
|
+
end # Assembla
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla #:nodoc
|
|
4
|
+
# Raised when Assembla returns the HTTP status code 404
|
|
5
|
+
module Error
|
|
6
|
+
class NotFound < ServiceError
|
|
7
|
+
http_status_code 404
|
|
8
|
+
|
|
9
|
+
def initialize(env)
|
|
10
|
+
super(env)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end # Error
|
|
14
|
+
end # Assembla
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla #:nodoc
|
|
4
|
+
# Raised when invalid options are passed to a request body
|
|
5
|
+
module Error
|
|
6
|
+
class RequiredParams < ClientError
|
|
7
|
+
def initialize(provided, required)
|
|
8
|
+
super(
|
|
9
|
+
generate_message(
|
|
10
|
+
:problem => "Missing required parameters: #{provided.keys.join(', ')} provided for this request.",
|
|
11
|
+
:summary => "Assembla gem checks the request parameters passed to ensure that assembla api is not hit unnecessairly and to fail fast.",
|
|
12
|
+
:resolution => "Required parameters are: #{required.join(', ')}, make sure these are the ones you are using"
|
|
13
|
+
)
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end # Error
|
|
18
|
+
end # Assembla
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# require 'multi_json'
|
|
3
|
+
require 'assembla_api/jsonable'
|
|
4
|
+
|
|
5
|
+
module Assembla
|
|
6
|
+
# Raised when Assembla returns any of the HTTP status codes
|
|
7
|
+
module Error
|
|
8
|
+
class ServiceError < AssemblaError
|
|
9
|
+
include ::Assembla::Jsonable
|
|
10
|
+
|
|
11
|
+
attr_reader :http_headers, :body, :status
|
|
12
|
+
|
|
13
|
+
MIN_BODY_LENGTH = 2
|
|
14
|
+
|
|
15
|
+
def initialize(response)
|
|
16
|
+
@http_headers = response[:response_headers]
|
|
17
|
+
message = parse_response(response)
|
|
18
|
+
super(message)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def parse_response(response)
|
|
22
|
+
@body = parse_body(response[:body])
|
|
23
|
+
@status = response[:status]
|
|
24
|
+
"#{response[:method].to_s.upcase} #{response[:url].to_s}: #{@status} #{@body}"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def decode_body(body)
|
|
28
|
+
if body.respond_to?(:to_str) && body.length >= MIN_BODY_LENGTH
|
|
29
|
+
decode body, symbolize_keys: true
|
|
30
|
+
else
|
|
31
|
+
body
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def parse_body(body)
|
|
36
|
+
body = decode_body(body)
|
|
37
|
+
|
|
38
|
+
return '' if body.nil? || body.empty?
|
|
39
|
+
|
|
40
|
+
if body[:error]
|
|
41
|
+
body[:error]
|
|
42
|
+
elsif body[:errors]
|
|
43
|
+
error = Array(body[:errors]).first
|
|
44
|
+
if error.kind_of?(Hash)
|
|
45
|
+
error[:message]
|
|
46
|
+
else
|
|
47
|
+
error
|
|
48
|
+
end
|
|
49
|
+
elsif body[:message]
|
|
50
|
+
body[:message]
|
|
51
|
+
else
|
|
52
|
+
''
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def self.http_status_code(code)
|
|
57
|
+
define_method(:http_status_code) { code }
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def self.errors
|
|
61
|
+
@errors ||= Hash[
|
|
62
|
+
descendants.map { |klass| [klass.new({}).http_status_code, klass] }
|
|
63
|
+
]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
end # Error
|
|
68
|
+
end # Assembla
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla #:nodoc
|
|
4
|
+
# Raised when Assembla returns the HTTP status code 503
|
|
5
|
+
module Error
|
|
6
|
+
class ServiceUnavailable < ServiceError
|
|
7
|
+
http_status_code 503
|
|
8
|
+
|
|
9
|
+
def initialize(response)
|
|
10
|
+
super(response)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end # ServiceUnavailable
|
|
14
|
+
end # Error
|
|
15
|
+
end # Assembla
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla #:nodoc
|
|
4
|
+
# Raised when Assembla returns the HTTP status code 401
|
|
5
|
+
module Error
|
|
6
|
+
class Unauthorized < ServiceError
|
|
7
|
+
http_status_code 401
|
|
8
|
+
|
|
9
|
+
def initialize(response)
|
|
10
|
+
super(response)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end # Unauthorized
|
|
14
|
+
end # Error
|
|
15
|
+
end # Assembla
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla #:nodoc
|
|
4
|
+
# Raised when invalid options are passed to a request body
|
|
5
|
+
module Error
|
|
6
|
+
class UnknownMedia < ClientError
|
|
7
|
+
def initialize(file)
|
|
8
|
+
super(
|
|
9
|
+
generate_message(
|
|
10
|
+
:problem => "Unknown content type for: '#{file}' provided for this request.",
|
|
11
|
+
:summary => "Assembla gem infers the content type of the resource by calling the mime-types gem type inference.",
|
|
12
|
+
:resolution => "Please install mime-types gem to infer the resource content type."
|
|
13
|
+
)
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end # Error
|
|
18
|
+
end # Assembla
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla #:nodoc
|
|
4
|
+
# Raised when invalid options are passed to a request body
|
|
5
|
+
module Error
|
|
6
|
+
class UnknownValue < ClientError
|
|
7
|
+
def initialize(key, value, permitted)
|
|
8
|
+
super(
|
|
9
|
+
generate_message(
|
|
10
|
+
:problem => "Wrong value of '#{value}' for the parameter: #{key} provided for this request.",
|
|
11
|
+
:summary => "Assembla gem checks the request parameters passed to ensure that assembla api is not hit unnecessairly and fails fast.",
|
|
12
|
+
:resolution => "Permitted values are: #{permitted}, make sure these are the ones you are using"
|
|
13
|
+
)
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end # Error
|
|
18
|
+
end # Assembla
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla #:nodoc
|
|
4
|
+
# Raised when Assembla returns the HTTP status code 422
|
|
5
|
+
module Error
|
|
6
|
+
class UnprocessableEntity < ServiceError
|
|
7
|
+
http_status_code 422
|
|
8
|
+
|
|
9
|
+
def initialize(response)
|
|
10
|
+
super(response)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end # Error
|
|
14
|
+
end # Assembla
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla #:nodoc
|
|
4
|
+
# Raised when passed parameters are missing or contain wrong values.
|
|
5
|
+
module Error
|
|
6
|
+
class Validations < ClientError
|
|
7
|
+
def initialize(errors)
|
|
8
|
+
super(
|
|
9
|
+
generate_message(
|
|
10
|
+
:problem => "Attempted to send request with nil arguments for #{errors.keys.join(', ')}.",
|
|
11
|
+
:summary => 'Each request expects certain number of required arguments.',
|
|
12
|
+
:resolution => 'Double check that the provided arguments are set to some value that is neither nil nor empty string.'
|
|
13
|
+
)
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end # Error
|
|
18
|
+
end # Assembla
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Faraday
|
|
4
|
+
module Utils
|
|
5
|
+
|
|
6
|
+
class ParamsHash
|
|
7
|
+
def params_encoder(encoder = nil)
|
|
8
|
+
if encoder
|
|
9
|
+
@encoder = encoder
|
|
10
|
+
else
|
|
11
|
+
@encoder
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def to_query(encoder = nil)
|
|
16
|
+
Utils.build_nested_query(self, nil, params_encoder)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def build_nested_query(value, prefix = nil, encoder = nil)
|
|
21
|
+
case value
|
|
22
|
+
when Array
|
|
23
|
+
value.map { |v| build_nested_query(v, "#{prefix}%5B%5D", encoder) }.join("&")
|
|
24
|
+
when Hash
|
|
25
|
+
value.map { |k, v|
|
|
26
|
+
processed_value = encoder ? encoder.escape(k) : escape(k)
|
|
27
|
+
build_nested_query(v, prefix ? "#{prefix}%5B#{processed_value}%5D" : processed_value, encoder)
|
|
28
|
+
}.join("&")
|
|
29
|
+
when NilClass
|
|
30
|
+
prefix
|
|
31
|
+
else
|
|
32
|
+
raise ArgumentError, "value must be a Hash" if prefix.nil?
|
|
33
|
+
processed_value = encoder ? encoder.escape(value) : escape(value)
|
|
34
|
+
"#{prefix}=#{processed_value}"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'multi_json'
|
|
4
|
+
|
|
5
|
+
module Assembla
|
|
6
|
+
module Jsonable
|
|
7
|
+
extend self
|
|
8
|
+
|
|
9
|
+
def decode(*args)
|
|
10
|
+
return unless args.first
|
|
11
|
+
if MultiJson.respond_to?(:load)
|
|
12
|
+
MultiJson.load *args
|
|
13
|
+
else
|
|
14
|
+
MultiJson.decode *args
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'assembla_api/response'
|
|
4
|
+
require 'assembla_api/response/mashify'
|
|
5
|
+
require 'assembla_api/response/jsonize'
|
|
6
|
+
require 'assembla_api/response/raise_error'
|
|
7
|
+
require 'assembla_api/response/header'
|
|
8
|
+
|
|
9
|
+
module Assembla
|
|
10
|
+
class Middleware
|
|
11
|
+
def self.default(options = {})
|
|
12
|
+
api = options[:api]
|
|
13
|
+
proc do |builder|
|
|
14
|
+
builder.use Faraday::Request::Multipart
|
|
15
|
+
builder.use Assembla::Request::Jsonize
|
|
16
|
+
builder.use Faraday::Request::UrlEncoded
|
|
17
|
+
builder.use Assembla::Request::OAuth2, api.oauth_token if api.oauth_token?
|
|
18
|
+
builder.use Assembla::Request::BasicAuth, api.authentication if api.basic_authed?
|
|
19
|
+
builder.use Assembla::Request::KeyAuth, { api_key: api.api_key, api_secret: api.api_secret } if api.api_key?
|
|
20
|
+
|
|
21
|
+
builder.use Faraday::Response::Logger if ENV['DEBUG']
|
|
22
|
+
unless options[:raw]
|
|
23
|
+
builder.use Assembla::Response::Mashify
|
|
24
|
+
builder.use Assembla::Response::Jsonize
|
|
25
|
+
end
|
|
26
|
+
builder.use Assembla::Response::RaiseError
|
|
27
|
+
builder.adapter options[:adapter]
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end # Middleware
|
|
31
|
+
end # Assembla
|