ishin 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2d63099f6c8f19f6a16138fd55d0d5bb556c229a
4
- data.tar.gz: 3681c9613c481488fbf5697521865990a0116481
3
+ metadata.gz: 916893740198856f3e8461ad709f9764bf1d286e
4
+ data.tar.gz: 6fdf9f93f7300115d3f6423e5784a48a39e3a366
5
5
  SHA512:
6
- metadata.gz: 9f4692e1e48867a3b07e973861f7708b93f4053978a12f656b0a257442d1af6bb1cab4b47c398b360caec5c7aefb243b3b7c08d5d26dd23ca60eda65e4663382
7
- data.tar.gz: 4258b470c8ae5efcd9b04636ef8ef0c62687a4aa39394b3b5157f750ef4204c729b71126821acc8374acd36cbca172accc2e787d6456b4a4f351a586e3404c95
6
+ metadata.gz: bad9f801b6189842d1a1bc57627de382d3fe22ed5847230e082d4a12ff40a289b72198ac0f8fdb59b079fbe9caef3cf5aa6b89819b0695149a08adc247d43184
7
+ data.tar.gz: a4412fccee7db64485611fca3ef02182985101ca635ec935bab2af393972e78e0ac8624bf0732184d05948280380e3d3b55f96d866dac7c7f510f1de0ede2fcf
data/README.md CHANGED
@@ -129,6 +129,25 @@ Ishin.to_hash(lassie, symbolize: false)
129
129
  ```
130
130
  When setting the `symbolize` option to `false`, the explicit conversion of strings to symbols is prevented. This, however, does *not* mean that hashes whose keys are already symbols are converted into string-based keys.
131
131
 
132
+ ### Evaluating Methods
133
+
134
+ Normally, Ishin does not evaluate methods, but is possible to do so through the optional `evaluate` option by passing it an array of method names to evaluate.
135
+
136
+ ```ruby
137
+ class Speaker
138
+ def say
139
+ "Say what?"
140
+ end
141
+ end
142
+
143
+ speaker = Speaker.new
144
+ # => #<Speaker:0x007fb2bb1812d8>
145
+ Ishin.to_hash(speaker, evaluate: [ :say ])
146
+ # => {:say=>"Say what?"}
147
+ ```
148
+
149
+ It is currently only possible to evaluate methods that do not require arguments.
150
+
132
151
  ## As a Mixin
133
152
 
134
153
  To use Ishin as a mixin in your own objects, simply include `Ishin::Mixin`:
data/ishin.gemspec CHANGED
@@ -4,23 +4,23 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'ishin/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "ishin"
7
+ spec.name = 'ishin'
8
8
  spec.version = Ishin::VERSION
9
- spec.authors = ["Eddy Luten"]
10
- spec.email = ["eddyluten@gmail.com"]
9
+ spec.authors = ['Eddy Luten']
10
+ spec.email = ['eddyluten@gmail.com']
11
11
 
12
12
  spec.summary = %q{Ishin is an object to hash converter.}
13
13
  spec.description = %q{Ishin converts objects into their Hash representations.}
14
- spec.homepage = "https://github.com/EddyLuten/ishin"
15
- spec.license = "MIT"
14
+ spec.homepage = 'https://github.com/EddyLuten/ishin'
15
+ spec.license = 'MIT'
16
16
  spec.platform = Gem::Platform::RUBY
17
17
 
18
18
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
- spec.bindir = "exe"
19
+ spec.bindir = 'exe'
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
- spec.require_paths = ["lib"]
21
+ spec.require_paths = ['lib']
22
22
 
23
- spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "rspec"
25
- spec.add_development_dependency "codeclimate-test-reporter"
23
+ spec.add_development_dependency 'rake', '~> 10.0'
24
+ spec.add_development_dependency 'rspec'
25
+ spec.add_development_dependency 'codeclimate-test-reporter'
26
26
  end
data/lib/ishin/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ishin
2
- VERSION = "0.2.1"
2
+ VERSION = '0.3.0'
3
3
  end
data/lib/ishin.rb CHANGED
@@ -1,10 +1,9 @@
1
1
  require 'ishin/version'
2
2
 
3
3
  module Ishin
4
-
5
4
  module Mixin
6
5
  def to_hash(options = {})
7
- Ishin::to_hash(self, options)
6
+ Ishin.to_hash(self, options)
8
7
  end
9
8
  end
10
9
 
@@ -13,11 +12,12 @@ module Ishin
13
12
  result = {}
14
13
 
15
14
  case object
16
- when Struct then struct_to_hash(result, object, options)
17
- when Hash then hash_to_hash(result, object, options)
18
- else object_to_hash(result, object, options)
15
+ when Struct then struct_to_hash(result, object, options)
16
+ when Hash then hash_to_hash(result, object, options)
17
+ else object_to_hash(result, object, options)
19
18
  end
20
19
 
20
+ evaluate_methods(result, object, options)
21
21
  result
22
22
  end
23
23
 
@@ -29,14 +29,16 @@ module Ishin
29
29
  end
30
30
 
31
31
  def self.hash_to_hash(result, object, options)
32
- return result.replace(object) if !should_recurse?(options) && options[:symbolize]
32
+ if !should_recurse?(options) && options[:symbolize]
33
+ return result.replace(object)
34
+ end
33
35
 
34
36
  new_options = decrement_recursion_depth(options.clone)
35
37
 
36
38
  object.each do |key, value|
37
39
  key = key.to_sym if options[:symbolize] && key.is_a?(String)
38
40
 
39
- result[key] = is_native_type?(value) ? value : to_hash(value, new_options)
41
+ result[key] = native_type?(value) ? value : to_hash(value, new_options)
40
42
  end
41
43
  end
42
44
 
@@ -47,7 +49,7 @@ module Ishin
47
49
  new_options = decrement_recursion_depth(options.clone)
48
50
 
49
51
  result.each do |key, value|
50
- result[key] = to_hash(value, new_options) unless is_native_type?(value)
52
+ result[key] = to_hash(value, new_options) unless native_type?(value)
51
53
  end
52
54
  end
53
55
 
@@ -59,7 +61,7 @@ module Ishin
59
61
  key = var.to_s.delete('@')
60
62
  key = key.to_sym if options[:symbolize]
61
63
 
62
- if should_recurse?(options) && !is_native_type?(value)
64
+ if should_recurse?(options) && !native_type?(value)
63
65
  result[key] = to_hash(value, new_options)
64
66
  else
65
67
  result[key] = value
@@ -67,19 +69,31 @@ module Ishin
67
69
  end
68
70
  end
69
71
 
72
+ def self.evaluate_methods(result, object, options)
73
+ return if options[:evaluate].nil? || options[:evaluate].empty?
74
+
75
+ options[:evaluate].each do |method|
76
+ next unless object.methods.include?(method)
77
+ key_name = options[:symbolize] ? method : method.to_s
78
+ result[key_name] = object.send(method)
79
+ end
80
+ end
81
+
70
82
  def self.should_recurse?(options)
71
83
  options[:recursive] && options[:recursion_depth] > 0
72
84
  end
73
85
 
74
- def self.is_native_type?(value)
75
- [ String, Numeric, TrueClass, FalseClass ].any? { |i| value.is_a?(i) }
86
+ def self.native_type?(value)
87
+ [String, Numeric, TrueClass, FalseClass].any? { |i| value.is_a?(i) }
76
88
  end
77
89
 
78
90
  def self.defaults
79
91
  {
80
92
  recursive: false,
81
93
  recursion_depth: 1,
82
- symbolize: true
94
+ symbolize: true,
95
+ evaluate: [],
96
+ exclude: []
83
97
  }
84
98
  end
85
99
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ishin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eddy Luten
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-04-26 00:00:00.000000000 Z
11
+ date: 2015-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake