Sha256: 15eb479dcb26e67ab3acf484a2fddc4f2f463d4a7d53b439fb79e2fc6e575e52

Contents?: true

Size: 1.49 KB

Versions: 1

Compression:

Stored size: 1.49 KB

Contents

module Dolly
  class Property
    attr_writer :value
    attr_accessor :name
    attr_reader :class_name, :default

    def initialize opts = {}
      @class_name = opts.delete(:class_name) if opts.present?
      @name = opts.delete(:name).to_s
      @default = opts.delete(:default)
      @value = @default if @default
      warn 'There are some unprocessed options!' if opts.present?
    end

    def value
      #TODO: tets if this actually sets `doc[ "name" ]`
      return @default if @value.nil?
      return @value unless self_klass

      klass_sym = :"#{self_klass.name.underscore}_#{__method__}"

      return self_klass.new @value unless self.respond_to?(klass_sym)

      self.send klass_sym
    end

    def array_value
      @value.to_a
    end

    def hash_value
      @value.to_h
    end

    def string_value
      @value.to_s
    end

    def integer_value
      @value.to_i
    end

    def float_value
      @value.to_f
    end

    def date_value
      @value.to_date
    end

    def time_value
      @value.to_time
    end

    def date_time_value
      @value.to_datetime
    end

    def true_class_value
      truthy_value?
    end

    def false_class_value
      truthy_value?
    end

    def boolean?
      self_klass == TrueClass || self_klass == FalseClass
    end

    private
    def truthy_value?
      @value =~ /true/ || @value === true
    end

    def self_klass
      return unless @class_name
      @class_name.is_a?(Class)? @class_name : @class_name.constantize
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dolly-0.9.0 lib/dolly/property.rb