cooler 0.0.1 → 0.0.2
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.
- data/Gemfile.lock +4 -4
- data/README.md +8 -0
- data/cooler.gemspec +4 -4
- data/lib/cooler/errors.rb +9 -1
- data/lib/cooler/model.rb +13 -3
- data/lib/cooler/version.rb +1 -1
- data/spec/cooler/model_spec.rb +16 -9
- metadata +12 -12
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cooler (0.0.
|
5
|
-
activesupport (
|
4
|
+
cooler (0.0.2)
|
5
|
+
activesupport (>= 3.0.0)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
@@ -31,8 +31,8 @@ PLATFORMS
|
|
31
31
|
ruby
|
32
32
|
|
33
33
|
DEPENDENCIES
|
34
|
-
autotest (~> 4.4.
|
34
|
+
autotest (~> 4.4.6)
|
35
35
|
cooler!
|
36
36
|
rake
|
37
|
-
rr (~> 1.0.
|
37
|
+
rr (~> 1.0.4)
|
38
38
|
rspec (~> 2.12.0)
|
data/README.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
<img src="http://i.imgur.com/qiNrL.jpg" alt="Cooler" align="right">
|
2
|
+
|
1
3
|
# Cooler
|
2
4
|
|
5
|
+
_The Good-Hearted Leader_
|
6
|
+
|
7
|
+
> Cooler Howard Smith has an outgoing and mellow personality and always keeps his
|
8
|
+
> head up even in the most daring situations. He is smart, laid-back, friendly,
|
9
|
+
> witty, and usually optimistic even when things get serious.
|
10
|
+
|
3
11
|
A mini ORM, agnostic to key value store databases.
|
data/cooler.gemspec
CHANGED
@@ -10,16 +10,16 @@ Gem::Specification.new do |gem|
|
|
10
10
|
gem.email = ["ivan@mohound.com"]
|
11
11
|
gem.description = %q{Mini ORM, agnostic to key value store databases}
|
12
12
|
gem.summary = %q{Mini ORM, agnostic to key value store databases}
|
13
|
-
gem.homepage = "http://github.com/mohound/
|
13
|
+
gem.homepage = "http://github.com/mohound/cooler"
|
14
14
|
|
15
15
|
gem.files = `git ls-files`.split($/)
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
|
+
gem.add_dependency('activesupport', '>= 3.0.0')
|
20
21
|
|
21
|
-
gem.add_dependency('activesupport', '~> 3.2.0')
|
22
22
|
gem.add_development_dependency('rspec', '~> 2.12.0')
|
23
|
-
gem.add_development_dependency('rr', '~> 1.0.
|
24
|
-
gem.add_development_dependency('autotest', '~> 4.4.
|
23
|
+
gem.add_development_dependency('rr', '~> 1.0.4')
|
24
|
+
gem.add_development_dependency('autotest', '~> 4.4.6')
|
25
25
|
end
|
data/lib/cooler/errors.rb
CHANGED
data/lib/cooler/model.rb
CHANGED
@@ -62,11 +62,11 @@ module Cooler
|
|
62
62
|
# default :app_key, lambda { |install| install.app.key }
|
63
63
|
#
|
64
64
|
# Returns nothing.
|
65
|
-
# Raises
|
65
|
+
# Raises NameError if attribute does not exist.
|
66
66
|
def default(attr, value, &block)
|
67
67
|
unless instance_methods.include?("#{attr}=".to_sym) &&
|
68
68
|
instance_methods.include?(attr.to_sym)
|
69
|
-
raise "Unknown attribute #{attr}"
|
69
|
+
raise NameError, "Unknown attribute #{attr}"
|
70
70
|
end
|
71
71
|
@default_values[attr.to_sym] = value || block
|
72
72
|
end
|
@@ -91,9 +91,10 @@ module Cooler
|
|
91
91
|
# # => Gets object with key: 'install_123'
|
92
92
|
#
|
93
93
|
# Return a Model instance or nothing if not found.
|
94
|
+
# Raises NameError, if searching by key and key not defined.
|
94
95
|
def get(key)
|
95
96
|
if Hash === key
|
96
|
-
raise 'Key not defined' unless @key_block
|
97
|
+
raise NameError, 'Key not defined' unless @key_block
|
97
98
|
key = @key_block.(OpenStruct.new(key))
|
98
99
|
end
|
99
100
|
result = Cooler::Adapter.get.(key) and new(key, result)
|
@@ -172,6 +173,15 @@ module Cooler
|
|
172
173
|
!Cooler::Adapter.get.(_key).nil?
|
173
174
|
end
|
174
175
|
|
176
|
+
# Saves persisted attributes to the database. Raises an exception if
|
177
|
+
# not able to save it.
|
178
|
+
#
|
179
|
+
# Returns nothing.
|
180
|
+
# Raises Cooler::InvalidRecord if not able to save it.
|
181
|
+
def save!
|
182
|
+
raise Cooler::InvalidRecord unless save
|
183
|
+
end
|
184
|
+
|
175
185
|
private
|
176
186
|
def set_default_values
|
177
187
|
self.class.default_values.each do |key, value|
|
data/lib/cooler/version.rb
CHANGED
data/spec/cooler/model_spec.rb
CHANGED
@@ -26,7 +26,7 @@ describe Cooler::Model do
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
describe 'key' do
|
29
|
+
describe '#key' do
|
30
30
|
it 'should set its key to a new format' do
|
31
31
|
TestModelNewKey.key { |i| "foo_bar_#{i.foo}" }
|
32
32
|
t = TestModelNewKey.new(foo: 'baaar')
|
@@ -34,7 +34,7 @@ describe Cooler::Model do
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
describe '_key' do
|
37
|
+
describe '._key' do
|
38
38
|
it 'should be the passed key' do
|
39
39
|
instance = TestModel.new('keykey')
|
40
40
|
instance._key.should == 'keykey'
|
@@ -58,7 +58,7 @@ describe Cooler::Model do
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
describe 'get' do
|
61
|
+
describe '#get' do
|
62
62
|
it "should return the instance if Adapter's get block returns something" do
|
63
63
|
mock(Cooler::Adapter).get do
|
64
64
|
->(key) { key.should == 'test_bacon' && { foo: 'bar' } }
|
@@ -89,7 +89,7 @@ describe Cooler::Model do
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
-
describe 'get!' do
|
92
|
+
describe '#get!' do
|
93
93
|
it 'should return the instance if found by Adapter' do
|
94
94
|
mock(Cooler::Adapter).get do
|
95
95
|
->(k) { k.should == 'test_bacon' && { foo: 'bar' } }
|
@@ -106,7 +106,7 @@ describe Cooler::Model do
|
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
|
-
describe 'attributes=' do
|
109
|
+
describe '.attributes=' do
|
110
110
|
before(:each) do
|
111
111
|
@instance = TestModelUsingAttrAccessors.new
|
112
112
|
end
|
@@ -133,7 +133,7 @@ describe Cooler::Model do
|
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
|
-
describe 'serializable_hash' do
|
136
|
+
describe '.serializable_hash' do
|
137
137
|
it 'should only include class properties' do
|
138
138
|
instance = TestModelUsingAttrAccessors.new(foo: 'bar', bacon: 'CHUNKY')
|
139
139
|
instance.serializable_hash.keys.should_not include(:bacon)
|
@@ -150,7 +150,7 @@ describe Cooler::Model do
|
|
150
150
|
end
|
151
151
|
end
|
152
152
|
|
153
|
-
describe 'default' do
|
153
|
+
describe '#default' do
|
154
154
|
it 'should raise an exception if no such attribute' do
|
155
155
|
expect { TestModelWithDefaultValues.default :chunky }.
|
156
156
|
to raise_error
|
@@ -190,7 +190,14 @@ describe Cooler::Model do
|
|
190
190
|
end
|
191
191
|
end
|
192
192
|
|
193
|
-
describe 'save' do
|
193
|
+
describe '.save!' do
|
194
|
+
it 'should raise an exception if not saved' do
|
195
|
+
mock(instance = TestModelForSave.new).save { false }
|
196
|
+
expect { instance.save! }.to raise_error(Cooler::InvalidRecord)
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
describe '.save' do
|
194
201
|
it "should call Adapter's set to save its attributes and fail" do
|
195
202
|
instance = TestModelForSave.new(foo: 'bar', bar: 'BAR')
|
196
203
|
mock(Cooler::Adapter).set do
|
@@ -216,7 +223,7 @@ describe Cooler::Model do
|
|
216
223
|
end
|
217
224
|
end
|
218
225
|
|
219
|
-
describe 'create' do
|
226
|
+
describe '.create' do
|
220
227
|
it 'should call Adapter to save its attributes' do
|
221
228
|
mock(Cooler::Adapter).set do
|
222
229
|
->(key, value) do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cooler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -16,17 +16,17 @@ dependencies:
|
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 3.
|
21
|
+
version: 3.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 3.
|
29
|
+
version: 3.0.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: rspec
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 1.0.
|
53
|
+
version: 1.0.4
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.0.
|
61
|
+
version: 1.0.4
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: autotest
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
requirements:
|
67
67
|
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 4.4.
|
69
|
+
version: 4.4.6
|
70
70
|
type: :development
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -74,7 +74,7 @@ dependencies:
|
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: 4.4.
|
77
|
+
version: 4.4.6
|
78
78
|
description: Mini ORM, agnostic to key value store databases
|
79
79
|
email:
|
80
80
|
- ivan@mohound.com
|
@@ -97,7 +97,7 @@ files:
|
|
97
97
|
- spec/cooler/model_spec.rb
|
98
98
|
- spec/spec_helper.rb
|
99
99
|
- spec/support/test_models.rb
|
100
|
-
homepage: http://github.com/mohound/
|
100
|
+
homepage: http://github.com/mohound/cooler
|
101
101
|
licenses: []
|
102
102
|
post_install_message:
|
103
103
|
rdoc_options: []
|
@@ -111,7 +111,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
111
111
|
version: '0'
|
112
112
|
segments:
|
113
113
|
- 0
|
114
|
-
hash:
|
114
|
+
hash: -3025709922472475179
|
115
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
@@ -120,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
120
|
version: '0'
|
121
121
|
segments:
|
122
122
|
- 0
|
123
|
-
hash:
|
123
|
+
hash: -3025709922472475179
|
124
124
|
requirements: []
|
125
125
|
rubyforge_project:
|
126
126
|
rubygems_version: 1.8.23
|