madhattr 0.5.1 → 0.6.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/README.md +4 -0
- data/lib/madhattr/hattr_accessor.rb +19 -3
- data/lib/madhattr/version.rb +1 -1
- data/spec/hattr_accessor_with_defaults_spec.rb +42 -0
- data/spec/sample_object_with_defaults.rb +13 -0
- metadata +33 -16
- checksums.yaml +0 -7
data/README.md
CHANGED
@@ -37,7 +37,11 @@ and then, in your class:
|
|
37
37
|
e.g.,
|
38
38
|
|
39
39
|
hattr_reader :animals, :cat, :bird, :dog, :snake
|
40
|
+
|
41
|
+
Alternately, you can specify readers with defaults using `hattr_readers_with_defaults`:
|
40
42
|
|
43
|
+
hattr_readers_with_defaults :animals, cat: 'purty', 'dog: 'smelly', snake: 'slimy'
|
44
|
+
|
41
45
|
You can also create writers using `hattr_writer` or both readers and writers using `hattr_accessor`.
|
42
46
|
|
43
47
|
Enjoy!
|
@@ -1,12 +1,16 @@
|
|
1
1
|
module HattrAccessor
|
2
2
|
def hattr_reader(source, *keys)
|
3
3
|
ensure_readable source
|
4
|
-
keys
|
5
|
-
define_method(key) { send(source).fetch(key) }
|
6
|
-
end
|
4
|
+
define_readers(source, keys)
|
7
5
|
end
|
8
6
|
alias_method :hattr_readers, :hattr_reader
|
9
7
|
|
8
|
+
def hattr_reader_with_default(source, *keys_with_defaults)
|
9
|
+
ensure_readable source
|
10
|
+
define_readers_with_defaults(source, keys_with_defaults)
|
11
|
+
end
|
12
|
+
alias_method :hattr_readers_with_defaults, :hattr_reader_with_default
|
13
|
+
|
10
14
|
def hattr_writer(source, *keys)
|
11
15
|
ensure_readable source
|
12
16
|
keys.each do |key|
|
@@ -25,6 +29,18 @@ module HattrAccessor
|
|
25
29
|
|
26
30
|
protected
|
27
31
|
|
32
|
+
def define_readers_with_defaults(source, keys)
|
33
|
+
keys.first.each do |key, default_value|
|
34
|
+
define_method(key) { send(source).fetch(key, default_value) }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def define_readers(source, keys)
|
39
|
+
keys.each do|key|
|
40
|
+
define_method(key) { send(source).fetch(key) }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
28
44
|
def ensure_readable(source)
|
29
45
|
attr_reader(source) unless method_defined?(source)
|
30
46
|
end
|
data/lib/madhattr/version.rb
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'sample_object_with_defaults'
|
3
|
+
|
4
|
+
describe HattrAccessor do
|
5
|
+
context 'when the source object exists' do
|
6
|
+
subject { SampleObjectWithDefaults.new }
|
7
|
+
|
8
|
+
context 'cat' do
|
9
|
+
it 'has a reader' do
|
10
|
+
subject.must_respond_to :cat
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'does not have a writer' do
|
14
|
+
subject.wont_respond_to :cat=
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'returns the correct value when accessed' do
|
18
|
+
subject.cat.must_equal(3)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
context 'snake' do
|
24
|
+
it 'has a reader' do
|
25
|
+
subject.must_respond_to :snake
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'returns the correct value when accessed' do
|
29
|
+
subject.snake.must_equal('never!!!')
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'has a writer' do
|
33
|
+
subject.must_respond_to :snake=
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'sets the correct value' do
|
37
|
+
subject.snake = 0
|
38
|
+
subject.snake.must_equal(0)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'madhattr'
|
2
|
+
|
3
|
+
class SampleObjectWithDefaults
|
4
|
+
extend HattrAccessor
|
5
|
+
|
6
|
+
hattr_readers_with_defaults :options, cat: 3, snake: 'never!!!'
|
7
|
+
hattr_writer :options, :dog, :snake
|
8
|
+
hattr_accessor :options, :bird, :aardvark
|
9
|
+
|
10
|
+
def initialize(options = {dog: 2, bird: 'wut', dinosaur: 'extinct'})
|
11
|
+
@options = options
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: madhattr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Jacob Stetser
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2014-01-08 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,48 +30,55 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rake
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- - '>='
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '0'
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- - '>='
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '0'
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: guard
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- - '>='
|
51
|
+
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '0'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- - '>='
|
59
|
+
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: guard-minitest
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- - '>='
|
67
|
+
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: '0'
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
|
-
- - '>='
|
75
|
+
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
68
77
|
version: '0'
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: minitest
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
83
|
- - ~>
|
74
84
|
- !ruby/object:Gem::Version
|
@@ -76,6 +86,7 @@ dependencies:
|
|
76
86
|
type: :development
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
91
|
- - ~>
|
81
92
|
- !ruby/object:Gem::Version
|
@@ -83,15 +94,17 @@ dependencies:
|
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
95
|
name: minitest-spec-context
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
|
-
- - '>='
|
99
|
+
- - ! '>='
|
88
100
|
- !ruby/object:Gem::Version
|
89
101
|
version: '0'
|
90
102
|
type: :development
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
|
-
- - '>='
|
107
|
+
- - ! '>='
|
95
108
|
- !ruby/object:Gem::Version
|
96
109
|
version: '0'
|
97
110
|
description: Add accessors for a hash
|
@@ -114,34 +127,38 @@ files:
|
|
114
127
|
- lib/madhattr/version.rb
|
115
128
|
- madhattr.gemspec
|
116
129
|
- spec/hattr_accessor_spec.rb
|
130
|
+
- spec/hattr_accessor_with_defaults_spec.rb
|
117
131
|
- spec/sample_object.rb
|
132
|
+
- spec/sample_object_with_defaults.rb
|
118
133
|
- spec/spec_helper.rb
|
119
134
|
homepage: https://github.com/wideopenspaces/Madhattr
|
120
135
|
licenses:
|
121
136
|
- MIT
|
122
|
-
metadata: {}
|
123
137
|
post_install_message:
|
124
138
|
rdoc_options: []
|
125
139
|
require_paths:
|
126
140
|
- lib
|
127
141
|
required_ruby_version: !ruby/object:Gem::Requirement
|
142
|
+
none: false
|
128
143
|
requirements:
|
129
|
-
- - '>='
|
144
|
+
- - ! '>='
|
130
145
|
- !ruby/object:Gem::Version
|
131
146
|
version: '0'
|
132
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
|
+
none: false
|
133
149
|
requirements:
|
134
|
-
- - '>='
|
150
|
+
- - ! '>='
|
135
151
|
- !ruby/object:Gem::Version
|
136
152
|
version: '0'
|
137
153
|
requirements: []
|
138
154
|
rubyforge_project:
|
139
|
-
rubygems_version:
|
155
|
+
rubygems_version: 1.8.23
|
140
156
|
signing_key:
|
141
|
-
specification_version:
|
157
|
+
specification_version: 3
|
142
158
|
summary: Add accessors for a hash
|
143
159
|
test_files:
|
144
160
|
- spec/hattr_accessor_spec.rb
|
161
|
+
- spec/hattr_accessor_with_defaults_spec.rb
|
145
162
|
- spec/sample_object.rb
|
163
|
+
- spec/sample_object_with_defaults.rb
|
146
164
|
- spec/spec_helper.rb
|
147
|
-
has_rdoc:
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: f871829df144c58c26c6ccc56f1bb27cf25fd5b2
|
4
|
-
data.tar.gz: 198eb5c756712ad0529ba8eeea5c79c4eacc2315
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 876884eab5782c1604c1e789dedd9d30e4df3d6a80805401f7ce32a61b06b7d78b59e1cdb86de6e9630b41b8c16cd42124ffeed5937b0d2a30f6379a2a1a3324
|
7
|
-
data.tar.gz: 4716f8b0473e4de4946d1aa1bd1e982c8bf7fd37e8587aaa5c92060d71042641bc9e9d3113f2a5126d8362808b913a21f0beb699868075947920ed95ecd9b17d
|