cornerstore 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,8 @@
1
+ module Cornerstore
2
+ module Resource
3
+ require 'cornerstore/resource/base'
4
+ require 'cornerstore/resource/remote'
5
+ require 'cornerstore/resource/writable'
6
+ require 'cornerstore/resource/filter'
7
+ end
8
+ end
@@ -0,0 +1,83 @@
1
+ class Cornerstore::Resource::Base
2
+ include Enumerable
3
+ attr_accessor :parent
4
+
5
+ def initialize(parent = nil, ary = nil, name = nil)
6
+ @klass = Cornerstore.const_get(self.class.name.split('::')[-2])
7
+ @name = name
8
+ @parent = parent
9
+ @filters = Hash.new
10
+ @objects = Array.new
11
+ from_array(ary) if ary.is_a? Array
12
+ end
13
+
14
+ def from_array(ary)
15
+ @objects = ary.map{|h| @klass.new(h, @parent)}
16
+ @load = true
17
+ end
18
+
19
+ def find(*args)
20
+ ids = Array.new(args).flatten.compact.uniq
21
+ case ids.size
22
+ when 0
23
+ raise "Couldn't find #{@klass.name} without an ID"
24
+ when 1
25
+ find_by_id_or_param(ids.first)
26
+ else
27
+ find_by_ids(ids)
28
+ end
29
+ end
30
+
31
+ def find_by_id_or_param(id_or_param)
32
+ find_by_id id_or_param.to_s
33
+ end
34
+
35
+ def find_by_id(id)
36
+ @objects.find{|obj| obj._id == id}
37
+ end
38
+
39
+ def find_by_ids(*args)
40
+ ids = Array.new(args).flatten.compact.uniq
41
+ all.select{|item| ids.include? item._id }
42
+ end
43
+
44
+ def all
45
+ self.clone
46
+ end
47
+
48
+ def push(obj)
49
+ @objects << obj
50
+ obj.parent = @parent
51
+ self
52
+ end
53
+ alias_method :<<, :push
54
+
55
+ def to_a
56
+ @objects
57
+ end
58
+ alias_method :to_ary, :to_a
59
+
60
+ def each(&block)
61
+ to_a.each(&block)
62
+ end
63
+
64
+ def size
65
+ @objects.size
66
+ end
67
+ alias_method :count, :size
68
+ alias_method :length, :size
69
+
70
+ def empty?
71
+ @objects.empty?
72
+ end
73
+
74
+ alias blank? empty?
75
+
76
+ def method_missing(method, *args, &block)
77
+ if Cornerstore::Resource::Writable.method_defined?(method)
78
+ raise "Sorry, this part of the Cornerstore-API is currently read-only"
79
+ else
80
+ super
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,21 @@
1
+ module Cornerstore::Resource::Filter
2
+ def set_filter(key, value)
3
+ @filters[key] = value
4
+ self
5
+ end
6
+
7
+ def offset(offset)
8
+ self.clone.set_filter(:offset, offset.to_i.abs)
9
+ end
10
+
11
+ def limit(limit)
12
+ limit = limit.to_i.abs
13
+ raise "limit must be greater/equal to 1" unless limit > 1
14
+ self.clone.set_filter(:limit, limit)
15
+ end
16
+
17
+ def order(key)
18
+ self.clone.set_filter(:order, key)
19
+ end
20
+ alias order_by order
21
+ end
@@ -0,0 +1,27 @@
1
+ module Cornerstore::Resource::Remote
2
+ def url(id = nil, depth = 1)
3
+ root = (@parent && depth > 0) ? @parent.url(depth-1) : Cornerstore.root_url
4
+ "#{root}/#{@name or @klass.name.split('::').last.underscore.pluralize}/#{id}"
5
+ end
6
+
7
+ def find_by_id(id)
8
+ object = super
9
+ object or fetch(id)
10
+ end
11
+
12
+ def fetch(id)
13
+ response = RestClient.get(url(id), Cornerstore.headers)
14
+ hash = ActiveSupport::JSON.decode(response)
15
+ @klass.new(hash, @parent)
16
+ end
17
+
18
+ def fetch_all
19
+ response = RestClient.get(url, Cornerstore.headers)
20
+ from_array ActiveSupport::JSON.decode(response)
21
+ end
22
+
23
+ def to_a
24
+ fetch_all unless @load
25
+ super
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ module Cornerstore::Resource::Writable
2
+ def destroy_all
3
+ @objects.delete_if {|obj| obj.destroy}
4
+ self
5
+ end
6
+
7
+ def new(attributes={}, &block)
8
+ @klass.new(attributes, &block).tap{|obj| push obj}
9
+ end
10
+
11
+ def create(attributes={}, &block)
12
+ obj = @klass.new(attributes, @parent, &block)
13
+ if obj.save
14
+ push obj
15
+ obj
16
+ else
17
+ nil
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ module Cornerstore
2
+ VERSION = '0.6.2'
3
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cornerstore::Order do
4
+ before(:all) do
5
+ json = '{"_id":"53448a01417175b106ec0000","_slugs":["14521135"],"billing_address":{"_id":"53448a05417175b1069e0300","addition":null,"company":null,"country":"United States","firstname":"Ellis","name":"Bailey","number":"441","state":"New Hampshire","street":"Karli View","town":"North Penelope","zip":"26662"},"canceled_email_callback_url":"http://burger-store.dev/mails/canceled_notification","cart_url":"http://burger-store.dev/cart","checkout_id":"13d583c4340d9bfe52aa1f7cb92735c5f5b748135f170b4d5cd752c9fd25f149","checkout_started_at":null,"created_at":"2014-04-08T09:24:57.556Z","customer_comment":null,"customer_id":"53448a05417175b1069f0300","delivery_note_pdf_callback_url":null,"invoice_number":null,"invoice_pdf_callback_url":"http://burger-store.dev/documents/invoice","invoiced_at":null,"line_items":[{"_id":"53448a01417175b106ed0000","created_at":"2014-04-08T23:45:05.575Z","description":"PepsiCo Welch\'s Grape Soda – Packungsgröße: 12er Pack","order_number":"SBS-0009B","price":{"gross":15.5,"currency":"EUR","net":13.03,"tax_rate":0.19,"tax":2.47},"product_id":"53448a00417175b106450000","qty":5,"requires_shipment":true,"total":{"gross":77.5,"currency":"EUR","net":65.13,"tax_rate":0.19,"tax":12.37},"total_weight":15.0,"unit":"Pack","updated_at":"2014-04-08T23:45:05.575Z","variant_id":"53448a00417175b106480000","weight":3.0},{"_id":"53448a01417175b106ee0000","created_at":"2014-04-08T23:45:05.576Z","description":"PepsiCo Welch\'s Grape Soda – Packungsgröße: 24er Pack","order_number":"SBS-0009C","price":{"gross":25.5,"currency":"EUR","net":21.43,"tax_rate":0.19,"tax":4.07},"product_id":"53448a00417175b106450000","qty":2,"requires_shipment":true,"total":{"gross":51.0,"currency":"EUR","net":42.86,"tax_rate":0.19,"tax":8.14},"total_weight":12.0,"unit":"Pack","updated_at":"2014-04-08T23:45:05.576Z","variant_id":"53448a00417175b1064a0000","weight":6.0},{"_id":"53448a01417175b106ef0000","created_at":"2014-04-08T23:45:05.576Z","description":"Branston Relish – Geschmack: Chili \u0026 Jalapeño","order_number":"SBS-0010B","price":{"gross":9.99,"currency":"EUR","net":8.39,"tax_rate":0.19,"tax":1.6},"product_id":"53448a00417175b1064c0000","qty":2,"requires_shipment":true,"total":{"gross":19.98,"currency":"EUR","net":16.79,"tax_rate":0.19,"tax":3.19},"total_weight":1.0,"unit":"Tube","updated_at":"2014-04-08T23:45:05.576Z","variant_id":"53448a00417175b1064f0000","weight":0.5},{"_id":"53448a01417175b106f00000","created_at":"2014-04-08T23:45:05.576Z","description":"PepsiCo Pepsi Cola – Packungsgröße: 6er Pack, Geschmack: Diet","order_number":"SBS-0007A","price":{"gross":5.99,"currency":"EUR","net":5.03,"tax_rate":0.19,"tax":0.96},"product_id":"53448a00417175b1062b0000","qty":1,"requires_shipment":true,"total":{"gross":5.99,"currency":"EUR","net":5.03,"tax_rate":0.19,"tax":0.96},"total_weight":1.75,"unit":"Pack","updated_at":"2014-04-08T23:45:05.576Z","variant_id":"53448a00417175b1062c0000","weight":1.75},{"_id":"53448a01417175b106f10000","created_at":"2014-04-08T23:45:05.577Z","description":"Heinz Tomato Ketchup – Größe: Groß (500g)","order_number":"SBS-0012B","price":{"gross":5.5,"currency":"EUR","net":4.62,"tax_rate":0.19,"tax":0.88},"product_id":"53448a00417175b106530000","qty":2,"requires_shipment":true,"total":{"gross":11.0,"currency":"EUR","net":9.24,"tax_rate":0.19,"tax":1.76},"total_weight":1.0,"unit":"Glas","updated_at":"2014-04-08T23:45:05.577Z","variant_id":"53448a00417175b106560000","weight":0.5},{"_id":"53448a01417175b106f20000","created_at":"2014-04-08T23:45:05.577Z","description":"PepsiCo Pepsi Cola – Packungsgröße: 24er Pack, Geschmack: Wild Cherry","order_number":"SBS-0007F","price":{"gross":15.99,"currency":"EUR","net":13.44,"tax_rate":0.19,"tax":2.55},"product_id":"53448a00417175b1062b0000","qty":2,"requires_shipment":true,"total":{"gross":31.98,"currency":"EUR","net":26.87,"tax_rate":0.19,"tax":5.11},"total_weight":12.0,"unit":"Pack","updated_at":"2014-04-08T23:45:05.577Z","variant_id":"53448a00417175b1063b0000","weight":6.0},{"_id":"53448a01417175b106f30000","created_at":"2014-04-08T23:45:05.577Z","description":"PepsiCo Mountain Dew – Packungsgröße: 12er Pack","order_number":"SBS-0008B","price":{"gross":15.5,"currency":"EUR","net":13.03,"tax_rate":0.19,"tax":2.47},"product_id":"53448a00417175b1063e0000","qty":5,"requires_shipment":true,"total":{"gross":77.5,"currency":"EUR","net":65.13,"tax_rate":0.19,"tax":12.37},"total_weight":null,"unit":"Pack","updated_at":"2014-04-08T23:45:05.577Z","variant_id":"53448a00417175b106410000","weight":null}],"merchant_id":"534489ff417175b106000000","number":"14521135","paid_email_callback_url":"http://burger-store.dev/mails/paid_notification","payment_costs":null,"payment_means":{"_id":"53448a07417175b1064a0400","created_at":"2014-04-08T23:45:11.731Z","kind":"Cash","paid_at":"2014-04-08T23:45:19+00:00","refunded_at":null,"updated_at":"2014-04-08T23:45:19.468Z"},"placed_at":"2014-04-08T09:34:57+00:00","placed_email_callback_url":"http://burger-store.dev/mails/placed_notification","reference":"13d583c4340d9bfe52aa1f7cb92735c5f5b748135f170b4d5cd752c9fd25f149","requested_carrier":{"name":"UPS","service":"Express","supports_cod":false},"sales_tax":null,"shipments":[{"_id":"53448a0c417175b106bc0400","carrier":{"name":"UPS","service":"Express","supports_cod":false},"created_at":"2014-04-08T23:45:16.196Z","shipped_items":["53448a01417175b106ed0000","53448a01417175b106ee0000","53448a01417175b106ef0000","53448a01417175b106f00000","53448a01417175b106f10000","53448a01417175b106f20000","53448a01417175b106f30000"],"tracking_number":"DXD993882F","updated_at":"2014-04-08T23:45:16.196Z"}],"shipped_email_callback_url":"http://burger-store.dev/mails/shipped_notification","shipping_address":{"_id":"53448a05417175b1069d0300","addition":null,"company":"Osinski-Bradtke","country":"United States","firstname":"Clara","name":"Volkman","number":"634","state":"Florida","street":"Lind Mount","town":"New Demario","zip":"95413"},"shipping_costs":{"gross":78.99,"currency":"EUR","net":66.38,"tax_rate":0.19,"tax":12.61},"subtotal":{"gross":274.95,"currency":"EUR","net":231.05,"tax_rate":0.19,"tax":43.9},"success_redirect_url":"http://burger-store.dev/carts/success","total":{"gross":353.94,"currency":"EUR","net":297.43,"tax_rate":0.19,"tax":56.51},"updated_at":"2014-04-08T23:45:13.562Z","weight":42.75,"customer":{"_id":"53448a05417175b1069f0300","allows_marketing":false,"created_at":"2014-04-08T23:45:09.148Z","email":"brycen_hauck@reynolds.name","flagged":false,"merchant_id":"534489ff417175b106000000","phone":null,"tax_number":null,"updated_at":"2014-04-08T23:45:09.148Z"}}'
6
+ @order = Cornerstore::Order.new(JSON.parse(json))
7
+ end
8
+
9
+ context 'regarding basic attributes' do
10
+ it 'should correctly return basic attributes' do
11
+ expect(@order.id).to eq('53448a01417175b106ec0000')
12
+ expect(@order.number).to eq('14521135')
13
+ expect(@order.reference).to eq('13d583c4340d9bfe52aa1f7cb92735c5f5b748135f170b4d5cd752c9fd25f149')
14
+ expect(@order.weight).to eq(42.75)
15
+ end
16
+
17
+ it 'should return the prices' do
18
+ expect(@order.subtotal.amount).to eq(274.95)
19
+ expect(@order.shipping_costs.amount).to eq(78.99)
20
+ expect(@order.payment_costs).to eq(nil)
21
+ expect(@order.sales_tax).to eq(nil)
22
+ expect(@order.total.amount).to eq(353.94)
23
+ end
24
+
25
+ it 'should return the requested carrier' do
26
+ expect(@order.requested_carrier.name).to eq('UPS')
27
+ expect(@order.requested_carrier.service).to eq('Express')
28
+ end
29
+ end
30
+
31
+ context 'regarding associated objects' do
32
+ it 'should return the customer' do
33
+ expect(@order.customer.class).to eq(Cornerstore::Customer)
34
+ expect(@order.customer.email).to eq('brycen_hauck@reynolds.name')
35
+ end
36
+
37
+ it 'should return a billing address' do
38
+ expect(@order.billing_address.class).to eq(Cornerstore::Address)
39
+ expect(@order.billing_address.name).to eq('Bailey')
40
+ expect(@order.billing_address.firstname).to eq('Ellis')
41
+ expect(@order.billing_address.number).to eq('441')
42
+ expect(@order.billing_address.street).to eq('Karli View')
43
+ expect(@order.billing_address.town).to eq('North Penelope')
44
+ expect(@order.billing_address.country).to eq('United States')
45
+ end
46
+
47
+ it 'should return a shipping address' do
48
+ expect(@order.billing_address.class).to eq(Cornerstore::Address)
49
+ end
50
+
51
+ it 'should return the line items' do
52
+ expect(@order.line_items.count).to eq(7)
53
+ expect(@order.line_items.first.description).to eq('PepsiCo Welch\'s Grape Soda – Packungsgröße: 12er Pack')
54
+ expect(@order.line_items.first.qty).to eq(5)
55
+ expect(@order.line_items.first.weight).to eq(3.0)
56
+ expect(@order.line_items.first.price.amount).to eq(15.50)
57
+ expect(@order.line_items.first.total.amount).to eq(15.50 * 5)
58
+ end
59
+
60
+ it 'should return shipments and shipped line items' do
61
+ expect(@order.completely_shipped?).to eq(true)
62
+ expect(@order.shipments.first.line_items.count).to eq(@order.line_items.count)
63
+ expect(@order.shipments.first.tracking_number).to eq('DXD993882F')
64
+ expect(@order.shipments.first.carrier.name).to eq('UPS')
65
+ expect(@order.shipments.first.carrier.service).to eq('Express')
66
+ end
67
+
68
+ it 'should return cancellations and canceled line items' do
69
+ expect(@order.completely_canceled?).to eq(false)
70
+ expect(@order.cancellations.first).to eq(nil)
71
+ end
72
+
73
+ it 'should return payment means' do
74
+ expect(@order.payment_means.class).to eq(Cornerstore::PaymentMeans)
75
+ expect(@order.payment_means.kind).to eq('Cash')
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cornerstore::Price do
4
+ context 'regarding basic attributes' do
5
+ it 'should correctly return amount and currency' do
6
+ p = Cornerstore::Price.new({'amount' => 29.00, 'currency' => 'USD'})
7
+
8
+ expect(p.amount).to eq(29.00)
9
+ expect(p.currency).to eq('USD')
10
+ expect(p.currency_symbol).to eq('$')
11
+ end
12
+
13
+ it 'should correctly return attributes for VAT prices' do
14
+ p = Cornerstore::Price.new({'gross' => 17.85, 'net' => 15.00, 'tax_rate' => 0.19, 'currency' => 'EUR'})
15
+
16
+ expect(p.amount).to eq(17.85)
17
+ expect(p.gross).to eq(17.85)
18
+ expect(p.net).to eq(15.00)
19
+ expect(p.tax_rate).to eq(0.19)
20
+ expect(p.currency).to eq('EUR')
21
+ expect(p.currency_symbol).to eq('€')
22
+ end
23
+ end
24
+
25
+ context 'regarding math operations' do
26
+ it 'should compare two prices' do
27
+ p1 = Cornerstore::Price.new({'amount' => 29.00, 'currency' => 'USD'})
28
+ p2 = Cornerstore::Price.new({'amount' => 35.00, 'currency' => 'USD'})
29
+
30
+ expect(p2 > 20).to eql(true)
31
+ expect(p2 > 40).to eql(false)
32
+ expect(p2 > p1).to eql(true)
33
+ end
34
+
35
+ it 'should sum two prices' do
36
+ p1 = Cornerstore::Price.new({'amount' => 29.00, 'currency' => 'USD'})
37
+ p2 = Cornerstore::Price.new({'amount' => 35.00, 'currency' => 'USD'})
38
+
39
+ p3 = p1 + p2
40
+ expect(p3.amount).to eql(64.00)
41
+
42
+ p1 = Cornerstore::Price.new({'gross' => 17.85, 'net' => 15.00, 'tax_rate' => 0.19, 'currency' => 'EUR'})
43
+ p2 = Cornerstore::Price.new({'gross' => 9.52, 'net' => 8.00, 'tax_rate' => 0.19, 'currency' => 'EUR'})
44
+
45
+ p3 = p1 + p2
46
+ expect(p3.gross).to eql(27.37)
47
+ expect(p3.net).to eql(23.00)
48
+ expect(p3.tax_rate).to eql(0.19)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,22 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ require 'cornerstore'
5
+
6
+ # This file was generated by the `rspec --init` command. Conventionally, all
7
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
8
+ # Require this file using `require "spec_helper"` to ensure that it is only
9
+ # loaded once.
10
+ #
11
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
12
+ RSpec.configure do |config|
13
+ config.treat_symbols_as_metadata_keys_with_true_values = true
14
+ config.run_all_when_everything_filtered = true
15
+ config.filter_run :focus
16
+
17
+ # Run specs in random order to surface order dependencies. If you find an
18
+ # order dependency and want to debug it, you can fix the order by providing
19
+ # the seed, which is printed after each run.
20
+ # --seed 1234
21
+ config.order = 'random'
22
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cornerstore
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.2
5
+ platform: ruby
6
+ authors:
7
+ - Johannes Treitz
8
+ - Christian Weyer
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-05-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rest-client
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: activemodel
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ description: This is a client for the Cornerstore e-commerce API
57
+ email:
58
+ - jt@crispymtn.com
59
+ - cw@crispymtn.com
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - ".gitignore"
65
+ - ".rspec"
66
+ - Gemfile
67
+ - README.md
68
+ - Rakefile
69
+ - cornerstore.gemspec
70
+ - examples/cornerstore.yml
71
+ - lib/cornerstore.rb
72
+ - lib/cornerstore/api.rb
73
+ - lib/cornerstore/api/address.rb
74
+ - lib/cornerstore/api/cancellation.rb
75
+ - lib/cornerstore/api/carrier.rb
76
+ - lib/cornerstore/api/cart.rb
77
+ - lib/cornerstore/api/collection.rb
78
+ - lib/cornerstore/api/customer.rb
79
+ - lib/cornerstore/api/differentiating_property.rb
80
+ - lib/cornerstore/api/image.rb
81
+ - lib/cornerstore/api/line_item.rb
82
+ - lib/cornerstore/api/order.rb
83
+ - lib/cornerstore/api/payment_means.rb
84
+ - lib/cornerstore/api/price.rb
85
+ - lib/cornerstore/api/product.rb
86
+ - lib/cornerstore/api/property.rb
87
+ - lib/cornerstore/api/search.rb
88
+ - lib/cornerstore/api/shipment.rb
89
+ - lib/cornerstore/api/variant.rb
90
+ - lib/cornerstore/model.rb
91
+ - lib/cornerstore/resource.rb
92
+ - lib/cornerstore/resource/base.rb
93
+ - lib/cornerstore/resource/filter.rb
94
+ - lib/cornerstore/resource/remote.rb
95
+ - lib/cornerstore/resource/writable.rb
96
+ - lib/cornerstore/version.rb
97
+ - spec/order_spec.rb
98
+ - spec/price_spec.rb
99
+ - spec/spec_helper.rb
100
+ homepage: https://www.github.com/crispymtn/cornerstore-gem
101
+ licenses: []
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.0.3
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: This is a client for the Cornerstore e-commerce API
123
+ test_files:
124
+ - spec/order_spec.rb
125
+ - spec/price_spec.rb
126
+ - spec/spec_helper.rb