liner 0.1.0 → 0.1.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.
- data/README.md +16 -8
- data/lib/liner.rb +1 -1
- data/lib/liner/base.rb +8 -2
- data/lib/liner/hashable.rb +6 -0
- data/lib/liner/version.rb +1 -1
- data/test/liner/base_test.rb +14 -0
- data/test/liner_test.rb +5 -0
- metadata +4 -2
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Liner
|
2
2
|
|
3
|
-
Lay a liner for your
|
3
|
+
Lay a liner for your Ruby classes. Liner is designed to enhance simple classes
|
4
|
+
with some common idioms.
|
4
5
|
|
5
6
|
## Usage
|
6
7
|
|
@@ -19,27 +20,34 @@ class Engine
|
|
19
20
|
end
|
20
21
|
```
|
21
22
|
|
22
|
-
|
23
|
+
Your new class comes with an initializer that takes values in the order you
|
24
|
+
defined them.
|
23
25
|
```ruby
|
24
|
-
e = Engine.new(
|
26
|
+
e = Engine.new('V6', 'gasoline')
|
27
|
+
# => #<Engine layout="V6", fuel="gasoline">
|
28
|
+
```
|
29
|
+
Or, you can initialize with a hash if you prefer.
|
30
|
+
```ruby
|
31
|
+
e = Engine.new(layout: 'V8', fuel: "gasoline")
|
32
|
+
# => #<Engine layout="V8", fuel="gasoline">
|
25
33
|
```
|
26
34
|
|
27
35
|
Attribute getters and setters are built in.
|
28
36
|
```ruby
|
29
|
-
e.fuel
|
37
|
+
e.fuel # => "gasoline"
|
30
38
|
e.fuel = "diesel" # => "diesel"
|
31
39
|
```
|
32
40
|
|
33
|
-
Attributes are accessible via hash
|
41
|
+
Attributes are accessible via hash style lookup too.
|
34
42
|
```ruby
|
35
|
-
e[:layout]
|
43
|
+
e[:layout] # => "V8"
|
36
44
|
e[:layout] = "V6" # => "V6"
|
37
|
-
e[:foo] = "Bar"
|
45
|
+
e[:foo] = "Bar" # => ArgumentError: Invalid liner attribute: 'foo'
|
38
46
|
```
|
39
47
|
|
40
48
|
Equality methods are also availble.
|
41
49
|
```ruby
|
42
|
-
e.eql? Engine.new(layout: 'I4')
|
50
|
+
e.eql? Engine.new(layout: 'I4') # => false
|
43
51
|
e == Engine.new(layout: 'V6', fuel: 'diesel') # => true
|
44
52
|
```
|
45
53
|
|
data/lib/liner.rb
CHANGED
data/lib/liner/base.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
module Liner
|
2
2
|
module Base
|
3
|
-
def initialize(
|
4
|
-
|
3
|
+
def initialize(*args)
|
4
|
+
if args.count == 1 && args.first.respond_to?(:keys)
|
5
|
+
self.liner = args.first
|
6
|
+
elsif args.count >= 1 && args.count >= liner_keys.count
|
7
|
+
self.liner_values = args
|
8
|
+
else
|
9
|
+
raise ArgumentError, "Liner doesn't know how to initialize with `#{args}`."
|
10
|
+
end
|
5
11
|
end
|
6
12
|
end
|
7
13
|
end
|
data/lib/liner/hashable.rb
CHANGED
data/lib/liner/version.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
describe Liner::Base do
|
2
|
+
describe :initialize do
|
3
|
+
it "should accept key/value pairs" do
|
4
|
+
beer = Beer.new(hops: 'Cascade', yeast: 'Top Fermenting')
|
5
|
+
beer.hops.must_equal 'Cascade'
|
6
|
+
beer.yeast.must_equal 'Top Fermenting'
|
7
|
+
end
|
8
|
+
it "should accept a list of values" do
|
9
|
+
burger = Burger.new('Sesame Seed', 'Soy', 'Cheddar')
|
10
|
+
burger.bun.must_equal 'Sesame Seed'
|
11
|
+
burger.cheese.must_equal 'Cheddar'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/test/liner_test.rb
CHANGED
@@ -3,23 +3,28 @@ describe Liner do
|
|
3
3
|
let(:beer) { Beer.new(hops: 'columbus') }
|
4
4
|
let(:pizza) { Pizza.new(crust: 'thin') }
|
5
5
|
let(:burger){ Burger.new(bun: 'sesame') }
|
6
|
+
|
6
7
|
it "should create a new class" do
|
7
8
|
[Beer, Pizza, Burger].all?{|klass| klass.is_a? Class }
|
8
9
|
end
|
10
|
+
|
9
11
|
it "should define liner_keys" do
|
10
12
|
beer.liner_keys.must_equal [:hops, :yeast]
|
11
13
|
pizza.liner_keys.must_equal [:crust, :sauce]
|
12
14
|
burger.liner_keys.must_equal [:bun, :meat, :cheese]
|
13
15
|
end
|
16
|
+
|
14
17
|
it "should define attribute getters" do
|
15
18
|
beer.must_respond_to :hops
|
16
19
|
pizza.must_respond_to :sauce
|
17
20
|
burger.must_respond_to :meat
|
18
21
|
end
|
22
|
+
|
19
23
|
it "should define attribute setters" do
|
20
24
|
beer.must_respond_to :yeast=
|
21
25
|
pizza.must_respond_to :crust=
|
22
26
|
burger.must_respond_to :bun=
|
23
27
|
end
|
28
|
+
|
24
29
|
end
|
25
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: liner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
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: 2014-01-
|
12
|
+
date: 2014-01-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -80,6 +80,7 @@ files:
|
|
80
80
|
- lib/liner/serializable.rb
|
81
81
|
- lib/liner/version.rb
|
82
82
|
- liner.gemspec
|
83
|
+
- test/liner/base_test.rb
|
83
84
|
- test/liner/equalizable_test.rb
|
84
85
|
- test/liner/hashable_test.rb
|
85
86
|
- test/liner/inspectable_test.rb
|
@@ -111,6 +112,7 @@ signing_key:
|
|
111
112
|
specification_version: 3
|
112
113
|
summary: A liner for Ruby objects. Add attribute, inspection, and equality methods.
|
113
114
|
test_files:
|
115
|
+
- test/liner/base_test.rb
|
114
116
|
- test/liner/equalizable_test.rb
|
115
117
|
- test/liner/hashable_test.rb
|
116
118
|
- test/liner/inspectable_test.rb
|