Sha256: 3359b3b73d9c7d2ce4b3d2b34a5b2335c0b3d330dc1477419318129459e0d1d3

Contents?: true

Size: 1.12 KB

Versions: 5

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

module FakerMaker
  # Attributes describe the fields of classes
  class Attribute
    attr_reader :name, :block, :translation

    def initialize( name, block = nil, options = {} )
      assert_valid_options options
      @name = name
      @block = block || proc { nil }
      @cardinality = options[:has] || 1
      @translation = options[:json]
      @omit = *options[:omit]
      @array = options[:array] == true 
    end

    def array?
      forced_array? || @array
    end

    def cardinality
      if @cardinality.is_a? Range
        rand( @cardinality ) 
      else
        @cardinality
      end
    end

    def translation?
      !@translation.blank?
    end
    
    def omit?( value )
      case value
      when nil
        @omit.include? :nil
      when '', [], {}
        @omit.include? :empty
      else
        @omit.include?( :always ) || @omit.include?( value )
      end
    end

    private 

    def forced_array?
      @cardinality.is_a?( Range ) || @cardinality > 1
    end

    def assert_valid_options( options )
      options.assert_valid_keys :has, :array, :json, :omit
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
faker_maker-1.1.7 lib/faker_maker/attribute.rb
faker_maker-1.1.6 lib/faker_maker/attribute.rb
faker_maker-1.1.5 lib/faker_maker/attribute.rb
faker_maker-1.1.4 lib/faker_maker/attribute.rb
faker_maker-1.1.3 lib/faker_maker/attribute.rb