aweplug 1.0.0.a11 → 1.0.0.a12

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,93 @@
1
+ require 'yaml/store'
2
+
3
+ module Aweplug
4
+ # Public: A simple caching implementation.
5
+ # Internally it using a YAML::Store for a file backing. It also saves
6
+ # data in a hash for the life of the object. Any keys which are
7
+ # Strings are frozen before being used.
8
+ class YamlFileCache
9
+ # Public: Initialization method.
10
+ #
11
+ # opts - A Hash of options
12
+ # filename: Name of the File used for caching. Defaults to
13
+ # 'tmp/cache.store'.
14
+ #
15
+ # Examples
16
+ #
17
+ # store = Aweplug::YamlFileCache.new
18
+ # store.write('key', 'data')
19
+ # # => 'data'
20
+ # store.read('key')
21
+ # # => 'data'
22
+ #
23
+ # Returns a new instance of the cache.
24
+ def initialize(opts = {})
25
+ opts.merge!({filename: 'tmp/cache.store'})
26
+ @file_store = YAML::Store.new opts[:filename]
27
+ @memory_store = {}
28
+ end
29
+
30
+ # Public: Retrieves the data stored previously under the given key.
31
+ #
32
+ # key - key part of a key value pair
33
+ #
34
+ # Examples
35
+ #
36
+ # store.read('my_key')
37
+ # # => 'my_data'
38
+ #
39
+ # Returns the data associated with the key.
40
+ def read(key)
41
+ key.freeze if key.is_a? String
42
+
43
+ if @memory_store.has_key? key
44
+ @memory_store[key]
45
+ else
46
+ @file_store.transaction do
47
+ @memory_store[key] = @file_store[key]
48
+ end
49
+ @memory_store[key]
50
+ end
51
+ end
52
+
53
+ # Public: Adds data to the cache.
54
+ #
55
+ # key - A key for the cache, strings or symbols should be used
56
+ # value - Data to store in the cache
57
+ #
58
+ # Examples
59
+ #
60
+ # store.write(:pi, 3.14)
61
+ # # => 3.14
62
+ #
63
+ # Returns the data just saved.
64
+ def write(key, value)
65
+ key.freeze if key.is_a? String
66
+
67
+ @memory_store[key] = value
68
+ @file_store.transaction do
69
+ @file_store[key] = value
70
+ end
71
+ end
72
+
73
+ # Public: Retreives the value from the cache, or the return of the Block.
74
+ #
75
+ # key - Key in the cache to retreive.
76
+ # block - The block to be evaluated for a default value.
77
+ #
78
+ # Examples
79
+ #
80
+ # store.fetch(key) { 'new data' }
81
+ # # => 'new data'
82
+ # store.write(key, 23)
83
+ # store.fetch(key) { 'new data' }
84
+ # # => 23
85
+ #
86
+ # Returns the value in the cache, or the default supplied from the block.
87
+ def fetch(key)
88
+ key.freeze if key.is_a? String
89
+
90
+ read(key) || yield.tap { |data| write(key, data) }
91
+ end
92
+ end
93
+ end
@@ -1,4 +1,4 @@
1
1
  module Aweplug
2
- VERSION='1.0.0.a11'
2
+ VERSION='1.0.0.a12'
3
3
  end
4
4
 
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+ require 'aweplug/cache/yaml_file_cache'
3
+
4
+ describe Aweplug::YamlFileCache do
5
+ specify 'it should respond to #write' do
6
+ expect(subject).to respond_to :write
7
+ end
8
+ specify 'it should respond to #fetch' do
9
+ expect(subject).to respond_to :fetch
10
+ end
11
+ specify 'it should respond to #read' do
12
+ expect(subject).to respond_to :read
13
+ end
14
+ context 'with a new instance' do
15
+ subject = Aweplug::YamlFileCache.new
16
+ # destroy any file stores
17
+ before { File.delete 'tmp/cache.store' if File.exists? 'tmp/cache.store' }
18
+
19
+ specify 'should return nil on #read' do
20
+ expect(subject.read 'key').to be_nil
21
+ end
22
+ specify '#fetch with a block should return what the block returns' do
23
+ expect(subject.fetch('key1') { 3 }).to be_eql 3
24
+ end
25
+ specify '#fetch should not return the default if the key is in the cache' do
26
+ subject.write(:key_fetch, 4)
27
+ expect(subject.fetch(:key_fetch) { 3 }).to be_eql 4
28
+ end
29
+ specify '#write should return the data written in yaml' do
30
+ expect(subject.write('key3', 'data3')).to be_eql 'data3'
31
+ end
32
+ specify '#read after #write to return data sent via #write' do
33
+ subject.write('key2', 'data')
34
+ expect(subject.read('key2')).to be_eql 'data'
35
+ end
36
+ specify 'multiple calls to #read should return the same object' do
37
+ key = 'id_test'
38
+ data = 'data test'
39
+ data_id = data.__id__
40
+ subject.write(key, data)
41
+ expect(subject.read(key).__id__).to be_eql data_id
42
+ expect(subject.read(key).__id__).to be_eql data_id
43
+ expect(subject.read(key).__id__).to be_eql data_id
44
+ expect(subject.read(key).__id__).to be_eql data_id
45
+ end
46
+ end
47
+ end
metadata CHANGED
@@ -1,34 +1,38 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aweplug
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.a11
4
+ version: 1.0.0.a12
5
+ prerelease: 6
5
6
  platform: ruby
6
7
  authors:
7
8
  - LightGuard
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-01-30 00:00:00.000000000 Z
12
+ date: 2014-02-04 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: octokit
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - '>='
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: 1.24.0
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - '>='
27
+ - - ! '>='
25
28
  - !ruby/object:Gem::Version
26
29
  version: 1.24.0
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: faraday
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - '>='
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
37
  version: 0.8.7
34
38
  - - <
@@ -37,8 +41,9 @@ dependencies:
37
41
  type: :runtime
38
42
  prerelease: false
39
43
  version_requirements: !ruby/object:Gem::Requirement
44
+ none: false
40
45
  requirements:
41
- - - '>='
46
+ - - ! '>='
42
47
  - !ruby/object:Gem::Version
43
48
  version: 0.8.7
44
49
  - - <
@@ -47,20 +52,23 @@ dependencies:
47
52
  - !ruby/object:Gem::Dependency
48
53
  name: faraday_middleware
49
54
  requirement: !ruby/object:Gem::Requirement
55
+ none: false
50
56
  requirements:
51
- - - '>='
57
+ - - ! '>='
52
58
  - !ruby/object:Gem::Version
53
59
  version: 0.9.0
54
60
  type: :runtime
55
61
  prerelease: false
56
62
  version_requirements: !ruby/object:Gem::Requirement
63
+ none: false
57
64
  requirements:
58
- - - '>='
65
+ - - ! '>='
59
66
  - !ruby/object:Gem::Version
60
67
  version: 0.9.0
61
68
  - !ruby/object:Gem::Dependency
62
69
  name: curb
63
70
  requirement: !ruby/object:Gem::Requirement
71
+ none: false
64
72
  requirements:
65
73
  - - ~>
66
74
  - !ruby/object:Gem::Version
@@ -68,6 +76,7 @@ dependencies:
68
76
  type: :runtime
69
77
  prerelease: false
70
78
  version_requirements: !ruby/object:Gem::Requirement
79
+ none: false
71
80
  requirements:
72
81
  - - ~>
73
82
  - !ruby/object:Gem::Version
@@ -75,6 +84,7 @@ dependencies:
75
84
  - !ruby/object:Gem::Dependency
76
85
  name: oauth
77
86
  requirement: !ruby/object:Gem::Requirement
87
+ none: false
78
88
  requirements:
79
89
  - - ~>
80
90
  - !ruby/object:Gem::Version
@@ -82,6 +92,7 @@ dependencies:
82
92
  type: :runtime
83
93
  prerelease: false
84
94
  version_requirements: !ruby/object:Gem::Requirement
95
+ none: false
85
96
  requirements:
86
97
  - - ~>
87
98
  - !ruby/object:Gem::Version
@@ -89,6 +100,7 @@ dependencies:
89
100
  - !ruby/object:Gem::Dependency
90
101
  name: guard-rspec
91
102
  requirement: !ruby/object:Gem::Requirement
103
+ none: false
92
104
  requirements:
93
105
  - - ~>
94
106
  - !ruby/object:Gem::Version
@@ -96,6 +108,7 @@ dependencies:
96
108
  type: :development
97
109
  prerelease: false
98
110
  version_requirements: !ruby/object:Gem::Requirement
111
+ none: false
99
112
  requirements:
100
113
  - - ~>
101
114
  - !ruby/object:Gem::Version
@@ -103,6 +116,7 @@ dependencies:
103
116
  - !ruby/object:Gem::Dependency
104
117
  name: rake
105
118
  requirement: !ruby/object:Gem::Requirement
119
+ none: false
106
120
  requirements:
107
121
  - - ~>
108
122
  - !ruby/object:Gem::Version
@@ -110,6 +124,7 @@ dependencies:
110
124
  type: :development
111
125
  prerelease: false
112
126
  version_requirements: !ruby/object:Gem::Requirement
127
+ none: false
113
128
  requirements:
114
129
  - - ~>
115
130
  - !ruby/object:Gem::Version
@@ -117,6 +132,7 @@ dependencies:
117
132
  - !ruby/object:Gem::Dependency
118
133
  name: pry
119
134
  requirement: !ruby/object:Gem::Requirement
135
+ none: false
120
136
  requirements:
121
137
  - - ~>
122
138
  - !ruby/object:Gem::Version
@@ -124,6 +140,7 @@ dependencies:
124
140
  type: :development
125
141
  prerelease: false
126
142
  version_requirements: !ruby/object:Gem::Requirement
143
+ none: false
127
144
  requirements:
128
145
  - - ~>
129
146
  - !ruby/object:Gem::Version
@@ -145,6 +162,7 @@ files:
145
162
  - Rakefile
146
163
  - aweplug.gemspec
147
164
  - lib/aweplug.rb
165
+ - lib/aweplug/cache/yaml_file_cache.rb
148
166
  - lib/aweplug/extensions/asciidoc_example.rb
149
167
  - lib/aweplug/extensions/kramdown_quickstart.rb
150
168
  - lib/aweplug/extensions/sections.rb
@@ -156,31 +174,37 @@ files:
156
174
  - lib/aweplug/helpers/vimeo.rb
157
175
  - lib/aweplug/transformers/.gitkeep
158
176
  - lib/aweplug/version.rb
177
+ - spec/aweplug/cache/yaml_file_cache_spec.rb
159
178
  - spec/spec_helper.rb
160
179
  homepage: https://github.com/awestruct/aweplug
161
180
  licenses: []
162
- metadata: {}
163
181
  post_install_message:
164
182
  rdoc_options: []
165
183
  require_paths:
166
184
  - lib
167
185
  required_ruby_version: !ruby/object:Gem::Requirement
186
+ none: false
168
187
  requirements:
169
- - - '>='
188
+ - - ! '>='
170
189
  - !ruby/object:Gem::Version
171
190
  version: '0'
191
+ segments:
192
+ - 0
193
+ hash: 433450108911152361
172
194
  required_rubygems_version: !ruby/object:Gem::Requirement
195
+ none: false
173
196
  requirements:
174
- - - '>'
197
+ - - ! '>'
175
198
  - !ruby/object:Gem::Version
176
199
  version: 1.3.1
177
200
  requirements: []
178
201
  rubyforge_project:
179
- rubygems_version: 2.1.10
202
+ rubygems_version: 1.8.25
180
203
  signing_key:
181
- specification_version: 4
204
+ specification_version: 3
182
205
  summary: This set of Awestruct extensions includes helpful tools, extensions and
183
206
  helpers for building a website using Awestruct. It includes extensions for accessing
184
207
  Github, JIRA, managing identities and others.
185
208
  test_files:
209
+ - spec/aweplug/cache/yaml_file_cache_spec.rb
186
210
  - spec/spec_helper.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 3e85962146944a5957b612d3e2145abdf3299312
4
- data.tar.gz: 22e56ca95667d439b2889b77d0294cd8107a23df
5
- SHA512:
6
- metadata.gz: eddcda2c60446ca4671b3ef3f88beabe7ede92e9c8f77f56880542af5e8ce46d34cbd666e2fc281831d3acb0062f55801fd53c3a077d112d44c604f600fa4942
7
- data.tar.gz: ff17e0caf78fd33124b0b1a56b7723b205ce1ac56488405313f2f865ae3b4aec941707573eabb577ff0289f66ce58d40bd777d748ec2c41987cf4f969f9e578a