hammerstore 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b856d43cf2fa1168f640b3782d96dcc3bfc06892
4
+ data.tar.gz: fdbadfb55318a05883717e412edf31f5145079a9
5
+ SHA512:
6
+ metadata.gz: 915e7123a9b03db0964e0a2ecd50c1e02cf40f4529e8f8d1372ed50adbf4af6b300d189e0250870d95a14a7b768dee7f82f45690f32c4e5217da2cb518092fb3
7
+ data.tar.gz: cc3b2d43f712676526520a2a15bfc6e7d490019c8df152b78446d9fe6885b1b9b17b18baba9d0cfd7efd96c7c8daece15eef641eace76e79a021e209a2e9a735
@@ -0,0 +1,6 @@
1
+ pkg/*.gem
2
+ coverage/
3
+ .coveralls.yml
4
+ .bundle
5
+ Gemfile.lock
6
+ teststore
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format Fuubar
2
+ --color
@@ -0,0 +1,2 @@
1
+ Encoding:
2
+ Enabled: false
@@ -0,0 +1,24 @@
1
+ language: ruby
2
+ cache: bundler
3
+ before_install:
4
+ - sudo apt-get update
5
+ - echo $(pwd)
6
+ - sudo apt-get install libsnappy-dev
7
+ - git clone git://github.com/spotify/sparkey.git
8
+ - cd sparkey
9
+ - autoreconf --install
10
+ - ./configure --prefix=/usr
11
+ - make
12
+ - sudo make install
13
+ - cd /home/travis/build/akerl/hammerstore
14
+ rvm:
15
+ - 2.1.0
16
+ - 2.0.0
17
+ - 1.9.3
18
+ notifications:
19
+ email: false
20
+ irc:
21
+ channels:
22
+ secure: hkPXdLuGLuCCciK79SXxjWa8BHtaCjBH29ReuAjtyFb/PQcrb/yGOP7L2YVM5uP1dAIv1RQM0CLRdHvXK0f8nlU9y+i10dRXGf4REyan3xW8n+cpMQrd1thm1Kf8q/leLjRuwpwcIFuO2SSyO8/2rwqdy2+BhCMPDg2jXzecd9Q=
23
+ template:
24
+ - "%{repository}/%{branch}/%{build_number}: %{message} -- %{build_url}"
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Les Aker
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
22
+
@@ -0,0 +1,30 @@
1
+ hammerstore
2
+ =========
3
+
4
+ [![Gem Version](https://img.shields.io/gem/v/hammerstore.svg)](https://rubygems.org/gems/hammerstore)
5
+ [![Dependency Status](https://img.shields.io/gemnasium/akerl/hammerstore.svg)](https://gemnasium.com/akerl/hammerstore)
6
+ [![Code Climate](https://img.shields.io/codeclimate/github/akerl/hammerstore.svg)](https://codeclimate.com/github/akerl/hammerstore)
7
+ [![Coverage Status](https://img.shields.io/coveralls/akerl/hammerstore.svg)](https://coveralls.io/r/akerl/hammerstore)
8
+ [![Build Status](https://img.shields.io/travis/akerl/hammerstore.svg)](https://travis-ci.org/akerl/hammerstore)
9
+ [![MIT Licensed](https://img.shields.io/badge/license-MIT-green.svg)](https://tldrlegal.com/license/mit-license)
10
+
11
+ [Hammerspace](https://github.com/airbnb/hammerspace) storage backend for [BasicCache](https://github.com/akerl/basiccache)
12
+
13
+ ## Usage
14
+
15
+ ```
16
+ require 'basiccache'
17
+ require 'hammerstore'
18
+
19
+ store = HammerStore.new('/path/to/hammerstore')
20
+ cache = BasicCache.new store
21
+ ```
22
+
23
+ ## Installation
24
+
25
+ gem install hammerstore
26
+
27
+ ## License
28
+
29
+ hammerstore is released under the MIT License. See the bundled LICENSE file for details.
30
+
@@ -0,0 +1,25 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+ require 'rubocop/rake_task'
4
+
5
+ desc 'Update bundle'
6
+ task :bundle do
7
+ `bundle update`
8
+ end
9
+
10
+ desc 'Run tests'
11
+ RSpec::Core::RakeTask.new(:spec)
12
+
13
+ desc 'Run Rubocop on the gem'
14
+ Rubocop::RakeTask.new(:rubocop) do |task|
15
+ task.patterns = ['lib/**/*.rb', 'spec/**/*.rb']
16
+ task.fail_on_error = true
17
+ end
18
+
19
+ desc 'Run travis-lint on .travis.yml'
20
+ task :travislint do
21
+ print 'There is an issue with your .travis.yml' unless system('travis-lint')
22
+ end
23
+
24
+ task default: [:spec, :travislint, :rubocop, :build, :install]
25
+ task release: [:bundle]
@@ -0,0 +1,25 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'hammerstore'
3
+ s.version = '0.0.1'
4
+ s.date = Time.now.strftime("%Y-%m-%d")
5
+
6
+ s.summary = 'Hammerspace backend for BasicCache'
7
+ s.description = "Stores cached values in Hammerspace"
8
+ s.authors = ['Les Aker']
9
+ s.email = 'me@lesaker.org'
10
+ s.homepage = 'https://github.com/akerl/hammerstore'
11
+ s.license = 'MIT'
12
+
13
+ s.files = `git ls-files`.split
14
+ s.test_files = `git ls-files spec/*`.split
15
+
16
+ s.add_dependency 'basiccache'
17
+ s.add_dependency 'hammerspace'
18
+
19
+ s.add_development_dependency 'rubocop'
20
+ s.add_development_dependency 'travis-lint'
21
+ s.add_development_dependency 'rake'
22
+ s.add_development_dependency 'coveralls'
23
+ s.add_development_dependency 'rspec'
24
+ s.add_development_dependency 'fuubar'
25
+ end
@@ -0,0 +1,86 @@
1
+ require 'hammerspace'
2
+
3
+ ##
4
+ # Hammerspace-backed Store designed for BasicCache
5
+ module HammerStore
6
+ class << self
7
+ ##
8
+ # Insert a helper .new() method for creating a new Store object
9
+
10
+ def new(*args)
11
+ self::Store.new(*args)
12
+ end
13
+ end
14
+
15
+ ##
16
+ # Hammerspace-backed store object
17
+ class Store
18
+ attr_reader :raw
19
+
20
+ ##
21
+ # Generate an empty store
22
+
23
+ def initialize(file)
24
+ @raw = Hammerspace.new(file)
25
+ end
26
+
27
+ ##
28
+ # Clears a specified key or the whole store
29
+
30
+ def clear!(key = nil)
31
+ if key.nil?
32
+ @raw.clear && {}
33
+ else
34
+ key = prep(key)
35
+ value = @raw[key]
36
+ @raw.delete key
37
+ parse value
38
+ end
39
+ end
40
+
41
+ ##
42
+ # Retrieve a key
43
+
44
+ def [](key)
45
+ parse @raw[prep(key)]
46
+ end
47
+
48
+ ##
49
+ # Set a key
50
+
51
+ def []=(key, value)
52
+ @raw[prep(key)] = prep(value)
53
+ end
54
+
55
+ ##
56
+ # Return the size of the store
57
+
58
+ def size
59
+ @raw.size
60
+ end
61
+
62
+ ##
63
+ # Check for a key in the store
64
+
65
+ def include?(key)
66
+ @raw.key? prep(key)
67
+ end
68
+
69
+ ##
70
+ # Array of keys in the store
71
+
72
+ def keys
73
+ @raw.keys.map { |x| parse x }
74
+ end
75
+
76
+ private
77
+
78
+ def prep(object)
79
+ Marshal.dump object
80
+ end
81
+
82
+ def parse(object)
83
+ object.nil? ? nil : Marshal.load(object)
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+ require 'set'
3
+
4
+ describe HammerStore do
5
+ describe '#new' do
6
+ it 'creates store objects' do
7
+ test = HammerStore.new 'teststore'
8
+ expect(test).to be_an_instance_of HammerStore::Store
9
+ end
10
+ end
11
+
12
+ describe HammerStore::Store do
13
+ let(:keys) { [1, 2, 3, 4, 5, :foo, 'foo'].to_set }
14
+ let(:store) do
15
+ store = HammerStore::Store.new 'teststore'
16
+ store.clear!
17
+ (1..5).each { |i| store[i] = i + 5 }
18
+ store[:foo] = :bar
19
+ store['foo'] = 'bar'
20
+ store
21
+ end
22
+
23
+ describe '#initialize' do
24
+ it 'creates a new store raw object' do
25
+ expect(store.raw).to be_an_instance_of Hammerspace::Hash
26
+ end
27
+ end
28
+ describe '#clear!' do
29
+ describe 'when given no argument' do
30
+ it 'empties the store' do
31
+ expect(store.clear!).to eql Hash.new
32
+ end
33
+ end
34
+ describe 'when given an argument' do
35
+ it 'removes a key from the store' do
36
+ old_size = store.size
37
+ store.clear! 1
38
+ expect(store.size).to eql old_size - 1
39
+ end
40
+ end
41
+ end
42
+ describe '#[]' do
43
+ it 'retrieves a key' do
44
+ expect(store[1]).to eql 6
45
+ expect(store[:foo]).to eql :bar
46
+ expect(store['foo']).to eql 'bar'
47
+ end
48
+ end
49
+ describe '#[]=' do
50
+ it 'sets a key' do
51
+ expect(store[6] = 10).to eql 10
52
+ end
53
+ end
54
+ describe '#size' do
55
+ it 'returns the size of the store' do
56
+ expect(store.size).to eql 7
57
+ end
58
+ end
59
+ describe '#include?' do
60
+ it 'checks for a key in the store' do
61
+ expect(store.include? :fish).to be_false
62
+ expect(store.include? 1).to be_true
63
+ end
64
+ end
65
+ describe '#keys' do
66
+ it 'lists the keys in the store' do
67
+ expect(store.keys.to_set).to eql keys
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,10 @@
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+
4
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
5
+ SimpleCov.start do
6
+ add_filter '/spec/'
7
+ end
8
+
9
+ require 'rspec'
10
+ require 'hammerstore'
metadata ADDED
@@ -0,0 +1,169 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hammerstore
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Les Aker
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: basiccache
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: hammerspace
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: travis-lint
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: coveralls
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: fuubar
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: Stores cached values in Hammerspace
126
+ email: me@lesaker.org
127
+ executables: []
128
+ extensions: []
129
+ extra_rdoc_files: []
130
+ files:
131
+ - ".gitignore"
132
+ - ".rspec"
133
+ - ".rubocop.yml"
134
+ - ".travis.yml"
135
+ - Gemfile
136
+ - LICENSE
137
+ - README.md
138
+ - Rakefile
139
+ - hammerstore.gemspec
140
+ - lib/hammerstore.rb
141
+ - spec/hammerstore_spec.rb
142
+ - spec/spec_helper.rb
143
+ homepage: https://github.com/akerl/hammerstore
144
+ licenses:
145
+ - MIT
146
+ metadata: {}
147
+ post_install_message:
148
+ rdoc_options: []
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ requirements: []
162
+ rubyforge_project:
163
+ rubygems_version: 2.0.14
164
+ signing_key:
165
+ specification_version: 4
166
+ summary: Hammerspace backend for BasicCache
167
+ test_files:
168
+ - spec/hammerstore_spec.rb
169
+ - spec/spec_helper.rb