rattlecache 0.1 → 0.2

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.
data/.gemtest ADDED
File without changes
data/Rakefile CHANGED
@@ -1,5 +1,13 @@
1
1
  require 'bundler'
2
2
  require 'rspec/core/rake_task'
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << 'test'
7
+ end
8
+
9
+ desc "Run tests"
10
+ task :default => :test
3
11
 
4
12
  Bundler::GemHelper.install_tasks
5
13
  RSpec::Core::RakeTask.new(:spec) do |t|
@@ -40,9 +40,17 @@ module Rattlecache
40
40
  #puts "Debug: filesystem posted #{object[:key]}"
41
41
  end
42
42
 
43
+ def delete(object_key)
44
+ begin
45
+ File.delete(@prefix+object_key)
46
+ rescue Errno::ENOENT
47
+
48
+ end
49
+ end
50
+
43
51
  def open_file(objectKey,how="r")
44
52
  begin
45
- Dir.mkdir(@prefix) unless File.directory?(@prefix)
53
+ make_sure_dir_exists()
46
54
  File.open(@prefix+objectKey,how)
47
55
  rescue
48
56
  # raise this to the caller
@@ -50,6 +58,17 @@ module Rattlecache
50
58
  end
51
59
  end
52
60
 
61
+ def make_sure_dir_exists()
62
+ Dir.mkdir(@prefix) unless File.directory?(@prefix)
63
+ end
64
+
65
+ def flush()
66
+ make_sure_dir_exists()
67
+ Dir.foreach(@prefix) do |file|
68
+ File.delete(@prefix+file) unless File.directory?(file)
69
+ end
70
+ end
71
+
53
72
  end
54
73
  end
55
74
  end
data/lib/rattlecache.rb CHANGED
@@ -25,7 +25,7 @@ module Rattlecache
25
25
  # @param header [Hash]
26
26
  def get(url, header = nil)
27
27
  @header = header
28
- @header['User-Agent'] = @header['User-Agent'] << " (with rattlecache)"
28
+ @header['User-Agent'] = @header['User-Agent'] << " (with rattlecache)" unless header.nil?
29
29
  #puts "Cache class gets you: #{objectKey}"
30
30
 
31
31
  # what to do with this request?
@@ -71,6 +71,14 @@ module Rattlecache
71
71
  @backend.post({:key => sanitize(object[:key]), :header => object[:header], :data => object[:data]})
72
72
  end
73
73
 
74
+ def delete(url)
75
+ @backend.delete(sanitize(url))
76
+ end
77
+
78
+ def flush
79
+ @backend.flush()
80
+ end
81
+
74
82
  # @param headerline [Hash]
75
83
  # @param mtime [Time]
76
84
  # @return [TrueClass|FalseClass]
@@ -110,6 +118,9 @@ module Rattlecache
110
118
  # @param query [String]
111
119
  # @return [String]
112
120
  def sort_params(query)
121
+ if query.nil? or query.empty?
122
+ return ""
123
+ end
113
124
  q = Hash.new
114
125
  query.split("&").each do |parampair|
115
126
  q[parampair.split("=")[0]] = parampair.split("=")[1]
data/rattlecache.gemspec CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "rattlecache"
6
- s.version = "0.1"
6
+ s.version = "0.2"
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["Marv Cool"]
9
9
  s.email = "marv@hostin.is"
@@ -0,0 +1,87 @@
1
+ require "test/unit"
2
+ require "rattlecache"
3
+
4
+ class MyTest < Test::Unit::TestCase
5
+
6
+ # Called before every test method runs. Can be used
7
+ # to set up fixture information.
8
+ def setup
9
+ @cache = Rattlecache::Cache.new(:filesystem)
10
+ @prefix = "/tmp/rattlecache/"
11
+
12
+ end
13
+
14
+ # Called after every test method runs. Can be used to tear
15
+ # down fixture information.
16
+
17
+ def teardown
18
+ # Do nothing
19
+ end
20
+
21
+ def test_flush()
22
+ @cache.flush
23
+ assert(File.directory?(@prefix))
24
+ assert(Dir.entries(@prefix) == [".",".."])
25
+ end
26
+
27
+
28
+ def test_get_nonexisting_object()
29
+ @cache.flush
30
+ res = @cache.get("http://example.com/some/path/some.file")
31
+ assert_instance_of(Hash,res)
32
+ assert_equal(404,res[:status])
33
+ end
34
+
35
+ def test_post()
36
+ @cache.flush
37
+ testobject = {
38
+ :key => "http://example.com/some/path/some.file",
39
+ :header => {"foo" => "bar-thishastobethere-baz", "date" => Time.now(), "content-type" => "text/plain"},
40
+ :data => %{Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
41
+ sed diam nonumy eirmod tempor invidunt ut labore et dolore
42
+ magna aliquyam erat, sed diam voluptua. At vero eos et accusam
43
+ et justo duo dolores et ea rebum. Stet clita kasd gubergren,
44
+ no sea takimata sanctus est Lorem ipsum dolor sit amet.}
45
+ }
46
+ testobject_key = @cache.sanitize(testobject[:key])
47
+ @cache.post(testobject)
48
+ assert(Dir.entries(@prefix).include?(testobject_key))
49
+
50
+ # posting this a second time. What happens than?
51
+ @cache.post(testobject)
52
+ assert(Dir.entries(@prefix).include?(testobject_key))
53
+
54
+ end
55
+
56
+ def test_get()
57
+ testobject = {
58
+ :key => "http://example.com/some/path/some.file",
59
+ :header => {"foo" => "bar-thishastobethere-baz", "date" => Time.now(), "content-type" => "text/plain"},
60
+ :data => %{Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
61
+ sed diam nonumy eirmod tempor invidunt ut labore et dolore
62
+ magna aliquyam erat, sed diam voluptua. At vero eos et accusam
63
+ et justo duo dolores et ea rebum. Stet clita kasd gubergren,
64
+ no sea takimata sanctus est Lorem ipsum dolor sit amet.}
65
+ }
66
+ @cache.post(testobject)
67
+ res = @cache.get(testobject[:key])
68
+ assert_instance_of(Hash,res)
69
+ # assert that this is 404, cause the object has no validation information
70
+ assert_equal(404,res[:status])
71
+
72
+ testobject[:header] = {
73
+ "foo" => ["bar-thishastobethere-baz"],
74
+ "date" => [Time.now()],
75
+ "content-type" => ["text/plain"],
76
+ "cache-control" => ["max-age=2592000"]
77
+ }
78
+
79
+ @cache.post(testobject)
80
+ res = @cache.get(testobject[:key])
81
+ assert_instance_of(Hash,res)
82
+ # assert that this is 200, cause the object has "cache-control" => "max-age=2592000"
83
+ assert_equal(200,res[:status])
84
+
85
+ end
86
+
87
+ end
@@ -0,0 +1,66 @@
1
+ require "test/unit"
2
+ require "rattlecache"
3
+
4
+ class CacheTest < Test::Unit::TestCase
5
+
6
+ # Called before every test method runs. Can be used
7
+ # to set up fixture information.
8
+ def setup
9
+ @cache = Rattlecache::Cache.new()
10
+ end
11
+
12
+ # Called after every test method runs. Can be used to tear
13
+ # down fixture information.
14
+
15
+ def teardown
16
+ # Do nothing
17
+ end
18
+
19
+ def test_sort_params()
20
+ params = "a=1&z=zzz&car=a,b,or,c&bar=2&1=firstofall"
21
+ sorted_params = "?1=firstofall&a=1&bar=2&car=a,b,or,c&z=zzz"
22
+ assert_equal(sorted_params,@cache.sort_params(params))
23
+ end
24
+
25
+ def test_request_type()
26
+ input = "http://eu.battle.net/api/wow/item/25"
27
+ type = "item"
28
+ assert_equal(type,@cache.request_type(input))
29
+
30
+ input = "http://eu.battle.net/api/wow/guild/nathrezim/Badeverein%20Orgrimmar?fields=members"
31
+ type = "guild"
32
+ assert_equal(type,@cache.request_type(input))
33
+
34
+ input = "http://eu.battle.net/api/wow/auction/data/nathrezim"
35
+ type = /auction.*/
36
+ assert_match(type,@cache.request_type(input))
37
+
38
+ input = "http://eu.battle.net/auction-data/nathrezim/auctions.json"
39
+ type = /auction.*/
40
+ assert_match(type,@cache.request_type(input))
41
+
42
+ input = "http://eu.battle.net/api/wow/character/nathrezim/schnecke?fields=items"
43
+ type = "character"
44
+ assert_equal(type,@cache.request_type(input))
45
+ end
46
+
47
+ def test_needs_request_with_given_time?()
48
+ # an our ago + 30 minutes should be O.K.
49
+ assert(@cache.needs_request_with_given_time?(60*30,Time.now-(60*60)))
50
+ end
51
+
52
+ def test_sanitize()
53
+ input = "http://eu.battle.net/api/wow/character/nathrezim/schnecke?fields=items&locale=en_GB"
54
+ exp = "0d85213fdb08da5936e1783f5dde60dbb159164a2d084b157773e3067bcdac88"
55
+ assert_equal(exp,@cache.sanitize(input))
56
+
57
+ input_with_unsorted_params = "http://eu.battle.net/api/wow/character/nathrezim/schnecke?locale=en_GB&fields=items"
58
+ assert_equal(@cache.sanitize(input_with_unsorted_params),@cache.sanitize(input))
59
+ end
60
+
61
+ def test_has_fields?()
62
+ assert(@cache.has_fields?("http://eu.battle.net/api/wow/character/nathrezim/schnecke?fields=items&locale=en_GB"))
63
+ assert_instance_of(FalseClass,@cache.has_fields?("http://eu.battle.net/api/wow/character/nathrezim/schnecke?locale=en_GB"))
64
+ end
65
+
66
+ end
metadata CHANGED
@@ -4,8 +4,8 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- version: "0.1"
7
+ - 2
8
+ version: "0.2"
9
9
  platform: ruby
10
10
  authors:
11
11
  - Marv Cool
@@ -38,6 +38,7 @@ extensions: []
38
38
  extra_rdoc_files: []
39
39
 
40
40
  files:
41
+ - .gemtest
41
42
  - .gitignore
42
43
  - Gemfile
43
44
  - LICENSE
@@ -49,6 +50,8 @@ files:
49
50
  - lib/caches/Fieldsrequestcache.rb
50
51
  - lib/rattlecache.rb
51
52
  - rattlecache.gemspec
53
+ - test/test_Backend_Filesystem.rb
54
+ - test/test_cache.rb
52
55
  has_rdoc: true
53
56
  homepage: https://github.com/MrMarvin/rattlcache/wiki
54
57
  licenses: []
@@ -81,5 +84,6 @@ rubygems_version: 1.3.7
81
84
  signing_key:
82
85
  specification_version: 3
83
86
  summary: A smart caching system for battlenet API Requests.
84
- test_files: []
85
-
87
+ test_files:
88
+ - test/test_Backend_Filesystem.rb
89
+ - test/test_cache.rb