block_cache 0.0.1
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 +3 -0
- data/Gemfile +4 -0
- data/Rakefile +2 -0
- data/block_cache.gemspec +23 -0
- data/lib/block_cache/version.rb +3 -0
- data/lib/block_cache.rb +68 -0
- metadata +100 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
data/block_cache.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "block_cache/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "block_cache"
|
7
|
+
s.version = BlockCache::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Blake Chambers"]
|
10
|
+
s.email = ["chambb1@gmail.com"]
|
11
|
+
s.homepage = "http://rubygems.org/gems/block_cache"
|
12
|
+
s.summary = %q{uses mongo_mapper to cache block response strings.}
|
13
|
+
s.description = %q{uses mongo_mapper to cache block response strings. Use case: wrap your twitter api call with a block, if twitter bugs out, raise an error and the last value will be returned}
|
14
|
+
|
15
|
+
s.add_dependency('mongo_mapper')
|
16
|
+
s.add_development_dependency "rspec"
|
17
|
+
# s.rubyforge_project = "block_cache"
|
18
|
+
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
end
|
data/lib/block_cache.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
=begin
|
2
|
+
|
3
|
+
block_cache methods for caching single block responses in mongo
|
4
|
+
planned to support mongoid in the future. :D -blake
|
5
|
+
|
6
|
+
attributes:
|
7
|
+
* block_key: basic key passed to the cache_overwrite_by method that
|
8
|
+
will store and overwrite by that valid. could easily use
|
9
|
+
the request.uri for content cached as json or something as
|
10
|
+
such.
|
11
|
+
* block_response: basic block of content that is returned by the block call.
|
12
|
+
|
13
|
+
WARNING: BLOCKS THAT RETURN NIL WILL OVERWRITE THE DATA. TO BE SURE RAISE ERRORS
|
14
|
+
WHEN EXITING BLOCKS WITH NIL DATA. THIS LIBRARY CURRENTLY DOSESNT PREVENT
|
15
|
+
THIS EXCEPTION.
|
16
|
+
|
17
|
+
=end
|
18
|
+
|
19
|
+
module BlockCache
|
20
|
+
CACHE_NIL_RESPONSES = true
|
21
|
+
HOPTOAD_SUPPORTED=begin
|
22
|
+
require 'hoptoad_notifier' ;; true
|
23
|
+
rescue
|
24
|
+
false
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.included(receiver)
|
28
|
+
receiver.send :include, ControllerMethods
|
29
|
+
end
|
30
|
+
|
31
|
+
module ControllerMethods
|
32
|
+
class NilResponseError < Exception ;; end
|
33
|
+
def cache_overwrite_by(key, &block)
|
34
|
+
raise ArgumentError, "needs a key and block" unless key && block
|
35
|
+
|
36
|
+
return begin
|
37
|
+
response_body = block.call()
|
38
|
+
|
39
|
+
raise NilResponseError, "you returned a nil response" if response_body.nil? and not CACHE_NIL_RESPONSES
|
40
|
+
|
41
|
+
BlockCache::Record.cache_by_key(key, response_body)
|
42
|
+
rescue => exception
|
43
|
+
logger.info "block cache error(#{exception.to_s}) returned, rendering from mongo."
|
44
|
+
logger.debug "Backtrace:\n\n#{exception.backtrace}\n\n"
|
45
|
+
HoptoadNotifier.notify_hoptoad(exception) if RAILS_ENV["production"] and HOPTOAD_SUPPORTED
|
46
|
+
|
47
|
+
return BlockCache::Record.find_by_block_key(key).try(:block_response)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class Record
|
53
|
+
include MongoMapper::Document
|
54
|
+
|
55
|
+
key :block_key, String
|
56
|
+
key :block_response, String
|
57
|
+
|
58
|
+
class << self
|
59
|
+
def cache_by_key(block_key, response_body)
|
60
|
+
record = find_or_initialize_by_block_key(block_key)
|
61
|
+
record.block_response = response_body
|
62
|
+
record.save!
|
63
|
+
|
64
|
+
return response_body
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
metadata
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: block_cache
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Blake Chambers
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-01-05 00:00:00 -05:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: mongo_mapper
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: rspec
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id002
|
49
|
+
description: "uses mongo_mapper to cache block response strings. Use case: wrap your twitter api call with a block, if twitter bugs out, raise an error and the last value will be returned"
|
50
|
+
email:
|
51
|
+
- chambb1@gmail.com
|
52
|
+
executables: []
|
53
|
+
|
54
|
+
extensions: []
|
55
|
+
|
56
|
+
extra_rdoc_files: []
|
57
|
+
|
58
|
+
files:
|
59
|
+
- .gitignore
|
60
|
+
- Gemfile
|
61
|
+
- Rakefile
|
62
|
+
- block_cache.gemspec
|
63
|
+
- lib/block_cache.rb
|
64
|
+
- lib/block_cache/version.rb
|
65
|
+
has_rdoc: true
|
66
|
+
homepage: http://rubygems.org/gems/block_cache
|
67
|
+
licenses: []
|
68
|
+
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options: []
|
71
|
+
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
hash: 3
|
80
|
+
segments:
|
81
|
+
- 0
|
82
|
+
version: "0"
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
hash: 3
|
89
|
+
segments:
|
90
|
+
- 0
|
91
|
+
version: "0"
|
92
|
+
requirements: []
|
93
|
+
|
94
|
+
rubyforge_project:
|
95
|
+
rubygems_version: 1.3.7
|
96
|
+
signing_key:
|
97
|
+
specification_version: 3
|
98
|
+
summary: uses mongo_mapper to cache block response strings.
|
99
|
+
test_files: []
|
100
|
+
|