sinatra-diskcache 0.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/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.swp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in sinatra-diskcache.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,8 @@
1
+ # Sinatra-DiskCache
2
+
3
+ Allows to cache heavy-load query results on the disk.
4
+
5
+ ## Install
6
+
7
+ gem install sinatra-diskcache
8
+
@@ -0,0 +1,85 @@
1
+ module Sinatra
2
+ module DiskCache
3
+ module Helpers
4
+ def diskcache filename, &block
5
+ unless settings.diskcache_enabled
6
+ if block_given?
7
+ block.call path_to filename
8
+ return resulting_name filename
9
+ end
10
+ end
11
+
12
+ file = cache_get filename
13
+
14
+ if file
15
+ cache_log "get: #{filename}"
16
+ return resulting_name File.basename file.path
17
+ elsif block_given?
18
+ cache_log "block invoked for #{filename}"
19
+ block.call path_to filename# if block_given?
20
+ return resulting_name filename
21
+ end
22
+ rescue => e
23
+ throw e if settings.development? or settings.show_exceptions
24
+
25
+ if block_given?
26
+ block.call path_to filename
27
+ return resulting_name filename
28
+ end
29
+ end
30
+
31
+ private
32
+ def cache_log msg
33
+ puts "[sinatra-diskcache] #{msg}" if settings.diskcache_logging
34
+ end
35
+
36
+ private
37
+ def path_to filename
38
+ File.join settings.diskcache_path, filename
39
+ end
40
+
41
+ def resulting_name filename
42
+ return settings.diskcache_full_paths == true ? path_to( filename ) : filename
43
+ end
44
+
45
+ def cache_get filename
46
+ filepath = path_to filename
47
+ if File.exist? filepath
48
+ if ( File.ctime( filepath ) + settings.diskcache_expiry_period > Time.now ) or not settings.diskcache_expiry_enabled
49
+ begin
50
+ cache_log "found unexpirable file #{filepath}"
51
+ return File.new filepath, 'r'
52
+ rescue IOError => e
53
+ cache_log "can't open #{filename}, skipping"
54
+ end
55
+ else
56
+ cache_log "#{filename} expired, wiping"
57
+ File.delete filepath
58
+ nil
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ def self.registered app
65
+ app.helpers DiskCache::Helpers
66
+
67
+ # defaults
68
+ app.set :diskcache_enabled, true
69
+ app.set :diskcache_logging, true if app.development?
70
+ app.set :diskcache_expiry_enabled, true
71
+ app.set :diskcache_expiry_period, 3600
72
+ app.set :diskcache_full_paths, true
73
+ app.set :diskcache_path, "./diskcache"
74
+
75
+ begin
76
+ Dir.mkdir app.settings.diskcache_path unless File.exist? app.settings.diskcache_path
77
+ rescue SystemCallError => e
78
+ cache_log 'cant create cache dir, disabling cache'
79
+ app.set :diskcache_enabled, false
80
+ end
81
+ end
82
+ end
83
+
84
+ register DiskCache
85
+ end
@@ -0,0 +1,5 @@
1
+ module Sinatra
2
+ module DiskCache
3
+ VERSION = "0.0.2"
4
+ end
5
+ end
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "sinatra/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "sinatra-diskcache"
7
+ s.version = Sinatra::DiskCache::VERSION
8
+ s.authors = ["Ilia Zhirov"]
9
+ s.email = ["izhirov@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Sinatra disk cache}
12
+ s.description = %q{Allows to cache heavy-load query results on the disk}
13
+
14
+ s.rubyforge_project = "sinatra-diskcache"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+ end
metadata ADDED
@@ -0,0 +1,51 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sinatra-diskcache
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ilia Zhirov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-29 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Allows to cache heavy-load query results on the disk
15
+ email:
16
+ - izhirov@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - README.md
24
+ - lib/sinatra/diskcache.rb
25
+ - lib/sinatra/version.rb
26
+ - sinatra-diskcache.gemspec
27
+ homepage: ''
28
+ licenses: []
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubyforge_project: sinatra-diskcache
47
+ rubygems_version: 1.8.17
48
+ signing_key:
49
+ specification_version: 3
50
+ summary: Sinatra disk cache
51
+ test_files: []