content_caching 0.0.1 → 0.1.0
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.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/CHANGELOG.md +20 -0
- data/Gemfile +1 -0
- data/README.md +71 -1
- data/lib/content_caching/adapters/aws.rb +2 -1
- data/lib/content_caching/adapters/aws_adapter.rb +0 -4
- data/lib/content_caching/adapters/fs.rb +7 -6
- data/lib/content_caching/adapters/fs_adapter.rb +9 -5
- data/lib/content_caching/adapters/implementation.rb +1 -6
- data/lib/content_caching/configuration.rb +1 -1
- data/lib/content_caching/version.rb +1 -1
- data/lib/content_caching/wrapper.rb +7 -0
- data/lib/content_caching.rb +1 -0
- data/spec/content_caching/configuration_spec.rb +1 -1
- data/spec/content_caching_spec.rb +17 -26
- data/spec/spec_helper.rb +11 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0b99af4b7bbf5dec7d6c5fa999226cfcb6ad860
|
4
|
+
data.tar.gz: 24cba441648f98ba6f64ec6cfbc8a7ebeb68fb29
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c06a7fdf04c7fcb5f4cdfec0b437ee9c444db9d6f1585fa350116c543267d88ce65d6cd65bf891e5e515d72872834049a3d0b06eeda6c6461cc42a16277e369
|
7
|
+
data.tar.gz: 5e72d78eef4c344910b62aa019ae3dd7f43704f976a15423cb19fda681c62d9116b0b962b611083ab5355b7c5407acbd04bdd3345129df4308e5d813529f0688
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,23 @@
|
|
1
|
+
### VERSION 0.1.0
|
2
|
+
|
3
|
+
* bug fix
|
4
|
+
*
|
5
|
+
|
6
|
+
* refactoring
|
7
|
+
*
|
8
|
+
|
9
|
+
* enhancements
|
10
|
+
*
|
11
|
+
|
12
|
+
* backwards incompatible changes
|
13
|
+
* signature of wrapper have been change
|
14
|
+
|
15
|
+
* deprecations
|
16
|
+
*
|
17
|
+
|
18
|
+
* todos
|
19
|
+
*
|
20
|
+
|
1
21
|
### VERSION 0.0.1
|
2
22
|
|
3
23
|
* bug fix
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -10,19 +10,89 @@
|
|
10
10
|
|
11
11
|
Add this line to your application's Gemfile:
|
12
12
|
|
13
|
+
```
|
13
14
|
gem 'content_caching'
|
15
|
+
```
|
14
16
|
|
15
17
|
And then execute:
|
16
18
|
|
19
|
+
```
|
17
20
|
$ bundle
|
21
|
+
```
|
18
22
|
|
19
23
|
Or install it yourself as:
|
20
24
|
|
25
|
+
```
|
21
26
|
$ gem install content_caching
|
27
|
+
```
|
22
28
|
|
23
29
|
## Usage
|
24
30
|
|
25
|
-
|
31
|
+
You can configure content_caching for playing with local storage or aws s3
|
32
|
+
|
33
|
+
By befault content_caching provide filesystem configuration like that
|
34
|
+
|
35
|
+
```
|
36
|
+
{ adapter: :fs, options: { directory: 'tmp' }}
|
37
|
+
```
|
38
|
+
|
39
|
+
is pretty basic, but you can change these configuration
|
40
|
+
|
41
|
+
fs sample
|
42
|
+
|
43
|
+
```
|
44
|
+
ContentCaching.configure do |config|
|
45
|
+
config.adapter = { adapter: :fs, options: { directory: 'public/htmls' }}
|
46
|
+
end
|
47
|
+
```
|
48
|
+
|
49
|
+
AWS s3 sample
|
50
|
+
|
51
|
+
```
|
52
|
+
ContentCaching.configure do |config|
|
53
|
+
config.adapter = { adapter: :aws,
|
54
|
+
options: { directory: directory, aws_access_key_id: api_key_id,
|
55
|
+
aws_secret_access_key: api_key_access }}
|
56
|
+
end
|
57
|
+
```
|
58
|
+
|
59
|
+
for s3 you need provide extra information, bucket name, api key and secret
|
60
|
+
|
61
|
+
ContentCaching implement the following interface
|
62
|
+
|
63
|
+
```
|
64
|
+
Query
|
65
|
+
.url()
|
66
|
+
|
67
|
+
Command
|
68
|
+
.store()
|
69
|
+
.delete()
|
70
|
+
```
|
71
|
+
|
72
|
+
When you initialize an Document you need pass an object who respond to .to_path() contract. content_caching provide an Wrapper for help you.
|
73
|
+
|
74
|
+
```
|
75
|
+
wrapper = ContentCaching::Wrapper.new('path of your document')
|
76
|
+
content_caching = ContentCaching::Document.new(wrapper)
|
77
|
+
```
|
78
|
+
|
79
|
+
You can store any content when you pass an Object respond to .read() contract to method .store()
|
80
|
+
|
81
|
+
```
|
82
|
+
content_caching.store StringIO.new('foo')
|
83
|
+
```
|
84
|
+
|
85
|
+
You can ask for full path
|
86
|
+
|
87
|
+
```
|
88
|
+
content_caching.url
|
89
|
+
```
|
90
|
+
|
91
|
+
And you can delete file
|
92
|
+
|
93
|
+
```
|
94
|
+
content_caching.delete
|
95
|
+
```
|
26
96
|
|
27
97
|
## Contributing
|
28
98
|
|
@@ -15,7 +15,8 @@ module ContentCaching
|
|
15
15
|
def store document_path, content
|
16
16
|
retry_3_times do
|
17
17
|
content.rewind if content.respond_to?(:rewind)
|
18
|
-
s3_interface.put self.options[:directory], document_path,
|
18
|
+
s3_interface.put self.options[:directory], document_path,
|
19
|
+
(content.respond_to?(:read) ? content.read : content)
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
@@ -2,16 +2,17 @@ module ContentCaching
|
|
2
2
|
module Adapter
|
3
3
|
class Fs
|
4
4
|
|
5
|
-
def store document_path,
|
6
|
-
|
5
|
+
def store document_path, content
|
6
|
+
content.rewind if content.respond_to?(:rewind)
|
7
|
+
Pathname(url(document_path)).write content.respond_to?(:read) ? content.read : content
|
7
8
|
end
|
8
9
|
|
9
|
-
def url
|
10
|
-
|
10
|
+
def url document_url
|
11
|
+
document_url
|
11
12
|
end
|
12
13
|
|
13
|
-
def delete document_path
|
14
|
-
Pathname(url(document_path
|
14
|
+
def delete document_path
|
15
|
+
Pathname(url(document_path)).delete
|
15
16
|
end
|
16
17
|
|
17
18
|
end
|
@@ -12,22 +12,26 @@ module ContentCaching
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def url
|
15
|
-
adapter.url
|
15
|
+
adapter.url document_url
|
16
16
|
end
|
17
17
|
|
18
18
|
def store content
|
19
|
-
adapter.store document_path,
|
19
|
+
adapter.store document_path, content
|
20
20
|
end
|
21
21
|
|
22
22
|
def delete
|
23
|
-
adapter.delete document_path
|
23
|
+
adapter.delete document_path
|
24
24
|
end
|
25
25
|
|
26
26
|
private
|
27
27
|
|
28
|
+
def document_url
|
29
|
+
@options[:host] + '/' + Pathname(@wrapper.to_path).cleanpath.to_path
|
30
|
+
end
|
31
|
+
|
28
32
|
def document_path
|
29
|
-
return @wrapper.
|
30
|
-
Pathname([@options[:directory], @wrapper.
|
33
|
+
return @wrapper.to_path unless @options[:directory]
|
34
|
+
Pathname([@options[:directory], @wrapper.to_path].join('/')).cleanpath.to_path
|
31
35
|
end
|
32
36
|
|
33
37
|
def adapter
|
@@ -16,13 +16,8 @@ module ContentCaching
|
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
|
-
def document_name
|
20
|
-
@wrapper.document_name
|
21
|
-
end
|
22
|
-
|
23
19
|
def document_path
|
24
|
-
|
25
|
-
Pathname([@options[:directory], @wrapper.document_path].join('/')).cleanpath.to_path
|
20
|
+
@wrapper.to_path
|
26
21
|
end
|
27
22
|
|
28
23
|
end
|
data/lib/content_caching.rb
CHANGED
@@ -5,7 +5,7 @@ module ContentCaching
|
|
5
5
|
let(:configuration) { Configuration.new }
|
6
6
|
|
7
7
|
describe '#adapter' do
|
8
|
-
let(:adapter) {{ adapter: :fs, options: { directory: 'tmp' }}}
|
8
|
+
let(:adapter) {{ adapter: :fs, options: { host: 'http://0.0.0.0:3000', directory: 'tmp' }}}
|
9
9
|
it 'the default is fs' do
|
10
10
|
expect(configuration.adapter).to eq(adapter)
|
11
11
|
end
|
@@ -1,33 +1,23 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
require 'pathname'
|
4
|
+
# require 'configatron'
|
4
5
|
|
5
6
|
module ContentCaching
|
6
7
|
describe Document do
|
8
|
+
let(:wrapper) { Wrapper.new(path) }
|
9
|
+
let(:content_caching) { Document.new(wrapper) }
|
7
10
|
|
8
11
|
context 'fs' do
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
context 'without document path' do
|
15
|
-
let(:options) {{ document_name: 'page.html', document_path: nil }}
|
16
|
-
specify do
|
17
|
-
expect(content_caching.url).to eq('tmp/page.html')
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context 'with document path' do
|
22
|
-
let(:options) {{ document_name: 'page.html', document_path: 'pages' }}
|
23
|
-
specify do
|
24
|
-
expect(content_caching.url).to eq('tmp/pages/page.html')
|
25
|
-
end
|
12
|
+
context 'without document path' do
|
13
|
+
let(:path) { 'page.html' }
|
14
|
+
specify do
|
15
|
+
expect(content_caching.url).to eq('http://0.0.0.0:3000/page.html')
|
26
16
|
end
|
27
17
|
end
|
28
18
|
|
29
19
|
describe '#store' do
|
30
|
-
let(:
|
20
|
+
let(:path) { 'public/pages/page.html' }
|
31
21
|
|
32
22
|
before do
|
33
23
|
content_caching.store Pathname('spec/fixtures/page.html')
|
@@ -47,15 +37,16 @@ module ContentCaching
|
|
47
37
|
end
|
48
38
|
|
49
39
|
context 'aws', pending: true do
|
50
|
-
let(:
|
51
|
-
let(:options) {{ document_name: nil, document_path: 'test/page.html' }}
|
52
|
-
let(:content_caching) { Document.new(wrapper) }
|
40
|
+
let(:path) { 'test/page.html' }
|
53
41
|
let(:adapter) do
|
54
42
|
{ adapter: :aws,
|
55
|
-
options: { directory:
|
56
|
-
aws_secret_access_key:
|
43
|
+
options: { directory: directory, aws_access_key_id: api_key_id,
|
44
|
+
aws_secret_access_key: api_key_access }
|
57
45
|
}
|
58
46
|
end
|
47
|
+
let(:directory) { configatron.directory }
|
48
|
+
let(:api_key_id) { configatron.api_key_id }
|
49
|
+
let(:api_key_access) { configatron.api_key_access }
|
59
50
|
|
60
51
|
before do
|
61
52
|
ContentCaching.configure do |config|
|
@@ -65,7 +56,7 @@ module ContentCaching
|
|
65
56
|
|
66
57
|
describe '#url' do
|
67
58
|
|
68
|
-
let(:url) {
|
59
|
+
let(:url) { "https://#{directory}.s3.amazonaws.com:443/test/page.html" }
|
69
60
|
|
70
61
|
specify do
|
71
62
|
expect(content_caching.url).to match(url)
|
@@ -89,7 +80,7 @@ module ContentCaching
|
|
89
80
|
|
90
81
|
specify do
|
91
82
|
expect(
|
92
|
-
Aws::S3::Key.new(bucket,
|
83
|
+
Aws::S3::Key.new(bucket, path)
|
93
84
|
).to be_exists
|
94
85
|
end
|
95
86
|
|
@@ -97,7 +88,7 @@ module ContentCaching
|
|
97
88
|
before do content_caching.delete end
|
98
89
|
specify do
|
99
90
|
expect(
|
100
|
-
Aws::S3::Key.new(bucket,
|
91
|
+
Aws::S3::Key.new(bucket, path)
|
101
92
|
).to_not be_exists
|
102
93
|
end
|
103
94
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -18,6 +18,17 @@ end
|
|
18
18
|
|
19
19
|
require_relative '../lib/content_caching'
|
20
20
|
|
21
|
+
require 'configatron'
|
22
|
+
|
23
|
+
if File.exist?('spec/setting.yml')
|
24
|
+
require 'yaml'
|
25
|
+
configatron.configure_from_hash(YAML.load_file('spec/setting.yml'))
|
26
|
+
else
|
27
|
+
configatron.directory = 'bucket-name'
|
28
|
+
configatron.api_key_id = 'api_key_id'
|
29
|
+
configatron.api_key_access = 'api_key_access'
|
30
|
+
end
|
31
|
+
|
21
32
|
RSpec.configure do |config|
|
22
33
|
config.filter_run focused: true
|
23
34
|
config.run_all_when_everything_filtered = true
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: content_caching
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel AZEMAR
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -138,6 +138,7 @@ files:
|
|
138
138
|
- lib/content_caching/adapters/implementation.rb
|
139
139
|
- lib/content_caching/configuration.rb
|
140
140
|
- lib/content_caching/version.rb
|
141
|
+
- lib/content_caching/wrapper.rb
|
141
142
|
- spec/content_caching/adapters/fs_adapter_spec.rb
|
142
143
|
- spec/content_caching/configuration_spec.rb
|
143
144
|
- spec/content_caching_spec.rb
|