zinc-api 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 17e2df35b414b9cd6d7e9020b3540638d208acdd
4
+ data.tar.gz: 731065cd9ed01a6435b027cf8cd705e444a795fc
5
+ SHA512:
6
+ metadata.gz: d8b3808422e089a9ddb4213904cd11e079b887adee93eec6a7aa5ee357e4a820ac8672a77d585174fabb53284b360d0f841e21c0493824ed64f986979bc0ef30
7
+ data.tar.gz: 4b0ab1ab71c019dbe530588436a86e87c0e8840e751c3aa413be3b07dde6d84dd2323359396620f6eab15457056be0bdd0d8a296378e7dff680e3eedfb4def8d
@@ -0,0 +1 @@
1
+ service_name: travis-ci
@@ -0,0 +1,9 @@
1
+ *.gem
2
+ /Gemfile.lock
3
+ /.approvals
4
+ /.bundle
5
+ /coverage
6
+ .DS_Store
7
+
8
+ /.api_path
9
+ /.access_token
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
@@ -0,0 +1,35 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.2
3
+
4
+ Metrics/AbcSize:
5
+ Enabled: false
6
+ Metrics/CyclomaticComplexity:
7
+ Enabled: false
8
+ Metrics/PerceivedComplexity:
9
+ Enabled: false
10
+
11
+ Metrics/LineLength:
12
+ Enabled: false
13
+ Metrics/ClassLength:
14
+ Enabled: false
15
+ Metrics/MethodLength:
16
+ Enabled: false
17
+ Metrics/BlockLength:
18
+ Enabled: false
19
+ Metrics/ParameterLists:
20
+ Enabled: false
21
+
22
+ Lint/EndAlignment:
23
+ Enabled: false
24
+
25
+ Layout/IndentationWidth:
26
+ Enabled: false
27
+ Layout/ElseAlignment:
28
+ Enabled: false
29
+
30
+ Style/Documentation:
31
+ Enabled: false
32
+ Style/GuardClause:
33
+ Enabled: false
34
+ Style/NumericLiterals:
35
+ Enabled: false
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2
4
+ # branches:
5
+ # only:
6
+ # - master
7
+ script:
8
+ - bundle exec rubocop
9
+ - bundle exec rake
10
+ cache: bundler
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+
4
+ group :development, :test do
5
+ gem 'awesome_print'
6
+ gem 'pry'
7
+ gem 'rake'
8
+ gem 'rubocop', '0.49.0'
9
+ end
10
+
11
+ group :test do
12
+ gem 'coveralls', require: false
13
+ gem 'rspec'
14
+ end
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Tophatter
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 all
13
+ 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 THE
21
+ SOFTWARE.
@@ -0,0 +1,49 @@
1
+ ### Zinc API
2
+ Full documentation is available [here](https://docs.zincapi.com/).
3
+
4
+ ### Installation
5
+ ```ruby
6
+ gem 'zinc-api'
7
+ ```
8
+
9
+ ### Usage
10
+ ```ruby
11
+ Zinc::Order.create(
12
+ retailer: 'amazon',
13
+ retailer_credentials: Zinc::RetailerCredentials.new(
14
+ 'email' => 'foo@bar.com',
15
+ 'password' => 'jabberwocky'
16
+ ),
17
+ products: [Zinc::Product.new('product_id' => 'B06XGHJ5H3', 'quantity' => 1)],
18
+ payment_method: Zinc::PaymentMethod.new(
19
+ 'name_on_card' => 'Foo Bar',
20
+ 'number' => '4242424242424242',
21
+ 'security_code' => '123',
22
+ 'expiration_month' => 1,
23
+ 'expiration_year' => 2020
24
+ ),
25
+ billing_address: Zinc::Address.new(
26
+ 'first_name' => 'Jane',
27
+ 'last_name' => 'Doe',
28
+ 'address_line1' => '185 Berry St',
29
+ 'address_line2' => 'Suite 2400 ',
30
+ 'zip_code' => '94107',
31
+ 'city' => 'San Francisco',
32
+ 'state' => 'CA',
33
+ 'country' => 'US',
34
+ 'phone_number' => '1231231234'
35
+ ),
36
+ shipping_address: Zinc::Address.new(
37
+ 'first_name' => 'Jane',
38
+ 'last_name' => 'Doe',
39
+ 'address_line1' => '185 Berry St',
40
+ 'address_line2' => 'Suite 2400 ',
41
+ 'zip_code' => '94107',
42
+ 'city' => 'San Francisco',
43
+ 'state' => 'CA',
44
+ 'country' => 'US',
45
+ 'phone_number' => '1231231234'
46
+ ),
47
+ shipping: Zinc::Shipping.new('order_by' => 'price', 'max_days' => 5, 'max_price' => 1000)
48
+ )
49
+ ```
@@ -0,0 +1,3 @@
1
+ require 'rspec/core/rake_task'
2
+ RSpec::Core::RakeTask.new(:spec)
3
+ task default: :spec
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'rest-client'
5
+ require 'zinc'
6
+
7
+ begin
8
+ Zinc.api_path = File.read('.api_path').chomp
9
+ puts "Zinc.api_path: #{Zinc.api_path}"
10
+ rescue Errno::ENOENT
11
+ puts "No .api_path file, using default: #{Zinc.api_path}"
12
+ end
13
+
14
+ begin
15
+ Zinc.access_token = File.read('.access_token').chomp
16
+ puts "Zinc.access_token: #{Zinc.access_token}"
17
+ rescue Errno::ENOENT
18
+ puts "No .access_token file - you'll have to set Zinc.access_token manually from the console."
19
+ end
20
+
21
+ Zinc.logger.level = Logger::DEBUG
22
+
23
+ require 'awesome_print'
24
+ require 'pry'
25
+
26
+ AwesomePrint.pry!
27
+ Pry.start
@@ -0,0 +1,24 @@
1
+ require 'json'
2
+
3
+ module Zinc
4
+ class << self
5
+ attr_accessor :api_path, :access_token, :logger
6
+
7
+ def api_path
8
+ @api_path || 'https://api.zinc.io/v1'
9
+ end
10
+
11
+ def logger
12
+ unless defined?(@logger)
13
+ @logger = Logger.new(STDOUT)
14
+ @logger.level = Logger::WARN
15
+ end
16
+
17
+ @logger
18
+ end
19
+ end
20
+ end
21
+
22
+ %w(model resource account_status address merchant_order_id order payment_method price_components product retailer_credentials seller_selection_criteria shipping tracking).each do |file|
23
+ require File.dirname(__FILE__) + "/zinc/#{file}"
24
+ end
@@ -0,0 +1,8 @@
1
+ module Zinc
2
+ class AccountStatus < Model
3
+ attr_accessor :prime,
4
+ :fresh,
5
+ :business,
6
+ :charity
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ module Zinc
2
+ class Address < Model
3
+ attr_accessor :first_name,
4
+ :last_name,
5
+ :address_line1,
6
+ :address_line2,
7
+ :zip_code,
8
+ :city,
9
+ :state,
10
+ :country,
11
+ :phone_number
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ module Zinc
2
+ class MerchantOrderId < Model
3
+ attr_accessor :merchant_order_id,
4
+ :merchant,
5
+ :account,
6
+ :placed_at,
7
+ :tracking,
8
+ :product_ids,
9
+ :tracking_url,
10
+ :delivery_date
11
+ end
12
+ end
@@ -0,0 +1,38 @@
1
+ module Zinc
2
+ class Model
3
+ def initialize(hash, exclude: {})
4
+ hash.each do |key, value|
5
+ if exclude.include?(key)
6
+ next
7
+ end
8
+
9
+ if respond_to?("#{key}=")
10
+ send("#{key}=", value)
11
+ else
12
+ Zinc.logger.warn "Invalid attribute #{key} specified for #{self.class.name}"
13
+ end
14
+ end
15
+ end
16
+
17
+ def to_hash
18
+ instance_variables.map do |instance_variable|
19
+ key = instance_variable_name(instance_variable)
20
+ value = instance_variable_get(instance_variable)
21
+
22
+ if value.is_a?(Array) && value.all? { |element| element.respond_to?(:to_hash) }
23
+ value = value.map(&:to_hash)
24
+ elsif value.respond_to?(:to_hash)
25
+ value = value.to_hash
26
+ end
27
+
28
+ value ? [key, value] : nil
29
+ end.compact.to_h
30
+ end
31
+
32
+ private
33
+
34
+ def instance_variable_name(instance_variable)
35
+ instance_variable.to_s.delete('@')
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,79 @@
1
+ module Zinc
2
+ class Order < Resource
3
+ attr_accessor :request_id,
4
+ :_type,
5
+ :code,
6
+ :message,
7
+ :status_updates,
8
+ :error,
9
+ :price_components, # A Zinc::PriceComponent object.
10
+ :merchant_order_ids, # Array of Zinc::MerchantOrderId objects.
11
+ :tracking, # Array of Zinc::Tracking objects.
12
+ :request, # ?
13
+ :delivery_dates, # ?
14
+ :account_status # A Zinc::AccountStatus object.
15
+
16
+ def initialize(hash)
17
+ @request_id = hash['request_id'] if hash['request_id']
18
+ @_type = hash['_type'] if hash['_type']
19
+ @code = hash['code'] if hash['code']
20
+ @message = hash['message'] if hash['message']
21
+ @status_updates = hash['status_updates'] if hash['status_updates']
22
+ @error = hash['error'] if hash['error']
23
+ @price_components = PriceComponents.new(hash['price_components']) if hash['price_components']
24
+ @merchant_order_ids = hash['merchant_order_ids'].map { |hash| MerchantOrderId.new(hash) } if hash['merchant_order_ids']
25
+ @tracking = hash['tracking'].map { |hash| Tracking.new(hash) } if hash['tracking']
26
+ @request = hash['request'] if hash['request']
27
+ @delivery_dates = hash['delivery_dates'] if hash['delivery_dates']
28
+ @account_status = AccountStatus.new(hash['account_status']) if hash['account_status']
29
+ end
30
+
31
+ class << self
32
+ def all(offset: 0, limit: 20)
33
+ response = get(path: 'orders', params: { offset: offset, limit: limit })
34
+ response['orders'].map { |hash| Order.new(hash) }
35
+ end
36
+
37
+ def retrieve(request_id)
38
+ response = get(path: "orders/#{request_id}")
39
+ Order.new(response)
40
+ end
41
+
42
+ def create(retailer:, retailer_credentials:, products:, payment_method:, billing_address:, shipping_address:, shipping:, options: {})
43
+ params = {
44
+ retailer: retailer,
45
+ retailer_credentials: retailer_credentials.to_hash,
46
+ products: products.map(&:to_hash),
47
+ payment_method: payment_method.to_hash,
48
+ billing_address: billing_address.to_hash,
49
+ shipping_address: shipping_address.to_hash,
50
+ shipping: shipping.to_hash
51
+ }
52
+
53
+ # Valid options:
54
+ # - is_gift
55
+ # - gift_message
56
+ # - max_price
57
+ # - webhooks
58
+ # - client_notes
59
+ # - promo_codes
60
+ # - po_number
61
+ # - bundled
62
+ params.merge!(options) unless params.empty?
63
+
64
+ response = post(path: 'orders', params: params)
65
+ Order.new(response)
66
+ end
67
+
68
+ def abort(request_id)
69
+ response = post(path: "orders/#{request_id}/abort")
70
+ Order.new(response)
71
+ end
72
+
73
+ def cancel(request_id)
74
+ response = post(path: "orders/#{request_id}/cancel")
75
+ Order.new(response)
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,10 @@
1
+ module Zinc
2
+ class PaymentMethod < Model
3
+ attr_accessor :name_on_card,
4
+ :number,
5
+ :security_code,
6
+ :expiration_month,
7
+ :expiration_year,
8
+ :use_gift
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Zinc
2
+ class PriceComponents < Model
3
+ attr_accessor :shipping,
4
+ :product_subtotals,
5
+ :subtotal,
6
+ :tax,
7
+ :total,
8
+ :gift_certificate
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ module Zinc
2
+ class Product < Model
3
+ attr_accessor :product_id,
4
+ :quantity,
5
+ :seller_selection_criteria
6
+
7
+ def initialize(hash)
8
+ super(hash, exclude: %w(seller_selection_criteria))
9
+ @seller_selection_criteria = SellerSelectionCriteria.new(hash['seller_selection_criteria']) if hash['seller_selection_criteria']
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,53 @@
1
+ module Zinc
2
+ class Resource < Model
3
+ class << self
4
+ protected
5
+
6
+ def get(path:, params: {})
7
+ Zinc.logger.debug url(path, params)
8
+ response = RestClient::Request.new(
9
+ method: :get,
10
+ url: url(path, params),
11
+ user: Zinc.access_token,
12
+ headers: headers
13
+ ).execute
14
+ # Zinc.logger.debug response.headers.inspect
15
+ Zinc.logger.debug response.code
16
+ Zinc.logger.debug response.body
17
+ JSON.parse(response.body)
18
+ end
19
+
20
+ def post(path:, params: {})
21
+ Zinc.logger.debug url(path)
22
+ Zinc.logger.debug params.to_json
23
+ response = RestClient::Request.new(
24
+ method: :post,
25
+ url: url(path),
26
+ user: Zinc.access_token,
27
+ payload: params.to_json,
28
+ headers: headers
29
+ ).execute
30
+ # Zinc.logger.debug response.headers.inspect
31
+ Zinc.logger.debug response.code
32
+ Zinc.logger.debug response.body
33
+ JSON.parse(response.body)
34
+ end
35
+
36
+ private
37
+
38
+ def url(path, params = {})
39
+ url = "#{Zinc.api_path}/#{path}"
40
+ url += "?#{URI.encode_www_form(params)}" unless params.empty?
41
+ url
42
+ end
43
+
44
+ def headers
45
+ {
46
+ accept: :json,
47
+ content_type: :json,
48
+ user_agent: 'Zinc API [Ruby] (https://github.com/tophatter/zinc-api)'
49
+ }
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,8 @@
1
+ module Zinc
2
+ class RetailerCredentials < Model
3
+ attr_accessor :email,
4
+ :password,
5
+ :verification_code,
6
+ :totp_2fa_key
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ module Zinc
2
+ class SellerSelectionCriteria < Model
3
+ attr_accessor :prime,
4
+ :handling_days_max,
5
+ :condition_in
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Zinc
2
+ class Shipping < Model
3
+ attr_accessor :order_by,
4
+ :max_days,
5
+ :max_price
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ module Zinc
2
+ class Tracking < Model
3
+ attr_accessor :merchant_order_id,
4
+ :carrier,
5
+ :tracking_number,
6
+ :tracking_url,
7
+ :product_id,
8
+ :obtained_at
9
+ end
10
+ end
@@ -0,0 +1,6 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
4
+ require 'rest-client'
5
+ require 'awesome_print'
6
+ require 'zinc'
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ # rspec spec/zinc/order_spec.rb
4
+ describe Zinc::Order do
5
+ let(:request_id) { 'abc123'}
6
+ let(:retailer) { 'amazon' }
7
+ let(:retailer_credentials) { Zinc::RetailerCredentials.new('email' => 'foo@bar.com', 'password' => 'jabberwocky') }
8
+ let(:product) { Zinc::Product.new('product_id' => 'B06XGHJ5H3', 'quantity' => 1, 'seller_selection_criteria' => { 'prime' => true, 'handling_days_max' => 6, 'condition_in' => ['New'] }) }
9
+ let(:payment_method) { Zinc::PaymentMethod.new('name_on_card' => 'Foo Bar', 'number' => '4242424242424242', 'security_code' => '123', 'expiration_month' => 1, 'expiration_year' => 2020) }
10
+ let(:address) { Zinc::Address.new('first_name' => 'Jane', 'last_name' => 'Doe', 'address_line1' => '185 Berry St', 'address_line2' => 'Suite 2400 ', 'zip_code' => '94107', 'city' => 'San Francisco', 'state' => 'CA', 'country' => 'US', 'phone_number' => '1231231234') }
11
+ let(:shipping) { Zinc::Shipping.new('order_by' => 'price', 'max_days' => 5, 'max_price' => 1000) }
12
+
13
+ let(:create_response) do
14
+ {
15
+ 'request_id' => request_id
16
+ }
17
+ end
18
+
19
+ let(:retrieve_response) do
20
+ {
21
+ '_type' => 'order_response',
22
+ 'price_components' => { 'shipping' => 0, 'subtotal' => 1999, 'tax' => 0, 'total' => 1999 },
23
+ 'merchant_order_ids' => [{ 'merchant_order_id' => '112-1234567-7272727', 'merchant' => 'amazon', 'account' => 'foo@bar.com', 'placed_at' => '2017-07-02T23:51:08.366Z' }],
24
+ 'tracking' => [{ 'product_id' => '0923568964', 'merchant_order_id' => '112-1234567-7272727', 'carrier' => 'Fedex', 'tracking_number' => '9261290100129790891234', 'obtained_at' => '2017-07-03T23:22:48.165Z' }],
25
+ 'request' => {},
26
+ 'account_status' => { 'prime' => true, 'fresh' => false, 'business' => true }
27
+ }
28
+ end
29
+
30
+ describe '.create' do
31
+ it 'creates a new order' do
32
+ expect(Zinc::Order).to receive(:post).and_return(create_response)
33
+
34
+ order = Zinc::Order.create(
35
+ retailer: retailer,
36
+ retailer_credentials: retailer_credentials,
37
+ products: [product],
38
+ payment_method: payment_method,
39
+ billing_address: address,
40
+ shipping_address: address,
41
+ shipping: shipping
42
+ )
43
+
44
+ expect(order.request_id).to eq(request_id)
45
+ end
46
+ end
47
+
48
+ describe '#retrieve' do
49
+ it 'fetches an existing order' do
50
+ expect(Zinc::Order).to receive(:get).with(path: "orders/#{request_id}").and_return(retrieve_response)
51
+ order = Zinc::Order.retrieve(request_id)
52
+ expect(order.tracking[0].product_id).to eq('0923568964')
53
+ end
54
+ end
55
+
56
+ describe '#to_hash' do
57
+ let(:order) { Zinc::Order.new(retrieve_response) }
58
+
59
+ it 'serializes the object to a hash' do
60
+ hash = order.to_hash
61
+ expect(hash['tracking'][0]['product_id']).to eq('0923568964')
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # To publish the next version:
4
+ # gem build zinc-api.gemspec
5
+ # gem push zinc-api-{VERSION}.gem
6
+ Gem::Specification.new do |s|
7
+ s.name = 'zinc-api'
8
+ s.version = '0.0.1'
9
+ s.platform = Gem::Platform::RUBY
10
+ s.licenses = ['MIT']
11
+ s.authors = ['Chris Estreich']
12
+ s.email = ['chris@tophatter.com']
13
+ s.homepage = 'https://github.com/tophatter/zinc-api-ruby'
14
+ s.summary = 'Ruby bindings for the Zinc API.'
15
+ s.description = 'Ruby bindings for the Zinc API.'
16
+
17
+ s.extra_rdoc_files = ['README.md']
18
+
19
+ s.required_ruby_version = '~> 2.0'
20
+
21
+ s.add_dependency 'rest-client', '~> 1.6'
22
+
23
+ s.files = `git ls-files`.split("\n")
24
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
25
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
26
+ s.require_paths = ['lib']
27
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zinc-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Chris Estreich
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-04-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ description: Ruby bindings for the Zinc API.
28
+ email:
29
+ - chris@tophatter.com
30
+ executables:
31
+ - console
32
+ extensions: []
33
+ extra_rdoc_files:
34
+ - README.md
35
+ files:
36
+ - ".coveralls.yml"
37
+ - ".gitignore"
38
+ - ".rspec"
39
+ - ".rubocop.yml"
40
+ - ".travis.yml"
41
+ - Gemfile
42
+ - LICENSE.md
43
+ - README.md
44
+ - Rakefile
45
+ - bin/console
46
+ - lib/zinc.rb
47
+ - lib/zinc/account_status.rb
48
+ - lib/zinc/address.rb
49
+ - lib/zinc/merchant_order_id.rb
50
+ - lib/zinc/model.rb
51
+ - lib/zinc/order.rb
52
+ - lib/zinc/payment_method.rb
53
+ - lib/zinc/price_components.rb
54
+ - lib/zinc/product.rb
55
+ - lib/zinc/resource.rb
56
+ - lib/zinc/retailer_credentials.rb
57
+ - lib/zinc/seller_selection_criteria.rb
58
+ - lib/zinc/shipping.rb
59
+ - lib/zinc/tracking.rb
60
+ - spec/spec_helper.rb
61
+ - spec/zinc/order_spec.rb
62
+ - zinc.gemspec
63
+ homepage: https://github.com/tophatter/zinc-api-ruby
64
+ licenses:
65
+ - MIT
66
+ metadata: {}
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.6.12
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: Ruby bindings for the Zinc API.
87
+ test_files:
88
+ - spec/spec_helper.rb
89
+ - spec/zinc/order_spec.rb