Sha256: 78dbc4c57d0c693aa1e8d659eda2aafe8a6b145a5e2b1d0ca2688dc909ccf331
Contents?: true
Size: 891 Bytes
Versions: 3
Compression:
Stored size: 891 Bytes
Contents
module Extract class HashBuilder < Base INTERNAL_FIELDS = %i[array_of keep_if within].freeze def value(index = 0) path, props = node.to_h.values_at(:path, :props) hash = {} props.each do |field_name, nested_props| next unless valuable_field? field_name, nested_props, index value = ValueBuilder.new(Node.new(nested_props, path), extractor).value hash[field_name.to_sym] = value if value.present? end keep_hash?(hash, props) ? hash : nil end private def keep_hash?(hash, props) expression = props[:keep_if] expression.present? ? Expression.new(expression, hash).evaluate : true end def valuable_field?(field_name, props, index) return false if INTERNAL_FIELDS.include? field_name return false if index.positive? && Node.new(props, "").first_only? true end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
xml_data_extractor-0.3.0 | lib/src/extract/hash_builder.rb |
xml_data_extractor-0.2.0 | lib/src/extract/hash_builder.rb |
xml_data_extractor-0.1.0 | lib/src/extract/hash_builder.rb |