sucker 0.9.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,35 @@
1
+ # http://github.com/papercavalier/sucker/issues#issue/2
2
+
3
+ require "spec_helper"
4
+
5
+ module Sucker
6
+ describe "Item Search" do
7
+ before do
8
+ @worker = Sucker.new(
9
+ :locale => "us",
10
+ :key => amazon["key"],
11
+ :secret => amazon["secret"])
12
+
13
+ @worker << {
14
+ "Operation" => "ItemSearch",
15
+ "SearchIndex" => "Books",
16
+ "Author" => "Orwell" }
17
+
18
+ #Sucker.stub(@worker)
19
+ end
20
+
21
+ it "works for Orwell" do
22
+ @worker.get.should be_valid
23
+ end
24
+
25
+ it "works for George Orwell, too" do
26
+ @worker << {
27
+ "Operation" => "ItemSearch",
28
+ "SearchIndex" => "Books",
29
+ "Author" => "George Orwell" }
30
+ response = @worker.get
31
+ response.should be_valid
32
+ response.node("TotalPages").first.should be_an_instance_of String
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,2 @@
1
+ key: KEY
2
+ secret: SECRET
@@ -0,0 +1,3 @@
1
+ def asins_fixture
2
+ File.new(File.expand_path("../../fixtures/asins.txt", __FILE__), "r").map { |line| line.chomp }
3
+ end
@@ -74,5 +74,16 @@ module Sucker
74
74
  @response.to_hash["Title"].should eql "スティーブ・ジョブズ 驚異のプレゼン―人々を惹きつける18の法則"
75
75
  end
76
76
  end
77
+
78
+ context "#valid?" do
79
+ it "returns true if the HTTP status is OK" do
80
+ @response.should be_valid
81
+ end
82
+
83
+ it "returns false if the HTTP status is not OK" do
84
+ @response.code = 403
85
+ @response.should_not be_valid
86
+ end
87
+ end
77
88
  end
78
89
  end
metadata CHANGED
@@ -5,22 +5,37 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 9
8
- - 1
9
- version: 0.9.1
8
+ - 2
9
+ version: 0.9.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Hakan Ensari
13
- - Piotr Laszewski
13
+ - "Piotr \xC5\x81aszewski"
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-23 00:00:00 +01:00
18
+ date: 2010-10-06 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: nokogiri
22
+ name: activesupport
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 2
30
+ - 3
31
+ - 2
32
+ version: 2.3.2
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: nokogiri
38
+ requirement: &id002 !ruby/object:Gem::Requirement
24
39
  none: false
25
40
  requirements:
26
41
  - - ~>
@@ -32,10 +47,10 @@ dependencies:
32
47
  version: 1.4.0
33
48
  type: :runtime
34
49
  prerelease: false
35
- version_requirements: *id001
50
+ version_requirements: *id002
36
51
  - !ruby/object:Gem::Dependency
37
52
  name: curb
38
- requirement: &id002 !ruby/object:Gem::Requirement
53
+ requirement: &id003 !ruby/object:Gem::Requirement
39
54
  none: false
40
55
  requirements:
41
56
  - - ~>
@@ -47,35 +62,106 @@ dependencies:
47
62
  version: 0.7.0
48
63
  type: :runtime
49
64
  prerelease: false
50
- version_requirements: *id002
51
- description: A paper-thin Ruby wrapper to the Amazon Product Advertising API
52
- email: code@papercavalier.com
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ name: rake
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: *id004
79
+ - !ruby/object:Gem::Dependency
80
+ name: rdiscount
81
+ requirement: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: *id005
92
+ - !ruby/object:Gem::Dependency
93
+ name: rspec
94
+ requirement: &id006 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - "="
98
+ - !ruby/object:Gem::Version
99
+ segments:
100
+ - 2
101
+ - 0
102
+ - 0
103
+ - rc
104
+ version: 2.0.0.rc
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: *id006
108
+ - !ruby/object:Gem::Dependency
109
+ name: throttler
110
+ requirement: &id007 !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ segments:
116
+ - 0
117
+ version: "0"
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: *id007
121
+ - !ruby/object:Gem::Dependency
122
+ name: sdoc-helpers
123
+ requirement: &id008 !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ segments:
129
+ - 0
130
+ version: "0"
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: *id008
134
+ description: A Ruby wrapper to the Amazon Product Advertising API
135
+ email:
136
+ - code@papercavalier.com
53
137
  executables: []
54
138
 
55
139
  extensions: []
56
140
 
57
- extra_rdoc_files:
58
- - LICENSE
59
- - README.markdown
141
+ extra_rdoc_files: []
142
+
60
143
  files:
61
- - LICENSE
62
- - README.markdown
63
- - lib/sucker.rb
64
- - lib/sucker/active_support/core_ext/object/blank.rb
65
- - lib/sucker/active_support/xml_mini/nokogiri.rb
66
144
  - lib/sucker/request.rb
67
145
  - lib/sucker/response.rb
68
146
  - lib/sucker/stub.rb
147
+ - lib/sucker/version.rb
148
+ - lib/sucker.rb
149
+ - LICENSE
150
+ - README.markdown
151
+ - spec/fixtures/asins.txt
69
152
  - spec/integration/errors_spec.rb
70
153
  - spec/integration/france_spec.rb
71
154
  - spec/integration/images_spec.rb
72
155
  - spec/integration/item_lookup_spec.rb
156
+ - spec/integration/item_search_spec.rb
73
157
  - spec/integration/japan_spec.rb
74
158
  - spec/integration/related_items_spec.rb
75
159
  - spec/integration/seller_listing_search_spec.rb
76
160
  - spec/integration/twenty_items_in_one_request_spec.rb
77
161
  - spec/spec_helper.rb
162
+ - spec/support/amazon.yml.example
78
163
  - spec/support/amazon_credentials.rb
164
+ - spec/support/asins.rb
79
165
  - spec/support/sucker.rb
80
166
  - spec/unit/sucker/request_spec.rb
81
167
  - spec/unit/sucker/response_spec.rb
@@ -95,7 +181,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
95
181
  requirements:
96
182
  - - ">="
97
183
  - !ruby/object:Gem::Version
98
- hash: 994351938248353578
184
+ hash: -55576138892431507
99
185
  segments:
100
186
  - 0
101
187
  version: "0"
@@ -105,26 +191,32 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
191
  - - ">="
106
192
  - !ruby/object:Gem::Version
107
193
  segments:
108
- - 0
109
- version: "0"
194
+ - 1
195
+ - 3
196
+ - 7
197
+ version: 1.3.7
110
198
  requirements: []
111
199
 
112
200
  rubyforge_project:
113
201
  rubygems_version: 1.3.7
114
202
  signing_key:
115
203
  specification_version: 3
116
- summary: A paper-thin Ruby wrapper to the Amazon Product Advertising API
204
+ summary: A Ruby wrapper to the Amazon Product Advertising API
117
205
  test_files:
206
+ - spec/fixtures/asins.txt
118
207
  - spec/integration/errors_spec.rb
119
208
  - spec/integration/france_spec.rb
120
209
  - spec/integration/images_spec.rb
121
210
  - spec/integration/item_lookup_spec.rb
211
+ - spec/integration/item_search_spec.rb
122
212
  - spec/integration/japan_spec.rb
123
213
  - spec/integration/related_items_spec.rb
124
214
  - spec/integration/seller_listing_search_spec.rb
125
215
  - spec/integration/twenty_items_in_one_request_spec.rb
126
216
  - spec/spec_helper.rb
217
+ - spec/support/amazon.yml.example
127
218
  - spec/support/amazon_credentials.rb
219
+ - spec/support/asins.rb
128
220
  - spec/support/sucker.rb
129
221
  - spec/unit/sucker/request_spec.rb
130
222
  - spec/unit/sucker/response_spec.rb
@@ -1,77 +0,0 @@
1
- # http://github.com/rails/rails/blob/v3.0.0/activesupport/core_ext/object/blank.rb
2
- class Object
3
- # An object is blank if it's false, empty, or a whitespace string.
4
- # For example, "", " ", +nil+, [], and {} are blank.
5
- #
6
- # This simplifies:
7
- #
8
- # if !address.nil? && !address.empty?
9
- #
10
- # ...to:
11
- #
12
- # if !address.blank?
13
- def blank?
14
- respond_to?(:empty?) ? empty? : !self
15
- end
16
-
17
- # An object is present if it's not blank.
18
- def present?
19
- !blank?
20
- end
21
-
22
- # Returns object if it's #present? otherwise returns nil.
23
- # object.presence is equivalent to object.present? ? object : nil.
24
- #
25
- # This is handy for any representation of objects where blank is the same
26
- # as not present at all. For example, this simplifies a common check for
27
- # HTTP POST/query parameters:
28
- #
29
- # state = params[:state] if params[:state].present?
30
- # country = params[:country] if params[:country].present?
31
- # region = state || country || 'US'
32
- #
33
- # ...becomes:
34
- #
35
- # region = params[:state].presence || params[:country].presence || 'US'
36
- def presence
37
- self if present?
38
- end
39
- end
40
-
41
- class NilClass #:nodoc:
42
- def blank?
43
- true
44
- end
45
- end
46
-
47
- class FalseClass #:nodoc:
48
- def blank?
49
- true
50
- end
51
- end
52
-
53
- class TrueClass #:nodoc:
54
- def blank?
55
- false
56
- end
57
- end
58
-
59
- class Array #:nodoc:
60
- alias_method :blank?, :empty?
61
- end
62
-
63
- class Hash #:nodoc:
64
- alias_method :blank?, :empty?
65
- end
66
-
67
- class String #:nodoc:
68
- def blank?
69
- self !~ /\S/
70
- end
71
- end
72
-
73
- class Numeric #:nodoc:
74
- def blank?
75
- false
76
- end
77
- end
@@ -1,77 +0,0 @@
1
- # http://github.com/rails/rails/blob/v3.0.0/activesupport/lib/active_support/xml_mini/nokogiri.rb
2
- module Sucker
3
- module ActiveSupport
4
- module XmlMini_Nokogiri #:nodoc:
5
- extend self
6
-
7
- # Parse an XML Document string or IO into a simple hash using libxml / nokogiri.
8
- # data::
9
- # XML Document string or IO to parse
10
- def parse(data)
11
- if !data.respond_to?(:read)
12
- data = StringIO.new(data || '')
13
- end
14
-
15
- char = data.getc
16
- if char.nil?
17
- {}
18
- else
19
- data.ungetc(char)
20
- doc = Nokogiri::XML(data)
21
- raise doc.errors.first if doc.errors.length > 0
22
- doc.to_hash
23
- end
24
- end
25
-
26
- module Conversions #:nodoc:
27
- module Document #:nodoc:
28
- def to_hash
29
- root.to_hash
30
- end
31
- end
32
-
33
- module Node #:nodoc:
34
- CONTENT_ROOT = '__content__'.freeze
35
-
36
- # Convert XML document to hash
37
- #
38
- # hash::
39
- # Hash to merge the converted element into.
40
- def to_hash(hash={})
41
- node_hash = {}
42
-
43
- # Insert node hash into parent hash correctly.
44
- case hash[name]
45
- when Array then hash[name] << node_hash
46
- when Hash then hash[name] = [hash[name], node_hash]
47
- when nil then hash[name] = node_hash
48
- end
49
-
50
- # Handle child elements
51
- children.each do |c|
52
- if c.element?
53
- c.to_hash(node_hash)
54
- elsif c.text? || c.cdata?
55
- node_hash[CONTENT_ROOT] ||= ''
56
- node_hash[CONTENT_ROOT] << c.content
57
- end
58
- end
59
-
60
- # Remove content node if it is blank and there are child tags
61
- if node_hash.length > 1 && node_hash[CONTENT_ROOT].blank?
62
- node_hash.delete(CONTENT_ROOT)
63
- end
64
-
65
- # Handle attributes
66
- attribute_nodes.each { |a| node_hash[a.node_name] = a.value }
67
-
68
- hash
69
- end
70
- end
71
- end
72
-
73
- Nokogiri::XML::Document.send(:include, Conversions::Document)
74
- Nokogiri::XML::Node.send(:include, Conversions::Node)
75
- end
76
- end
77
- end