music_today_api_wrapper 13.01.16.01

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ffcf247a0ea2ac483afe5345305132da052939c8
4
+ data.tar.gz: 302c995cb5737113e4274b016f0fe1d16e5cbc16
5
+ SHA512:
6
+ metadata.gz: 0d592ee72f941ee0459aa7e4d6166316d9c072bbe99a7d96d972a7910cb6dc1554bfdd69e00040146543ed1a21f8b52de295b5cf884c3669f9ef656f2b18cfd2
7
+ data.tar.gz: 31ac61968e4293302324cb516839bc022abe2da23bb2e0da224a9c82822dbab3b72d9ff1978614884c3008a332bc015a44b1861a93cc1ca2fe3844df5a5e6e8c
@@ -0,0 +1,35 @@
1
+ require 'support/configuration'
2
+ require 'services/product_services'
3
+ require 'services/shipping_services'
4
+ require 'services/checkout_services'
5
+
6
+ module MusicTodayApiWrapper
7
+ class << self
8
+ attr_accessor :configuration
9
+ end
10
+
11
+ def self.configure
12
+ self.configuration ||= Configuration.new
13
+ yield(configuration)
14
+ end
15
+
16
+ def self.products(per_page = nil, page_number = nil)
17
+ product_services = Services::ProductServices.new
18
+ product_services.all_products(per_page, page_number)
19
+ end
20
+
21
+ def self.find_product(id)
22
+ product_services = Services::ProductServices.new
23
+ product_services.find_product(id)
24
+ end
25
+
26
+ def self.shipping_options(address, items)
27
+ shipping_services = Services::ShippingServices.new
28
+ shipping_services.options(address, items)
29
+ end
30
+
31
+ def self.checkout(address, items)
32
+ checkout_services = Services::CheckoutServices.new
33
+ checkout_services.checkout(address, items)
34
+ end
35
+ end
@@ -0,0 +1,48 @@
1
+ require 'resources/purchase/shipping_option'
2
+ require 'resources/hash'
3
+
4
+ module MusicTodayApiWrapper
5
+ module Resources
6
+ class Address
7
+ attr_accessor :street,
8
+ :street_second_line,
9
+ :city,
10
+ :postal_code,
11
+ :country,
12
+ :shipping_options,
13
+ :selected_shipping
14
+
15
+ # rubocop:disable ParameterLists
16
+ def initialize(street, state, city, postal_code, country = 'US',
17
+ street_second_line = '', shipping_options = [],
18
+ selected_shipping = nil)
19
+ @street = street
20
+ @state = state
21
+ @street_second_line = street_second_line
22
+ @city = city
23
+ @postal_code = postal_code
24
+ @country = country
25
+ @shipping_options = shipping_options
26
+ @selected_shipping = selected_shipping
27
+ end
28
+
29
+ def self.from_hash(address_hash)
30
+ Address.new(address_hash['street'],
31
+ address_hash['city'],
32
+ address_hash['postalCode'],
33
+ address_hash['country'],
34
+ address_hash['street2'])
35
+ end
36
+
37
+ def as_hash
38
+ { street: @street,
39
+ street2: @street_second_line,
40
+ state: @state,
41
+ city: @city,
42
+ postalCode: @postal_code,
43
+ country: @country,
44
+ shippingOptionType: @selected_shipping }.compact
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,27 @@
1
+ require 'resources/address'
2
+ require 'resources/purchase/item'
3
+
4
+ module MusicTodayApiWrapper
5
+ module Resources
6
+ module Checkout
7
+ class Session
8
+ attr_accessor :id, :address, :items
9
+
10
+ def initialize(id, address, items = [])
11
+ @id = id
12
+ @address = address
13
+ @items = items
14
+ end
15
+
16
+ def self.from_hash(session_hash)
17
+ address = Address.from_hash(session_hash)
18
+ session = Session.new(session_hash['sessionId'], address)
19
+ session_hash['items'].each do |item|
20
+ session.items << Resources::Purchase::Item.from_hash(item)
21
+ end
22
+ session
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,8 @@
1
+ module MusicTodayApiWrapper
2
+ # rubocop:disable ClassAndModuleChildren
3
+ class ::Hash
4
+ def compact
5
+ select { |_, value| !value.nil? }
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ module MusicTodayApiWrapper
2
+ module Resources
3
+ class Image
4
+ attr_accessor :short, :medium, :large
5
+
6
+ def initialize(short = nil, medium = nil, large = nil)
7
+ @short = short
8
+ @medium = medium
9
+ @large = large
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,47 @@
1
+ require 'resources/image'
2
+ require 'resources/variant'
3
+
4
+ module MusicTodayApiWrapper
5
+ module Resources
6
+ class Product
7
+ attr_accessor :uid,
8
+ :name,
9
+ :description,
10
+ :category,
11
+ :image,
12
+ :price,
13
+ :variants
14
+
15
+ # rubocop:disable ParameterLists
16
+ def initialize(uid, name, description, category, price,
17
+ image = MusicTodayApiWrapper::Resources::Image.new, variants = [])
18
+ @uid = uid
19
+ @name = name
20
+ @description = description
21
+ @category = category
22
+ @price = price
23
+ @image = image
24
+ @variants = variants
25
+ end
26
+
27
+ # rubocop:disable AbcSize
28
+ def self.from_hash(hash)
29
+ image = Image.new(hash['imageUrlSmall'],
30
+ hash['imageUrlMedium'],
31
+ hash['imageUrlLarge'])
32
+
33
+ product = Product.new(hash['id'],
34
+ hash['name'],
35
+ hash['lang']['en']['textDesc'],
36
+ hash['categoryName'],
37
+ hash['listPrice'],
38
+ image)
39
+
40
+ hash['variants'].each do |variant|
41
+ product.variants << Variant.from_hash(variant)
42
+ end
43
+ product
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,35 @@
1
+ require 'resources/variant'
2
+ require 'resources/hash'
3
+
4
+ module MusicTodayApiWrapper
5
+ module Resources
6
+ module Purchase
7
+ class Item
8
+ attr_accessor :variant, :quantity
9
+
10
+ def initialize(variant = Variant.new, quantity = 1, tax = nil,
11
+ total = nil)
12
+ @variant = variant
13
+ @quantity = quantity
14
+ @tax = tax
15
+ @total = total
16
+ end
17
+
18
+ def as_hash
19
+ { sku: @variant.sku,
20
+ qty: @quantity,
21
+ quantity: @quantity,
22
+ price: @variant.price,
23
+ tax: @tax,
24
+ total: @total }.compact
25
+ end
26
+
27
+ def self.from_hash(item_hash)
28
+ variant = Variant.from_hash(item_hash)
29
+ Item.new(variant, item_hash['quantity'], item_hash['tax'],
30
+ item_hash['total'])
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,31 @@
1
+ require 'resources/hash'
2
+
3
+ module MusicTodayApiWrapper
4
+ module Resources
5
+ module Purchase
6
+ class ShippingOption
7
+ attr_accessor :type, :delivery_date, :rate, :description
8
+
9
+ def initialize(type, delivery_date = nil, rate = nil,
10
+ description = nil)
11
+ @type = type
12
+ @delivery_date = delivery_date ? Date.parse(delivery_date) : nil
13
+ @rate = rate
14
+ @description = description
15
+ end
16
+
17
+ def self.from_hash(option)
18
+ ShippingOption.new(option['shippingOptionType'],
19
+ option['deliveryDate'],
20
+ option['totalRate'],
21
+ option['shippingOptionName'])
22
+ end
23
+
24
+ def as_hash
25
+ { shippingOptionType: @type, deliveryDate: @delivery_date,
26
+ totalRate: @rate, shippingOptionName: @description }.compact
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,13 @@
1
+ module MusicTodayApiWrapper
2
+ # rubocop:disable ClassAndModuleChildren
3
+ class ::String
4
+ def to_underscore!
5
+ gsub!(/(.)([A-Z])/, '\1_\2')
6
+ downcase!
7
+ end
8
+
9
+ def to_underscore
10
+ dup.tap(&:to_underscore!)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,39 @@
1
+ require 'resources/string'
2
+ module MusicTodayApiWrapper
3
+ module Resources
4
+ class Variant
5
+ attr_accessor :sku,
6
+ :price,
7
+ :quantity_available,
8
+ :variant_names
9
+
10
+ def initialize(sku, price, quantity_available, variant_names = [])
11
+ @sku = sku
12
+ @price = price
13
+ @quantity_available = quantity_available
14
+ @variant_names = variant_names
15
+ end
16
+
17
+ def self.from_hash(variant_hash)
18
+ Variant.new(variant_hash['sku'],
19
+ variant_hash['listPrice'],
20
+ variant_hash['qtyAvailable'],
21
+ variant_names(variant_hash['variantNames']))
22
+ end
23
+
24
+ def self.variant_names(names)
25
+ return [] unless names
26
+ symbolized_names = []
27
+
28
+ names.each do |variant|
29
+ variant_name = {}
30
+ variant_name[variant.keys[0]
31
+ .to_underscore
32
+ .to_sym] = variant.values[0]
33
+ symbolized_names << variant_name
34
+ end
35
+ symbolized_names
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,24 @@
1
+ module MusicTodayApiWrapper
2
+ module RestClients
3
+ class CommonResponse
4
+ attr_accessor :data, :errors
5
+
6
+ def initialize(data = {}, errors = [])
7
+ @data = data
8
+ @errors = errors
9
+ end
10
+
11
+ def work
12
+ yield
13
+ self
14
+ rescue StandardError => error
15
+ @errors.push(error.message)
16
+ self
17
+ end
18
+
19
+ def success?
20
+ @errors.empty?
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,82 @@
1
+ require 'json'
2
+ require 'net/http'
3
+ require 'rest_clients/common_response'
4
+ require 'support/configuration'
5
+
6
+ module MusicTodayApiWrapper
7
+ class RestClient
8
+ attr_accessor :catalog_number
9
+
10
+ def initialize
11
+ config = MusicTodayApiWrapper::Configuration.new
12
+ @url = config.url
13
+ @user = config.user
14
+ @api_key = config.api_key
15
+ @catalog_number = config.catalog.to_i
16
+ @department = config.department
17
+ @common_response = MusicTodayApiWrapper::RestClients::CommonResponse.new
18
+ end
19
+
20
+ def all_products(per_page = nil, page_number = nil)
21
+ @common_response.work do
22
+ options = {}
23
+ options[:size] = per_page if per_page
24
+ options[:page] = page_number if page_number
25
+ department = @department ? "/#{@department}" : ''
26
+
27
+ url = "#{@url}/catalog/content/#{@catalog_number}#{department}/"
28
+ @common_response.data[:products] = get(url, options)['products']
29
+ end
30
+ end
31
+
32
+ def find_product(product_id)
33
+ @common_response.work do
34
+ department = @department ? "/#{@department}" : ''
35
+ url = "#{@url}/catalog/product/#{@catalog_number}#{department}/#{product_id}"
36
+ @common_response.data[:product] = get(url)['product']
37
+ end
38
+ end
39
+
40
+ def shipping_options(params)
41
+ @common_response.work do
42
+ url = "#{@url}/order/shippingOptionsGet"
43
+ @common_response.data[:shipping_options] =
44
+ post(url, {}, params)['shippingOptions']
45
+ end
46
+ end
47
+
48
+ def checkout(params)
49
+ @common_response.work do
50
+ url = "#{@url}/cart/pricing"
51
+ @common_response.data[:session] =
52
+ post(url, {}, params)['addresses'].first
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+ def get(url, options = {})
59
+ uri = URI(url)
60
+ hit(uri, options) do
61
+ Net::HTTP.get_response(uri)
62
+ end
63
+ end
64
+
65
+ def post(url, options = {}, body = {})
66
+ uri = URI(url)
67
+ hit(uri, options) do
68
+ request = Net::HTTP::Post.new(uri)
69
+ request.body = body.to_json
70
+ request.content_type = 'application/json'
71
+ Net::HTTP.start(uri.hostname) { |http| http.request(request) }
72
+ end
73
+ end
74
+
75
+ def hit(uri, options = {})
76
+ options.merge!(apiuser: @user, apikey: @api_key)
77
+ uri.query = URI.encode_www_form(options)
78
+ response = yield
79
+ JSON.parse(response.body)
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,39 @@
1
+ require 'rest_clients/music_today_rest_client'
2
+ require 'rest_clients/common_response'
3
+ require 'resources/purchase/item'
4
+ require 'resources/checkout/session'
5
+
6
+ module MusicTodayApiWrapper
7
+ module Services
8
+ class CheckoutServices
9
+ def initialize
10
+ @common_response = RestClients::CommonResponse.new
11
+ @rest_client = RestClient.new
12
+ end
13
+
14
+ # rubocop:disable MethodLength
15
+ def checkout(address, items)
16
+ items_hash = []
17
+ items.each { |item| items_hash << item.as_hash }
18
+ address_hash =
19
+ address
20
+ .as_hash
21
+ .merge(id: 1, items: items_hash)
22
+
23
+ @common_response.work do
24
+ params = { storeId: @rest_client.catalog_number,
25
+ currency: 'USD',
26
+ priceLevel: '',
27
+ addresses: [address_hash],
28
+ promotions: [] }
29
+
30
+ response = @rest_client.checkout(params)
31
+
32
+ return response unless response.success?
33
+ @common_response.data[:session] =
34
+ Resources::Checkout::Session.from_hash(response.data[:session])
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,43 @@
1
+ require 'rest_clients/music_today_rest_client'
2
+ require 'resources/product'
3
+
4
+ module MusicTodayApiWrapper
5
+ module Services
6
+ class ProductServices
7
+ def initialize
8
+ @common_response =
9
+ MusicTodayApiWrapper::RestClients::CommonResponse.new
10
+ @rest_client = MusicTodayApiWrapper::RestClient.new
11
+ end
12
+
13
+ def all_products(per_page = nil, page_number = nil)
14
+ results = @rest_client.all_products(per_page, page_number)
15
+ return results unless results.success?
16
+
17
+ @common_response.data[:products] = []
18
+ @common_response.work do
19
+ results.data[:products].each { |product| product_mapper(product) }
20
+ end
21
+ end
22
+
23
+ def find_product(id)
24
+ results = @rest_client.find_product(id)
25
+ return results unless results.success?
26
+
27
+ @common_response.work do
28
+ @common_response.data[:product] =
29
+ MusicTodayApiWrapper::Resources::Product
30
+ .from_hash(results.data[:product])
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def product_mapper(product)
37
+ product_obj =
38
+ MusicTodayApiWrapper::Resources::Product.from_hash(product)
39
+ @common_response.data[:products] << product_obj
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,38 @@
1
+ require 'rest_clients/music_today_rest_client'
2
+ require 'resources/purchase/shipping_option'
3
+
4
+ module MusicTodayApiWrapper
5
+ module Services
6
+ class ShippingServices
7
+ def initialize
8
+ @common_response = RestClients::CommonResponse.new
9
+ @common_response.data[:shipping_options] = []
10
+ @rest_client = RestClient.new
11
+ end
12
+
13
+ def options(address, items)
14
+ hash_items = []
15
+ items.each { |item| hash_items << item.as_hash }
16
+
17
+ params = { storeId: @rest_client.catalog_number,
18
+ address: address.as_hash,
19
+ lineItems: hash_items }
20
+ @common_response.work do
21
+ response = @rest_client.shipping_options(params)
22
+ return response unless response.success?
23
+
24
+ response
25
+ .data[:shipping_options]
26
+ .each { |option| shipping_option_mapper(option) }
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def shipping_option_mapper(option)
33
+ @common_response.data[:shipping_options] <<
34
+ Resources::Purchase::ShippingOption.from_hash(option)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,13 @@
1
+ module MusicTodayApiWrapper
2
+ class Configuration
3
+ attr_accessor :user, :api_key, :url, :catalog, :department
4
+
5
+ def initialize
6
+ @user = ENV['MUSIC_TODAY_USER']
7
+ @api_key = ENV['MUSIC_TODAY_API_KEY']
8
+ @url = ENV['MUSIC_TODAY_BASE_URL']
9
+ @catalog = ENV['MUSIC_TODAY_CATALOG_NAME']
10
+ @department = ENV['MUSIC_TODAY_DEPARTMENT_NAME'] || nil
11
+ end
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,232 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: music_today_api_wrapper
3
+ version: !ruby/object:Gem::Version
4
+ version: 13.01.16.01
5
+ platform: ruby
6
+ authors:
7
+ - Pablo Gonzaga
8
+ - Oscar Siniscalchi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-01-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '3.3'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '3.3'
28
+ - !ruby/object:Gem::Dependency
29
+ name: byebug
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '8.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '8.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: dotenv
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '2.0'
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: 2.0.2
52
+ type: :development
53
+ prerelease: false
54
+ version_requirements: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - "~>"
57
+ - !ruby/object:Gem::Version
58
+ version: '2.0'
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 2.0.2
62
+ - !ruby/object:Gem::Dependency
63
+ name: reek
64
+ requirement: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.7'
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: 3.7.1
72
+ type: :development
73
+ prerelease: false
74
+ version_requirements: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - "~>"
77
+ - !ruby/object:Gem::Version
78
+ version: '3.7'
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 3.7.1
82
+ - !ruby/object:Gem::Dependency
83
+ name: rubocop
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 0.35.1
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: 0.35.1
96
+ - !ruby/object:Gem::Dependency
97
+ name: spork
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: 0.9.2
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 0.9.2
110
+ - !ruby/object:Gem::Dependency
111
+ name: vcr
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '3.0'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '3.0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: webmock
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.22'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '1.22'
138
+ - !ruby/object:Gem::Dependency
139
+ name: bundler
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: 1.10.6
145
+ type: :runtime
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: 1.10.6
152
+ - !ruby/object:Gem::Dependency
153
+ name: rake
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: 10.4.2
159
+ type: :runtime
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: 10.4.2
166
+ - !ruby/object:Gem::Dependency
167
+ name: json
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '1.8'
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: 1.8.3
176
+ type: :runtime
177
+ prerelease: false
178
+ version_requirements: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - "~>"
181
+ - !ruby/object:Gem::Version
182
+ version: '1.8'
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: 1.8.3
186
+ description: Gem to expose music today api endpoints.
187
+ email: pgonzaga.uy@gmail.com
188
+ executables: []
189
+ extensions: []
190
+ extra_rdoc_files: []
191
+ files:
192
+ - lib/music_today_api_wrapper.rb
193
+ - lib/resources/address.rb
194
+ - lib/resources/checkout/session.rb
195
+ - lib/resources/hash.rb
196
+ - lib/resources/image.rb
197
+ - lib/resources/product.rb
198
+ - lib/resources/purchase/item.rb
199
+ - lib/resources/purchase/shipping_option.rb
200
+ - lib/resources/string.rb
201
+ - lib/resources/variant.rb
202
+ - lib/rest_clients/common_response.rb
203
+ - lib/rest_clients/music_today_rest_client.rb
204
+ - lib/services/checkout_services.rb
205
+ - lib/services/product_services.rb
206
+ - lib/services/shipping_services.rb
207
+ - lib/support/configuration.rb
208
+ homepage: https://github.com/neonroots/music_today_api_wrapper
209
+ licenses:
210
+ - MIT
211
+ metadata: {}
212
+ post_install_message:
213
+ rdoc_options: []
214
+ require_paths:
215
+ - lib
216
+ required_ruby_version: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - ">="
219
+ - !ruby/object:Gem::Version
220
+ version: '0'
221
+ required_rubygems_version: !ruby/object:Gem::Requirement
222
+ requirements:
223
+ - - ">="
224
+ - !ruby/object:Gem::Version
225
+ version: '0'
226
+ requirements: []
227
+ rubyforge_project:
228
+ rubygems_version: 2.4.8
229
+ signing_key:
230
+ specification_version: 4
231
+ summary: Gem to expose music today api endpoints.
232
+ test_files: []