jsoncache 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/jsoncache.rb +58 -18
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50c8df0787884ade8c2d7fa83e76b94301cb28b6
|
4
|
+
data.tar.gz: 39eef372973edf214e4f233e27d8eba77fd7cdad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3bf6e7d37215465702e47e9346b9c1c063d2316be70ee7adf6e0af1adfd28ed13b7236eea465ddf8b07dc503e64db366c6773abc34504b70f7c48d91e93fce9f
|
7
|
+
data.tar.gz: e1c43c2594f07ae5dac8fbbe5b6b357260697441ba4c965ae372c5646067e1af8b7597c308483ed2b96cdaf850e3a58c16c7e18ba7924aa68c211249aa953ee1
|
data/lib/jsoncache.rb
CHANGED
@@ -1,17 +1,39 @@
|
|
1
1
|
require 'json'
|
2
2
|
|
3
3
|
# JSONCache is a simple interface to cache JSON based API calls
|
4
|
+
#
|
5
|
+
# Author:: Derek Stride (mailto:djgstride@gmail.com)
|
6
|
+
# License:: MIT
|
7
|
+
#
|
8
|
+
# This module provides an easy to use class method +cache+ which caches json
|
9
|
+
# in a key-value fashion to the filesystem in /tmp/jsoncache.
|
4
10
|
module JSONCache
|
5
11
|
extend self
|
6
12
|
|
7
13
|
# Retrieves cached data for the specified key and caches the data provided
|
8
|
-
# if the cache isn't valid.
|
9
|
-
#
|
10
|
-
#
|
14
|
+
# if the cache isn't valid. Specify a code block after the method call that
|
15
|
+
# returns a hash and it will be cached.
|
16
|
+
#
|
17
|
+
# ==== Parameters
|
18
|
+
#
|
19
|
+
# +key+:: +String+ The key in which to check for cached data.
|
20
|
+
# +options+:: +Hash+ A hash of the parameters to use when caching.
|
21
|
+
#
|
22
|
+
# ==== Options
|
23
|
+
#
|
11
24
|
# Accepted options parameters
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
25
|
+
#
|
26
|
+
# * +:symbolize+:: +Boolean+ Symbolize keys while parsing JSON.
|
27
|
+
# * +:cache_directory+:: +String+ The folder name in /tmp to use as the cache.
|
28
|
+
# * +:delta+:: +Fixnum+ The validity time of the cache in seconds.
|
29
|
+
#
|
30
|
+
# ==== Examples
|
31
|
+
#
|
32
|
+
# def get_response(uri)
|
33
|
+
# JSONCache.cache(uri_to_key(uri), delta: 120) do
|
34
|
+
# query_some_json_api(uri)
|
35
|
+
# end
|
36
|
+
# end
|
15
37
|
def cache(key, options = {})
|
16
38
|
return retrieve_cache(key, options) if cached?(key, options)
|
17
39
|
result = yield
|
@@ -26,8 +48,11 @@ module JSONCache
|
|
26
48
|
########################################################################
|
27
49
|
|
28
50
|
# Determine whether a file is cached and healthy
|
29
|
-
#
|
30
|
-
#
|
51
|
+
#
|
52
|
+
# ==== Parameters
|
53
|
+
#
|
54
|
+
# +key+:: +String+ The key in which to check for cached data.
|
55
|
+
# +options+:: +Hash+ A hash of the parameters to use when caching.
|
31
56
|
def cached?(key, options = {})
|
32
57
|
timestamp = timestamp_from_key(key, options[:cache_directory])
|
33
58
|
delta = options[:delta] || 0
|
@@ -41,9 +66,12 @@ module JSONCache
|
|
41
66
|
end
|
42
67
|
|
43
68
|
# Cache the result from the uri
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
69
|
+
#
|
70
|
+
# ==== Parameters
|
71
|
+
#
|
72
|
+
# +key+:: +String+ The key in which to check for cached data.
|
73
|
+
# +data+:: +Hash+ The data to cache.
|
74
|
+
# +options+:: +Hash+ A hash of the parameters to use when caching.
|
47
75
|
def cache_file(key, data, options = {})
|
48
76
|
return unless data.respond_to?(:to_h)
|
49
77
|
|
@@ -58,8 +86,11 @@ module JSONCache
|
|
58
86
|
end
|
59
87
|
|
60
88
|
# Retrieves a cached value from a key
|
61
|
-
#
|
62
|
-
#
|
89
|
+
#
|
90
|
+
# ==== Parameters
|
91
|
+
#
|
92
|
+
# +key+:: +String+ The key in which to check for cached data.
|
93
|
+
# +options+:: +Hash+ A hash of the parameters to use when caching.
|
63
94
|
def retrieve_cache(key, options = {})
|
64
95
|
directory = options[:cache_directory]
|
65
96
|
filename = filename_from_key(key, directory)
|
@@ -75,7 +106,10 @@ module JSONCache
|
|
75
106
|
########################################################################
|
76
107
|
|
77
108
|
# Create, if necessary, and return a cache directory
|
78
|
-
#
|
109
|
+
#
|
110
|
+
# ==== Parameters
|
111
|
+
#
|
112
|
+
# +directory+:: +String+ The name of the cache directory.
|
79
113
|
def cache_dir(directory)
|
80
114
|
directory ||= 'jsoncache'
|
81
115
|
cache_path = File.join('/tmp', directory)
|
@@ -84,8 +118,11 @@ module JSONCache
|
|
84
118
|
end
|
85
119
|
|
86
120
|
# Gets an existing file from a uri if it exists
|
87
|
-
#
|
88
|
-
#
|
121
|
+
#
|
122
|
+
# ==== Parameters
|
123
|
+
#
|
124
|
+
# +key+:: +String+ The key in which to check for cached data.
|
125
|
+
# +directory+:: +String+ The name of the cache directory.
|
89
126
|
def filename_from_key(key, directory)
|
90
127
|
directory ||= 'jsoncache'
|
91
128
|
Dir.foreach(cache_dir(directory)) do |filename|
|
@@ -95,8 +132,11 @@ module JSONCache
|
|
95
132
|
end
|
96
133
|
|
97
134
|
# Extracts a timestamp from an existing file
|
98
|
-
#
|
99
|
-
#
|
135
|
+
#
|
136
|
+
# ==== Parameters
|
137
|
+
#
|
138
|
+
# +key+:: +String+ The key in which to check for cached data.
|
139
|
+
# +directory+:: +String+ The name of the cache directory.
|
100
140
|
def timestamp_from_key(key, directory)
|
101
141
|
path = filename_from_key(key, directory)
|
102
142
|
return 0 if path.nil?
|