Sha256: c5b3be47d4373f07f91322b9b1537480d960528159065a46997857b16b2cea5c

Contents?: true

Size: 907 Bytes

Versions: 1

Compression:

Stored size: 907 Bytes

Contents

# -*- encoding: utf-8 -*-
# frozen_string_literal: true
module K
  module Replace
    class Statement
      include Keys
      include DynamicAccessors

      attr_reader :source, :keys

      def initialize(source)
        @keys = []
        @source = source

        find_all(@source) do |key|
          @keys << key
        end
      end

      def replace(hash)
        @source.gsub(kreplace.key_pattern) do |key|
          replaced = ''
          find_all(key) do |match|
            chained = chain_property(match)
            chained.each{|k, v| replaced = resolve_property(k, v, hash[k])}
          end
          replaced
        end
      end

      private

      def resolve_property(ch_key, ch_value, obj)
        return resolve_property ch_value.keys[0], ch_value[ch_value.keys[0]], obj.send(ch_value.keys[0].to_s) if ch_value.is_a?(Hash)
        obj.send(ch_value)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
k-replace-1.0.0 lib/k/replace/statement.rb