gilt 0.1.0 → 0.2.0

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.
data/Gemfile CHANGED
@@ -6,8 +6,8 @@ gemspec
6
6
  gem "rake", "~> 0.9.2"
7
7
 
8
8
  group :test do
9
- gem "rspec", "~> 2.9.0"
10
- gem "webmock", "~> 1.8.5"
9
+ gem "rspec", "~> 2.11.0"
10
+ gem "webmock", "~> 1.8.10"
11
11
  end
12
12
 
13
13
  platforms :jruby do
@@ -1,54 +1,50 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gilt (0.1.0)
4
+ gilt (0.2.0)
5
5
  money (~> 4.0.2)
6
- weary (~> 1.0.0)
6
+ weary (~> 1.1.0)
7
7
 
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
- addressable (2.2.7)
12
- bouncy-castle-java (1.5.0146.1)
11
+ addressable (2.3.2)
13
12
  crack (0.3.1)
14
13
  diff-lcs (1.1.3)
15
- i18n (0.6.0)
16
- jruby-openssl (0.7.6.1)
17
- bouncy-castle-java (>= 1.5.0146.1)
18
- json (1.6.6)
14
+ i18n (0.6.1)
15
+ json (1.7.5)
19
16
  money (4.0.2)
20
17
  i18n (~> 0.4)
21
18
  json
22
- multi_json (1.1.0)
19
+ multi_json (1.3.6)
23
20
  promise (0.3.0)
24
21
  rack (1.4.1)
25
22
  rake (0.9.2.2)
26
- rspec (2.9.0)
27
- rspec-core (~> 2.9.0)
28
- rspec-expectations (~> 2.9.0)
29
- rspec-mocks (~> 2.9.0)
30
- rspec-core (2.9.0)
31
- rspec-expectations (2.9.0)
23
+ rspec (2.11.0)
24
+ rspec-core (~> 2.11.0)
25
+ rspec-expectations (~> 2.11.0)
26
+ rspec-mocks (~> 2.11.0)
27
+ rspec-core (2.11.1)
28
+ rspec-expectations (2.11.3)
32
29
  diff-lcs (~> 1.1.3)
33
- rspec-mocks (2.9.0)
34
- simple_oauth (0.1.5)
35
- weary (1.0.0)
36
- addressable (~> 2.2.7)
37
- multi_json (~> 1.1.0)
30
+ rspec-mocks (2.11.2)
31
+ simple_oauth (0.1.9)
32
+ weary (1.1.0)
33
+ addressable (~> 2.3.2)
34
+ multi_json (~> 1.3.0)
38
35
  promise (~> 0.3.0)
39
36
  rack (~> 1.4.0)
40
37
  simple_oauth (~> 0.1.5)
41
- webmock (1.8.5)
38
+ webmock (1.8.10)
42
39
  addressable (>= 2.2.7)
43
40
  crack (>= 0.1.7)
44
41
 
45
42
  PLATFORMS
46
- java
47
43
  ruby
48
44
 
49
45
  DEPENDENCIES
50
46
  gilt!
51
47
  jruby-openssl (~> 0.7.6)
52
48
  rake (~> 0.9.2)
53
- rspec (~> 2.9.0)
54
- webmock (~> 1.8.5)
49
+ rspec (~> 2.11.0)
50
+ webmock (~> 1.8.10)
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Mark Wunsch
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -14,18 +14,60 @@ It's written with the [Weary](https://github.com/mwunsch/weary) framework, so it
14
14
  * Full Rack integration. The Client to the library is a Rack application.
15
15
  * Fully asynchronous. `gilt` makes liberal use of futures and Weary::Deferred.
16
16
 
17
+ [![Build Status](https://secure.travis-ci.org/mwunsch/gilt.png)](http://travis-ci.org/mwunsch/gilt) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/mwunsch/gilt)
18
+
19
+ * [Gilt on RubyGems.org](https://rubygems.org/gems/gilt)
20
+ * [Gilt on RubyDoc.info](http://rubydoc.info/github/mwunsch/gilt/)
21
+ * [Gilt on Travis CI](http://travis-ci.org/#!/mwunsch/gilt)
22
+ * [Gilt on Code Climate](https://codeclimate.com/github/mwunsch/gilt)
23
+
17
24
  ## Examples
18
25
 
19
26
  ```ruby
20
27
  active_sales = Gilt::Sale.active :apikey => "your-api-key"
21
28
  womens_sales = sales.select {|sale| sale.store == Gilt::Stores::WOMEN }
22
- sales.products.map(&:name)
29
+ sales.first.products.map(&:name)
23
30
  ```
24
31
 
25
32
  Above, the call to `sales.products` returns a list of [Weary::Deferred](https://github.com/mwunsch/weary/blob/master/lib/weary/deferred.rb) objects wrapping Gilt::Product objects. This means that fetching the product is asynchronous, and only blocks when accessed.
26
33
 
34
+ Get a list of active Sales:
35
+
36
+ ```ruby
37
+ Gilt::Sale.active :apikey => "your-api-key", :affid => "your-affiliate-id"
38
+ ```
39
+
40
+ Get a list of active Sales in a particular store:
41
+
42
+ ```ruby
43
+ Gilt::Sale.active_in_store :apikey => "your-api-key", :affid => "your-affiliate-id", :store => Gilt::Stores::WOMEN
44
+ ```
45
+
46
+ Or upcoming sales:
47
+
48
+ ```ruby
49
+ Gilt::Sale.upcoming :apikey => "your-api-key", :affid => "your-affiliate-id"
50
+ ```
51
+
52
+ Get a particular sale:
53
+
54
+ ```ruby
55
+ Gilt::Sale.detail :apikey => "your-key", :store => Gilt::Stores::WOMEN, :sale_key => "m-missoni-5228"
56
+ ```
57
+
58
+ Here's a fun one, for all active sales in the Women store, create a hash of `Sale Name => [Product Name,...]`:
59
+
60
+ ```ruby
61
+ require "pp"
62
+
63
+ active_sales = Gilt::Sale.active_in_store :apikey => "my-api-key", :store => Gilt::Stores::WOMEN
64
+ pp Hash[active_sales.map {|sale| [sale.name, sale.products.map(&:name)] }] # This could take a while
65
+ ```
66
+
27
67
  ### With Rack
28
68
 
69
+ Since Gilt is built on Weary (which in turn is built on [Rack](http://rack.github.com/)), you can quickly create a proxy to the Gilt API and insert whatever middleware your heart desires.
70
+
29
71
  ```ruby
30
72
  # config.ru
31
73
  client = Gilt::Client::Product
@@ -41,3 +83,7 @@ After `rackup`:
41
83
  ## Installation
42
84
 
43
85
  gem install gilt
86
+
87
+ ## Copyright
88
+
89
+ Copyright (c) 2012 Mark Wunsch. Licensed under the [MIT License](http://opensource.org/licenses/mit-license.php).
data/Rakefile CHANGED
@@ -4,5 +4,5 @@ require 'rspec/core/rake_task'
4
4
  task :default => :spec
5
5
 
6
6
  RSpec::Core::RakeTask.new(:spec) do |t|
7
- t.rspec_opts = ["--color"]
7
+ t.rspec_opts = ["--color", "--format=documentation"]
8
8
  end
@@ -17,5 +17,5 @@ Gem::Specification.new do |s|
17
17
  s.require_paths = ["lib"]
18
18
 
19
19
  s.add_runtime_dependency "money", "~> 4.0.2"
20
- s.add_runtime_dependency "weary", "~> 1.0.0"
20
+ s.add_runtime_dependency "weary", "~> 1.1.0"
21
21
  end
@@ -10,6 +10,8 @@ module Gilt
10
10
  optional :affid
11
11
 
12
12
  get :detail, "/products/:product_id/detail.#{FORMAT}"
13
+
14
+ get :categories, "/products/categories.#{FORMAT}"
13
15
  end
14
16
  end
15
17
  end
@@ -21,6 +21,11 @@ module Gilt
21
21
  self.new response.parse
22
22
  end
23
23
 
24
+ def self.categories(apikey, affid=nil)
25
+ response = client(apikey, affid).categories.perform
26
+ response.parse["categories"] || []
27
+ end
28
+
24
29
  def initialize(product_body)
25
30
  @product = product_body
26
31
  end
@@ -45,6 +50,9 @@ module Gilt
45
50
  URI(@product["url"])
46
51
  end
47
52
 
53
+ def categories
54
+ @product["categories"] || []
55
+ end
48
56
  def description
49
57
  fetch_content :description
50
58
  end
@@ -1,6 +1,7 @@
1
1
  require 'time'
2
2
 
3
3
  module Gilt
4
+ # A Gilt Sale object, representing an active or upcoming "flash" sale.
4
5
  class Sale
5
6
  class << self
6
7
  Gilt::Client::Sales.resources.keys.each do |key|
@@ -88,7 +89,6 @@ module Gilt
88
89
  resource = Gilt::Client::Products.resources[:detail]
89
90
  @products = (@sale["products"] || []).map do |product|
90
91
  id = resource.url.extract(product)["product_id"]
91
- @client.detail(:product_id => id).perform
92
92
  Product.defer @client.detail(:product_id => id).perform
93
93
  end
94
94
  end
@@ -98,4 +98,4 @@ module Gilt
98
98
  end
99
99
 
100
100
  end
101
- end
101
+ end
@@ -1,3 +1,3 @@
1
1
  module Gilt
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -0,0 +1,12 @@
1
+ HTTP/1.1 200 OK
2
+ Server: Jetty(7.6.0.v20120127)
3
+ Cache-Control: no-transform, max-age=600
4
+ Content-Type: application/json; charset=UTF-8
5
+ response-time: 91.0
6
+ X-Gg-Rule-cdn: cdn_req_check_ssl_api
7
+ Last-Modified: Tue, 18 Sep 2012 15:33:49 GMT
8
+ X-Version: svc-syndication-0.3.5 (commons-1.2.1)
9
+ Age: 214
10
+ Content-Length: 2068
11
+
12
+ {"categories":["Pants","Shirts","Tabletop","Other Lighting","Jewelry & Watches","Puffers & Parkas","Clothing","Other Apparel","Floor Lamps","Coffee, Tea & Espresso","Sofas","Peacoats","Necklaces & Rings","Sweaters & Hoodies","Other Home","Sportcoats","Drinkware","Chairs & Ottomans","Area","Earrings","Rugs","Furniture & Decor","Dress Shirts","Women","Girls' Shoes & Socks","Kitchenware","Equipment","Sheets & Pillowcases","Card Holders","Sandals","Denim","Ties & Furnishings","Sleepwear","Men","Glasses & Barware","Crewnecks","Other Decor & Accessories","Slim Leg","Socks, Underwear & Sleepwear","Apparel Sets","Other Outerwear","Other Bags & Luggage","Other Tops","Other Accessories","Polos, Henleys & Tees","Bracelets & Bangles","Boys' Shoes & Socks","Crewneck","Health & Beauty","Jewelry & Cufflinks","Home Decor","Outerwear","Outdoor Living","Accent","Sneakers","One Pieces","Accessories","Other Pants","Gadgets & Equipment","Bedcovers","Dress Pants","Sweaters","Decor & Accessories","Lifestyle & Gear","Home","Table & Desk Lamps","Underwear & Loungewear","Outdoor Furniture","Bedding","Bags & Luggage","V-Necks","Boots","Furniture","Appliances","Office Accessories","Shoes","Art","Polos, Tees & Sport Shirts","Maternity","Bedding & Bath","Jackets","Gadgets","Suits & Sportcoats","Cook & Bakeware","Necklaces & Pendants","Gear & Equipment","Chandeliers & Pendants","Dresses & Skirts","Pants & Shorts","Apparel","Makeup","Cords","Trays & Bowls","Suits","Home Office & Books","Boys' Apparel & Accessories","Dining & Servingware","Ties","Henleys","Rings","Other Denim","Trench & Raincoats","Towels & Bath Rugs","Watches & Jewelry","Skirts","Cardigans","Toys, Games & Books","Ties, Pocket Squares & More","Lighting","Socks","Girls' Apparel & Accessories","Dresses","Other Shirts","Long Sleeve Sport Shirts","Wallets & Small Leather Goods","Accent Tables","Mirrors & Frames","Children","Shirts & Sweaters","Cookware & Bakeware","Bath","Leather Jackets","Wallets","Pillows","Bar Accessories","Footwear","Hoodies","Other Furniture","Kitchen & Dining","Jackets & Vests"]}
@@ -1,12 +1,12 @@
1
1
  HTTP/1.1 200 OK
2
- Server: Jetty(6.1.26)
2
+ Server: Jetty(7.6.0.v20120127)
3
3
  Cache-Control: no-transform, max-age=600
4
4
  Content-Type: application/json; charset=UTF-8
5
- response-time: 34.0
5
+ response-time: 29.0
6
6
  X-Gg-Rule-cdn: cdn_req_check_ssl_api
7
- Last-Modified: Mon, 05 Mar 2012 19:46:58 GMT
8
- X-Version: svc-syndication-0.1.7 (commons-0.9.0)
9
- Age: 277
10
- Content-Length: 4547
7
+ Last-Modified: Tue, 18 Sep 2012 15:13:48 GMT
8
+ X-Version: svc-syndication-0.3.5 (commons-1.2.1)
9
+ Age: 286
10
+ Content-Length: 5279
11
11
 
12
- {"name":"501 Classic Jeans","product":"https://api.gilt.com/v1/products/73794579/detail.json","id":73794579,"brand":"Levi's Red Tab","content":{"description":"Five pocket straight leg cotton 501 rigid selvedge jeans. Buttoned fly with button closure and belt loops. Waist and back pockets and back waist leather logo tag. Unlined. Approximate measurements: rise: 10\", leg opening: 17\", leg opening: 32\". Measurements were taken from a size 32x32. Model's measurements: Height: 6'1\", Waist: 31\", Shirt: 15.5, Suit: 40.","fit_notes":"Straight Leg, Original Fit, Classic Seat and Thigh, Fits Below the Waist","material":"100% Cotton","origin":"Mexico"},"url":"http://www.gilt.com/m/public/look/?utm_medium=api&utm_campaign=Gilt+Ruby+Bindings&utm_source=salesapi&s_id=4eea805b8afb440acb62bde74442cd1ed0b43779c80aa041b30f6ab0a92e5160_0_73794579","image_urls":{"91x121":[{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/9908/99084413/91x121.jpg","width":91,"height":121},{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/9908/99084448/91x121.jpg","width":91,"height":121},{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/9908/99084533/91x121.jpg","width":91,"height":121}],"300x400":[{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/9908/99084413/300x400.jpg","width":300,"height":400},{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/9908/99084448/300x400.jpg","width":300,"height":400},{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/9908/99084533/300x400.jpg","width":300,"height":400}],"420x560":[{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/9908/99084413/420x560.jpg","width":420,"height":560},{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/9908/99084448/420x560.jpg","width":420,"height":560},{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/9908/99084533/420x560.jpg","width":420,"height":560}]},"skus":[{"id":998329,"inventory_status":"sold out","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"29x32"},{"name":"color","value":"rigid selvedge"}]},{"id":998333,"inventory_status":"for sale","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"30x32"},{"name":"color","value":"rigid selvedge"}]},{"id":998336,"inventory_status":"for sale","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"30x34"},{"name":"color","value":"rigid selvedge"}]},{"id":998325,"inventory_status":"sold out","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"31x32"},{"name":"color","value":"rigid selvedge"}]},{"id":998327,"inventory_status":"for sale","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"31x34"},{"name":"color","value":"rigid selvedge"}]},{"id":975254,"inventory_status":"for sale","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"32x32"},{"name":"color","value":"rigid selvedge"}]},{"id":998331,"inventory_status":"for sale","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"32x34"},{"name":"color","value":"rigid selvedge"}]},{"id":998334,"inventory_status":"for sale","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"33x32"},{"name":"color","value":"rigid selvedge"}]},{"id":998323,"inventory_status":"sold out","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"33x34"},{"name":"color","value":"rigid selvedge"}]},{"id":998326,"inventory_status":"sold out","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"34x32"},{"name":"color","value":"rigid selvedge"}]},{"id":998328,"inventory_status":"sold out","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"34x34"},{"name":"color","value":"rigid selvedge"}]},{"id":998330,"inventory_status":"sold out","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"36x32"},{"name":"color","value":"rigid selvedge"}]},{"id":998332,"inventory_status":"sold out","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"36x34"},{"name":"color","value":"rigid selvedge"}]},{"id":998335,"inventory_status":"sold out","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"38x32"},{"name":"color","value":"rigid selvedge"}]},{"id":998324,"inventory_status":"sold out","msrp_price":"98.00","sale_price":"98.00","attributes":[{"name":"size","value":"38x34"},{"name":"color","value":"rigid selvedge"}]}]}
12
+ {"name":"514 Slim Jeans","product":"https://api.gilt.com/v1/products/73794592/detail.json","id":73794592,"brand":"Levi's Red Tab","content":{"description":"Five pocket cotton slim leg jeans Zip fly Button closure Belt loops Waist and back pockets Back waist leather logo tag Unlined Rise: 8\", leg opening: 17\", inseam: 32\". Measurements were taken from a size 32x32","fit_notes":"Straight Leg, Sits Below Waist","material":"100% Cotton","origin":"Mexico"},"url":"http://www.gilt.com/sale/men/denim-style-guide/product/73794592-levis-red-tab-514-slim-jeans?utm_medium=api&utm_campaign=Gilt+Ruby+Bindings&utm_source=salesapi","image_urls":{"91x121":[{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0001/6376/163760679/91x121.jpg","width":91,"height":121},{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/7557/75572623/91x121.jpg","width":91,"height":121},{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/7557/75572631/91x121.jpg","width":91,"height":121}],"300x400":[{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0001/6376/163760679/300x400.jpg","width":300,"height":400},{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/7557/75572623/300x400.jpg","width":300,"height":400},{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/7557/75572631/300x400.jpg","width":300,"height":400}],"420x560":[{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0001/6376/163760679/420x560.jpg","width":420,"height":560},{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/7557/75572623/420x560.jpg","width":420,"height":560},{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/7557/75572631/420x560.jpg","width":420,"height":560}],"1080x1440":[{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0001/6376/163760679/1080x1440.jpg","width":1080,"height":1440},{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/7557/75572623/1080x1440.jpg","width":1080,"height":1440},{"url":"http://cdn1.gilt.com/images/share/uploads/0000/0000/7557/75572631/1080x1440.jpg","width":1080,"height":1440}]},"skus":[{"id":1116040,"inventory_status":"for sale","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"28x30"},{"name":"color","value":"rumpled rigid"}]},{"id":998353,"inventory_status":"for sale","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"28x32"},{"name":"color","value":"rumpled rigid"}]},{"id":1116041,"inventory_status":"for sale","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"29x30"},{"name":"color","value":"rumpled rigid"}]},{"id":998355,"inventory_status":"for sale","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"29x32"},{"name":"color","value":"rumpled rigid"}]},{"id":998357,"inventory_status":"sold out","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"29x34"},{"name":"color","value":"rumpled rigid"}]},{"id":1116039,"inventory_status":"for sale","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"30x30"},{"name":"color","value":"rumpled rigid"}]},{"id":998360,"inventory_status":"for sale","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"30x32"},{"name":"color","value":"rumpled rigid"}]},{"id":998351,"inventory_status":"for sale","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"31x32"},{"name":"color","value":"rumpled rigid"}]},{"id":975257,"inventory_status":"for sale","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"32x32"},{"name":"color","value":"rumpled rigid"}]},{"id":998358,"inventory_status":"for sale","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"32x34"},{"name":"color","value":"rumpled rigid"}]},{"id":998361,"inventory_status":"for sale","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"33x32"},{"name":"color","value":"rumpled rigid"}]},{"id":1312539,"inventory_status":"sold out","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"33x34"},{"name":"color","value":"rumpled rigid"}]},{"id":998352,"inventory_status":"for sale","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"34x32"},{"name":"color","value":"rumpled rigid"}]},{"id":998354,"inventory_status":"for sale","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"34x34"},{"name":"color","value":"rumpled rigid"}]},{"id":998356,"inventory_status":"sold out","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"36x32"},{"name":"color","value":"rumpled rigid"}]},{"id":998359,"inventory_status":"sold out","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"36x34"},{"name":"color","value":"rumpled rigid"}]},{"id":998362,"inventory_status":"sold out","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"38x32"},{"name":"color","value":"rumpled rigid"}]},{"id":998350,"inventory_status":"sold out","msrp_price":"68.00","sale_price":"68.00","attributes":[{"name":"size","value":"38x34"},{"name":"color","value":"rumpled rigid"}]}],"categories":["Men","Apparel","Denim","Slim Leg","Clothing","Denim"]}
@@ -30,4 +30,11 @@ describe Gilt::Client::Products do
30
30
  expect { @client.detail }.to raise_error Weary::Resource::UnmetRequirementsError
31
31
  end
32
32
  end
33
+
34
+ describe "#categories" do
35
+ it "generates a request to get the categories of active products" do
36
+ categories = @client.categories
37
+ categories.uri.to_s.should match "/categories.json"
38
+ end
39
+ end
33
40
  end
@@ -4,7 +4,8 @@ describe Gilt::Product do
4
4
  before do
5
5
  @apikey = "my-api-key"
6
6
  @affid = "my-affiliate-id"
7
- stub_request(:any, /api\.gilt\.com\/.*/).to_return fixture('product.json')
7
+ stub_request(:any, /api\.gilt\.com\/.*detail.*/).to_return fixture('product.json')
8
+ stub_request(:any, /api\.gilt\.com\/.*categories.*/).to_return fixture('categories.json')
8
9
  end
9
10
 
10
11
  describe "::defer" do
@@ -33,24 +34,31 @@ describe Gilt::Product do
33
34
  end
34
35
  end
35
36
 
37
+ describe "::categories" do
38
+ it "gets a list of active product categories" do
39
+ categories = described_class.categories(@apikey, @affid)
40
+ categories.length.should eql 130
41
+ end
42
+ end
43
+
36
44
  describe "#name" do
37
45
  it "returns the product's name" do
38
46
  product = described_class.create("a-product-id", @apikey)
39
- product.name.should eql "501 Classic Jeans"
47
+ product.name.should eql "514 Slim Jeans"
40
48
  end
41
49
  end
42
50
 
43
51
  describe "#product" do
44
52
  it "returns a URI representation of the product's endpoint" do
45
53
  product = described_class.create("a-product-id", @apikey)
46
- product.product.to_s.should eql "https://api.gilt.com/v1/products/73794579/detail.json"
54
+ product.product.to_s.should eql "https://api.gilt.com/v1/products/73794592/detail.json"
47
55
  end
48
56
  end
49
57
 
50
58
  describe "#id" do
51
59
  it "returns the id of the product" do
52
60
  product = described_class.create("a-product-id", @apikey)
53
- product.id.should eql 73794579
61
+ product.id.should eql 73794592
54
62
  end
55
63
  end
56
64
 
@@ -64,14 +72,22 @@ describe Gilt::Product do
64
72
  describe "#url" do
65
73
  it "returns a URI representation of the product's detail page" do
66
74
  product = described_class.create("a-product-id", @apikey)
67
- product.url.to_s.should match "www.gilt.com/m/public/look/"
75
+ product.url.to_s.should match "www.gilt.com/sale/men/"
76
+ end
77
+ end
78
+
79
+ describe "#categories" do
80
+ it "returns an array of strings of categories in which this product belongs" do
81
+ product = described_class.create("a-product-id", @apikey)
82
+ product.categories.should include "Denim"
83
+
68
84
  end
69
85
  end
70
86
 
71
87
  describe "#description" do
72
88
  it "returns the product description" do
73
89
  product = described_class.create("a-product-id", @apikey)
74
- product.description.should match /^five pocket straight leg/i
90
+ product.description.should match /^five pocket cotton slim leg/i
75
91
  end
76
92
  end
77
93
 
@@ -127,14 +143,14 @@ describe Gilt::Product do
127
143
  describe "#min_price" do
128
144
  it "returns the min price of the skus" do
129
145
  product = described_class.create("a-product-id", @apikey)
130
- product.min_price.to_s.should eql "98.00"
146
+ product.min_price.to_s.should eql "68.00"
131
147
  end
132
148
  end
133
149
 
134
150
  describe "#max_price" do
135
151
  it "returns the max price of the skus" do
136
152
  product = described_class.create("a-product-id", @apikey)
137
- product.min_price.to_s.should eql "98.00"
153
+ product.min_price.to_s.should eql "68.00"
138
154
  end
139
155
  end
140
156
 
@@ -148,14 +164,14 @@ describe Gilt::Product do
148
164
  describe "#format_price" do
149
165
  it "prints the price range of the product, or if both min and max are equal, the price" do
150
166
  product = described_class.create("a-product-id", @apikey)
151
- product.format_price.should eql "$98.00"
167
+ product.format_price.should eql "$68.00"
152
168
  end
153
169
  end
154
170
 
155
171
  describe "#colors" do
156
172
  it "returns a set of all the possible colors for the product" do
157
173
  product = described_class.create("a-product-id", @apikey)
158
- product.colors.first.should match /selvedge/
174
+ product.colors.first.should match /rumpled/
159
175
  end
160
176
  end
161
177
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gilt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-01 00:00:00.000000000 Z
12
+ date: 2012-09-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: money
16
- requirement: &70282983416480 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,18 +21,28 @@ dependencies:
21
21
  version: 4.0.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70282983416480
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 4.0.2
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: weary
27
- requirement: &70282983414860 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
31
36
  - !ruby/object:Gem::Version
32
- version: 1.0.0
37
+ version: 1.1.0
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70282983414860
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.1.0
36
46
  description: Ruby client for the Gilt public API (http://dev.gilt.com). Written with
37
47
  the Weary framework.
38
48
  email:
@@ -45,6 +55,7 @@ files:
45
55
  - .travis.yml
46
56
  - Gemfile
47
57
  - Gemfile.lock
58
+ - LICENSE
48
59
  - README.md
49
60
  - Rakefile
50
61
  - gilt.gemspec
@@ -57,6 +68,7 @@ files:
57
68
  - lib/gilt/sku.rb
58
69
  - lib/gilt/version.rb
59
70
  - spec/fixtures/active.json
71
+ - spec/fixtures/categories.json
60
72
  - spec/fixtures/product.json
61
73
  - spec/fixtures/sale_detail.json
62
74
  - spec/gilt/client/products_spec.rb
@@ -80,7 +92,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
80
92
  version: '0'
81
93
  segments:
82
94
  - 0
83
- hash: 3087332207602570870
95
+ hash: -3809446155767066634
84
96
  required_rubygems_version: !ruby/object:Gem::Requirement
85
97
  none: false
86
98
  requirements:
@@ -89,15 +101,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
101
  version: '0'
90
102
  segments:
91
103
  - 0
92
- hash: 3087332207602570870
104
+ hash: -3809446155767066634
93
105
  requirements: []
94
106
  rubyforge_project:
95
- rubygems_version: 1.8.11
107
+ rubygems_version: 1.8.24
96
108
  signing_key:
97
109
  specification_version: 3
98
110
  summary: Ruby client for the Gilt public API.
99
111
  test_files:
100
112
  - spec/fixtures/active.json
113
+ - spec/fixtures/categories.json
101
114
  - spec/fixtures/product.json
102
115
  - spec/fixtures/sale_detail.json
103
116
  - spec/gilt/client/products_spec.rb