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 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.each do |key|
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
@@ -1,3 +1,3 @@
1
1
  module Madhattr
2
- VERSION = "0.5.1"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -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.5.1
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: 2013-11-12 00:00:00.000000000 Z
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: 2.0.3
155
+ rubygems_version: 1.8.23
140
156
  signing_key:
141
- specification_version: 4
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