skeevy 0.0.2 → 1.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.
- checksums.yaml +4 -4
- data/lib/skeevy.rb +6 -2
- data/lib/skeevy/engine.rb +4 -0
- data/lib/skeevy/engines/directory_file.rb +18 -6
- data/lib/skeevy/engines/symbolic_hash.rb +3 -0
- data/lib/skeevy/filter.rb +11 -0
- data/lib/skeevy/filters/rot_13.rb +16 -0
- data/lib/skeevy/filters/zlib_compression.rb +17 -0
- data/lib/skeevy/instance.rb +16 -2
- data/lib/skeevy/version.rb +1 -1
- data/skeevy.gemspec +4 -4
- data/spec/lib/skeevy/filters/rot_13_spec.rb +15 -0
- data/spec/lib/skeevy/filters/zlib_compression_spec.rb +15 -0
- data/spec/lib/skeevy/instance_spec.rb +19 -0
- data/spec/shared/engine.rb +10 -0
- data/spec/spec_helper.rb +1 -1
- metadata +11 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 708fca8af138d7576b3bea4151c4d8e6ba68ff34
|
4
|
+
data.tar.gz: d8e76988b05d3750e8c10825f6afc4a954ac83b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ec8aff61eb16ba1fc9abe0ff3d4bf93235f606afd02b7fac24c1524b2bb1f4c2e986422fdd3aa9ad2a791a464b8a66f086237b2a005f0fdb11c0da7e069a28c
|
7
|
+
data.tar.gz: 2612ff0d14ee9ebb86eba73ce2dd7bfcdf44030a665f6d6f9a97a2622fc704d2fe1be78ade77b4a3c68c282e86f7e61c422dfe6f24fe09cc2315c156aa029054
|
data/lib/skeevy.rb
CHANGED
@@ -4,6 +4,9 @@ require 'skeevy/cutter'
|
|
4
4
|
require 'skeevy/cutters/standard_key'
|
5
5
|
require 'skeevy/engines/symbolic_hash'
|
6
6
|
require 'skeevy/engines/directory_file'
|
7
|
+
require 'skeevy/filter'
|
8
|
+
require 'skeevy/filters/rot_13'
|
9
|
+
require 'skeevy/filters/zlib_compression'
|
7
10
|
require 'skeevy/instance'
|
8
11
|
|
9
12
|
fail "Skeevy #{Skeevy::VERSION} requires Ruby 2.1 or later." if RUBY_VERSION < '2.1.0'
|
@@ -12,12 +15,13 @@ module Skeevy
|
|
12
15
|
|
13
16
|
# Poor-man's singleton
|
14
17
|
class << self
|
15
|
-
def register!(identifier:, engine: nil, cutter: nil)
|
18
|
+
def register!(identifier:, engine: nil, cutter: nil, filters: nil)
|
16
19
|
raise(ArgumentError, "Identifier must be a symbol") unless identifier.is_a?(Symbol)
|
17
20
|
@instances ||= {}
|
18
21
|
@instances[identifier] = Instance.new identifier: identifier,
|
19
22
|
engine: engine,
|
20
|
-
cutter: cutter
|
23
|
+
cutter: cutter,
|
24
|
+
filters: filters || []
|
21
25
|
end
|
22
26
|
|
23
27
|
def instance(identifier)
|
data/lib/skeevy/engine.rb
CHANGED
@@ -35,9 +35,7 @@ module Skeevy
|
|
35
35
|
def read(key:)
|
36
36
|
path = path_for(key: key)
|
37
37
|
if exist?(path: path, key: nil)
|
38
|
-
|
39
|
-
f.read
|
40
|
-
}
|
38
|
+
IO.binread(path)
|
41
39
|
else
|
42
40
|
nil
|
43
41
|
end
|
@@ -45,9 +43,7 @@ module Skeevy
|
|
45
43
|
|
46
44
|
def write!(key:, content:)
|
47
45
|
path = path_for(key: key)
|
48
|
-
|
49
|
-
f.write content
|
50
|
-
}
|
46
|
+
IO.binwrite(path, content)
|
51
47
|
end
|
52
48
|
|
53
49
|
def delete!(key:)
|
@@ -59,6 +55,12 @@ module Skeevy
|
|
59
55
|
false
|
60
56
|
end
|
61
57
|
|
58
|
+
def keys
|
59
|
+
@files = []
|
60
|
+
check_directory(dir: "#{@base_dir}/*")
|
61
|
+
@files
|
62
|
+
end
|
63
|
+
|
62
64
|
private
|
63
65
|
|
64
66
|
def ensure_exists(path:)
|
@@ -69,6 +71,16 @@ module Skeevy
|
|
69
71
|
def ensure_base_dir_exists
|
70
72
|
ensure_exists(path: @base_dir)
|
71
73
|
end
|
74
|
+
|
75
|
+
def check_directory(dir:, prefix: '')
|
76
|
+
Dir.glob(dir).each do |f|
|
77
|
+
if(File.directory? f)
|
78
|
+
check_directory(dir: "#{f}/*", prefix: f)
|
79
|
+
else
|
80
|
+
@files << f.gsub("#{@base_dir}/", '').gsub('/', @delimiter)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
72
84
|
end
|
73
85
|
end
|
74
86
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Skeevy
|
2
|
+
module Filters
|
3
|
+
class Rot13
|
4
|
+
include Skeevy::Filters
|
5
|
+
|
6
|
+
def filter_write(content:)
|
7
|
+
content.tr!("abcdefghijklmnopqrstuvwxyz",
|
8
|
+
"nopqrstuvwxyzabcdefghijklm")
|
9
|
+
end
|
10
|
+
|
11
|
+
def filter_read(content:)
|
12
|
+
filter_write(content: content)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/skeevy/instance.rb
CHANGED
@@ -5,12 +5,16 @@ module Skeevy
|
|
5
5
|
|
6
6
|
def initialize(identifier:,
|
7
7
|
engine: nil,
|
8
|
-
cutter: nil
|
8
|
+
cutter: nil,
|
9
|
+
filters: []
|
10
|
+
)
|
9
11
|
raise(ArgumentError, "identifier must be a Symbol") unless identifier.is_a?(Symbol)
|
10
12
|
raise(ArgumentError, "engine #{engine} is not a Skeevy Engine!") unless engine.is_a?(Skeevy::Engine) || engine.nil?
|
11
13
|
raise(ArgumentError, "cutter #{cutter} is not a Skeevy Cutter!") unless cutter.is_a?(Skeevy::Cutter) || cutter.nil?
|
14
|
+
raise(ArgumentError, "filters must be an array") unless filters.is_a?(Array)
|
12
15
|
@cutter = cutter || Skeevy::Cutters::StandardKey.new(instance: self)
|
13
16
|
@engine = engine || Skeevy::Engines::SymbolicHash.new(instance: self)
|
17
|
+
@filters = filters
|
14
18
|
@cutter.instance ||= self
|
15
19
|
@engine.instance ||= self
|
16
20
|
@identifier = identifier
|
@@ -25,10 +29,17 @@ module Skeevy
|
|
25
29
|
end
|
26
30
|
|
27
31
|
def read(key:)
|
28
|
-
@engine.read(key: key)
|
32
|
+
content = @engine.read(key: key)
|
33
|
+
@filters.reverse.each do |f|
|
34
|
+
content = f.filter_read(content: content)
|
35
|
+
end
|
36
|
+
content
|
29
37
|
end
|
30
38
|
|
31
39
|
def write!(key:, content:)
|
40
|
+
@filters.each do |f|
|
41
|
+
content = f.filter_write(content: content)
|
42
|
+
end
|
32
43
|
@engine.write!(key: key, content: content)
|
33
44
|
end
|
34
45
|
|
@@ -44,5 +55,8 @@ module Skeevy
|
|
44
55
|
{ identifier: @identifier, engine: @engine, cutter: @cutter}.to_s
|
45
56
|
end
|
46
57
|
|
58
|
+
def add_filter(filter:)
|
59
|
+
@filters << filter
|
60
|
+
end
|
47
61
|
end
|
48
62
|
end
|
data/lib/skeevy/version.rb
CHANGED
data/skeevy.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'skeevy'
|
3
|
-
s.version = '
|
4
|
-
s.date = '
|
3
|
+
s.version = '1.0.1'
|
4
|
+
s.date = '2015-02-13'
|
5
5
|
s.summary = "Skeevy"
|
6
6
|
s.description = "A simple key-value store for objects"
|
7
7
|
s.authors = ["Craig Waterman"]
|
@@ -15,5 +15,5 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.require_paths = ['lib']
|
16
16
|
|
17
17
|
s.add_development_dependency 'rspec', '~> 3.1'
|
18
|
-
s.add_development_dependency 'guard-rspec', '~> 4.4
|
19
|
-
end
|
18
|
+
s.add_development_dependency 'guard-rspec', '~> 4.4'
|
19
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
RSpec.describe :rot_13 do
|
2
|
+
let(:filter) { Skeevy::Filters::Rot13.new }
|
3
|
+
|
4
|
+
describe '#filter_write' do
|
5
|
+
it 'performs a rot13 translation on the content' do
|
6
|
+
expect(filter.filter_write(content: 'testing')).to eq 'grfgvat'
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#filter_read' do
|
11
|
+
it 'performs a reverse rot13 (same as rot13) on the content' do
|
12
|
+
expect(filter.filter_write(content: 'grfgvat')).to eq 'testing'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
RSpec.describe :zlib_compression do
|
2
|
+
let(:filter) { Skeevy::Filters::ZlibCompression.new }
|
3
|
+
|
4
|
+
describe '#filter_write' do
|
5
|
+
it 'zlib deflates the content' do
|
6
|
+
expect(filter.filter_write(content: 'testing')).to eq Zlib.deflate('testing')
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#filter_read' do
|
11
|
+
it 'zlib inflates the content' do
|
12
|
+
expect(filter.filter_read(content: Zlib.deflate('testing'))).to eq 'testing'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -46,4 +46,23 @@ RSpec.describe :instance do
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
describe '#add_filter' do
|
50
|
+
let(:filter_rot13) { Skeevy::Filters::Rot13.new }
|
51
|
+
let(:filter_zlib) { Skeevy::Filters::ZlibCompression.new }
|
52
|
+
|
53
|
+
it 'adds the filter to the internal @filters variable' do
|
54
|
+
instance.add_filter(filter: filter_rot13)
|
55
|
+
expect(instance.instance_variable_get(:@filters)).to eq [filter_rot13]
|
56
|
+
instance.add_filter(filter: filter_zlib)
|
57
|
+
expect(instance.instance_variable_get(:@filters)).to eq [filter_rot13, filter_zlib]
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'returns the same data put in regardless of filters' do
|
61
|
+
instance.add_filter(filter: filter_rot13)
|
62
|
+
instance.add_filter(filter: filter_zlib)
|
63
|
+
instance.write!(key: 'testing', content: 'testing_content')
|
64
|
+
expect(instance.read(key: 'testing')).to eq 'testing_content'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
49
68
|
end
|
data/spec/shared/engine.rb
CHANGED
@@ -54,4 +54,14 @@ RSpec.shared_examples 'a skeevy engine' do
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
+
describe '#keys' do
|
58
|
+
it 'lists all existing keys' do
|
59
|
+
puts the_engine.keys
|
60
|
+
k = 'keys_test-file.json'
|
61
|
+
k2 = 'a-b-c-file.json'
|
62
|
+
the_engine.write!(key: k, content: '{}')
|
63
|
+
the_engine.write!(key: k2, content: '{}')
|
64
|
+
expect(the_engine.keys.sort).to eq ['a-b-c-file.json', 'keys_test-file.json']
|
65
|
+
end
|
66
|
+
end
|
57
67
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: skeevy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Craig Waterman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 4.4
|
33
|
+
version: '4.4'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 4.4
|
40
|
+
version: '4.4'
|
41
41
|
description: A simple key-value store for objects
|
42
42
|
email: craigwaterman@gmail.com
|
43
43
|
executables: []
|
@@ -56,12 +56,17 @@ files:
|
|
56
56
|
- lib/skeevy/engine.rb
|
57
57
|
- lib/skeevy/engines/directory_file.rb
|
58
58
|
- lib/skeevy/engines/symbolic_hash.rb
|
59
|
+
- lib/skeevy/filter.rb
|
60
|
+
- lib/skeevy/filters/rot_13.rb
|
61
|
+
- lib/skeevy/filters/zlib_compression.rb
|
59
62
|
- lib/skeevy/instance.rb
|
60
63
|
- lib/skeevy/version.rb
|
61
64
|
- skeevy.gemspec
|
62
65
|
- spec/lib/skeevy/cutters/standard_key_spec.rb
|
63
66
|
- spec/lib/skeevy/engines/directory_file_spec.rb
|
64
67
|
- spec/lib/skeevy/engines/symbolic_hash_spec.rb
|
68
|
+
- spec/lib/skeevy/filters/rot_13_spec.rb
|
69
|
+
- spec/lib/skeevy/filters/zlib_compression_spec.rb
|
65
70
|
- spec/lib/skeevy/instance_spec.rb
|
66
71
|
- spec/lib/skeevy/version_spec.rb
|
67
72
|
- spec/lib/skeevy_spec.rb
|
@@ -96,6 +101,8 @@ test_files:
|
|
96
101
|
- spec/lib/skeevy/cutters/standard_key_spec.rb
|
97
102
|
- spec/lib/skeevy/engines/directory_file_spec.rb
|
98
103
|
- spec/lib/skeevy/engines/symbolic_hash_spec.rb
|
104
|
+
- spec/lib/skeevy/filters/rot_13_spec.rb
|
105
|
+
- spec/lib/skeevy/filters/zlib_compression_spec.rb
|
99
106
|
- spec/lib/skeevy/instance_spec.rb
|
100
107
|
- spec/lib/skeevy/version_spec.rb
|
101
108
|
- spec/lib/skeevy_spec.rb
|