wine_dot_com_api_request 0.1.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.
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2010 Christopher Meiklejohn
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,9 @@
1
+ MIT-LICENSE
2
+ Manifest
3
+ README.rdoc
4
+ Rakefile
5
+ init.rb
6
+ lib/wine_dot_com_api_request.rb
7
+ lib/wine_dot_com_api_request/configuration.rb
8
+ test/wine_dot_com_api_request_test.rb
9
+ wine_dot_com_api_request.gemspec
@@ -0,0 +1,75 @@
1
+ = Introduction
2
+
3
+ WineDotComApiRequest provides a simple no-frills interface to the Wine.com query API.
4
+
5
+ Its purpose is to eliminate the code duplication in setting up the request each time
6
+ you which to receive information from the API.
7
+
8
+ It returns pure JSON or XML depending on which type of response you request.
9
+
10
+ = Installation
11
+
12
+ To install, run:
13
+
14
+ $ sudo gem install wine_dot_com_api_request
15
+
16
+ Then, place your API key from wine.com in the lib/wine_dot_com_api_request/configuration.rb file.
17
+
18
+ = Examples
19
+
20
+ To perform a request, follow the example below:
21
+
22
+ w = WineDotComApiRequest.new(:search => 'mondavi cabernet',
23
+ :format => :xml,
24
+ :resource => :catalog,
25
+ :size => 1,
26
+ :offset => 0)
27
+
28
+ res = w.query
29
+
30
+ View the documentation for possible search arguments.
31
+
32
+ The query routine will return either the raw XML or JSON request, depending on which you specify.
33
+
34
+ = Documentation
35
+
36
+ You can generate documentation if you have the source by typing:
37
+
38
+ $ rake doc
39
+
40
+ = Release Notes
41
+
42
+ First release.
43
+
44
+ = Credits
45
+
46
+ WineDotComApiRequest is maintained by {Christopher Meiklejohn}[mailto:cmeik@me.com]. Contact me if you'd like to request any features or have any questions or feedback.
47
+
48
+ = License
49
+
50
+ WineDotComApiRequest is Copyright 2010 Christopher Meiklejohn.
51
+
52
+ It is free software, and may be redistributed under the terms specified in the MIT-LICENSE file, which is attached below:
53
+
54
+ Copyright (c) 2010 Christopher Meiklejohn
55
+
56
+ Permission is hereby granted, free of charge, to any person
57
+ obtaining a copy of this software and associated documentation
58
+ files (the "Software"), to deal in the Software without
59
+ restriction, including without limitation the rights to use,
60
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
61
+ copies of the Software, and to permit persons to whom the
62
+ Software is furnished to do so, subject to the following
63
+ conditions:
64
+
65
+ The above copyright notice and this permission notice shall be
66
+ included in all copies or substantial portions of the Software.
67
+
68
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
69
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
70
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
71
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
72
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
73
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
74
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
75
+ OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new('wine_dot_com_api_request', '0.1.0') do |p|
6
+ p.description = "Provides an interface to the wine.com API."
7
+ p.url = "https://github.com/cmeiklejohn/wine_dot_com_api_request"
8
+ p.author = "Christopher Meiklejohn"
9
+ p.email = "cmeik@me.com"
10
+ p.ignore_pattern = ["tmp/*", "script/*"]
11
+ p.development_dependencies = []
12
+ end
13
+
14
+ Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
15
+
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'wine_dot_com_api_request'
@@ -0,0 +1,134 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # WineDotComApiRequest class.
4
+ #
5
+ # Provides an interface to access the Wine.com API.
6
+ #
7
+ # Author:: Christopher Meiklejohn (cmeik@me.com)
8
+ # Copyright:: Copyright (c) 2010 Christopher Meiklejohn
9
+ # License:: Distributes under the terms specified in the MIT-LICENSE file.
10
+ #
11
+ # Usage example:
12
+ #w = WineDotComApiRequest.new(:search => 'mondavi cabernet',
13
+ # :format => :xml,
14
+ # :resource => :catalog,
15
+ # :size => 1,
16
+ # :offset => 0)
17
+ #
18
+ # w.query
19
+ #
20
+ # To-do:
21
+ # * Build a better interface for filters
22
+ # * Build a better interface for sortBy
23
+ # * Implement affiliateId
24
+ # * Implement version, beta currently only supported
25
+ # * Extract out api key and base url into configuration parameters
26
+ #
27
+ # See: http://api.wine.com/wiki/2-catalog-queries
28
+ require "wine_dot_com_api_request/configuration"
29
+ require 'net/http'
30
+ require 'uri'
31
+
32
+ class WineDotComApiRequest
33
+ public
34
+ # API key from Wine.com.
35
+ attr_accessor :api_key
36
+
37
+ # API version number. Available API versions: v1.0, v2.3.
38
+ attr_accessor :version
39
+
40
+ # API result format. Available API formats: xml, json.
41
+ attr_accessor :format
42
+
43
+ # API requested resource. Available API resources: catalog, reference, categorymap.
44
+ attr_accessor :resource
45
+
46
+ # API parameters.
47
+ attr_accessor :parameters
48
+
49
+ # Base URL of API.
50
+ attr_accessor :base_url
51
+
52
+ # Affiliate ID for revenue sharing.
53
+ attr_accessor :affiliate_id
54
+
55
+ # Search offset to start at.
56
+ attr_accessor :offset
57
+
58
+ # Number of records to return.
59
+ attr_accessor :size
60
+
61
+ # Search terms.
62
+ attr_accessor :search
63
+
64
+ # Search filter. Ex. filter=categories(7155+124)+rating(85|100).
65
+ attr_accessor :filter
66
+
67
+ # Ship to state. Two letter abbrev. Ex. MA.
68
+ attr_accessor :state
69
+
70
+ # Sort key. Ex. sort=rating|ascending.
71
+ attr_accessor :sort
72
+
73
+ # In stock. Boolean search value.
74
+ attr_accessor :instock
75
+
76
+ # Inialize the required parameters, and setup the request defaults.
77
+ def initialize(options = {})
78
+ options.each_pair do |key, value|
79
+ self.send("#{key}=", value)
80
+ end
81
+ end
82
+
83
+ # Return URL that request will be made to. Mainly for debugging purposes.
84
+ def url
85
+ api_url
86
+ end
87
+
88
+ # Execute a search. Returns either raw json or xml.
89
+ def query(options = {})
90
+ options.each_pair do |key, value|
91
+ self.send("#{key}=", value)
92
+ end
93
+
94
+ raise 'No API base URL provided.' unless @@base_url
95
+ raise 'No API key provided.' unless @@api_key
96
+ raise 'No resource specified.' unless @resource
97
+ raise 'No format specified.' unless @format
98
+
99
+ return do_get
100
+ end
101
+
102
+ private
103
+ # Perform GET request and return results.
104
+ def do_get
105
+ Net::HTTP.get(URI.parse(api_url))
106
+ end
107
+
108
+ # Generate the url to make the API call to.
109
+ def api_url
110
+ "#{@@base_url}/#{format}/#{resource}?apikey=#{@@api_key}#{parameters}"
111
+ end
112
+
113
+ # parameters overrides attribute reader and returns custom results based on resource type.
114
+ def parameters
115
+ url_params = ""
116
+
117
+ if @resource == :catalog
118
+ url_params += "&" + "offset=#{URI.escape(@offset.to_s)}" if @offset
119
+ url_params += "&" + "size=#{URI.escape(@size.to_s)}" if @size
120
+ url_params += "&" + "search=#{URI.escape(@search)}" if @search
121
+ url_params += "&" + "filter=#{URI.escape(@filter)}" if @filter
122
+ url_params += "&" + "state=#{URI.escape(@state)}" if @state
123
+ url_params += "&" + "sort=#{URI.escape(@sort)}" if @sort
124
+ url_params += "&" + "instock=#{@instock}" if @instock
125
+ elsif @resource == :categorymap
126
+ url_params += "&" + "filter=#{URI.escape(@filter)}" if @filter
127
+ url_params += "&" + "search=#{URI.escape(@search)}" if @search
128
+ elsif @resource == :reference
129
+ url_params += "&" + "filter=#{URI.escape(@filter)}" if @filter
130
+ end
131
+
132
+ return url_params
133
+ end
134
+ end
@@ -0,0 +1,4 @@
1
+ class WineDotComApiRequest
2
+ @@api_key = '3scale-0cef67842d4f32bc31230883e1f4f69c'
3
+ @@base_url = 'http://services.wine.com/api/beta/service.svc'
4
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require 'lib/wine_dot_com_api_request'
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{wine_dot_com_api_request}
5
+ s.version = "0.1.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Christopher Meiklejohn"]
9
+ s.date = %q{2010-01-02}
10
+ s.description = %q{Provides an interface to the wine.com API.}
11
+ s.email = %q{cmeik@me.com}
12
+ s.extra_rdoc_files = ["README.rdoc", "lib/wine_dot_com_api_request.rb", "lib/wine_dot_com_api_request/configuration.rb"]
13
+ s.files = ["MIT-LICENSE", "Manifest", "README.rdoc", "Rakefile", "init.rb", "lib/wine_dot_com_api_request.rb", "lib/wine_dot_com_api_request/configuration.rb", "test/wine_dot_com_api_request_test.rb", "wine_dot_com_api_request.gemspec"]
14
+ s.homepage = %q{https://github.com/cmeiklejohn/wine_dot_com_api_request}
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Wine_dot_com_api_request", "--main", "README.rdoc"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{wine_dot_com_api_request}
18
+ s.rubygems_version = %q{1.3.5}
19
+ s.summary = %q{Provides an interface to the wine.com API.}
20
+ s.test_files = ["test/wine_dot_com_api_request_test.rb"]
21
+
22
+ if s.respond_to? :specification_version then
23
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
+ s.specification_version = 3
25
+
26
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
27
+ else
28
+ end
29
+ else
30
+ end
31
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wine_dot_com_api_request
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Christopher Meiklejohn
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-01-02 00:00:00 -05:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Provides an interface to the wine.com API.
17
+ email: cmeik@me.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ - lib/wine_dot_com_api_request.rb
25
+ - lib/wine_dot_com_api_request/configuration.rb
26
+ files:
27
+ - MIT-LICENSE
28
+ - Manifest
29
+ - README.rdoc
30
+ - Rakefile
31
+ - init.rb
32
+ - lib/wine_dot_com_api_request.rb
33
+ - lib/wine_dot_com_api_request/configuration.rb
34
+ - test/wine_dot_com_api_request_test.rb
35
+ - wine_dot_com_api_request.gemspec
36
+ has_rdoc: true
37
+ homepage: https://github.com/cmeiklejohn/wine_dot_com_api_request
38
+ licenses: []
39
+
40
+ post_install_message:
41
+ rdoc_options:
42
+ - --line-numbers
43
+ - --inline-source
44
+ - --title
45
+ - Wine_dot_com_api_request
46
+ - --main
47
+ - README.rdoc
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: "0"
55
+ version:
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: "1.2"
61
+ version:
62
+ requirements: []
63
+
64
+ rubyforge_project: wine_dot_com_api_request
65
+ rubygems_version: 1.3.5
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: Provides an interface to the wine.com API.
69
+ test_files:
70
+ - test/wine_dot_com_api_request_test.rb