Sha256: a120aae04214087bb03a974bf947f1dc19379241654a44eabd91d9396044735d

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

module ToFactory
  module Generation
    class Attribute
      def initialize(attribute, value)
        @attribute = attribute
        @value = value
      end

      def to_s
        setter = "#{@attribute}#{inspect_value(@value)}"

        if ToFactory.new_syntax?
          "    #{setter}"
        else
          "  o.#{setter}"
        end
      end

      def inspect_value(value, nested=false)
        formatted = format(value, nested)

        if !value.is_a?(Hash) && !nested
          formatted = " #{formatted}"
        end

        formatted
      end

      private

      def format(value, nested)
        case value
        when Time, DateTime
          inspect_time(value)
        when BigDecimal
          value.to_f.inspect
        when Hash
          inspect_hash(value, nested)
        when Array
          value.map{|v| inspect_value(v)}
        else
          value.inspect
        end
      end

      def inspect_time(value)
        time = in_utc(value).strftime("%Y-%m-%dT%H:%M%Z").inspect
        time.gsub(/UTC"$/, "Z\"").gsub(/GMT"$/, "Z\"")
      end

      def inspect_hash(value, nested)
        formatted = value.keys.inject([]) do |a, key|
          a << key_value_pair(key, value)
        end.join(', ')

        if nested
          "{#{formatted}}"
        else
          "({#{formatted}})"
        end
      end

      def key_value_pair(key, value)
        formatted_key = inspect_value(key, true)
        formatted_value = inspect_value(value.fetch(key), true)
        "#{formatted_key} => #{formatted_value}"
      end

      def in_utc(time)
        time.utc
      end
    end
  end
end


Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
to_factory-0.2.0 lib/to_factory/generation/attribute.rb