shopstyle 0.1

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