shopstyle 0.1

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.
Files changed (3) hide show
  1. data/lib/shopstyle.rb +51 -0
  2. data/shopstyle.gemspec +20 -0
  3. metadata +85 -0
@@ -0,0 +1,51 @@
1
+ class ShopStyleError < StandardError
2
+ attr_accessor :data
3
+ end
4
+
5
+ module ShopStyleHelper
6
+ require 'cgi'
7
+ def query_from_params params
8
+ params.map { |key, value| "%s=%s" % [escape(key),escape(value)] }.join('&')
9
+ end
10
+
11
+ def escape value
12
+ CGI::escape(value.to_s)
13
+ end
14
+
15
+ def url_for host, method, params
16
+ "http://#{host}/action/#{method}?#{query_from_params(params)}"
17
+ end
18
+ end
19
+
20
+ class ShopStyle
21
+ include ShopStyleHelper
22
+ require 'yajl'
23
+ require 'patron'
24
+
25
+ HOST = 'api.shopstyle.com'
26
+ DEFAULT_FORMAT = 'json'
27
+ def initialize api_key
28
+ @api_key = api_key
29
+ @session = Patron::Session.new
30
+ end
31
+
32
+ def request method, params = {}
33
+ params[:pid] = @api_key
34
+ params[:format] ||= DEFAULT_FORMAT
35
+ tries = 0
36
+ begin
37
+ raw_response = @session.get(url_for(HOST, method, params))
38
+ p raw_response
39
+ rescue Patron::HostResolutionError, Patron::ConnectionFailed
40
+ retry if tries < 5
41
+ tries += 1
42
+ end
43
+
44
+ case params[:format]
45
+ when 'json'
46
+ Yajl::Parser.parse(raw_response.body)
47
+ else
48
+ raise ShopStyleError.new('Unknown format %s', params[:format])
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,20 @@
1
+ spec = Gem::Specification.new do |s|
2
+ s.name = 'shopstyle'
3
+ s.version = '0.1'
4
+ s.date = '2010-06-23'
5
+ s.summary = "A simple clent for the ShopStyle API"
6
+ s.description = "A Ruby implementation of the ShopStyle API"
7
+
8
+ s.homepage = "http://github.com/jessefarmer/shopstyle"
9
+
10
+ s.authors = ["Jesse Farmer"]
11
+ s.email = "jesse@bumbalabs.com"
12
+
13
+ s.add_dependency('yajl-ruby')
14
+ s.add_dependency('patron')
15
+
16
+ s.has_rdoc = false
17
+
18
+ s.files = ["shopstyle.gemspec",
19
+ "lib/shopstyle.rb"]
20
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: shopstyle
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ version: "0.1"
9
+ platform: ruby
10
+ authors:
11
+ - Jesse Farmer
12
+ autorequire:
13
+ bindir: bin
14
+ cert_chain: []
15
+
16
+ date: 2010-06-23 00:00:00 -07:00
17
+ default_executable:
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
20
+ name: yajl-ruby
21
+ prerelease: false
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ segments:
27
+ - 0
28
+ version: "0"
29
+ type: :runtime
30
+ version_requirements: *id001
31
+ - !ruby/object:Gem::Dependency
32
+ name: patron
33
+ prerelease: false
34
+ requirement: &id002 !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ segments:
39
+ - 0
40
+ version: "0"
41
+ type: :runtime
42
+ version_requirements: *id002
43
+ description: A Ruby implementation of the ShopStyle API
44
+ email: jesse@bumbalabs.com
45
+ executables: []
46
+
47
+ extensions: []
48
+
49
+ extra_rdoc_files: []
50
+
51
+ files:
52
+ - shopstyle.gemspec
53
+ - lib/shopstyle.rb
54
+ has_rdoc: true
55
+ homepage: http://github.com/jessefarmer/shopstyle
56
+ licenses: []
57
+
58
+ post_install_message:
59
+ rdoc_options: []
60
+
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ segments:
68
+ - 0
69
+ version: "0"
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ requirements: []
78
+
79
+ rubyforge_project:
80
+ rubygems_version: 1.3.6
81
+ signing_key:
82
+ specification_version: 3
83
+ summary: A simple clent for the ShopStyle API
84
+ test_files: []
85
+