decanter 0.5.3 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|