hash_out 0.1.2 → 0.1.3
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/Gemfile.lock +1 -1
- data/README.md +86 -17
- data/lib/hash_out/call_registry.rb +24 -0
- data/lib/hash_out/hasher.rb +41 -0
- data/lib/hash_out/version.rb +1 -1
- data/lib/hash_out.rb +16 -41
- data/lib/last_call.rb +5 -0
- data/spec/features/ambiguous_caller_spec.rb +22 -0
- data/spec/features/attribute_mutation_spec.rb +17 -0
- data/spec/features/exclude_from_hash_out_spec.rb +23 -0
- data/spec/features/objects_methods_that_call_hash_out_spec.rb +25 -0
- data/spec/features/objects_methods_with_arguments_spec.rb +44 -0
- data/spec/features/objects_private_methods_spec.rb +24 -0
- data/spec/features/objects_public_methods_spec.rb +25 -0
- data/spec/spec_helper.rb +3 -0
- metadata +22 -4
- data/spec/lib/integration_spec.rb +0 -130
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9a0ed8ed60004a223c24fb5c5d7dc878ce96de7
|
4
|
+
data.tar.gz: 49bfa30ee0655b9fbd206dfeef7881a24e9e2a18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41a8055dd2e9f5f7ff7928b8760016d711eeeea3fd01b66adc3b2ab5322a3281098b718249fff71f092186bac3560a54aa014d989d7e30a8da9fb524d6e79e48
|
7
|
+
data.tar.gz: 7c7aa9a516d33a43ac4edd84de03ba540ca2a990786d8f1b739d254b985c3f94676e79e92116855251ae8817d61eb19cc88bd894a8607be06f7f2a133bd3bba9
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
### version 0.1.3 - *July 17, 2013*
|
2
|
+
* Fixes bug: multiple calls to `#hash_out` that are from an internal method infinitely recurse
|
3
|
+
* Fixes bug: method not present in hash when outside caller of `#hash_out` has same name
|
4
|
+
* Makes behavior more object-oriented
|
5
|
+
* Divides features into separate files
|
6
|
+
* Improves README in terms of understanding different features
|
7
|
+
|
8
|
+
### version 0.1.2 - *July 15, 2013*
|
9
|
+
* Fixes bug: internal calls to `#hash_out` infinitely recurse
|
10
|
+
|
11
|
+
### version 0.1.1 - *July 15, 2013*
|
12
|
+
* Changes rake to a development dependency from a runtime dependency
|
13
|
+
|
14
|
+
# version 0.1.0 - *July 15, 2013*
|
15
|
+
* Initial release
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -16,15 +16,28 @@ $ gem install hash_out
|
|
16
16
|
```
|
17
17
|
|
18
18
|
## Usage
|
19
|
-
|
20
|
-
2. Include `HashOut` in your class.
|
21
|
-
3. If desired, exclude methods from `#hash_out` by adding `exclude_from_hash_out` to them.
|
22
|
-
4. Call `#hash_out` on the instance to return a hash of method names and their values.
|
19
|
+
`require 'hash_out'`, `include HashOut`, and call `#hash_out` on the instance.
|
23
20
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
```ruby
|
22
|
+
require 'hash_out'
|
23
|
+
|
24
|
+
class Movie
|
25
|
+
include HashOut
|
26
|
+
|
27
|
+
def title
|
28
|
+
'Fire Walk With Me'
|
29
|
+
end
|
30
|
+
|
31
|
+
def director
|
32
|
+
'David Lynch'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Movie.new.hash_out
|
37
|
+
# => {:title=>"Fire Walk With Me", :director=>'David Lynch'}
|
38
|
+
```
|
39
|
+
|
40
|
+
To exclude public methods from `#hash_out`, put `exclude_from_hash_out` at the top of them.
|
28
41
|
|
29
42
|
```ruby
|
30
43
|
require 'hash_out'
|
@@ -40,30 +53,80 @@ class Movie
|
|
40
53
|
exclude_from_hash_out
|
41
54
|
'David Lynch'
|
42
55
|
end
|
56
|
+
end
|
57
|
+
|
58
|
+
Movie.new.hash_out
|
59
|
+
# => {:title=>"Fire Walk With Me"}
|
60
|
+
```
|
61
|
+
|
62
|
+
Private methods are ignored.
|
63
|
+
```ruby
|
64
|
+
require 'hash_out'
|
65
|
+
|
66
|
+
class Movie
|
67
|
+
include HashOut
|
43
68
|
|
44
|
-
def
|
45
|
-
|
69
|
+
def title
|
70
|
+
'Fire Walk With Me'
|
46
71
|
end
|
47
72
|
|
48
|
-
|
49
|
-
|
73
|
+
private
|
74
|
+
|
75
|
+
def director
|
76
|
+
'David Lynch'
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
Movie.new.hash_out
|
81
|
+
# => {:title=>"Fire Walk With Me"}
|
82
|
+
```
|
83
|
+
|
84
|
+
Public methods that require arguments are also ignored.
|
85
|
+
```ruby
|
86
|
+
require 'hash_out'
|
87
|
+
|
88
|
+
class Movie
|
89
|
+
include HashOut
|
90
|
+
|
91
|
+
def title
|
92
|
+
'Fire Walk With Me'
|
50
93
|
end
|
51
94
|
|
52
95
|
def chance_of_sequel? existing_sequels, strategy=FutureSequelStrategy
|
53
96
|
strategy.new(self, existing_sequels).chance > 0.5
|
54
97
|
end
|
98
|
+
end
|
55
99
|
|
56
|
-
|
100
|
+
Movie.new.hash_out
|
101
|
+
# => {:title=>"Fire Walk With Me"}
|
102
|
+
```
|
103
|
+
|
104
|
+
Public methods that call `#hash_out` are ignored, too.
|
57
105
|
|
58
|
-
|
59
|
-
|
106
|
+
```ruby
|
107
|
+
require 'hash_out'
|
108
|
+
|
109
|
+
class Movie
|
110
|
+
include HashOut
|
111
|
+
|
112
|
+
def title
|
113
|
+
'Fire Walk With Me'
|
114
|
+
end
|
115
|
+
|
116
|
+
def director
|
117
|
+
'David Lynch'
|
118
|
+
end
|
119
|
+
|
120
|
+
def attributes
|
121
|
+
hash_out
|
60
122
|
end
|
61
123
|
end
|
62
124
|
|
63
125
|
movie = Movie.new
|
126
|
+
movie.attributes
|
127
|
+
# => {:title=>"Fire Walk With Me", :director=>'David Lynch'}
|
64
128
|
movie.hash_out
|
65
|
-
# => {:title=>"Fire Walk With Me", :
|
66
|
-
|
129
|
+
# => {:title=>"Fire Walk With Me", :director=>'David Lynch'}
|
67
130
|
```
|
68
131
|
|
69
132
|
## Contribute
|
@@ -73,6 +136,12 @@ movie.hash_out
|
|
73
136
|
4. Ensure the specs are green (`$ rake`)
|
74
137
|
5. Open a pull request.
|
75
138
|
|
139
|
+
## TODO
|
140
|
+
* Bug: make `#hash_out` work with SimpleDelegator
|
141
|
+
* Provide class method that offers custom delegator for `#hash_out`
|
142
|
+
* Provide class method that offers alternative to `exclude_from_hash_out`
|
143
|
+
* Provide class method that allows for inclusion of protected and private methods in resulting hash.
|
144
|
+
|
76
145
|
## License
|
77
146
|
The MIT License (MIT)
|
78
147
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module HashOut
|
2
|
+
class CallRegistry
|
3
|
+
attr_reader :hash_out_caller
|
4
|
+
|
5
|
+
def initialize hash_out_caller
|
6
|
+
@times_called = 0
|
7
|
+
@hash_out_caller = hash_out_caller
|
8
|
+
end
|
9
|
+
|
10
|
+
def register_call
|
11
|
+
@times_called += 1
|
12
|
+
end
|
13
|
+
|
14
|
+
def delete_caller_from hash
|
15
|
+
hash.delete hash_out_caller if internal_call?
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def internal_call?
|
21
|
+
@times_called > 1
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
module HashOut
|
4
|
+
class Hasher < Struct.new :object, :call_registry
|
5
|
+
def object_to_hash
|
6
|
+
prepare_hashable_methods
|
7
|
+
set_hash
|
8
|
+
delete_exclusions
|
9
|
+
@hash
|
10
|
+
end
|
11
|
+
|
12
|
+
def exclusions
|
13
|
+
@exclusions ||= Set.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def exclude method
|
17
|
+
exclusions.add method
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def prepare_hashable_methods
|
23
|
+
@hashable_methods = object.send :_methods_requiring_no_args
|
24
|
+
call_registry.delete_caller_from @hashable_methods
|
25
|
+
end
|
26
|
+
|
27
|
+
def set_hash
|
28
|
+
@hash = Hash[hashable_method_value_pairs]
|
29
|
+
end
|
30
|
+
|
31
|
+
def hashable_method_value_pairs
|
32
|
+
@hashable_methods.map do |method|
|
33
|
+
object.send :_method_value_pair, method
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def delete_exclusions
|
38
|
+
exclusions.each { |exclusion| @hash.delete exclusion }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/hash_out/version.rb
CHANGED
data/lib/hash_out.rb
CHANGED
@@ -1,63 +1,38 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'last_call'
|
2
|
+
require 'hash_out/call_registry'
|
3
|
+
require 'hash_out/hasher'
|
3
4
|
|
5
|
+
module HashOut
|
4
6
|
def hash_out
|
5
|
-
|
6
|
-
|
7
|
-
handle_recursion(caller_method) do
|
8
|
-
if @called == 1
|
9
|
-
set_hash_out
|
10
|
-
delete_exclusions
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
@hash_out
|
7
|
+
_register_call last_call
|
8
|
+
_hasher.object_to_hash
|
15
9
|
end
|
16
10
|
|
17
11
|
protected
|
18
12
|
|
19
13
|
def exclude_from_hash_out
|
20
|
-
|
21
|
-
exclusions.add excluded_method
|
14
|
+
_hasher.exclude last_call
|
22
15
|
end
|
23
16
|
|
24
17
|
private
|
25
18
|
|
26
|
-
def
|
27
|
-
|
28
|
-
@called += 1
|
29
|
-
exclusions.add hash_out_caller
|
30
|
-
yield
|
31
|
-
@called = 0
|
19
|
+
def _register_call hash_out_caller
|
20
|
+
_call_registry(hash_out_caller).register_call
|
32
21
|
end
|
33
22
|
|
34
|
-
def
|
35
|
-
@
|
23
|
+
def _call_registry hash_out_caller=nil
|
24
|
+
@_call_registry ||= CallRegistry.new hash_out_caller
|
36
25
|
end
|
37
26
|
|
38
|
-
def
|
39
|
-
|
40
|
-
name_value_pair method_name
|
41
|
-
end
|
27
|
+
def _hasher
|
28
|
+
@_hasher ||= Hasher.new self, _call_registry
|
42
29
|
end
|
43
30
|
|
44
|
-
def
|
31
|
+
def _methods_requiring_no_args
|
45
32
|
public_methods(false).select { |m| [-1, 0].include? method(m).arity }
|
46
33
|
end
|
47
34
|
|
48
|
-
def
|
49
|
-
[
|
50
|
-
end
|
51
|
-
|
52
|
-
def delete_exclusions
|
53
|
-
exclusions.each { |exclusion| @hash_out.delete exclusion }
|
54
|
-
end
|
55
|
-
|
56
|
-
def exclusions
|
57
|
-
@exclusions ||= Set.new
|
58
|
-
end
|
59
|
-
|
60
|
-
def caller_method_sym caller_string
|
61
|
-
caller_string.match(/`(.*)'/)[1].to_sym
|
35
|
+
def _method_value_pair method
|
36
|
+
[method, send(method)]
|
62
37
|
end
|
63
38
|
end
|
data/lib/last_call.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe 'ambiguous caller' do
|
4
|
+
class What
|
5
|
+
include HashOut
|
6
|
+
|
7
|
+
def huh
|
8
|
+
:yep
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class Yep
|
13
|
+
def self.huh
|
14
|
+
What.new.hash_out
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it "keeps the key of the name of another object's caller" do
|
19
|
+
hash_out = { huh: :yep }
|
20
|
+
expect(Yep.huh).to_equal hash_out
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe 'attribute mutation' do
|
4
|
+
class Ooze
|
5
|
+
include HashOut
|
6
|
+
attr_accessor :color
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'accounts for it between calls to #hash_out' do
|
10
|
+
ooze = Ooze.new
|
11
|
+
ooze.color = :green
|
12
|
+
expect(ooze.hash_out).to_equal({color: :green})
|
13
|
+
|
14
|
+
ooze.color = :purple
|
15
|
+
expect(ooze.hash_out).to_equal({color: :purple})
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe '#exclude_from_hash_out' do
|
4
|
+
class Brawler
|
5
|
+
include HashOut
|
6
|
+
|
7
|
+
def fighting?
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
def pancakes
|
12
|
+
exclude_from_hash_out
|
13
|
+
'yes please'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'ignores public methods that declare exclusion from public hash' do
|
18
|
+
brawler = Brawler.new
|
19
|
+
hash_out = { fighting?: brawler.fighting? }
|
20
|
+
|
21
|
+
expect(brawler.hash_out).to_equal hash_out
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe "object's methods that call #hash_out" do
|
4
|
+
class SoMeta
|
5
|
+
include HashOut
|
6
|
+
|
7
|
+
def an_method
|
8
|
+
:result
|
9
|
+
end
|
10
|
+
|
11
|
+
def attributes
|
12
|
+
hash_out
|
13
|
+
hash_out
|
14
|
+
hash_out
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'ignores internal public method that calls #hash_out any number of times' do
|
19
|
+
so_meta = SoMeta.new
|
20
|
+
hash_out = { an_method: :result }
|
21
|
+
|
22
|
+
expect(so_meta.attributes).to_equal hash_out
|
23
|
+
expect(so_meta.hash_out).to_equal hash_out
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe "object's methods with arguments" do
|
4
|
+
class Beans; end;
|
5
|
+
class Grinder
|
6
|
+
include HashOut
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@beans = Beans.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def grind settings, beans=@beans
|
13
|
+
with_settings(settings) do |grinder|
|
14
|
+
beans.krush_with grinder
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def clean materials
|
19
|
+
clean_with materials
|
20
|
+
@cleaned = true
|
21
|
+
end
|
22
|
+
|
23
|
+
def blade edge=:sharp
|
24
|
+
edge
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def with_settings settings
|
30
|
+
@settings = settings
|
31
|
+
yield self
|
32
|
+
end
|
33
|
+
|
34
|
+
def clean_with materials
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'ignores public methods that require arguments' do
|
39
|
+
grinder = Grinder.new
|
40
|
+
hash_out = { blade: grinder.blade }
|
41
|
+
|
42
|
+
expect(grinder.hash_out).to_equal hash_out
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe "object's private methods" do
|
4
|
+
class ShotCaller
|
5
|
+
include HashOut
|
6
|
+
|
7
|
+
def front
|
8
|
+
:chillin
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def real_mood
|
14
|
+
:nervous
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'ignores them' do
|
19
|
+
shot_caller = ShotCaller.new
|
20
|
+
hash_out = { front: shot_caller.front }
|
21
|
+
|
22
|
+
expect(shot_caller.hash_out).to_equal hash_out
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe "object's public methods" do
|
4
|
+
class Baller
|
5
|
+
include HashOut
|
6
|
+
|
7
|
+
def mood
|
8
|
+
:ballin
|
9
|
+
end
|
10
|
+
|
11
|
+
def height
|
12
|
+
:tall
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'returns a hash of name-values from them' do
|
17
|
+
baller = Baller.new
|
18
|
+
hash_out = {
|
19
|
+
mood: baller.mood,
|
20
|
+
height: baller.height
|
21
|
+
}
|
22
|
+
|
23
|
+
expect(baller.hash_out).to_equal hash_out
|
24
|
+
end
|
25
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash_out
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dave Jachimiak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -46,14 +46,25 @@ extra_rdoc_files: []
|
|
46
46
|
files:
|
47
47
|
- .gitignore
|
48
48
|
- .travis.yml
|
49
|
+
- CHANGELOG.md
|
49
50
|
- Gemfile
|
50
51
|
- Gemfile.lock
|
51
52
|
- README.md
|
52
53
|
- Rakefile
|
53
54
|
- hash_out.gemspec
|
54
55
|
- lib/hash_out.rb
|
56
|
+
- lib/hash_out/call_registry.rb
|
57
|
+
- lib/hash_out/hasher.rb
|
55
58
|
- lib/hash_out/version.rb
|
56
|
-
-
|
59
|
+
- lib/last_call.rb
|
60
|
+
- spec/features/ambiguous_caller_spec.rb
|
61
|
+
- spec/features/attribute_mutation_spec.rb
|
62
|
+
- spec/features/exclude_from_hash_out_spec.rb
|
63
|
+
- spec/features/objects_methods_that_call_hash_out_spec.rb
|
64
|
+
- spec/features/objects_methods_with_arguments_spec.rb
|
65
|
+
- spec/features/objects_private_methods_spec.rb
|
66
|
+
- spec/features/objects_public_methods_spec.rb
|
67
|
+
- spec/spec_helper.rb
|
57
68
|
homepage: http://github.com/davejachimiak/hash_out
|
58
69
|
licenses:
|
59
70
|
- MIT
|
@@ -80,4 +91,11 @@ specification_version: 4
|
|
80
91
|
summary: 'hash_out adds the #hash_out method to your class'' instance. It returns
|
81
92
|
a hash of public method names and values.'
|
82
93
|
test_files:
|
83
|
-
- spec/
|
94
|
+
- spec/features/ambiguous_caller_spec.rb
|
95
|
+
- spec/features/attribute_mutation_spec.rb
|
96
|
+
- spec/features/exclude_from_hash_out_spec.rb
|
97
|
+
- spec/features/objects_methods_that_call_hash_out_spec.rb
|
98
|
+
- spec/features/objects_methods_with_arguments_spec.rb
|
99
|
+
- spec/features/objects_private_methods_spec.rb
|
100
|
+
- spec/features/objects_public_methods_spec.rb
|
101
|
+
- spec/spec_helper.rb
|
@@ -1,130 +0,0 @@
|
|
1
|
-
require_relative '../../lib/hash_out'
|
2
|
-
require 'minitest/autorun'
|
3
|
-
require 'minitest/spec/expect'
|
4
|
-
|
5
|
-
describe 'HashOut#hash_out' do
|
6
|
-
class Baller
|
7
|
-
include HashOut
|
8
|
-
|
9
|
-
def mood
|
10
|
-
:ballin
|
11
|
-
end
|
12
|
-
|
13
|
-
def height
|
14
|
-
:tall
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'returns a hash of name-values' do
|
19
|
-
baller = Baller.new
|
20
|
-
hash_out = {
|
21
|
-
mood: baller.mood,
|
22
|
-
height: baller.height
|
23
|
-
}
|
24
|
-
|
25
|
-
expect(baller.hash_out).to_equal hash_out
|
26
|
-
end
|
27
|
-
|
28
|
-
class ShotCaller
|
29
|
-
include HashOut
|
30
|
-
|
31
|
-
def front
|
32
|
-
:chillin
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def real_mood
|
38
|
-
:nervous
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'ignores private methods' do
|
43
|
-
shot_caller = ShotCaller.new
|
44
|
-
hash_out = { front: shot_caller.front }
|
45
|
-
|
46
|
-
expect(shot_caller.hash_out).to_equal hash_out
|
47
|
-
end
|
48
|
-
|
49
|
-
class Brawler
|
50
|
-
include HashOut
|
51
|
-
|
52
|
-
def fighting?
|
53
|
-
true
|
54
|
-
end
|
55
|
-
|
56
|
-
def pancakes
|
57
|
-
exclude_from_hash_out
|
58
|
-
'yes please'
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'ignores public methods that declare exclusion from public hash' do
|
63
|
-
brawler = Brawler.new
|
64
|
-
hash_out = { fighting?: brawler.fighting? }
|
65
|
-
|
66
|
-
expect(brawler.hash_out).to_equal hash_out
|
67
|
-
end
|
68
|
-
|
69
|
-
class Beans; end;
|
70
|
-
class Grinder
|
71
|
-
require 'ostruct'
|
72
|
-
include HashOut
|
73
|
-
|
74
|
-
def initialize
|
75
|
-
@beans = Beans.new
|
76
|
-
end
|
77
|
-
|
78
|
-
def grind settings, beans=@beans
|
79
|
-
with_settings(settings) do
|
80
|
-
beans.krush
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def clean materials
|
85
|
-
clean_with materials
|
86
|
-
@cleaned = true
|
87
|
-
end
|
88
|
-
|
89
|
-
def blade edge=:sharp
|
90
|
-
edge
|
91
|
-
end
|
92
|
-
|
93
|
-
private
|
94
|
-
|
95
|
-
def with_settings settings
|
96
|
-
@settings = settings
|
97
|
-
yield self
|
98
|
-
end
|
99
|
-
|
100
|
-
def clean_with materials
|
101
|
-
#
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
it 'ignores public methods that require arguments' do
|
106
|
-
grinder = Grinder.new
|
107
|
-
hash_out = { blade: grinder.blade }
|
108
|
-
|
109
|
-
expect(grinder.hash_out).to_equal hash_out
|
110
|
-
end
|
111
|
-
|
112
|
-
class SoMeta
|
113
|
-
include HashOut
|
114
|
-
|
115
|
-
def an_method
|
116
|
-
:result
|
117
|
-
end
|
118
|
-
|
119
|
-
def attributes
|
120
|
-
hash_out
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
it "ignores internal public method that calls #hash_out" do
|
125
|
-
so_meta = SoMeta.new
|
126
|
-
hash_out = { an_method: :result }
|
127
|
-
|
128
|
-
expect(so_meta.attributes).to_equal hash_out
|
129
|
-
end
|
130
|
-
end
|