dpickett-amazon_associate 0.6.3 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.swp
@@ -15,7 +15,7 @@ instead you just need to change the element path.
15
15
  Version: 0.6.1
16
16
 
17
17
  == WANTS
18
- * instance based refactoring (singletons are not ideal here)
18
+ * instance based refactoring (singletons are not ideal here)
19
19
 
20
20
  == INSTALLATION
21
21
 
@@ -26,7 +26,9 @@ Version: 0.6.1
26
26
  require 'amazon_associate'
27
27
 
28
28
  # set the default options; options will be camelized and converted to REST request parameters.
29
- AmazonAssociate::Request.options = {:aWS_access_key_id => [your developer token]}
29
+ AmazonAssociate::Request.configure do |options|
30
+ options[:aWS_access_key_id] = [your developer token]
31
+ end
30
32
 
31
33
  # options provided on method call will merge with the default options
32
34
  res = AmazonAssociate::Request.item_search('ruby', {:response_group => 'Medium', :sort => 'salesrank'})
@@ -86,23 +88,28 @@ http://www.awszone.com/scratchpads/aws/ecs.us/index.aws
86
88
 
87
89
  == CACHING
88
90
 
89
- Filesystem caching is now available.
91
+ Filesystem caching is now available.
90
92
 
91
- AmazonAssociate::Request.options = {:aWS_access_key_id => [your developer token], :caching_strategy => :filesystem,
92
- :caching_options => {:disk_quota => 200, :cache_path => <path where you want to store requests>, :sweep_frequency => 4}
93
- }
93
+ AmazonAssociate::Request.configure do |options|
94
+ options[:aWS_access_key_id] = [your developer token]
95
+ options[:caching_strategy] = :filesystem
96
+ options[:caching_options] = {
97
+ :disk_quota => 200,
98
+ :cache_path => <path where you want to store requests>,
99
+ :sweep_frequency => 4
100
+ }
101
+ end
94
102
 
95
- The above command will cache up to 200MB of requests. It will purge the cache every 4 hours or when the disk quota has been exceeded.
103
+ The above command will cache up to 200MB of requests. It will purge the cache every 4 hours or when the disk quota has been exceeded.
96
104
 
97
- Every request will be stored in the cache path. On every request, AmazonAssociate::Request will check for the presence of the cached file before querying Amazon directly.
105
+ Every request will be stored in the cache path. On every request, AmazonAssociate::Request will check for the presence of the cached file before querying Amazon directly.
98
106
 
99
107
  == LINKS
100
108
 
101
109
  * http://amazon-ecs.rubyforge.org
102
- * http://www.pluitsolutions.com/amazon-ecs
103
110
 
104
111
  == LICENSE
105
112
 
106
113
  (The MIT License)
107
114
 
108
- Copyright (c) 2008 Dan Pickett, Enlight Solutions, Inc.
115
+ Copyright (c) 2008 Dan Pickett, Enlight Solutions, Inc.
data/Rakefile CHANGED
@@ -16,12 +16,12 @@ Rake::TestTask.new(:test) do |t|
16
16
  t.warning = true
17
17
  end
18
18
 
19
- desc "Generate documentation for the factory_girl plugin."
19
+ desc "Generate documentation for the amazon_associate plugin."
20
20
  Rake::RDocTask.new(:rdoc) do |rdoc|
21
21
  rdoc.rdoc_dir = "rdoc"
22
22
  rdoc.title = "amazon_associate"
23
23
  rdoc.options << "--line-numbers" << "--inline-source" << "--main" << "README.textile"
24
- rdoc.rdoc_files.include("README", "CHANGELOG")
24
+ rdoc.rdoc_files.include("README.rdoc", "CHANGELOG")
25
25
  rdoc.rdoc_files.include("lib/**/*.rb")
26
26
  end
27
27
 
@@ -32,7 +32,7 @@ begin
32
32
  gemspec.summary = "Amazon Associates API Interface using Hpricot"
33
33
  gemspec.email = "dpickett@enlightsolutions.com"
34
34
  gemspec.homepage = "http://github.com/dpickett/amazon_associate"
35
- gemspec.description = "TODO"
35
+ gemspec.description = "interfaces with Amazon Associate's API using Hpricot"
36
36
  gemspec.authors = ["Dan Pickett"]
37
37
  end
38
38
  rescue LoadError
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :patch: 5
3
+ :major: 0
4
+ :minor: 6
@@ -2,23 +2,25 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{amazon_associate}
5
- s.version = "0.6.3"
5
+ s.version = "0.6.4"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Dan Pickett"]
9
- s.date = %q{2009-05-15}
10
- s.description = %q{TODO}
9
+ s.date = %q{2009-06-30}
10
+ s.description = %q{interfaces with Amazon Associate's API using Hpricot}
11
11
  s.email = %q{dpickett@enlightsolutions.com}
12
12
  s.extra_rdoc_files = [
13
- "README"
13
+ "README.rdoc"
14
14
  ]
15
15
  s.files = [
16
16
  ".autotest",
17
+ ".gitignore",
17
18
  ".project",
18
19
  "CHANGELOG",
19
20
  "MIT-LICENSE",
20
- "README",
21
+ "README.rdoc",
21
22
  "Rakefile",
23
+ "VERSION.yml",
22
24
  "amazon_associate.gemspec",
23
25
  "lib/amazon_associate.rb",
24
26
  "lib/amazon_associate/cache_factory.rb",
@@ -9,6 +9,7 @@ module AmazonAssociate
9
9
  unless self.strategy_class_hash.keys.include?(options[:caching_strategy])
10
10
  raise AmazonAssociate::ConfigurationError, "Invalid caching strategy"
11
11
  end
12
+
12
13
  strategy_class_hash[options[:caching_strategy]].initialize_options(options)
13
14
  end
14
15
 
@@ -9,106 +9,101 @@ module AmazonAssociate
9
9
 
10
10
  #frequency of sweeping in hours
11
11
  DEFAULT_SWEEP_FREQUENCY = 2
12
-
13
- def self.cache(request, response)
14
- path = self.cache_path
15
- cached_filename = Digest::SHA1.hexdigest(response.request_url)
16
- cached_folder = cached_filename[0..2]
17
12
 
18
- FileUtils.mkdir_p(File.join(path, cached_folder, cached_folder))
13
+ class << self
14
+ attr_accessor :cache_path
15
+ attr_accessor :disk_quota
16
+ attr_accessor :sweep_frequency
17
+
18
+ def cache(request, response)
19
+ path = self.cache_path
20
+ cached_filename = Digest::SHA1.hexdigest(response.request_url)
21
+ cached_folder = cached_filename[0..2]
22
+
23
+ FileUtils.mkdir_p(File.join(path, cached_folder, cached_folder))
24
+
25
+ cached_file = File.open(File.join(path, cached_folder, cached_filename), "w")
26
+ cached_file.puts response.doc.to_s
27
+ cached_file.close
28
+ end
19
29
 
20
- cached_file = File.open(File.join(path, cached_folder, cached_filename), "w")
21
- cached_file.puts response.doc.to_s
22
- cached_file.close
23
- end
24
-
25
- def self.get(request)
26
- path = self.cache_path
27
- cached_filename = Digest::SHA1.hexdigest(request)
28
- file_path = File.join(path, cached_filename[0..2], cached_filename)
29
- if FileTest.exists?(file_path)
30
- File.read(file_path).chomp
31
- else
32
- nil
30
+ def get(request)
31
+ path = self.cache_path
32
+ cached_filename = Digest::SHA1.hexdigest(request)
33
+ file_path = File.join(path, cached_filename[0..2], cached_filename)
34
+ if FileTest.exists?(file_path)
35
+ File.read(file_path).chomp
36
+ else
37
+ nil
38
+ end
33
39
  end
34
- end
35
-
36
- def self.initialize_options(options)
37
- #check for required options
38
- if options[:caching_options].nil?
39
- raise AmazonAssociate::ConfigurationError, "You must specify caching options for filesystem caching: :cache_path is required"
40
+
41
+ def initialize_options(options)
42
+ #check for required options
43
+ if options[:caching_options].nil? || options[:caching_options][:cache_path].nil?
44
+ raise AmazonAssociate::ConfigurationError, "You must specify caching options for filesystem caching: :cache_path is required"
45
+ end
46
+
47
+ #default disk quota to 200MB
48
+ Filesystem.disk_quota = options[:caching_options][:disk_quota] || DEFAULT_DISK_QUOTA
49
+
50
+ Filesystem.sweep_frequency = options[:caching_options][:sweep_frequency] || DEFAULT_SWEEP_FREQUENCY
51
+
52
+ Filesystem.cache_path = options[:caching_options][:cache_path]
53
+
54
+ if Filesystem.cache_path.nil? || !File.directory?(Filesystem.cache_path)
55
+ raise AmazonAssociate::ConfigurationError, "You must specify a cache path for filesystem caching"
56
+ end
57
+ return options
40
58
  end
41
59
 
42
- #default disk quota to 200MB
43
- @@disk_quota = options[:caching_options][:disk_quota] || DEFAULT_DISK_QUOTA
60
+ def sweep
61
+ perform_sweep if must_sweep?
62
+ end
44
63
 
45
- @@sweep_frequency = options[:caching_options][:sweep_frequency] || DEFAULT_SWEEP_FREQUENCY
64
+ private
65
+ def perform_sweep
66
+ FileUtils.rm_rf(Dir.glob("#{Filesystem.cache_path}/*"))
67
+
68
+ timestamp_sweep_performance
69
+ end
46
70
 
47
- @@cache_path = options[:caching_options][:cache_path]
71
+ def timestamp_sweep_performance
72
+ #remove the timestamp
73
+ FileUtils.rm_rf(timestamp_filename)
74
+
75
+ #create a new one its place
76
+ timestamp = File.open(timestamp_filename, "w")
77
+ timestamp.puts(Time.now)
78
+ timestamp.close
79
+ end
48
80
 
49
- if @@cache_path.nil? || !File.directory?(@@cache_path)
50
- raise AmazonAssociate::ConfigurationError, "You must specify a cache path for filesystem caching"
81
+ def must_sweep?
82
+ sweep_time_expired? || disk_quota_exceeded?
51
83
  end
52
84
 
53
- return options
54
- end
55
-
56
- def self.sweep
57
- self.perform_sweep if must_sweep?
58
- end
59
-
60
- def self.disk_quota
61
- @@disk_quota
62
- end
63
-
64
- def self.sweep_frequency
65
- @@sweep_frequency
66
- end
67
-
68
- def self.cache_path
69
- @@cache_path
70
- end
71
-
72
- private
73
- def self.perform_sweep
74
- FileUtils.rm_rf(Dir.glob("#{@@cache_path}/*"))
85
+ def sweep_time_expired?
86
+ FileTest.exists?(timestamp_filename) && Time.parse(File.read(timestamp_filename).chomp) < Time.now - (sweep_frequency * 3600)
87
+ end
75
88
 
76
- self.timestamp_sweep_performance
77
- end
78
-
79
- def self.timestamp_sweep_performance
80
- #remove the timestamp
81
- FileUtils.rm_rf(self.timestamp_filename)
89
+ def disk_quota_exceeded?
90
+ cache_size > Filesystem.disk_quota
91
+ end
82
92
 
83
- #create a new one its place
84
- timestamp = File.open(self.timestamp_filename, "w")
85
- timestamp.puts(Time.now)
86
- timestamp.close
87
- end
88
-
89
- def self.must_sweep?
90
- sweep_time_expired? || disk_quota_exceeded?
91
- end
92
-
93
- def self.sweep_time_expired?
94
- FileTest.exists?(timestamp_filename) && Time.parse(File.read(timestamp_filename).chomp) < Time.now - (sweep_frequency * 3600)
95
- end
96
-
97
- def self.disk_quota_exceeded?
98
- cache_size > @@disk_quota
99
- end
100
-
101
- def self.timestamp_filename
102
- File.join(self.cache_path, ".amz_timestamp")
103
- end
104
-
105
- def self.cache_size
106
- size = 0
107
- Find.find(@@cache_path) do|f|
108
- size += File.size(f) if File.file?(f)
93
+ def timestamp_filename
94
+ File.join(Filesystem.cache_path, ".amz_timestamp")
95
+ end
96
+
97
+ def cache_size
98
+ size = 0
99
+ Find.find(Filesystem.cache_path) do|f|
100
+ size += File.size(f) if File.file?(f)
101
+ end
102
+ size / 1000000
109
103
  end
110
- size / 1000000
104
+
111
105
  end
106
+
112
107
  end
113
108
  end
114
109
  end
@@ -29,6 +29,5 @@ class AmazonAssociate::CacheTest < Test::Unit::TestCase
29
29
  end
30
30
  end
31
31
 
32
-
33
32
  end
34
- end
33
+ end
@@ -27,6 +27,15 @@ class AmazonAssociate::CachingStrategy::FilesystemTest < Test::Unit::TestCase
27
27
  end
28
28
  end
29
29
  end
30
+
31
+ should "raise an exception when a cache_path is nil" do
32
+ assert_raise(AmazonAssociate::ConfigurationError) do
33
+ AmazonAssociate::Request.configure do |options|
34
+ options[:caching_strategy] = :filesystem
35
+ options[:caching_options] = {}
36
+ end
37
+ end
38
+ end
30
39
 
31
40
  should "set default values for disk_quota and sweep_frequency" do
32
41
  AmazonAssociate::Request.configure do |options|
@@ -4,6 +4,7 @@ class AmazonAssociate::CartTest < Test::Unit::TestCase
4
4
 
5
5
  # create a cart to store cart_id and hmac for add, get, modify, and clear tests
6
6
  def setup
7
+ sleep(2)
7
8
  @asin = "0672328844"
8
9
  resp = AmazonAssociate::Request.cart_create(@asin)
9
10
  @cart_id = resp.doc.get_elements_by_tag_name("cartid").inner_text
@@ -86,4 +87,4 @@ class AmazonAssociate::CartTest < Test::Unit::TestCase
86
87
  assert_not_nil resp.doc.get_elements_by_tag_name("hmac").inner_text
87
88
  end
88
89
 
89
- end
90
+ end
@@ -2,9 +2,9 @@ require File.dirname(__FILE__) + "/../test_helper"
2
2
 
3
3
  class AmazonAssociate::RequestTest < Test::Unit::TestCase
4
4
  def setup
5
+ sleep(1)
5
6
  AmazonAssociate::Request.configure do |options|
6
7
  options[:response_group] = "Large"
7
-
8
8
  end
9
9
  end
10
10
 
@@ -105,4 +105,4 @@ class AmazonAssociate::RequestTest < Test::Unit::TestCase
105
105
  assert_equal "Dave Thomas", authors.first.get
106
106
  end
107
107
 
108
- end
108
+ end
data/test/test_helper.rb CHANGED
@@ -10,7 +10,7 @@ require 'amazon_associate'
10
10
 
11
11
 
12
12
  AmazonAssociate::Request.configure do |options|
13
- options[:aWS_access_key_id] = ""
13
+ options[:aWS_access_key_id] = ENV["AWS_ACCESS_KEY"] || ""
14
14
 
15
15
  #raise exception if user has not entered their access key
16
16
  if options[:aWS_access_key_id] == ""
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dpickett-amazon_associate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Pickett
@@ -9,25 +9,27 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-15 00:00:00 -07:00
12
+ date: 2009-06-30 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
- description: TODO
16
+ description: interfaces with Amazon Associate's API using Hpricot
17
17
  email: dpickett@enlightsolutions.com
18
18
  executables: []
19
19
 
20
20
  extensions: []
21
21
 
22
22
  extra_rdoc_files:
23
- - README
23
+ - README.rdoc
24
24
  files:
25
25
  - .autotest
26
+ - .gitignore
26
27
  - .project
27
28
  - CHANGELOG
28
29
  - MIT-LICENSE
29
- - README
30
+ - README.rdoc
30
31
  - Rakefile
32
+ - VERSION.yml
31
33
  - amazon_associate.gemspec
32
34
  - lib/amazon_associate.rb
33
35
  - lib/amazon_associate/cache_factory.rb