tophatter-merchant 1.1.3 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -0
  3. data/Gemfile +1 -0
  4. data/README.md +2 -2
  5. data/VERSION +1 -1
  6. data/bin/console +1 -1
  7. data/lib/tophatter_merchant/metadata.rb +18 -16
  8. data/lib/tophatter_merchant/order.rb +4 -4
  9. data/lib/tophatter_merchant/product.rb +18 -17
  10. data/lib/tophatter_merchant/resource.rb +7 -3
  11. data/lib/tophatter_merchant/variation.rb +3 -1
  12. data/lib/tophatter_merchant/version.rb +1 -1
  13. data/lib/tophatter_merchant.rb +1 -4
  14. data/spec/cassettes/TophatterMerchant_Metadata/_brands/returns_brands.yml +161 -0
  15. data/spec/cassettes/TophatterMerchant_Metadata/_carriers/returns_carriers.yml +81 -0
  16. data/spec/cassettes/TophatterMerchant_Metadata/_categories/returns_categories.yml +97 -0
  17. data/spec/cassettes/TophatterMerchant_Metadata/_colors/returns_colors.yml +67 -0
  18. data/spec/cassettes/TophatterMerchant_Metadata/_conditions/returns_conditions.yml +67 -0
  19. data/spec/cassettes/TophatterMerchant_Metadata/_countries/returns_countries.yml +101 -0
  20. data/spec/cassettes/TophatterMerchant_Metadata/_country_codes/returns_country_codes.yml +119 -0
  21. data/spec/cassettes/TophatterMerchant_Metadata/_materials/returns_materials.yml +82 -0
  22. data/spec/cassettes/TophatterMerchant_Metadata/_metadata/returns_metadata.yml +319 -0
  23. data/spec/cassettes/TophatterMerchant_Metadata/_provinces/returns_provinces.yml +69 -0
  24. data/spec/cassettes/TophatterMerchant_Metadata/_sizes/returns_sizes.yml +75 -0
  25. data/spec/cassettes/TophatterMerchant_Metadata/_states/returns_states.yml +78 -0
  26. data/spec/cassettes/TophatterMerchant_Metadata/_territories/returns_territories.yml +68 -0
  27. data/spec/cassettes/TophatterMerchant_Order/_all/returns_all_orders.yml +56 -0
  28. data/spec/cassettes/TophatterMerchant_Order/_fulfill/fulfills_an_order.yml +53 -0
  29. data/spec/cassettes/TophatterMerchant_Order/_refund/refunds_an_order.yml +53 -0
  30. data/spec/cassettes/TophatterMerchant_Order/_retrieve/retrieves_an_order.yml +53 -0
  31. data/spec/cassettes/TophatterMerchant_Order/_schema/returns_the_schema.yml +81 -0
  32. data/spec/cassettes/TophatterMerchant_Product/_all/returns_all_products.yml +64 -0
  33. data/spec/cassettes/TophatterMerchant_Product/_create/creates_a_product.yml +53 -0
  34. data/spec/cassettes/TophatterMerchant_Product/_delete/deletes_a_product.yml +103 -0
  35. data/spec/cassettes/TophatterMerchant_Product/_disable/disables_a_product.yml +103 -0
  36. data/spec/cassettes/TophatterMerchant_Product/_enable/enables_a_product.yml +103 -0
  37. data/spec/cassettes/TophatterMerchant_Product/_retrieve/retrieves_a_product.yml +53 -0
  38. data/spec/cassettes/TophatterMerchant_Product/_schema/returns_the_schema.yml +124 -0
  39. data/spec/cassettes/TophatterMerchant_Product/_search/returns_products_matching_search_terms.yml +57 -0
  40. data/spec/cassettes/TophatterMerchant_Product/_update/updates_a_product.yml +103 -0
  41. data/spec/cassettes/TophatterMerchant_Variation/_create/creates_a_variation.yml +50 -0
  42. data/spec/cassettes/TophatterMerchant_Variation/_retrieve/retrieves_a_variation.yml +50 -0
  43. data/spec/cassettes/TophatterMerchant_Variation/_schema/returns_the_schema.yml +61 -0
  44. data/spec/cassettes/TophatterMerchant_Variation/_update/updates_a_variation.yml +97 -0
  45. data/spec/spec_helper.rb +6 -18
  46. data/spec/tophatter_merchant/metadata_spec.rb +111 -30
  47. data/spec/tophatter_merchant/order_spec.rb +55 -0
  48. data/spec/tophatter_merchant/product_spec.rb +102 -3
  49. data/spec/tophatter_merchant/variation_spec.rb +47 -0
  50. metadata +68 -10
  51. data/CHANGELOG +0 -3
  52. data/lib/tophatter_merchant/account.rb +0 -47
  53. data/lib/tophatter_merchant/api_key.rb +0 -42
  54. data/lib/tophatter_merchant/exceptions.rb +0 -8
  55. data/lib/tophatter_merchant/image.rb +0 -21
  56. data/tmp/stubs/metadata/conditions.json +0 -12
  57. data/tmp/stubs/metadata/gemstones.json +0 -12
  58. data/tmp/stubs/metadata.json +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 407bafdbab15d6579d4407f1bfdc9c490ce45438
4
- data.tar.gz: c5ee4df73abd47d1f4e56e81d9de4e4c1cc64637
3
+ metadata.gz: 68355cabcacea8767d8d9fba36509a52d6f3964a
4
+ data.tar.gz: 86cd0ca79cad91737c43a68a8e462884dedaeca0
5
5
  SHA512:
6
- metadata.gz: 858cf26f30a9aab45bdc1a915a70f8d8299003dbb02a224b78a40016add37cd3bd71098e8dd07bdbfb691f6a0865d932c528bcc0874ae2905a910c5d10c94e36
7
- data.tar.gz: f087d451add8e0f3d00369eca9430e4101299e3b5bbbfc9de0c1b16e12c1f0921b3e7697fc0447b09ea79bb4ecd52ac24d9e84d29530426561ccb3eea7e5dd63
6
+ metadata.gz: 0de67c7d954e5e71335ea538057a1da48b026f1f8c3c1924995e2504d478625e720ec1304172bc93928607609859bb11949a15e78312efe83ddc0d1ddd98cbfd
7
+ data.tar.gz: a6d4a43abcf06a48a61dc62ff54977fff1e8d7d441cd653bfa7fdfeec514e786d5e7efbcbd77d77d4cbc2d98055f7824651a9810ba751611a2d3d71b7aed0141
data/.rubocop.yml CHANGED
@@ -5,6 +5,8 @@ AllCops:
5
5
 
6
6
  Metrics/LineLength:
7
7
  Enabled: false
8
+ Metrics/BlockLength:
9
+ Enabled: false
8
10
  Metrics/MethodLength:
9
11
  Enabled: false
10
12
  Metrics/ParameterLists:
@@ -30,3 +32,6 @@ Style/ElseAlignment:
30
32
  # http://www.rubydoc.info/github/bbatsov/rubocop/Rubocop/Cop/Style/IndentationWidth
31
33
  Style/IndentationWidth:
32
34
  Enabled: false
35
+ # https://github.com/bbatsov/ruby-style-guide#underscores-in-numerics
36
+ Style/NumericLiterals:
37
+ Enabled: false
data/Gemfile CHANGED
@@ -5,5 +5,6 @@ group :development, :test do
5
5
  gem 'awesome_print'
6
6
  gem 'pry'
7
7
  gem 'rspec'
8
+ gem 'vcr'
8
9
  gem 'webmock'
9
10
  end
data/README.md CHANGED
@@ -8,8 +8,8 @@ gem 'tophatter-merchant', require: 'tophatter_merchant'
8
8
 
9
9
  ### Console Testing (Development)
10
10
  ```bash
11
- echo http://tophatter.dev/merchant_api/v1 > .api_host
12
- echo a42880c4b7d0809300bed27c453f883d > .access_token
11
+ echo http://tophatter.dev/merchant_api/v1 > .api_path
12
+ echo 293da6763df7cb3b894a1831addcb52d > .access_token
13
13
  bin/console
14
14
  ```
15
15
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.3
1
+ 1.1.4
data/bin/console CHANGED
@@ -22,5 +22,5 @@ end
22
22
 
23
23
  TophatterMerchant.logger.level = Logger::DEBUG
24
24
 
25
- Pry.config.color = false
25
+ AwesomePrint.pry!
26
26
  Pry.start
@@ -6,14 +6,24 @@ module TophatterMerchant
6
6
  get(url: "#{path}.json")
7
7
  end
8
8
 
9
+ # ap TophatterMerchant::Metadata.categories
10
+ def categories
11
+ get(url: "#{path}/categories.json")
12
+ end
13
+
9
14
  # ap TophatterMerchant::Metadata.conditions
10
15
  def conditions
11
16
  get(url: "#{path}/conditions.json")
12
17
  end
13
18
 
14
- # ap TophatterMerchant::Metadata.categories
15
- def categories
16
- get(url: "#{path}/categories.json")
19
+ # ap TophatterMerchant::Metadata.brands
20
+ def brands
21
+ get(url: "#{path}/brands.json")
22
+ end
23
+
24
+ # ap TophatterMerchant::Metadata.materials
25
+ def materials
26
+ get(url: "#{path}/materials.json")
17
27
  end
18
28
 
19
29
  # ap TophatterMerchant::Metadata.sizes
@@ -21,6 +31,11 @@ module TophatterMerchant
21
31
  get(url: "#{path}/sizes.json")
22
32
  end
23
33
 
34
+ # ap TophatterMerchant::Metadata.colors
35
+ def colors
36
+ get(url: "#{path}/colors.json")
37
+ end
38
+
24
39
  # ap TophatterMerchant::Metadata.countries
25
40
  def countries
26
41
  get(url: "#{path}/countries.json")
@@ -51,19 +66,6 @@ module TophatterMerchant
51
66
  get(url: "#{path}/carriers.json")
52
67
  end
53
68
 
54
- # ap TophatterMerchant::Metadata.brands
55
- def brands
56
- get(url: "#{path}/brands.json")
57
- end
58
-
59
- def materials
60
- get(url: "#{path}/materials.json")
61
- end
62
-
63
- def gemstones
64
- get(url: "#{path}/gemstones.json")
65
- end
66
-
67
69
  protected
68
70
 
69
71
  def path
@@ -9,6 +9,10 @@ module TophatterMerchant
9
9
  :disbursement_amount, :seller_fees_amount, :seller_fees,
10
10
  :paid_at, :created_at
11
11
 
12
+ def id
13
+ created_at.present? ? identifier : nil
14
+ end
15
+
12
16
  class << self
13
17
  # ap TophatterMerchant::Order.schema
14
18
  def schema
@@ -34,10 +38,6 @@ module TophatterMerchant
34
38
  Order.new post(url: "#{path}/fulfill.json", params: { order_id: id, carrier: carrier, tracking_number: tracking_number })
35
39
  end
36
40
 
37
- def unfulfill(id)
38
- post(url: "#{path}/#{id}/unfulfill.json")
39
- end
40
-
41
41
  # ap TophatterMerchant::Order.refund(417953232, type: 'full', reason: 'delay_in_shipping').to_h
42
42
  # ap TophatterMerchant::Order.refund(417953232, type: 'partial', reason: 'other', fees: ['shipping_fee']).to_h
43
43
  def refund(id, type:, reason:, fees: [])
@@ -4,13 +4,17 @@ module TophatterMerchant
4
4
  :category, :title, :description, # Basics
5
5
  :condition, :brand, :material, # Facets
6
6
  :available_quantity, :variations, # Variations
7
- :starting_bid, :buy_now_price, :retail_price, :cost_basis, :success_fee_bid, :minimum_alerts_needed, # Pricing
8
- :shipping_origin, :shipping_price, :expedited_shipping_price, :days_to_fulfill, :days_to_deliver, :expedited_days_to_deliver, :weight, # Shipping
7
+ :starting_bid, :buy_now_price, :retail_price, :cost_basis, # Pricing
8
+ :shipping_origin, :days_to_fulfill, :weight, # Shipping
9
+ :shipping_price, :days_to_deliver,
10
+ :expedited_shipping_price, :expedited_days_to_deliver,
9
11
  :buy_one_get_one_price, :accessory_price, :accessory_description, # Upsells
10
12
  :primary_image, :extra_images, :all_images, # Images
11
- :slug, :ratings_average, :ratings_count, # Ratings
13
+ :ratings_average, :ratings_count, # Ratings
12
14
  :created_at, :updated_at, :disabled_at, :deleted_at, # Timestamps
13
- :blacklisted_at, :admin_hold_at, :slug, :internal_id # Other
15
+ :success_fee_bid, :minimum_alerts_needed, # Undocumented
16
+ :blacklisted_at, :admin_hold_at,
17
+ :slug, :internal_id
14
18
 
15
19
  def id
16
20
  created_at.present? ? identifier : nil
@@ -47,21 +51,21 @@ module TophatterMerchant
47
51
  get(url: "#{path}/schema.json")
48
52
  end
49
53
 
50
- def search(query:, page: 1, per_page: 50, pagination: nil)
51
- result = get(url: "#{path}/search.json", params: { query: query, page: page, per_page: per_page, pagination: pagination })
54
+ # ap TophatterMerchant::Product.all.map(&:to_h)
55
+ def all(status: nil, category: nil, page: 1, per_page: 50, pagination: nil, sort: nil)
56
+ result = get(url: "#{path}.json", params: { status: status, category: category, page: page, per_page: per_page, pagination: pagination, sort: sort })
52
57
 
53
58
  if pagination.present?
54
59
  result['results'] = result['results'].map { |hash| Product.new(hash) }
55
60
  else
56
- result.map { |hash| Product.new(hash) }
61
+ result = result.map { |hash| Product.new(hash) }
57
62
  end
58
63
 
59
64
  result
60
65
  end
61
66
 
62
- # ap TophatterMerchant::Product.all.map(&:to_h)
63
- def all(status: nil, category: nil, page: 1, per_page: 50, pagination: nil, sort: nil)
64
- result = get(url: "#{path}.json", params: { status: status, category: category, page: page, per_page: per_page, pagination: pagination, sort: sort })
67
+ def search(query:, page: 1, per_page: 50, pagination: nil)
68
+ result = get(url: "#{path}/search.json", params: { query: query, page: page, per_page: per_page, pagination: pagination })
65
69
 
66
70
  if pagination.present?
67
71
  result['results'] = result['results'].map { |hash| Product.new(hash) }
@@ -86,11 +90,6 @@ module TophatterMerchant
86
90
  Product.new post(url: "#{path}/update.json", params: data.merge(identifier: id))
87
91
  end
88
92
 
89
- # ap TophatterMerchant::Product.delete('FOOBAR').to_h
90
- def delete(id)
91
- Product.new post(url: "#{path}/delete.json", params: { identifier: id })
92
- end
93
-
94
93
  # ap TophatterMerchant::Product.disable('FOOBAR').to_h
95
94
  def disable(id)
96
95
  Product.new post(url: "#{path}/disable.json", params: { identifier: id })
@@ -101,8 +100,10 @@ module TophatterMerchant
101
100
  Product.new post(url: "#{path}/enable.json", params: { identifier: id })
102
101
  end
103
102
 
104
- def upload(file, template:)
105
- Product.new post(url: "#{path}/upload.json", params: { file: file, template: template })
103
+ # ap TophatterMerchant::Product.delete('FOOBAR').to_h
104
+ # NOT DOCUMENTED
105
+ def delete(id)
106
+ Product.new post(url: "#{path}/delete.json", params: { identifier: id })
106
107
  end
107
108
 
108
109
  protected
@@ -1,6 +1,11 @@
1
- require 'active_model'
2
-
3
1
  module TophatterMerchant
2
+ class BaseException < StandardError; end
3
+ class BadContentTypeException < BaseException; end
4
+ class UnauthorizedException < BaseException; end
5
+ class BadRequestException < BaseException; end
6
+ class NotFoundException < BaseException; end
7
+ class ServerErrorException < BaseException; end
8
+
4
9
  class Resource
5
10
  include ActiveModel::Model
6
11
 
@@ -33,7 +38,6 @@ module TophatterMerchant
33
38
 
34
39
  class << self
35
40
  def attr_accessor(*vars)
36
- # TophatterMerchant.logger.debug "#{name}: #{vars.inspect} (attr_accessor)"
37
41
  @attributes ||= {}
38
42
  vars.each { |var| @attributes[var.to_s] = true }
39
43
  super(*vars)
@@ -1,6 +1,8 @@
1
1
  module TophatterMerchant
2
2
  class Variation < Resource
3
- attr_accessor :identifier, :size, :color, :quantity, :created_at
3
+ attr_accessor :product_identifier, :identifier,
4
+ :size, :color, :quantity,
5
+ :created_at, :disabled_at, :deleted_at
4
6
 
5
7
  def id
6
8
  created_at.present? ? identifier : nil
@@ -1,3 +1,3 @@
1
1
  module TophatterMerchant
2
- VERSION = '1.1.3'.freeze
2
+ VERSION = '1.1.4'.freeze
3
3
  end
@@ -1,4 +1,5 @@
1
1
  require 'active_model'
2
+ require 'json'
2
3
 
3
4
  module TophatterMerchant
4
5
  class << self
@@ -20,13 +21,9 @@ module TophatterMerchant
20
21
  end
21
22
 
22
23
  require File.dirname(__FILE__) + '/tophatter_merchant/version'
23
- require File.dirname(__FILE__) + '/tophatter_merchant/exceptions'
24
24
 
25
25
  # Resources:
26
26
  require File.dirname(__FILE__) + '/tophatter_merchant/resource'
27
- require File.dirname(__FILE__) + '/tophatter_merchant/account'
28
- require File.dirname(__FILE__) + '/tophatter_merchant/api_key'
29
- require File.dirname(__FILE__) + '/tophatter_merchant/image'
30
27
  require File.dirname(__FILE__) + '/tophatter_merchant/metadata'
31
28
  require File.dirname(__FILE__) + '/tophatter_merchant/order'
32
29
  require File.dirname(__FILE__) + '/tophatter_merchant/product'
@@ -0,0 +1,161 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://tophatter.com/merchant_api/v1/metadata/brands.json
6
+ body:
7
+ encoding: ASCII-8BIT
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - "*/*; q=0.5, application/xml"
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ Content-Length:
15
+ - '0'
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Cache-Control:
26
+ - max-age=0, private, must-revalidate
27
+ Content-Encoding:
28
+ - gzip
29
+ Content-Type:
30
+ - application/json; charset=utf-8
31
+ Date:
32
+ - Sat, 25 Mar 2017 22:19:52 GMT
33
+ Etag:
34
+ - W/"802f97f94d2f051ca825fcf6c399acb5"
35
+ Server:
36
+ - nginx + Phusion Passenger
37
+ Status:
38
+ - 200 OK
39
+ Vary:
40
+ - Accept-Encoding
41
+ X-Content-Type-Options:
42
+ - nosniff
43
+ X-Frame-Options:
44
+ - SAMEORIGIN
45
+ X-Powered-By:
46
+ - Phusion Passenger Enterprise
47
+ X-Request-Id:
48
+ - d7977e10-155b-4e34-80f5-1c1a70b429c1
49
+ X-Request-Start:
50
+ - t=1490480392.698
51
+ X-Runtime:
52
+ - '0.013937'
53
+ X-Xss-Protection:
54
+ - 1; mode=block
55
+ Transfer-Encoding:
56
+ - chunked
57
+ Connection:
58
+ - keep-alive
59
+ body:
60
+ encoding: ASCII-8BIT
61
+ string: !binary |-
62
+ H4sIAAAAAAAAA2RX23IjtxH9FdQ+7D7YcZVTlUrZbyRFUUuRXEVytJHz1JyB
63
+ ZmBi0GNcKI3yQ8l3+MdyujGS5fKDCJweXBunT7f+82HRNDYljs6mDz/++8Pf
64
+ zYWjgUObPnwLcMnRLLw3ewonF1rYFv8yNxSdfF60rqXaYf/IZsUll2jVEB0F
65
+ wsjRej8bbAjW3LucqXXBidFGHjll8nZGib3VBX3L2thnswgt/pz5xqyDjd00
66
+ 2ym0Npp9849ibVDbI9VV/WO0rbko2C4qPjssjSvEPO/rnzDb3FNPOnOw0TUU
67
+ zJo6b82Xkh9xSBv1ICGYn2jyHP8AzI4fc7WQuSuudq259taFV7B3TY/b691C
68
+ 5uBwBuvnQ475O/ODdH4tlBr4bRAAr+mycZiHaQeOxTIvjqst9fJbupKyef96
69
+ b8Y750/vUMaZ1BNL+ODET+kkPlyulpu5sfhMGcsLvt9tFrefpUfHyYy9HmhJ
70
+ LVwz4Uqp6U+kFm9D46ibgZ9eW/O1d9kqCsKBWzuWo3dNtYApLrD2kxx5aSmO
71
+ 9KS9o86ywdz1Vi6uKCfsu+U+pHo+BzYu/TwZlJz0ANz2TtsQnDVbWyczB6vn
72
+ 4lhxPrnqCcYDd2TucfWsC0TqB3069LCovNTZ1cdbCpfNIj8xtxV2fa6HifOb
73
+ LCPzKRk0ua/EWRbPZ125xKONcardTkav6AiefTQbKp1VjL3CG3lWCBo8tvai
74
+ 52QuyTe9+x3fUcjwbDVEvF3t5Xq3FSVqrQ638LVuAKJbP3fyzEn0x1TbiKgz
75
+ F3R27SsW/5jbktI8MiIezMqXo0LX8Kc6Fesna3ZUQqtXXPWe6xRIRBa/XTiN
76
+ nd8NOy5HCEW9qlp5hNOMhCQIctKFXXYvGtYrT7GamJpeW/juivSBNS4aYa5Z
77
+ y6NUJVhxOOMR9BhcYvztv51Gx+q3/83+uLg+PEiD2BJnmAMupD5RH+BlHriE
78
+ 7g1fUx/ewN7ixOroih/KTNULG+0JrpBAhoaK1uFclyVieAAFumofcdWL0upu
79
+ iFp9ltlHF9ycKnsu2DeVIcdjfelqWYKY/At0hJ+nNyMktY4I5FuzNTd+jndY
80
+ EH/XFOv5NBqw6BJOOcn+a4I8/C33tTuZu9FFJ+G+buHh2E7abRFQSyq64toD
81
+ /ATdjK6iFzra3JtFbNX160otaSCVkZqpIgc+mV1pGjnoGv4q1pt/ho4iq8Fh
82
+ hLnBd112GAiJ51m7I7SNzZsgrkPnXeoREk1mZdw6DgjiziFjmJ9tp85ap4Za
83
+ 7eSadRauqy5Z57pjloTgIMaKnscIFQWNkjk8rGC5lAhLf1lPSpxLSr1wDMlw
84
+ UGxD67SNsXriEktJwyKS30CvowuhWqIFGc1fv1eATeS9L/Ei0O2GzdJRcvRq
85
+ YoR2zKzQWnNjeVR/AoWmx7K4SzML9WWc9FOJuvWGRvm1/Pho42SWCAX5vHGS
86
+ P5Y2hpr6BIvhFeFpOsTkR/Pl0x7irWq5ARu7907fuJLsOFrzM/yVczWd5Ug6
87
+ PBZ9+838fJtiVZyvyKcqk1cI7SN17zOB0ssshpq3rkSBpqpAaZ4Sz6CdDRin
88
+ 8Okk8bBiBRPYJgyFeAtdr5At6jp81AGQhdcgveIB+sQNDzw77qoEiE9nvnL0
89
+ svZnKGIMmv/Ii48bO+akH86u0dD6nIga8OUFWcJVfIRwgKVwlbj58xnCRWB8
90
+ GeQZtt+topWctiUczCzAgEmRJCfRuS01kqG3wroGFYQbxnrvrRuGyax6lnts
91
+ WZ/mVZi3bD8lzW2pIq9KCM/MBmixOdgnqFfU1UvrEJuve1V060bN39vimuld
92
+ xbaVUmFFZ5DAzRApaemQlMWNEBHJyw2rw4E8lK6z8dGqD68J6eJuJJU1gH5C
93
+ dRUQj1Lv1AGTxHtdS0IyC52V3IDJzZ0Xufa1G8wtd1UJr90IORPt3Ekp0dVa
94
+ cUcN6sbaG3DCDO+J9+2zmvCEvnba9AllY6sASdjs7LmmgJ29g7TkRI0CK0lV
95
+ a14Zoclt51DLLD3zoOAF6Y/cEZWETuemqv6OW62FdyiZVSK6CrqmJ+UC0p1L
96
+ 5r6gpNQXhgpCk8yNgxgqt2E4YaNYHbUrvng76ND9ai+/5OR2KF87ZCtSS2DP
97
+ UgX1wZ3UEM2DuWNf+w14mXr1tSIwgI+pIsT1vZRuuVZhezwcyhtvNi7W2RDq
98
+ j+agVd+enmVb3RK1LEGzr1lf5RUeJ/OnLwmlUO0kJEvtFYwq0gNFc22F9reY
99
+ inkJklSN+Qi6NNpHnTmfEGWU/jOwLy28pguWqr+Hy538UqsafCCRAwS7HWtQ
100
+ 4hIlEnKUekICA/WpcGNGEiaqKcNIYarGI2nooCA4ORw60C8VSdGxl3pQl3Ka
101
+ Pg8u6B1U9QDsHxcTw1eb5L4Hjm1CyhEmfaFTldkv3p0dIVtsWSFyFioDKabA
102
+ 86C6c0OekQvBFdS7rAawLNZPGf+0YP6B9P+BGyre3A1Os/mNSsOeNQfCZygS
103
+ 5e4DadE1G1AxtjMOJ6kLpGhRcksBITwR3ukKKBjkWPeQQ3bq25tI/wcAAP//
104
+ dFnLkuK4Ev0Vxyx617W4EXf2hqKA6aJgbFPVPRG9MCBjNbZF+wEFEfff78mT
105
+ onjVbEAS2JalzDwP6c0BnIhrUiauHOSYxFYAlZI5xvff3ZblKwp/fO2FL9Ia
106
+ PF4FYTRIomk8nw2ip3kyjwYylBbbXHhlTWyJkEspuXKEgoTMkb3ZAOs4YhaM
107
+ ODTAhkadh5DIKNRgMVPcqdLLUV9ZGyK7Q8F+gnBaaSJHTuqIu6iBkVume8gT
108
+ bUqoXABY5FzrWIEi1xgFxTgKYsg5UZ9IjBgVocZe8r6SGnEKifBkM+FLQM/O
109
+ cKzYpWAyJiCZWEN6c7QMBitT6MzQAx3JAS855takOoSXVJkVG7vhRYaoHQnJ
110
+ YPeg8pOPzlE6mEUxmJDkBQpeC0Tg0AZLywdVbhEMwPmxMQBvGcFD8AoHyKZC
111
+ u4hHabSgdkG4SsmH4pZg+AXF4l27wO5JulJOiOeA1CAVbHv0L9QeCk2WB+l1
112
+ KABgumRG8R6UcNds5A2S8VB0qNJNWdGwbnNEYnyu4klaLBwXNzGiHjbMT6xT
113
+ gWnHjlUiyZFTFplhVr6HdGxJIY0fwM5Iy2YZcpcATaKRyFpBOBXaEaDxcIYO
114
+ oSZBkXOS4YlbETQSVwpNXGkTUN7D7Llk2h3ZIrMKgxjQK/DImak9sUrctsnd
115
+ li3hcV1N1QMuvTMF4zqpbaasEy2EdtIx8RKsaY3dX3GJ50MR93N6JOBxSGB0
116
+ L3NO4HlkwOsq7chUXiElBYhWWqDYfUsJvmgvQJFKbdojZ4JWo4voW8FZkMmg
117
+ lAuAC0hLbJY1K/+rreRvadmR5r6iBJKgJ5RNdA6CkcO0BN2Qc4CfDS+Un4S1
118
+ KR2S2b7ZQnBRat05lnWwQYSkrSLg9+n3Kb7+URxbPLiH5elbog85h3suAEx/
119
+ /KQb0bUH8cHCUfgaXnlcaivFKgzDMj3KdPquKU1rl/xHqS4RVltrVVhBYHl+
120
+ f20P/e7EBuF4nZZqpqljNhQeYK48oONRZdJHKPVQYpCnS2xmp3l69k5MRgXX
121
+ MwenSNez9CRKuh6LhRWTYq9uSL3ODWUyFCFqRX3yNFrRifEWpU+djFLsCspz
122
+ Nm9MjV2x1nDsz6PXAQ0IMIJa/YZbZ6Nee1+D748I/MS/OJsVt15CiF1en/51
123
+ azAU4koKsWAHCPa7M1e+AeTV+d5ANsvL3O9OcJ2lFKydReLxy/DSJQD9Vqi5
124
+ F+z3Mv1aciOQXSZpoezosX5Qpnersj9R0qeRD/vxrGobJcwDUGCaLyvVtjtR
125
+ OrLR0K2EhCez2aQ3ShWAnVMp2hpigUrtE8F3VndnVYfiZ6sLgTfciyRojfdd
126
+ R8BooQLIEOqurl57mw6QjLqiqSW9Nbir018Oq9q9AwBZzcfJVT6Nq+xjF+8V
127
+ mONnQ1PykJKQgecCIGXBlY1TYSFChBtdtsV4K3y0/WWyTLQ2EE27kMdQ0LjD
128
+ 1hwvJNpkKTHVun/TbabpGrC3Ipg5ipgbIYdCVuhLipUJ9lML7KtsY7X/TI9d
129
+ C7CWftKjtgkZzL97NaUiCmkVt3UqtpjXVIjKlTgZDE3Q9ZrU4NtBPJ3LdX+e
130
+ RmH/RmRBrA/V630GtuqeiM6CutbWjqEhhA01zHiirN2JqZe62M/2Wdkq8BjP
131
+ rK1efaetCtuCsplyCxrOZ4IgpYU2IKY+KiKlkxdNwbCzWAmG1YTznyAqum3g
132
+ LRgOqE19J4pQ/BoVVoBcSFU2DyLxlWacNM5fQHau3idyCL2huNZWtQzYWxOA
133
+ HWf65Att8xJG8dV6v2ACqFyC3bVddwy7FySLpVv2YiyyUoBw2fHfnScu00Uj
134
+ YbgzFB1d4Zvn+6qiWJmguFQUS5vpjdHEM9PFifRLYkxsS9JIDVEJjVq7Cvjd
135
+ A3HIMRHxDrH5LX8XPS3enjxrltvCNW7LmiGCAmVgzYyaue05929pvdkpp4ks
136
+ CjML6D0N/5w2ow7gZdFvmQU6cMrLmbCGmiR4m6teAgNujL2hwGJoB4LycQn4
137
+ eXMU0Gg3+cK9n4ktch8/61FC3KrVh9yyr0J1PMUF/cD+840Tccv5zaOieG95
138
+ ViREU0QYm5arN+nWheeCm4Ob6LHNJ0TRkaySVNadCUTZrJVjzXvjIJ4+JdIs
139
+ uMNzEDWUCbNkGM+9D3DD5U60zWqR/5ypbTAmoscV2T1z+7EzchCBkui3U675
140
+ xxmeeUBFm4mY0MpOzEPxkD0IvxoIO6wFpHnYGCZfZObhUg/qFKvCYpm2RNmw
141
+ Um8l3KoNGoJN8WCr6fS0C4s+q10wj0NlRWKAfQG99yQFHLARy/yx1m6x0RMe
142
+ YZYf9MVVpCQAJGVCTUOa4ccE0MKlk2K8bAI9HuqUJjlPMPtp5fyxjbjIym8a
143
+ EUCtZy+udMGYuX8mI9Czv4UQfH1GsvD0gFl3+joorAxK7JXavbbtkdk9OaR1
144
+ GdD6/YVcZkANhXcNZ99pBNd6kDXE8/cMgqFza67IENIh44+jR7liNJOPpK+G
145
+ q5QZwQi8sjdOV1pIRs5pAR11enaIl7FbLtG4apBNZLhjBcLe8/kz3S8U9Ojx
146
+ VWtZzcQsc7GveJD7DXJlo2iUlkf7AUcCw4oYQ1py6fapVmfNVG7H0u/W0Apc
147
+ zIkB8aYcuy/LcqScqeW0zdU8gm4H+9TS+t4u1K16gYau1LVpTcUy8eI2fK+X
148
+ Dqne64Qj0rU5oNiyvMoZMQriu/oyKbln4Guh5dHaDCX/FO5SCUFRnV3xP7Vs
149
+ Ixc66oesjGpTRW7T8WvvK7ZIfdUccVo92majrYNKfmCymgBg3HKyNC5VesTW
150
+ m62xo3qFcmf12hoSmPhQ7FLdtuRr6RaW4SFbw4OKxIEmLPhrV1om/xH1TRrd
151
+ Sqb3va1NaSY0T39AlOQps/+XrbuG/MyOlBlY1HMKZBsBo/G9EeL3U8NLSkBP
152
+ VJRoiyHWaZXmhZ7m8ji8B+D2Z7B9AY5UwaLv5DRj/ZYyrfudRWih5OqB3tFo
153
+ FiGtOZFHs8VvJRYz+O+f0gdlCCIrZzIJtt+qP/KRb6hkZBxPUAeZeCbe0SFj
154
+ rpWKgejaQkIZBYYBOHKoV9fad/xtEJ5N92djPYszHSCefEyAtgrpjH2rO4aL
155
+ 0qWwyVV/S6zTzxYOJ8s00CwUdzmVA0Xf2wl7lfsxpJuPKoRY/iXvMv1PfzqV
156
+ fJxW1qyEtRZyPipeIcNyHmlACgbIj0yl2UFTKkpJbTCpPYV2DqkjvJYyC/FX
157
+ gImiTGLdtlIufCgyxkCOC5N33vNBpjeIGup80ZYbHU++ZmR2l94EdlZed1Zr
158
+ B2nmrcQ3T4bFVpXDIRn7YeibuHf3x8///R8AAP//AwDhvJkNzyIAAA==
159
+ http_version:
160
+ recorded_at: Sat, 25 Mar 2017 22:19:52 GMT
161
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,81 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://tophatter.com/merchant_api/v1/metadata/carriers.json
6
+ body:
7
+ encoding: ASCII-8BIT
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - "*/*; q=0.5, application/xml"
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ Content-Length:
15
+ - '0'
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Cache-Control:
26
+ - max-age=0, private, must-revalidate
27
+ Content-Encoding:
28
+ - gzip
29
+ Content-Type:
30
+ - application/json; charset=utf-8
31
+ Date:
32
+ - Sat, 25 Mar 2017 22:19:56 GMT
33
+ Etag:
34
+ - W/"df1934e98e60bb6c3169b8b7cb76b2df"
35
+ Server:
36
+ - nginx + Phusion Passenger
37
+ Status:
38
+ - 200 OK
39
+ Vary:
40
+ - Accept-Encoding
41
+ X-Content-Type-Options:
42
+ - nosniff
43
+ X-Frame-Options:
44
+ - SAMEORIGIN
45
+ X-Powered-By:
46
+ - Phusion Passenger Enterprise
47
+ X-Request-Id:
48
+ - a40e6f97-3022-4992-8125-4d31ca008ab5
49
+ X-Request-Start:
50
+ - t=1490480396.593
51
+ X-Runtime:
52
+ - '0.031435'
53
+ X-Xss-Protection:
54
+ - 1; mode=block
55
+ Transfer-Encoding:
56
+ - chunked
57
+ Connection:
58
+ - keep-alive
59
+ body:
60
+ encoding: ASCII-8BIT
61
+ string: !binary |-
62
+ H4sIAAAAAAAAA2xUQW7bMBD8iqCzmQJFTr05iZK4iVMjtoumt7W0thhLpEBK
63
+ cdSij+kT+oYi/+ouRdJq3YuwO7Mkl7Mjfk/Xy8Uy/ZB2trHpJL3GInuldIsF
64
+ vlJ+CQoKSBbatoTmLhMNZ5N0PSx06yhO5iCrZKaUfoFWamUHUtSS+Kvbe0qL
65
+ shriBC91XaPJcUDFrtIbqERNW1DFJ7UykBOlVcsB9VFKBUk25xNzjgXWNuKh
66
+ PUf47p5AHVAR2g/BJJ2pQsZayUmonVp03Ho5Td4lXhEYQNFZGJfcjak9MeeL
67
+ LwSdNyzXrVa75I4//piSYrHnjz+KLx+r/OVL3uYjNKDCsmdOwpIVyMORal0W
68
+ uKVUO2i0wUDbAISKC6x2sqsDvxn1ceNEH+Y2tRJOZyGA4UmazWm+2Wtj0PJY
69
+ sW4s+myS3qCpfX9JnLPYObRnnvbDnbStzC35Iz+jit0Io5LHztJB8Y5mSMMV
70
+ 5lBBb/3s2AQ0JAoreO6ouPZslKukxkEVCQdRNQ+Gos8SWwVRlRfl8UuoN3pk
71
+ k9znYd0DtiUa3smGEmZUJaRq0SjnfGAPrzqzxz4Wta3bgsV86tRIy75T/5WS
72
+ ZcSutXkZzp4ZacvAHdVZ7w1IFQ3Q7Q0RpTvpnoxqbCkbwqsYT9I78ke84p4T
73
+ cWqLa20OYAoZbep9sT3idPjFLLnXYbjTztL/WjkndRspKn0cceTiDQIQzn7U
74
+ vXcjW4CT8B486QKr5ErXyLuxaAxEYvaX9J49Gcjy7PpspLvdiqPuxJ3sYreb
75
+ 9/z0rB5WbCDFLWbri3/fmVsaGdqDNlXB/7vLCK77gaDXhD3aD8TwYnjmxv8h
76
+ YZUokGdGzuxeNNkL3n62wK1WHhINWEbIptoYpJoCk8w28PsXK06BVCIfKOG6
77
+ uFpk/DgVjXvMlwdpo20tJ0dbH5KvCO638bzCg/g2QEPVjz8AAAD//wMAmQDZ
78
+ PywGAAA=
79
+ http_version:
80
+ recorded_at: Sat, 25 Mar 2017 22:19:55 GMT
81
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,97 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://tophatter.com/merchant_api/v1/metadata/categories.json
6
+ body:
7
+ encoding: ASCII-8BIT
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - "*/*; q=0.5, application/xml"
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ Content-Length:
15
+ - '0'
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Cache-Control:
26
+ - max-age=0, private, must-revalidate
27
+ Content-Encoding:
28
+ - gzip
29
+ Content-Type:
30
+ - application/json; charset=utf-8
31
+ Date:
32
+ - Sat, 25 Mar 2017 22:19:51 GMT
33
+ Etag:
34
+ - W/"1fc46ae442e0793ca4f38061b1ba908a"
35
+ Server:
36
+ - nginx + Phusion Passenger
37
+ Status:
38
+ - 200 OK
39
+ Vary:
40
+ - Accept-Encoding
41
+ X-Content-Type-Options:
42
+ - nosniff
43
+ X-Frame-Options:
44
+ - SAMEORIGIN
45
+ X-Powered-By:
46
+ - Phusion Passenger Enterprise
47
+ X-Request-Id:
48
+ - 0c66d582-5e55-4f14-b839-1f9cad59c673
49
+ X-Request-Start:
50
+ - t=1490480391.785
51
+ X-Runtime:
52
+ - '0.013347'
53
+ X-Xss-Protection:
54
+ - 1; mode=block
55
+ Transfer-Encoding:
56
+ - chunked
57
+ Connection:
58
+ - keep-alive
59
+ body:
60
+ encoding: ASCII-8BIT
61
+ string: !binary |-
62
+ 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
94
+ AEjeaFaTGQAA
95
+ http_version:
96
+ recorded_at: Sat, 25 Mar 2017 22:19:51 GMT
97
+ recorded_with: VCR 3.0.3