Class: ArrayCollection::DataAccessor
- Inherits:
-
Object
- Object
- ArrayCollection::DataAccessor
- Defined in:
- lib/array_collection/data_accessor.rb
Overview
Data retreiver based on string dot notation
Class Method Summary collapse
-
.get(target, key, default = nil) ⇒ Object
TODO: Refactor.
Class Method Details
.get(target, key, default = nil) ⇒ Object
TODO: Refactor
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/array_collection/data_accessor.rb', line 8 def get(target, key, default = nil) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity return target if key.nil? key = key.split(".") unless key.is_a?(Array) key.each_with_index do |segment, i| return target if segment.nil? if segment == "*" return default unless target.is_a?(Array) result = target.map { |item| get(item, key[i + 1..]) } return key.include?("*") ? result.flatten : result end segment = if segment.to_i.to_s == segment segment.to_i else segment.to_sym end if target.respond_to?(:[]) && target[segment] target = target[segment] elsif target.respond_to?(segment) target = target.send(segment) else return default end end target end |