milo 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -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