hash_mapper 0.0.9 → 0.0.10
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.rdoc +3 -9
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/hash_mapper.gemspec +10 -6
- data/lib/hash_mapper.rb +7 -12
- metadata +35 -7
data/README.rdoc
CHANGED
@@ -81,7 +81,7 @@ You can use HashMapper in your own little hash-like objects:
|
|
81
81
|
|
82
82
|
==== Coercing values
|
83
83
|
|
84
|
-
You want to make sure an incoming value
|
84
|
+
You want to make sure an incoming value gets converted to a certain type, so
|
85
85
|
|
86
86
|
{'one' => '1', 'two' => '2'} gets translated to {:one => 1, :two => 2}
|
87
87
|
|
@@ -168,9 +168,6 @@ Now ProjectMapper will delegate parsing of :author_names to UserMapper
|
|
168
168
|
|
169
169
|
ProjectMapper.normalize( input ) # => output
|
170
170
|
|
171
|
-
* Note the ampersand in &UserMapper. This is important if you are passing custom classes instead of procs.
|
172
|
-
* If you want to implement your own filter class just define to_proc in it.
|
173
|
-
|
174
171
|
Let's say you have a CompanyMapper which maps a hash with an array of employees, and you want to reuse UserMapper to map each employee. You could:
|
175
172
|
|
176
173
|
class CompanyMapper
|
@@ -226,13 +223,9 @@ Note also that 'output' is correct at the time of the filter, i.e. before_normal
|
|
226
223
|
|
227
224
|
== INSTALL:
|
228
225
|
|
229
|
-
# If you haven't done this already:
|
230
|
-
|
231
|
-
gem sources -a http://gems.github.com
|
232
|
-
|
233
226
|
# Now install
|
234
227
|
|
235
|
-
sudo gem install
|
228
|
+
sudo gem install hash_mapper
|
236
229
|
|
237
230
|
== Credits:
|
238
231
|
|
@@ -240,6 +233,7 @@ Note also that 'output' is correct at the time of the filter, i.e. before_normal
|
|
240
233
|
* Mark Evans (Contributor - http://github.com/markevans)
|
241
234
|
* Jdeveloper (Contributor - http://github.com/jdeveloper)
|
242
235
|
* nightscape (Contributor - http://github.com/nightscape)
|
236
|
+
* radamanthus (Contributor - http://github.com/radamanthus)
|
243
237
|
|
244
238
|
== LICENSE:
|
245
239
|
|
data/Rakefile
CHANGED
@@ -15,6 +15,7 @@ begin
|
|
15
15
|
gemspec.description = "Tiny module that allows you to easily adapt from one hash structure to another with a simple declarative DSL."
|
16
16
|
gemspec.email = "ismaelct@gmail.com"
|
17
17
|
gemspec.homepage = "http://github.com/ismasan/hash_mapper"
|
18
|
+
gemspec.add_dependency('active_support', '>= 3.0.0.beta')
|
18
19
|
gemspec.authors = ["Ismael Celis"]
|
19
20
|
end
|
20
21
|
rescue LoadError
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.10
|
data/hash_mapper.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{hash_mapper}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.10"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ismael Celis"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2010-09-21}
|
13
13
|
s.description = %q{Tiny module that allows you to easily adapt from one hash structure to another with a simple declarative DSL.}
|
14
14
|
s.email = %q{ismaelct@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -35,7 +35,7 @@ Gem::Specification.new do |s|
|
|
35
35
|
s.homepage = %q{http://github.com/ismasan/hash_mapper}
|
36
36
|
s.rdoc_options = ["--charset=UTF-8"]
|
37
37
|
s.require_paths = ["lib"]
|
38
|
-
s.rubygems_version = %q{1.3.
|
38
|
+
s.rubygems_version = %q{1.3.7}
|
39
39
|
s.summary = %q{Maps values from hashes with different structures and/or key names. Ideal for normalizing arbitrary data to be consumed by your applications, or to prepare your data for different display formats (ie. json)}
|
40
40
|
s.test_files = [
|
41
41
|
"spec/hash_mapper_spec.rb",
|
@@ -46,9 +46,13 @@ Gem::Specification.new do |s|
|
|
46
46
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
47
47
|
s.specification_version = 3
|
48
48
|
|
49
|
-
if Gem::Version.new(Gem::
|
49
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
50
|
+
s.add_runtime_dependency(%q<active_support>, [">= 3.0.0.beta"])
|
50
51
|
else
|
52
|
+
s.add_dependency(%q<active_support>, [">= 3.0.0.beta"])
|
51
53
|
end
|
52
54
|
else
|
55
|
+
s.add_dependency(%q<active_support>, [">= 3.0.0.beta"])
|
53
56
|
end
|
54
57
|
end
|
58
|
+
|
data/lib/hash_mapper.rb
CHANGED
@@ -4,11 +4,8 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
4
4
|
def require_active_support
|
5
5
|
require 'active_support/core_ext/array/extract_options'
|
6
6
|
require 'active_support/core_ext/hash/indifferent_access'
|
7
|
-
require 'active_support/core_ext/duplicable'
|
8
|
-
Array.send(:include, ActiveSupport::CoreExtensions::Array::ExtractOptions)
|
9
|
-
Hash.send(:include, ActiveSupport::CoreExtensions::Hash::IndifferentAccess)
|
7
|
+
require 'active_support/core_ext/object/duplicable'
|
10
8
|
require 'active_support/core_ext/class/inheritable_attributes'
|
11
|
-
|
12
9
|
end
|
13
10
|
|
14
11
|
begin
|
@@ -123,21 +120,19 @@ module HashMapper
|
|
123
120
|
|
124
121
|
def process_into(output, input, meth = :normalize)
|
125
122
|
path_1, path_2 = (meth == :normalize ? [path_from, path_to] : [path_to, path_from])
|
126
|
-
|
127
|
-
|
128
|
-
add_value_to_hash!(output, path_2, value)
|
129
|
-
end
|
123
|
+
value = get_value_from_input(output, input, path_1, meth)
|
124
|
+
add_value_to_hash!(output, path_2, value) unless value == :hash_mapper_no_value
|
130
125
|
end
|
131
126
|
protected
|
132
127
|
|
133
128
|
def get_value_from_input(output, input, path, meth)
|
134
129
|
value = path.inject(input) do |h,e|
|
135
|
-
if h.
|
136
|
-
v = h.
|
130
|
+
if h.is_a?(Hash)
|
131
|
+
v = [h[e.to_sym], h[e.to_s]].compact.first
|
137
132
|
else
|
138
133
|
v = h[e]
|
139
134
|
end
|
140
|
-
|
135
|
+
return :hash_mapper_no_value if v.nil?
|
141
136
|
v
|
142
137
|
end
|
143
138
|
delegated_mapper ? delegate_to_nested_mapper(value, meth) : value
|
@@ -149,7 +144,7 @@ module HashMapper
|
|
149
144
|
when Array
|
150
145
|
value.map {|h| delegated_mapper.send(meth, h)}
|
151
146
|
when nil
|
152
|
-
|
147
|
+
return :hash_mapper_no_value
|
153
148
|
else
|
154
149
|
delegated_mapper.send(meth, value)
|
155
150
|
end
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash_mapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 11
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 10
|
10
|
+
version: 0.0.10
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Ismael Celis
|
@@ -9,10 +15,26 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
18
|
+
date: 2010-09-21 00:00:00 +01:00
|
13
19
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: active_support
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 31098225
|
30
|
+
segments:
|
31
|
+
- 3
|
32
|
+
- 0
|
33
|
+
- 0
|
34
|
+
- beta
|
35
|
+
version: 3.0.0.beta
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id001
|
16
38
|
description: Tiny module that allows you to easily adapt from one hash structure to another with a simple declarative DSL.
|
17
39
|
email: ismaelct@gmail.com
|
18
40
|
executables: []
|
@@ -47,21 +69,27 @@ rdoc_options:
|
|
47
69
|
require_paths:
|
48
70
|
- lib
|
49
71
|
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
50
73
|
requirements:
|
51
74
|
- - ">="
|
52
75
|
- !ruby/object:Gem::Version
|
76
|
+
hash: 3
|
77
|
+
segments:
|
78
|
+
- 0
|
53
79
|
version: "0"
|
54
|
-
version:
|
55
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
56
82
|
requirements:
|
57
83
|
- - ">="
|
58
84
|
- !ruby/object:Gem::Version
|
85
|
+
hash: 3
|
86
|
+
segments:
|
87
|
+
- 0
|
59
88
|
version: "0"
|
60
|
-
version:
|
61
89
|
requirements: []
|
62
90
|
|
63
91
|
rubyforge_project:
|
64
|
-
rubygems_version: 1.3.
|
92
|
+
rubygems_version: 1.3.7
|
65
93
|
signing_key:
|
66
94
|
specification_version: 3
|
67
95
|
summary: Maps values from hashes with different structures and/or key names. Ideal for normalizing arbitrary data to be consumed by your applications, or to prepare your data for different display formats (ie. json)
|