lib/transcriber/resource/parser/embeddable.rb in transcriber-0.0.17 vs lib/transcriber/resource/parser/embeddable.rb in transcriber-0.0.18
- old
+ new
@@ -1,51 +1,58 @@
module Transcriber
class Resource
module Parser
module Embeddable
def parse(item, resource = nil)
- value = nil
- if fields
- value = convert_input_keys.call(fields).map {|field| item[field]}
- else
- value = digg(item)
- parsed_value = raw? ? value : resource_class.parse(value)
- value = one? ? parsed_value.first : parsed_value
- end
+ return parse_fields(item) if fields
+ value = digg(item)
+ parsed_value = raw? ? value : resource_class.parse(value)
+ one? ? parsed_value.first : parsed_value
end
+ def parse_fields(item)
+ convert_input_keys.call(fields).map {|field| item[field]}
+ end
+
def digg(input)
input_path.inject(input) {|buffer, key| buffer = buffer[key]}
end
def from_hash(attrs)
raw? ? attrs : super
end
def to_input(value, options = {})
- input = {}
- return input if value.nil?
+ return {} if value.nil?
+ fields ? to_multiple_input(value, options)
+ : to_single_input(value)
+ end
+ private
+
+ def to_single_input(value)
+ input = {}
path = input_path
if path.any?
last = path.pop
key_input = path.inject(input) {|buffer, key| buffer[key] = {}; buffer[key]}
-
- if fields
- mapped_fields = convert_input_keys.call(fields)
- value.each_with_index do |item, index|
- input[mapped_fields[index]] = item
- end
- elsif raw?
- key_input[last] = value
- elsif one?
- key_input[last] = value.to_input(options)
- else
- key_input[last] = value.map {|item| item.to_input(options)}
- end
+ key_input[last] = raw? ? value
+ : one? ? value.to_input(options)
+ : value.map {|item| item.to_input(options)}
else
input.merge!(value.to_input(options))
+ end
+
+ input
+ end
+
+ def to_multiple_input(value, options)
+ input = {}
+ mapped_fields = convert_input_keys.call(fields)
+
+ value.each_with_index do |item, index|
+ input[mapped_fields[index]] = item
end
input
end
end