morfo 0.4.0 → 0.5.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.
- checksums.yaml +4 -4
- data/README.md +16 -1
- data/lib/morfo.rb +7 -7
- data/lib/morfo/version.rb +1 -1
- data/morfo.gemspec +1 -1
- data/spec/support/shared_examples.rb +28 -8
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9745685e231af883b84df5fff36681de804fa51
|
4
|
+
data.tar.gz: 2907a87a4dc0903ce1144e0b274950d8cdf02056
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28fdf38411af5ddf9ab0d413c591b3a71e232cb38745a6abbe471e8dffcd0f142547acd7114ed3ad1704a80aa5b9357b16acbae1c93347c5ee453161c342caf8
|
7
|
+
data.tar.gz: 29ce48337dbd64783e7f00cadfbe44113b7c807a3adda00956308140748f45e4dd761bf810513f052d2917d22318a79b72a1eca1e2fedca2b518ccc2f35aa48e
|
data/README.md
CHANGED
@@ -28,13 +28,28 @@ In order to morf the hashes you have to provide a class that extends `Morf::Base
|
|
28
28
|
|
29
29
|
Use the `field` method to specify what fields exist and where they will get their data from:
|
30
30
|
|
31
|
+
### Options
|
32
|
+
|
33
|
+
The following options can be passed to the morfer
|
34
|
+
|
35
|
+
#### include_nil_values
|
36
|
+
|
37
|
+
When passed in, all values that can not be found in the source hash will be set to nil (defaults to `false`). By default those keys will just appear in the result:
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
Title.morf([
|
41
|
+
{ title: "The Walking Dead" },
|
42
|
+
{ title: "Breaking Bad" },
|
43
|
+
], include_nil_values: true)
|
44
|
+
```
|
45
|
+
|
31
46
|
### Simple Mapping
|
32
47
|
|
33
48
|
The most basic form is copying the value from another field.
|
34
49
|
|
35
50
|
```ruby
|
36
51
|
class Title < Morfo::Base
|
37
|
-
field(:tv_show_title)from(:title)
|
52
|
+
field(:tv_show_title).from(:title)
|
38
53
|
end
|
39
54
|
```
|
40
55
|
|
data/lib/morfo.rb
CHANGED
@@ -12,14 +12,14 @@ module Morfo
|
|
12
12
|
act
|
13
13
|
end
|
14
14
|
|
15
|
-
def self.morf input
|
16
|
-
input.map { |row| morf_single(row) }
|
15
|
+
def self.morf input, options = {}
|
16
|
+
input.map { |row| morf_single(row, options) }
|
17
17
|
end
|
18
18
|
|
19
|
-
def self.morf_single input
|
19
|
+
def self.morf_single input, options = {}
|
20
20
|
output = {}
|
21
21
|
mapping_actions.each do |field_path, action|
|
22
|
-
output.deep_merge!(store_value(action.execute(input), field_path))
|
22
|
+
output.deep_merge!(store_value(action.execute(input), field_path, options))
|
23
23
|
end
|
24
24
|
output
|
25
25
|
end
|
@@ -29,11 +29,11 @@ module Morfo
|
|
29
29
|
@actions ||= {}
|
30
30
|
end
|
31
31
|
|
32
|
-
def self.store_value value, to
|
33
|
-
return {} if value.nil?
|
32
|
+
def self.store_value value, to, options
|
33
|
+
return {} if value.nil? && !options[:include_nil_values]
|
34
34
|
|
35
35
|
to.reverse.inject({}) do |hash, key|
|
36
|
-
if hash.
|
36
|
+
if hash.empty?
|
37
37
|
hash.merge!(key => value)
|
38
38
|
else
|
39
39
|
{ key => hash }
|
data/lib/morfo/version.rb
CHANGED
data/morfo.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features|benchmarks)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency "rake"
|
@@ -24,10 +24,20 @@ shared_examples "a 1 to 1 morfer" do
|
|
24
24
|
expect(subject.morf(input)).to eq(expected_output)
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
context "include nils" do
|
28
|
+
it "includes nil values in result" do
|
29
|
+
expected_output = [{tv_show_title: nil},{tv_show_title: nil}]
|
30
|
+
modified_input = input.map{|h| h.reject{|k, v| k == :title}}
|
31
|
+
expect(subject.morf(modified_input, {include_nil_values: true})).to eq(expected_output)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "disable nils" do
|
36
|
+
it "leaves out nil values in result" do
|
37
|
+
expected_output = [{},{}]
|
38
|
+
modified_input = input.map{|h| h.reject{|k, v| k == :title}}
|
39
|
+
expect(subject.morf(modified_input)).to eq(expected_output)
|
40
|
+
end
|
31
41
|
end
|
32
42
|
end
|
33
43
|
|
@@ -40,10 +50,20 @@ shared_examples "a 1 to 1 morfer" do
|
|
40
50
|
expect(subject.morf_single(single_input)).to eq(expected_output)
|
41
51
|
end
|
42
52
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
53
|
+
context "include nils" do
|
54
|
+
it "includes nil values in result" do
|
55
|
+
expected_output = {tv_show_title: nil}
|
56
|
+
modified_input = single_input.reject { |k, v| k == :title }
|
57
|
+
expect(subject.morf_single(modified_input, {include_nil_values: true})).to eq(expected_output)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "disable nils" do
|
62
|
+
it "leaves out nil values in result" do
|
63
|
+
expected_output = {}
|
64
|
+
modified_input = single_input.reject { |k, v| k == :title }
|
65
|
+
expect(subject.morf_single(modified_input)).to eq(expected_output)
|
66
|
+
end
|
47
67
|
end
|
48
68
|
end
|
49
69
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: morfo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leif Gensert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -136,11 +136,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
136
|
version: '0'
|
137
137
|
requirements: []
|
138
138
|
rubyforge_project:
|
139
|
-
rubygems_version: 2.4.5
|
139
|
+
rubygems_version: 2.4.5.1
|
140
140
|
signing_key:
|
141
141
|
specification_version: 4
|
142
142
|
summary: Inspired by ActiveImporter, this gem generically converts an array of hashes
|
143
143
|
test_files:
|
144
|
+
- benchmarks/data.rb
|
145
|
+
- benchmarks/run.rb
|
144
146
|
- spec/lib/morfo/builder_spec.rb
|
145
147
|
- spec/lib/morfo/tools_spec.rb
|
146
148
|
- spec/lib/morfo_spec.rb
|