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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 93f6a3fc96c72c84a4c0f4dc8a36b547fbe35378
4
- data.tar.gz: fb62e17481aac2f6f281965d0685b7b77658ffc5
3
+ metadata.gz: 84d61b3aafe9eeae8726af22da2c9fa239321564
4
+ data.tar.gz: aa12d102ed3c916f3e6c662502c434f3fb5a7a94
5
5
  SHA512:
6
- metadata.gz: 07d8d145aa83d39a8d04edb5f5aa98bd42b123eee966c08713504ad0ef4336a0771d6df5706d8ac663145571749a80b6dc1804fe30755aa935197e251e3aa1e5
7
- data.tar.gz: ea67b48050987acf5b35c016a66e31ed51480eb6a53b09fc7464e8a1329351dae8d6c59e8a4dd7057f0b4d51679430f384bc3f39f24f3b82142cc8776cba02e0
6
+ metadata.gz: b5e6756d719f3531fcf28f1cabafda30b41f7f186a83882c406d550ed8897a863af65338f1e652abb9c205bb690cde8676f5395eb3f0fe8892750f5a9e41e8da
7
+ data.tar.gz: 934e9c5fde54466b13828d40921816bed7f2cd65efc3585d7f8d40fff2762aad0082aff6c9da733464ade29921b830baa90f90b2ff5eba66e99bb002ec6fcb90
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 { |name, value| handle_arg(name, value, context) }.compact
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]
@@ -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
@@ -4,6 +4,9 @@ module Decanter
4
4
  module ValueParser
5
5
  class Base
6
6
  include Core
7
+ def self.inherited(subclass)
8
+ ValueParser.register(subclass)
9
+ end
7
10
  end
8
11
  end
9
12
  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
- @@value_parsers["#{sym.to_s.capitalize}Parser"] || (raise NameError.new("unknown value parser #{sym.to_s.capitalize}Parser"))
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
@@ -1,3 +1,3 @@
1
1
  module Decanter
2
- VERSION = '0.5.3'
2
+ VERSION = '0.5.4'
3
3
  end
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["#{name}Decanter"] || (raise NameError.new("unknown decanter #{name}Decanter"))
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.3
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