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 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