madhattr 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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