milo 0.0.6 → 0.0.7

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.
@@ -1,3 +1,8 @@
1
+ ## v.0.0.7
2
+ * get_products deprecated
3
+ * responses are parsed in JSON
4
+ * find products by postal code
5
+
1
6
  ## v.0.06
2
7
 
3
8
  * get products
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- milo (0.0.6)
4
+ milo (0.0.7.alpha)
5
5
  activesupport
6
6
  crack
7
7
  curb
@@ -9,28 +9,36 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- activesupport (3.2.6)
12
+ activesupport (3.2.11)
13
13
  i18n (~> 0.6)
14
14
  multi_json (~> 1.0)
15
- crack (0.3.1)
16
- curb (0.8.1)
15
+ crack (0.3.2)
16
+ curb (0.8.3)
17
17
  diff-lcs (1.1.3)
18
- i18n (0.6.0)
19
- multi_json (1.3.6)
20
- rake (0.9.2.2)
21
- rspec (2.11.0)
22
- rspec-core (~> 2.11.0)
23
- rspec-expectations (~> 2.11.0)
24
- rspec-mocks (~> 2.11.0)
25
- rspec-core (2.11.1)
26
- rspec-expectations (2.11.1)
18
+ fakeweb (1.3.0)
19
+ i18n (0.6.1)
20
+ json_spec (1.1.0)
21
+ multi_json (~> 1.0)
22
+ rspec (~> 2.0)
23
+ multi_json (1.5.0)
24
+ rake (10.0.3)
25
+ rspec (2.12.0)
26
+ rspec-core (~> 2.12.0)
27
+ rspec-expectations (~> 2.12.0)
28
+ rspec-mocks (~> 2.12.0)
29
+ rspec-core (2.12.2)
30
+ rspec-expectations (2.12.1)
27
31
  diff-lcs (~> 1.1.3)
28
- rspec-mocks (2.11.1)
32
+ rspec-mocks (2.12.2)
33
+ vcr (2.4.0)
29
34
 
30
35
  PLATFORMS
31
36
  ruby
32
37
 
33
38
  DEPENDENCIES
39
+ fakeweb
40
+ json_spec
34
41
  milo!
35
42
  rake
36
43
  rspec
44
+ vcr
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Milo [![Build Status](https://secure.travis-ci.org/victorhazbun87/milo.png?branch=master)][travis] [![Dependency Status](https://gemnasium.com/victorhazbun87/milo.png?travis)][gemnasium]
2
2
 
3
3
  [travis]: http://travis-ci.org/victorhazbun87/milo
4
- [gemnasium]: https://gemnasium.com/milo/milo
4
+ [gemnasium]: https://gemnasium.com/victorhazbun87/milo
5
5
 
6
6
  ## Description
7
7
 
@@ -22,29 +22,9 @@ Or install it yourself as:
22
22
 
23
23
  $ gem install milo
24
24
 
25
- ## Usage
25
+ ## Getting Started
26
26
 
27
- First:
28
-
29
- milo = Milo::Main.new("ec17621f92c4b199a7a041bfe27a0c00")
30
-
31
- Get all products:
32
-
33
- milo.get_products
34
-
35
- Get product by id:
36
-
37
- milo.get_product_by_id("20482374")
38
-
39
- Get product by upc code:
40
-
41
- milo.get_product_by_upc("037000185062")
42
-
43
- More complex, find by id and pass show options for products:
44
-
45
- milo.get_product_by_id("20482374", show: "PnamePminUpcImg45")
46
-
47
- Note: Read about show flag here -> https://www.x.com/developers/documentation-tools/milo/endpoints.html#products-endpoint
27
+ See the [milo home page](http://victorhazbun87.github.com/milo) for the simple steps process.
48
28
 
49
29
 
50
30
  ## Contributing to Milo
@@ -13,9 +13,10 @@ module Milo
13
13
  end
14
14
 
15
15
  def make_request(end_url)
16
- result_key = end_url.include?("?") ? "&key=#{@key}" : "?key=#{@key}"
16
+ result_key = "&key=#{@key}"
17
17
  curl = Curl::Easy.perform(main_url + end_url + result_key)
18
- Response.new(curl)
18
+ response = Response.new(curl)
19
+ JSON.parse(response.body)
19
20
  end
20
21
 
21
22
  class Response
@@ -1,28 +1,33 @@
1
1
  module Milo
2
2
  module Product
3
3
 
4
- def get_products(options = {})
5
- base = "products"
6
- base.tap do |b|
7
- b + "?show=#{options[:show]}" if options[:show].present?
8
- end
9
- make_request("products")
10
- end
11
-
12
4
  def get_product_by_id(id, options = {})
13
5
  base = "products?product_ids=#{id}"
14
- base.tap do |b|
15
- b.concat("&show=#{options[:show]}") if options[:show].present?
16
- end
17
- make_request(base)
6
+ result = apply_flag(base, options)
7
+ make_request(result)
18
8
  end
19
9
 
20
10
  def get_product_by_upc(upc, options = {})
21
11
  base = "products?q=upc:#{upc}"
22
- base.tap do |b|
23
- b + "&show=#{options[:show]}" if options[:show].present?
24
- end
25
- make_request(base)
12
+ result = apply_flag(base, options)
13
+ make_request(result)
14
+ end
15
+
16
+ def get_product_by_postal_code(code, options = {})
17
+ base = "products?postal_code=#{code}"
18
+ result = apply_flag(base, options)
19
+ make_request(result)
20
+ end
21
+
22
+ private
23
+
24
+ def apply_flag(base, options = {})
25
+ return base if options == {}
26
+ hash = {}
27
+ hash.merge!(show: options[:show]) if options[:show]
28
+ hash.merge!(q: options[:q]) if options[:q]
29
+ hash.merge!(show_defaults: options[:show_defaults]) if options[:show_defaults]
30
+ base + "&" + hash.to_query
26
31
  end
27
32
  end
28
33
  end
@@ -1,3 +1,3 @@
1
1
  module Milo
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.email = ["victorhazbun87@gmail.com"]
10
10
  s.description = %q{Track in real time the price and availability of every product carried by every location of every merchant through eBay Milo API.}
11
11
  s.summary = %q{Ruby wrapper for the eBay Milo API}
12
- s.homepage = "https://github.com/victorhazbun87/milo"
12
+ s.homepage = "http://victorhazbun87.github.com/milo/"
13
13
 
14
14
  s.files = `git ls-files`.split("\n")
15
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -18,6 +18,9 @@ Gem::Specification.new do |s|
18
18
 
19
19
  s.add_development_dependency "rake"
20
20
  s.add_development_dependency "rspec"
21
+ s.add_development_dependency "vcr"
22
+ s.add_development_dependency "fakeweb"
23
+ s.add_development_dependency "json_spec"
21
24
  s.add_dependency "curb"
22
25
  s.add_dependency "activesupport"
23
26
  s.add_dependency "crack"
@@ -1,23 +1,29 @@
1
1
  # encoding: utf-8
2
2
  require "milo"
3
+ require 'spec_helper'
3
4
 
4
5
  describe Milo::Main do
5
6
  before(:each) do
6
- @key = "this_key"
7
- @milo = Milo::Main.new(@key)
7
+ @key = "ffbefff2a246f4c53c0d04ed50bb4707"
8
+ @milo = Milo::Main.new(@key)
8
9
  end
9
10
 
10
11
  describe "basic" do
11
- it "should have the correct mail_url" do
12
+ it "should have the correct mail_url", :vcr do
12
13
  @milo.main_url.should == "https://api.x.com/milo/v3/"
13
14
  end
14
15
  end
15
16
 
16
17
  describe 'make_request' do
17
18
  context "product" do
18
- it "should construct url for product" do
19
- response = @milo.make_request("products?product_ids=1234")
20
- response.url.should == "https://api.x.com/milo/v3/products?product_ids=1234&key=#{@key}"
19
+ it "should contains one product matching with given a id", :vcr do
20
+ result = @milo.make_request("products?product_ids=20482374")
21
+ result.to_json.should have_json_size(1).at_path("products")
22
+ end
23
+
24
+ it "should contains the product with the same id given in the path", :vcr do
25
+ result = @milo.make_request("products?product_ids=20482374")
26
+ result.to_json.should have_json_type(Integer).at_path("products/0/product_id")
21
27
  end
22
28
  end
23
29
  end
@@ -1,48 +1,43 @@
1
1
  # encoding: utf-8
2
2
  require "milo"
3
+ require 'spec_helper'
3
4
 
4
5
  describe Milo::Main, 'product api' do
5
6
 
6
7
  before :each do
7
- @key = "my_key"
8
- curl_object = Curl::Easy.method(:new)
9
- Curl::Easy.stub!(:new).and_return do |*args|
10
- curl = curl_object.call(*args)
11
- curl.stub!(:perform)
12
- curl.stub!(:header_str) { "\r\ntest: blah"}
13
- curl.stub!(:response_code).and_return(200)
14
- curl.stub!(:body_str).and_return("{\"pagination\": {\"total_results\": 1, \"per_page\": 30, \"total_pages\": 1, \"page\": 0}, \"products\": [{\"merchants\": [4483], \"min_price\": null, \"name\": \"REDI2SET 43\\\" x 14\\\" Wavy Glass Pattern Frameless Replacement Glass Block Window\", \"max_price\": null, \"product_id\": 20482374}]}")
15
- curl
16
- end
8
+ @key = "ffbefff2a246f4c53c0d04ed50bb4707"
17
9
  end
18
10
 
19
- it "should be able to list all" do
11
+ it "should be able to get by id", :vcr do
20
12
  milo = Milo::Main.new(@key)
21
- response = milo.get_products
22
- response.url.should == "https://api.x.com/milo/v3/products?key=#{@key}"
23
- response.status.should == 200
13
+ response = milo.get_product_by_id("20482374")
14
+ response.to_json.should have_json_size(1).at_path("products")
24
15
  end
25
16
 
26
- it "should be able to get by id" do
17
+ it "should be able to get by upc", :vcr do
27
18
  milo = Milo::Main.new(@key)
28
- response = milo.get_product_by_id("20482374")
29
- response.url.should == "https://api.x.com/milo/v3/products?product_ids=20482374&key=#{@key}"
30
- response.body.should =~ /Wavy Glass Pattern Frameless Replacement Glass Block Window/
31
- response.status.should == 200
19
+ response = milo.get_product_by_upc("037000185062")
20
+ response.to_json.should have_json_size(1).at_path("products")
32
21
  end
33
22
 
34
- it "should be able to get by upc" do
23
+ it "should be able to get by id with show flag in the show parameter", :vcr do
35
24
  milo = Milo::Main.new(@key)
36
- response = milo.get_product_by_upc("037000185062")
37
- response.url.should == "https://api.x.com/milo/v3/products?q=upc:037000185062&key=#{@key}"
38
- response.status.should == 200
25
+ response = milo.get_product_by_id("20482374", {show: "PnamePminUpcImg45"})
26
+ response.to_json.should have_json_size(1).at_path("products")
27
+ response.to_json.should include_json('http://imagethumbnails.milo.com/035/340/575/45/35340237_34484575_45.jpg'.to_json).at_path("products/0/image_45")
28
+ end
29
+
30
+ it "should be able to get by postal code", :vcr do
31
+ milo = Milo::Main.new(@key)
32
+ response = milo.get_product_by_postal_code("07032")
33
+ response.to_json.should have_json_size(30).at_path("products")
39
34
  end
40
35
 
41
- it "should be able to get by id with show flag in the show parameter" do
36
+ it "should be able to get by postal code with many flags", :vcr do
42
37
  milo = Milo::Main.new(@key)
43
- response = milo.get_product_by_id("20482374", show: "PnamePminUpcImg45")
44
- response.url.should == "https://api.x.com/milo/v3/products?product_ids=20482374&show=PnamePminUpcImg45&key=#{@key}"
45
- response.status.should == 200
38
+ p response = milo.get_product_by_postal_code("07032", {q: "basketball", show_defaults: "false", show: "PidPnameMidsPminPmaxDescPurlImg200Rate"})
39
+ response.to_json.should have_json_size(30).at_path("products")
40
+ response.to_json.should include_json("Lifetime 44 in. Streamline Basketball System".to_json).at_path("products/0/name")
46
41
  end
47
42
 
48
43
  end
@@ -1,2 +1,20 @@
1
1
  require 'rubygems'
2
2
  require 'milo'
3
+ require 'base64'
4
+ require 'fakeweb'
5
+ require 'vcr'
6
+ require 'json_spec'
7
+
8
+ VCR.configure do |c|
9
+ c.cassette_library_dir = 'fixtures/vcr_cassettes'
10
+ c.hook_into :fakeweb
11
+ end
12
+
13
+ RSpec.configure do |c|
14
+ c.treat_symbols_as_metadata_keys_with_true_values = true
15
+ c.around(:each, :vcr) do |example|
16
+ name = example.metadata[:full_description].split(/\s+/, 2).join("/").underscore.gsub(/[^\w\/]+/, "_")
17
+ options = example.metadata.slice(:record, :match_requests_on).except(:example_group)
18
+ VCR.use_cassette(name, options) { example.call }
19
+ end
20
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: milo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-22 00:00:00.000000000 Z
12
+ date: 2013-02-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -43,6 +43,54 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: vcr
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: fakeweb
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: json_spec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
46
94
  - !ruby/object:Gem::Dependency
47
95
  name: curb
48
96
  requirement: !ruby/object:Gem::Requirement
@@ -119,7 +167,7 @@ files:
119
167
  - spec/milo/main_spec.rb
120
168
  - spec/milo/product_spec.rb
121
169
  - spec/spec_helper.rb
122
- homepage: https://github.com/victorhazbun87/milo
170
+ homepage: http://victorhazbun87.github.com/milo/
123
171
  licenses: []
124
172
  post_install_message:
125
173
  rdoc_options: []
@@ -131,18 +179,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
131
179
  - - ! '>='
132
180
  - !ruby/object:Gem::Version
133
181
  version: '0'
134
- segments:
135
- - 0
136
- hash: -878125091368183299
137
182
  required_rubygems_version: !ruby/object:Gem::Requirement
138
183
  none: false
139
184
  requirements:
140
185
  - - ! '>='
141
186
  - !ruby/object:Gem::Version
142
187
  version: '0'
143
- segments:
144
- - 0
145
- hash: -878125091368183299
146
188
  requirements: []
147
189
  rubyforge_project:
148
190
  rubygems_version: 1.8.24