cistern 0.1.4 → 0.2.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.
- data/Gemfile +1 -0
- data/TODO.md +2 -0
- data/lib/cistern/attributes.rb +1 -7
- data/lib/cistern/collection.rb +11 -11
- data/lib/cistern/{formatters → formatter}/awesome_print.rb +0 -0
- data/lib/cistern/{formatters → formatter}/default.rb +0 -0
- data/lib/cistern/{formatters → formatter}/formatador.rb +14 -6
- data/lib/cistern/formatter.rb +3 -3
- data/lib/cistern/version.rb +1 -1
- data/spec/cistern_spec.rb +47 -17
- data/spec/model_spec.rb +14 -0
- metadata +9 -7
data/Gemfile
CHANGED
data/TODO.md
ADDED
data/lib/cistern/attributes.rb
CHANGED
@@ -161,13 +161,7 @@ module Cistern::Attributes
|
|
161
161
|
protected
|
162
162
|
|
163
163
|
def missing_attributes(args)
|
164
|
-
|
165
|
-
for arg in [:connection] | args
|
166
|
-
unless send("#{arg}") || attributes.has_key?(arg)
|
167
|
-
missing << arg
|
168
|
-
end
|
169
|
-
end
|
170
|
-
missing
|
164
|
+
([:connection] | args).select{|arg| send("#{arg}").nil?}
|
171
165
|
end
|
172
166
|
end
|
173
167
|
end
|
data/lib/cistern/collection.rb
CHANGED
@@ -4,9 +4,7 @@ class Cistern::Collection < Array
|
|
4
4
|
|
5
5
|
%w[reject select slice].each do |method|
|
6
6
|
define_method(method) do |*args, &block|
|
7
|
-
unless @loaded
|
8
|
-
lazy_load
|
9
|
-
end
|
7
|
+
lazy_load unless @loaded
|
10
8
|
data = super(*args, &block)
|
11
9
|
self.clone.clear.concat(data)
|
12
10
|
end
|
@@ -14,9 +12,7 @@ class Cistern::Collection < Array
|
|
14
12
|
|
15
13
|
%w[first last].each do |method|
|
16
14
|
define_method(method) do
|
17
|
-
unless @loaded
|
18
|
-
lazy_load
|
19
|
-
end
|
15
|
+
lazy_load unless @loaded
|
20
16
|
super()
|
21
17
|
end
|
22
18
|
end
|
@@ -35,8 +31,7 @@ class Cistern::Collection < Array
|
|
35
31
|
end
|
36
32
|
|
37
33
|
def create(attributes={})
|
38
|
-
|
39
|
-
model.save
|
34
|
+
self.new(attributes).save
|
40
35
|
end
|
41
36
|
|
42
37
|
def get(identity)
|
@@ -59,10 +54,10 @@ class Cistern::Collection < Array
|
|
59
54
|
raise(ArgumentError.new("Initialization parameters must be an attributes hash, got #{attributes.class} #{attributes.inspect}"))
|
60
55
|
end
|
61
56
|
model.new(
|
62
|
-
|
57
|
+
{
|
63
58
|
:collection => self,
|
64
|
-
:connection => connection
|
65
|
-
)
|
59
|
+
:connection => connection,
|
60
|
+
}.merge(attributes)
|
66
61
|
)
|
67
62
|
end
|
68
63
|
|
@@ -80,6 +75,11 @@ class Cistern::Collection < Array
|
|
80
75
|
self
|
81
76
|
end
|
82
77
|
|
78
|
+
def inspect
|
79
|
+
lazy_load unless @loaded
|
80
|
+
Cistern.formatter.call(self)
|
81
|
+
end
|
82
|
+
|
83
83
|
private
|
84
84
|
|
85
85
|
def lazy_load
|
File without changes
|
File without changes
|
@@ -2,6 +2,14 @@ require 'formatador'
|
|
2
2
|
|
3
3
|
module Cistern::Formatter::Formatador
|
4
4
|
def self.call(model)
|
5
|
+
case model
|
6
|
+
when Cistern::Collection then collection_inspect(model)
|
7
|
+
when Cistern::Model then model_inspect(model)
|
8
|
+
else model.inspect
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.model_inspect(model)
|
5
13
|
Thread.current[:formatador] ||= Formatador.new
|
6
14
|
data = "#{Thread.current[:formatador].indentation}<#{model.class.name}"
|
7
15
|
Thread.current[:formatador].indent do
|
@@ -14,20 +22,20 @@ module Cistern::Formatter::Formatador
|
|
14
22
|
data
|
15
23
|
end
|
16
24
|
|
17
|
-
def
|
25
|
+
def self.collection_inspect(collection)
|
18
26
|
Thread.current[:formatador] ||= Formatador.new
|
19
|
-
data = "#{Thread.current[:formatador].indentation}<#{
|
27
|
+
data = "#{Thread.current[:formatador].indentation}<#{collection.class.name}\n"
|
20
28
|
Thread.current[:formatador].indent do
|
21
|
-
unless
|
29
|
+
unless collection.class.attributes.empty?
|
22
30
|
data << "#{Thread.current[:formatador].indentation}"
|
23
|
-
data <<
|
31
|
+
data << collection.class.attributes.map {|attribute| "#{attribute}=#{send(attribute).inspect}"}.join(",\n#{Thread.current[:formatador].indentation}")
|
24
32
|
data << "\n"
|
25
33
|
end
|
26
34
|
data << "#{Thread.current[:formatador].indentation}["
|
27
|
-
unless
|
35
|
+
unless collection.empty?
|
28
36
|
data << "\n"
|
29
37
|
Thread.current[:formatador].indent do
|
30
|
-
data <<
|
38
|
+
data << collection.map {|member| member.inspect}.join(",\n")
|
31
39
|
data << "\n"
|
32
40
|
end
|
33
41
|
data << Thread.current[:formatador].indentation
|
data/lib/cistern/formatter.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Cistern::Formatter
|
2
|
-
autoload :AwesomePrint, 'cistern/
|
3
|
-
autoload :Default, 'cistern/
|
4
|
-
autoload :Formatador, 'cistern/
|
2
|
+
autoload :AwesomePrint, 'cistern/formatter/awesome_print'
|
3
|
+
autoload :Default, 'cistern/formatter/default'
|
4
|
+
autoload :Formatador, 'cistern/formatter/formatador'
|
5
5
|
end
|
data/lib/cistern/version.rb
CHANGED
data/spec/cistern_spec.rb
CHANGED
@@ -1,34 +1,64 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "
|
3
|
+
describe "#inspect" do
|
4
4
|
class Inspector < Cistern::Model
|
5
5
|
identity :id
|
6
6
|
attribute :name
|
7
7
|
end
|
8
|
+
class Inspectors < Cistern::Collection
|
9
|
+
model Inspector
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
+
def all
|
12
|
+
self.load([{id: 1, name: "2"},{id: 3, name: "4"}])
|
13
|
+
end
|
11
14
|
end
|
12
15
|
|
13
|
-
|
14
|
-
Cistern.formatter
|
16
|
+
before(:all) do
|
17
|
+
Cistern.formatter = Cistern::Formatter::Default
|
15
18
|
end
|
16
19
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
+
describe "Cistern::Model" do
|
21
|
+
it "should use default" do
|
22
|
+
Cistern.formatter = Cistern::Formatter::Default
|
20
23
|
|
21
|
-
|
22
|
-
|
23
|
-
Cistern.formatter= Cistern::Formatter::AwesomePrint
|
24
|
+
Inspector.new(id: 1, name: "name").inspect.should match /#<Inspector:0x[0-9a-f]+ attributes={id:1,name:\"name\"}/
|
25
|
+
end
|
24
26
|
|
25
|
-
|
26
|
-
|
27
|
+
it "should use awesome_print" do
|
28
|
+
Cistern.formatter = Cistern::Formatter::AwesomePrint
|
29
|
+
|
30
|
+
Inspector.new(id: 1, name: "name").inspect.match /(?x-mi:\#<Inspector:0x[0-9a-f]+>\ {\n\ \ \ \ \ \ :id\x1B\[0;37m\ =>\ \x1B\[0m\x1B\[1;34m1\x1B\[0m,\n\ \ \ \ :name\x1B\[0;37m\ =>\ \x1B\[0m\x1B\[0;33m"name"\x1B\[0m\n})/
|
31
|
+
end
|
27
32
|
|
28
|
-
|
29
|
-
|
30
|
-
|
33
|
+
it "should use formatador" do
|
34
|
+
Cistern.formatter = Cistern::Formatter::Formatador
|
35
|
+
|
36
|
+
Inspector.new(id: 1, name: "name").inspect.should == %q{ <Inspector
|
37
|
+
id=1,
|
38
|
+
name="name"
|
39
|
+
>}
|
40
|
+
end
|
41
|
+
end
|
31
42
|
|
32
|
-
|
43
|
+
describe "Cistern::Collection" do
|
44
|
+
it "should use default" do
|
45
|
+
Inspectors.new.all.inspect.should == %q{ <Inspectors
|
46
|
+
[
|
47
|
+
<Inspector
|
48
|
+
id=1,
|
49
|
+
name="2"
|
50
|
+
>,
|
51
|
+
<Inspector
|
52
|
+
id=3,
|
53
|
+
name="4"
|
54
|
+
>
|
55
|
+
]
|
56
|
+
>}
|
57
|
+
end
|
58
|
+
it "should use awesome_print" do
|
59
|
+
Cistern.formatter = Cistern::Formatter::AwesomePrint
|
60
|
+
Inspectors.new.all.inspect.should match(/^\[.*\]$/m) # close enough
|
61
|
+
end
|
62
|
+
it "should use formatador"
|
33
63
|
end
|
34
64
|
end
|
data/spec/model_spec.rb
CHANGED
@@ -30,6 +30,10 @@ describe "Cistern::Model" do
|
|
30
30
|
attribute :floater, type: :float
|
31
31
|
attribute :butternut, type: :integer, aliases: "squash", squash: "id"
|
32
32
|
attribute :custom, parser: lambda{|v, opts| "X!#{v}"}
|
33
|
+
|
34
|
+
def save
|
35
|
+
requires :flag
|
36
|
+
end
|
33
37
|
end
|
34
38
|
|
35
39
|
it "should parse string" do
|
@@ -75,5 +79,15 @@ describe "Cistern::Model" do
|
|
75
79
|
it "should slice out unaccounted for attributes" do
|
76
80
|
TypeSpec.new({"something" => {"id" => "12"}}).attributes.keys.should_not include("something")
|
77
81
|
end
|
82
|
+
|
83
|
+
describe "#requires" do
|
84
|
+
it "should raise if attribute not provided" do
|
85
|
+
lambda { TypeSpec.new({"connection" => "fake", "something" => {"id" => "12"}}).save }.should raise_exception(ArgumentError)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should raise if attribute is provided and is nil" do
|
89
|
+
lambda { TypeSpec.new({"connection" => "fake", "custom" => nil}).save }.should raise_exception(ArgumentError)
|
90
|
+
end
|
91
|
+
end
|
78
92
|
end
|
79
93
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cistern
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-17 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: API client framework extracted from Fog
|
15
15
|
email:
|
@@ -24,14 +24,15 @@ files:
|
|
24
24
|
- LICENSE
|
25
25
|
- README.md
|
26
26
|
- Rakefile
|
27
|
+
- TODO.md
|
27
28
|
- cistern.gemspec
|
28
29
|
- lib/cistern.rb
|
29
30
|
- lib/cistern/attributes.rb
|
30
31
|
- lib/cistern/collection.rb
|
31
32
|
- lib/cistern/formatter.rb
|
32
|
-
- lib/cistern/
|
33
|
-
- lib/cistern/
|
34
|
-
- lib/cistern/
|
33
|
+
- lib/cistern/formatter/awesome_print.rb
|
34
|
+
- lib/cistern/formatter/default.rb
|
35
|
+
- lib/cistern/formatter/formatador.rb
|
35
36
|
- lib/cistern/hash.rb
|
36
37
|
- lib/cistern/mock.rb
|
37
38
|
- lib/cistern/model.rb
|
@@ -49,17 +50,17 @@ rdoc_options: []
|
|
49
50
|
require_paths:
|
50
51
|
- lib
|
51
52
|
required_ruby_version: !ruby/object:Gem::Requirement
|
52
|
-
none: false
|
53
53
|
requirements:
|
54
54
|
- - ! '>='
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: '0'
|
57
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
57
|
none: false
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
60
|
- - ! '>='
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '0'
|
63
|
+
none: false
|
63
64
|
requirements: []
|
64
65
|
rubyforge_project:
|
65
66
|
rubygems_version: 1.8.24
|
@@ -71,3 +72,4 @@ test_files:
|
|
71
72
|
- spec/collection_spec.rb
|
72
73
|
- spec/model_spec.rb
|
73
74
|
- spec/spec_helper.rb
|
75
|
+
has_rdoc:
|