decanter 0.5.3 → 0.5.4
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/decanter-0.5.2.gem +0 -0
- data/lib/decanter/core.rb +5 -6
- data/lib/decanter/extensions.rb +4 -0
- data/lib/decanter/value_parser/base.rb +3 -0
- data/lib/decanter/value_parser.rb +3 -2
- data/lib/decanter/version.rb +1 -1
- data/lib/decanter.rb +3 -3
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84d61b3aafe9eeae8726af22da2c9fa239321564
|
4
|
+
data.tar.gz: aa12d102ed3c916f3e6c662502c434f3fb5a7a94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5e6756d719f3531fcf28f1cabafda30b41f7f186a83882c406d550ed8897a863af65338f1e652abb9c205bb690cde8676f5395eb3f0fe8892750f5a9e41e8da
|
7
|
+
data.tar.gz: 934e9c5fde54466b13828d40921816bed7f2cd65efc3585d7f8d40fff2762aad0082aff6c9da733464ade29921b830baa90f90b2ff5eba66e99bb002ec6fcb90
|
data/decanter-0.5.2.gem
ADDED
Binary file
|
data/lib/decanter/core.rb
CHANGED
@@ -51,12 +51,12 @@ module Decanter
|
|
51
51
|
|
52
52
|
def has_many_for(key, context)
|
53
53
|
(associations[context || :default] || {})
|
54
|
-
.detect { |name, assoc| assoc[:type] == :has_many && assoc[:key] == key}
|
54
|
+
.detect { |name, assoc| assoc[:type] == :has_many && assoc[:key] == key.to_sym}
|
55
55
|
end
|
56
56
|
|
57
57
|
def has_one_for(key, context)
|
58
58
|
(associations[context || :default] || {})
|
59
|
-
.detect { |name, assoc| assoc[:type] == :has_one && assoc[:key] == key}
|
59
|
+
.detect { |name, assoc| assoc[:type] == :has_one && assoc[:key] == key.to_sym}
|
60
60
|
end
|
61
61
|
|
62
62
|
def set_association(options, assoc)
|
@@ -78,9 +78,8 @@ module Decanter
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def decant(args={}, context=nil)
|
81
|
-
args = args.to_h if args.is_a?(ActionController::Parameters) # i.e. Rails 5
|
82
81
|
Hash[
|
83
|
-
args.map { |
|
82
|
+
args.keys.map { |key| handle_arg(key, args[key], context) }.compact
|
84
83
|
]
|
85
84
|
end
|
86
85
|
|
@@ -89,9 +88,9 @@ module Decanter
|
|
89
88
|
when input_cfg = input_for(name, context)
|
90
89
|
[name, parse(name, input_cfg[:type], value, input_cfg[:options])]
|
91
90
|
when assoc = has_one_for(name, context)
|
92
|
-
[assoc.pop[:key], Decanter::decanter_for(assoc.first).decant(value, context)]
|
91
|
+
[assoc.pop[:key], Decanter::decanter_for(assoc[1][:options][:decanter] || assoc.first).decant(value, context)]
|
93
92
|
when assoc = has_many_for(name, context)
|
94
|
-
decanter = Decanter::decanter_for(assoc.first)
|
93
|
+
decanter = Decanter::decanter_for(assoc[1][:options][:decanter] || assoc.first)
|
95
94
|
[assoc.pop[:key], value.map { |val| decanter.decant(val, context) }]
|
96
95
|
else
|
97
96
|
context ? nil : [name, value]
|
data/lib/decanter/extensions.rb
CHANGED
@@ -21,6 +21,10 @@ module Decanter
|
|
21
21
|
self.new(decant(args, context)).save(context: context)
|
22
22
|
end
|
23
23
|
|
24
|
+
def decant_new(args={}, context=nil)
|
25
|
+
self.new(decant(args, context))
|
26
|
+
end
|
27
|
+
|
24
28
|
def decant_create!(args={}, context=nil)
|
25
29
|
self.new(decant(args, context)).save!(context: context)
|
26
30
|
end
|
@@ -3,11 +3,12 @@ module Decanter
|
|
3
3
|
@@value_parsers = {}
|
4
4
|
|
5
5
|
def self.register(value_parser)
|
6
|
-
@@value_parsers[value_parser.name] = value_parser
|
6
|
+
@@value_parsers[value_parser.name.demodulize] = value_parser
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.value_parser_for(sym)
|
10
|
-
|
10
|
+
p "find parser for #{sym}"
|
11
|
+
@@value_parsers["#{sym.to_s.camelize}Parser"] || (raise NameError.new("unknown value parser #{sym.to_s.capitalize}Parser"))
|
11
12
|
end
|
12
13
|
end
|
13
14
|
end
|
data/lib/decanter/version.rb
CHANGED
data/lib/decanter.rb
CHANGED
@@ -3,15 +3,15 @@ module Decanter
|
|
3
3
|
@@decanters = {}
|
4
4
|
|
5
5
|
def self.register(decanter)
|
6
|
-
@@decanters[decanter.name] = decanter
|
6
|
+
@@decanters[decanter.name.demodulize] = decanter
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.decanter_for(klass_or_sym)
|
10
10
|
name = klass_or_sym.is_a?(Class) ?
|
11
11
|
klass_or_sym.name :
|
12
12
|
klass_or_sym.to_s.singularize.camelize
|
13
|
-
|
14
|
-
@@decanters[
|
13
|
+
full_name = name.include?('Decanter') ? name : "#{name}Decanter"
|
14
|
+
@@decanters[full_name] || (raise NameError.new("unknown decanter #{name}Decanter"))
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decanter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Francis
|
@@ -83,6 +83,7 @@ files:
|
|
83
83
|
- Rakefile
|
84
84
|
- bin/console
|
85
85
|
- bin/setup
|
86
|
+
- decanter-0.5.2.gem
|
86
87
|
- decanter.gemspec
|
87
88
|
- lib/decanter.rb
|
88
89
|
- lib/decanter/base.rb
|