makeleaps-ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 729a99477d00bb5387713b42b324893719a12c7c2057b8319e6feb9ecfc7cf3e
4
+ data.tar.gz: b215bbf8e1ec8d0aa44a0dff2434a1134bc5c337299c7d846924998342d5e31a
5
+ SHA512:
6
+ metadata.gz: c8a5dbf63db30972b9e96d3e6dbc41059521bc31a6c4de464cdb50d3b1da257c7a83a52247a468366703e9ac643e6f322f98e36a6bbd366e0572fe9a7b56f62e
7
+ data.tar.gz: eeae331a7c558b1e76f8bf185c24debfc1d6f4a781c22ce4e45566a8bd819b0556da55facf64d94d511a8738ba70aa91c81b5a9c43c5776e8c94d435c336a0e3
@@ -0,0 +1,13 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ Gemfile.lock
11
+
12
+ # rspec failure tracking
13
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,10 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.3.0
7
+ - 2.4.0
8
+ - 2.5.0
9
+ - 2.6.3
10
+ before_install: gem install bundler -v 2.0.1
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in makeleaps-ruby.gemspec
4
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2019 Koji Onishi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,105 @@
1
+ # Makeleaps Ruby
2
+
3
+ A simple ruby client for [Makeleaps API](https://app.makeleaps.com/api/docs/).
4
+
5
+ * Note: this is NOT an official library, but an OSS maintained by third party developers. Please use it as your own risk.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'makeleaps-ruby'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install makeleaps-ruby
22
+
23
+ ## Usage
24
+
25
+ ```ruby
26
+ require 'makeleaps'
27
+
28
+ # establish connection using access token
29
+ client = Makeleaps::Client.new('your client-id','your client-secret')
30
+ client.connect!
31
+
32
+ # specify your parter_mid (you need to set one to access various resouces)
33
+ client.set_partner!(name: 'your_company_name')
34
+ ```
35
+
36
+ ### Examples
37
+
38
+ Refer to the [official API document](https://app.makeleaps.com/api/docs/) for detailed API reference.
39
+
40
+ #### GET (a single instance)
41
+
42
+ ```ruby
43
+ client.get '/api/partner/xxxxxxx/document/yyyyyy/'
44
+
45
+ # below are actually the same request
46
+ client.get '/api/partner/xxxxxxx/document/yyyyyy/' # direct access (path)
47
+ client.get 'https://api.makeleaps.com/api/partner/xxxxxxx/document/yyyyyy/' # direct access (full url)
48
+ client.get :document, yyyyy # endpoints can also be referred as symbols
49
+ ```
50
+ * in the last example, (<partner_mid> is automatically supplied after #set_partner! is invoked
51
+
52
+ #### GET (a collection)
53
+
54
+ ```ruby
55
+ client.get :document # fetching a list of documents
56
+ client.get :contact # fetching a list of contacts
57
+
58
+ # visiting all pages (following `next` links provided by API)
59
+ # (requests are limited at maximum rate of 0.1sec per each)
60
+ total_count = 0
61
+ client.each_page :document do |documents|
62
+ total_count += documents.count
63
+ end
64
+
65
+ # find a resource (out of all the pages)
66
+ client.find_resource(:document) do |document|
67
+ document['title'].match? /URGENT/
68
+ end
69
+
70
+ # find a resource (within a response)
71
+ documents = client.get :document
72
+ document.find_resource do |document|
73
+ document['document_number'].to_i >= 123 && document['note'].match? /IMPORTANT/
74
+ end
75
+
76
+ # adding a query
77
+ documents = client.get :document { |req| req.params['document_number'] = "1000" }
78
+ documents = client.get :document { |req| req.params['date__lt'] = "2020-01-30" }
79
+ ```
80
+
81
+ #### POST/PATCH/PUT/DELETE
82
+
83
+ Read the manual carefully before sending a request- it seems API is still beta version, so it might give an unexpected effect on your data when misused. The wrapper gem does not check the validity of the request parameters/payloads.
84
+
85
+ ```ruby
86
+ client.post :item, <mid> { |req| req.body = new_item.to_json }
87
+
88
+ client.patch(:document, <mid>) { |req| req.body = {autocalculate: true, lineitems: updated_items}.to_json }
89
+
90
+ client.delete :contact, <mid>
91
+ ```
92
+
93
+ ## Development
94
+
95
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
96
+
97
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
98
+
99
+ ## Contributing
100
+
101
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/makeleaps-ruby.
102
+
103
+ ## License
104
+
105
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "makeleaps"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,6 @@
1
+ require 'time'
2
+ require 'faraday'
3
+ require "makeleaps/version"
4
+ require "makeleaps/errors"
5
+ require "makeleaps/client"
6
+
@@ -0,0 +1,27 @@
1
+ require_relative 'request'
2
+ require_relative 'response'
3
+ require 'forwardable'
4
+
5
+ module Makeleaps
6
+ class Client
7
+ extend Forwardable
8
+
9
+ attr_accessor :partner_mid
10
+ attr_reader :request
11
+ def_delegators :@request, :get, :post, :put, :patch, :delete, :options
12
+ def_delegators :@request, :each_page, :each_resource, :find_resource, :set_partner!
13
+
14
+ def initialize(username, password)
15
+ @auth = Makeleaps::Request::BasicAuth.new(username, password)
16
+ end
17
+
18
+ def connect!
19
+ token_store = @auth.make_request!
20
+ @request = Makeleaps::Request::Generic.new(token_store.access_token)
21
+ end
22
+
23
+ def connection
24
+ request.connection
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ module Makeleaps
2
+ class Error < StandardError; end
3
+
4
+ class APIError < Error
5
+ attr_accessor :status
6
+
7
+ def initialize(message, status=nil)
8
+ super(message)
9
+ @status = status
10
+ end
11
+ end
12
+
13
+ module ErrorHandler
14
+ def handle_api_response(success: 200, &block)
15
+ response = block.call
16
+ return response if [success].flatten.include? response.status
17
+
18
+ message = response.respond_to?(:resource) ? response.resource : response.inspect
19
+ # 'Makeleaps API error'
20
+ raise Makeleaps::APIError.new(message, response.status)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,2 @@
1
+ require_relative 'request/basic_auth'
2
+ require_relative 'request/generic'
@@ -0,0 +1,15 @@
1
+ module Makeleaps
2
+ module Request
3
+ class Base
4
+ ENDPOINT = 'https://api.makeleaps.com/'
5
+
6
+ attr_reader :connection
7
+ def initialize(&block)
8
+ @connection = Faraday.new(url: ENDPOINT, headers: {'Accept' => 'application/json', 'Content-Type': 'application/json'}) do |conn|
9
+ conn.adapter Faraday.default_adapter
10
+ block.call(conn) if block_given?
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ require_relative 'base'
2
+
3
+ module Makeleaps
4
+ module Request
5
+ class BasicAuth < Base
6
+ include ErrorHandler
7
+
8
+ AUTH_ENDPOINT = 'user/oauth2/token/'
9
+
10
+ def initialize(username, password)
11
+ super() do |conn|
12
+ conn.basic_auth(username, password)
13
+ end
14
+ end
15
+
16
+ def make_request!
17
+ response = handle_api_response do
18
+ connection.post(AUTH_ENDPOINT) { |req| req.params['grant_type'] = 'client_credentials'}
19
+ end
20
+ Makeleaps::Response::TokenStore.new response
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,84 @@
1
+ require_relative 'base'
2
+ require_relative 'request_handler'
3
+ require_relative 'url_manager'
4
+
5
+ module Makeleaps
6
+ module Request
7
+ class Generic < Base
8
+ attr_reader :handler, :url_manager
9
+
10
+ def initialize(access_token)
11
+ super() do |conn|
12
+ conn.authorization :Bearer, access_token
13
+ end
14
+ @handler = Makeleaps::Request::RequestHandler.new(connection)
15
+ @url_manager = Makeleaps::Request::URLManager.new
16
+ end
17
+
18
+ def set_partner!(name: )
19
+ url = find_partner_by(name: name)['url']
20
+ partner_mid = url.split('/').last
21
+ url_manager.set_partner!(partner_mid)
22
+ self
23
+ end
24
+
25
+ def find_partner_by(name: )
26
+ partners = get(:partner)
27
+ partners.find_resource { |partner| partner['name'] == name }
28
+ end
29
+
30
+ # process sequentially (avoid eager loading) to ensure minimum API access
31
+ def each_page(start_page , &block)
32
+ next_url = start_page
33
+
34
+ loop do
35
+ response = get(next_url)
36
+ block.call(response)
37
+ next_url = response.next
38
+ break unless next_url
39
+ sleep 0.1 # TODO: throttling parameter can be adjusted individually
40
+ end
41
+ end
42
+
43
+ def each_resource(start_page , &block)
44
+ each_page(start_page) do |page|
45
+ page.each_resource do |resource|
46
+ block.call(resource)
47
+ end
48
+ end
49
+ end
50
+
51
+ def find_resource(start_page, *args, &block)
52
+ each_page(start_page) do |page|
53
+ resource = page.find_resource(*args, &block)
54
+ return resource if resource
55
+ end
56
+ nil
57
+ end
58
+
59
+ def get(resource_or_url, mid=nil, &block)
60
+ handler.get url_manager.build_url_for(resource_or_url, mid), &block
61
+ end
62
+
63
+ def post(resource_or_url, mid=nil, &block)
64
+ handler.post url_manager.build_url_for(resource_or_url, mid), &block
65
+ end
66
+
67
+ def put(resource_or_url, mid=nil, &block)
68
+ handler.put url_manager.build_url_for(resource_or_url, mid), &block
69
+ end
70
+
71
+ def patch(resource_or_url, mid=nil, &block)
72
+ handler.patch url_manager.build_url_for(resource_or_url, mid), &block
73
+ end
74
+
75
+ def delete(resource_or_url, mid=nil, &block)
76
+ handler.delete url_manager.build_url_for(resource_or_url, mid), &block
77
+ end
78
+
79
+ def options(resource_or_url, mid=nil, &block)
80
+ handler.options url_manager.build_url_for(resource_or_url, mid), &block
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,54 @@
1
+ module Makeleaps
2
+ module Request
3
+ class RequestHandler
4
+ include ErrorHandler
5
+
6
+ attr_reader :connection
7
+ def initialize(connection)
8
+ @connection = connection
9
+ end
10
+
11
+ def get(*args, &block)
12
+ response = handle_api_response(success: 200) do
13
+ connection.get(*args, &block)
14
+ end
15
+ Makeleaps::Response::Wrapper.new response
16
+ end
17
+
18
+ def post(*args, &block)
19
+ response = handle_api_response(success: 201) do
20
+ connection.post(*args, &block)
21
+ end
22
+ Makeleaps::Response::Wrapper.new response
23
+ end
24
+
25
+ def patch(*args, &block)
26
+ response = handle_api_response(success: 200) do
27
+ connection.patch(*args, &block)
28
+ end
29
+ Makeleaps::Response::Wrapper.new response
30
+ end
31
+
32
+ def put(*args, &block)
33
+ response = handle_api_response(success: 200) do
34
+ connection.put(*args, &block)
35
+ end
36
+ Makeleaps::Response::Wrapper.new response
37
+ end
38
+
39
+ def delete(*args, &block)
40
+ response = handle_api_response(success: 204) do
41
+ connection.delete(*args, &block)
42
+ end
43
+ Makeleaps::Response::Wrapper.new response
44
+ end
45
+
46
+ def options(url, &block)
47
+ response = handle_api_response(success: 200) do
48
+ connection.run_request(:options, url, nil, nil, &block)
49
+ end
50
+ Makeleaps::Response::Wrapper.new response
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,37 @@
1
+ module Makeleaps
2
+ module Request
3
+ class URLManager
4
+ API_ENDPOINT_BASE = 'https://api.makeleaps.com/api'
5
+ GENERIC_ENDPOINT = "#{API_ENDPOINT_BASE}/partner"
6
+ CURRENCY_ENDPOINT = "#{API_ENDPOINT_BASE}/currency"
7
+
8
+ attr_reader :partner_mid
9
+
10
+ def set_partner!(partner_mid)
11
+ @partner_mid = partner_mid
12
+ end
13
+
14
+ def build_url_for(resource_or_url, mid=nil)
15
+ case resource_or_url
16
+ when String
17
+ resource_or_url # assume its a url
18
+ when :partner
19
+ compose_url GENERIC_ENDPOINT, mid
20
+ when :currency
21
+ compose_url CURRENCY_ENDPOINT
22
+ when :client_contact
23
+ # TODO: ensure that @partner_mid exists
24
+ compose_url GENERIC_ENDPOINT, @partner_mid, :client, mid, :contact
25
+ else
26
+ # TODO: ensure that @partner_mid exists
27
+ compose_url GENERIC_ENDPOINT, @partner_mid, resource_or_url, mid
28
+ end
29
+ end
30
+
31
+ private
32
+ def compose_url(*parts)
33
+ [*parts, ''].compact.join('/')
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,2 @@
1
+ require_relative 'response/access_token'
2
+ require_relative 'response/wrapper'
@@ -0,0 +1,34 @@
1
+ module Makeleaps
2
+ module Response
3
+ class TokenStore
4
+ attr_reader :response, :body
5
+
6
+ def initialize(response)
7
+ @response = response
8
+ @body = JSON.parse(response.body)
9
+ rescue JSON::JSONError
10
+ @body = nil
11
+ end
12
+
13
+ def access_token
14
+ @access_token ||= body['access_token']
15
+ end
16
+
17
+ def valid_request?
18
+ response && response.status == 200 && !expired?
19
+ end
20
+
21
+ def expired?
22
+ Time.now >= requested_at + expiration_period
23
+ end
24
+
25
+ def requested_at
26
+ Time.parse response.headers['date']
27
+ end
28
+
29
+ def expiration_period
30
+ body['expires_in']
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,14 @@
1
+ module Makeleaps
2
+ module Response
3
+ module HashAccessDelegator
4
+ def delegate_hash_access(hash_name, *method_names)
5
+ method_names.each do |method|
6
+ define_method(method.to_sym) do
7
+ base_hash = instance_eval(hash_name)
8
+ base_hash[method.to_s]
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'hash_access_delegator'
2
+
3
+ module Makeleaps
4
+ module Response
5
+ class MetaInformation
6
+ extend HashAccessDelegator
7
+ delegate_hash_access '@meta_information', :next, :prev, :page, :count, :status
8
+ attr_accessor :meta_information
9
+
10
+ def initialize(meta_information)
11
+ @meta_information = meta_information
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,30 @@
1
+ module Makeleaps
2
+ module Response
3
+ class Resource
4
+ attr_accessor :content
5
+
6
+ def initialize(content)
7
+ @content = content
8
+ end
9
+
10
+ # ensure data are encupslated in an array (for interface consistency)
11
+ def content_as_array
12
+ [content].flatten
13
+ end
14
+
15
+ def each_resource(&block)
16
+ if block_given?
17
+ content_as_array.each do |resource|
18
+ block.call(resource)
19
+ end
20
+ else
21
+ content_as_array.to_enum
22
+ end
23
+ end
24
+
25
+ def find_resource(*args, &block)
26
+ content_as_array.find(*args, &block)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,27 @@
1
+ require 'forwardable'
2
+ require_relative 'meta_information'
3
+ require_relative 'resource'
4
+
5
+ module Makeleaps
6
+ module Response
7
+ class Wrapper
8
+ extend Forwardable
9
+
10
+ attr_reader :body, :status, :meta_information, :resource
11
+ def_delegators :@meta_information, :next, :prev, :page, :count, :status
12
+ def_delegators :@resource, :each_resource, :find_resource
13
+
14
+ def initialize(raw_response)
15
+ @status = raw_response.status
16
+ begin
17
+ @body = JSON.parse(raw_response.body)
18
+ rescue JSON::JSONError
19
+ # TODO: to raise an original error?
20
+ @body = {}
21
+ end
22
+ @meta_information = MetaInformation.new @body['meta']
23
+ @resource = Resource.new @body['response']
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module Makeleaps
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,51 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "makeleaps/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "makeleaps-ruby"
8
+ spec.version = Makeleaps::VERSION
9
+ spec.authors = ["Koji Onishi"]
10
+ spec.email = ["fursich0@gmail.com"]
11
+
12
+ spec.summary = '' # TODO: Write a short summary, because RubyGems requires one.
13
+ spec.description = '' # TODO: Write a longer description or delete this line.
14
+ # spec.homepage = "TODO: Put your gem's website or public repo URL here."
15
+ spec.license = "MIT"
16
+ spec.required_ruby_version = '>= 2.3.0'
17
+
18
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
19
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
20
+ # if spec.respond_to?(:metadata)
21
+ # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
22
+ #
23
+ # spec.metadata["homepage_uri"] = spec.homepage
24
+ # spec.metadata["source_code_uri"] = 'https://github.com/zeals-co-ltd/makeleaps-ruby'
25
+ # spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
26
+ # else
27
+ # raise "RubyGems 2.0 or newer is required to protect against " \
28
+ # "public gem pushes."
29
+ # end
30
+
31
+ # Specify which files should be added to the gem when it is released.
32
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
33
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
34
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
35
+ end
36
+ spec.bindir = "exe"
37
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
38
+ spec.require_paths = ["lib"]
39
+
40
+ spec.add_dependency 'faraday', '>=0.15'
41
+
42
+ spec.add_development_dependency 'bundler', '~> 2.0'
43
+ spec.add_development_dependency 'rake', '~> 10.0'
44
+ spec.add_development_dependency 'rspec', '~> 3.0'
45
+ spec.add_development_dependency 'vcr', '>= 5.0'
46
+ spec.add_development_dependency 'webmock'
47
+ spec.add_development_dependency "hashdiff", ">= 1.0.0.beta1", "< 2.0.0"
48
+
49
+ spec.add_development_dependency 'pry'
50
+ spec.add_development_dependency 'pry-doc'
51
+ end
metadata ADDED
@@ -0,0 +1,201 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: makeleaps-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Koji Onishi
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-06-21 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.15'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: vcr
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '5.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '5.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: hashdiff
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 1.0.0.beta1
104
+ - - "<"
105
+ - !ruby/object:Gem::Version
106
+ version: 2.0.0
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: 1.0.0.beta1
114
+ - - "<"
115
+ - !ruby/object:Gem::Version
116
+ version: 2.0.0
117
+ - !ruby/object:Gem::Dependency
118
+ name: pry
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: pry-doc
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ description: ''
146
+ email:
147
+ - fursich0@gmail.com
148
+ executables: []
149
+ extensions: []
150
+ extra_rdoc_files: []
151
+ files:
152
+ - ".gitignore"
153
+ - ".rspec"
154
+ - ".travis.yml"
155
+ - Gemfile
156
+ - LICENSE.txt
157
+ - README.md
158
+ - Rakefile
159
+ - bin/console
160
+ - bin/setup
161
+ - lib/makeleaps.rb
162
+ - lib/makeleaps/client.rb
163
+ - lib/makeleaps/errors.rb
164
+ - lib/makeleaps/request.rb
165
+ - lib/makeleaps/request/base.rb
166
+ - lib/makeleaps/request/basic_auth.rb
167
+ - lib/makeleaps/request/generic.rb
168
+ - lib/makeleaps/request/request_handler.rb
169
+ - lib/makeleaps/request/url_manager.rb
170
+ - lib/makeleaps/response.rb
171
+ - lib/makeleaps/response/access_token.rb
172
+ - lib/makeleaps/response/hash_access_delegator.rb
173
+ - lib/makeleaps/response/meta_information.rb
174
+ - lib/makeleaps/response/resource.rb
175
+ - lib/makeleaps/response/wrapper.rb
176
+ - lib/makeleaps/version.rb
177
+ - makeleaps-ruby.gemspec
178
+ homepage:
179
+ licenses:
180
+ - MIT
181
+ metadata: {}
182
+ post_install_message:
183
+ rdoc_options: []
184
+ require_paths:
185
+ - lib
186
+ required_ruby_version: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: 2.3.0
191
+ required_rubygems_version: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ requirements: []
197
+ rubygems_version: 3.0.3
198
+ signing_key:
199
+ specification_version: 4
200
+ summary: ''
201
+ test_files: []