Sha256: 933f42b1305f0393cf1d43885e1b1d79dcd86bbc962d28c5c243045a693a9cf2

Contents?: true

Size: 1.05 KB

Versions: 6

Compression:

Stored size: 1.05 KB

Contents

module Sprig
  module Seed
    class Attribute
      attr_reader :name, :raw_value, :value

      def initialize(name, raw_value)
        @name = name.to_s
        @raw_value = raw_value
      end

      def dependencies
        @dependencies ||= determine_dependencies.uniq
      end

      def value
        compute_value if @value.nil?

        @value
      end

      private

      def determine_dependencies
        if computed_value?
          matches = raw_value.scan(/(sprig_record\(([A-Z][^,]*), ([\d]*)\))+/)
          matches.map {|match| Dependency.for(match[1], match[2]) }
        else
          []
        end
      end

      def string?
        raw_value.is_a?(String)
      end

      def computed_value?
        string? && raw_value =~ computed_value_regex
      end

      def computed_value_regex
        /<%[=]?(.*)%>/
      end

      def compute_value
        @value = if computed_value?
          matches = computed_value_regex.match(raw_value)
          eval(matches[1])
        else
          raw_value
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
sprig-0.1.5 lib/sprig/seed/attribute.rb
sprig-0.1.4 lib/sprig/seed/attribute.rb
sprig-0.1.3 lib/sprig/seed/attribute.rb
sprig-0.1.2 lib/sprig/seed/attribute.rb
sprig-0.1.1 lib/sprig/seed/attribute.rb
sprig-0.1.0 lib/sprig/seed/attribute.rb