class Datum::Datum

Datum is an Immutable Struct to be used for creating test cases. @!attribute [r] datum_id

The index of the test case and the data from it's Datum
@return [Fixnum]

@!attribute [r] test_method_name

The name of the test case generated
@return [String]

@!attribute [r] container

The Container reference which generated this Datum and test case
@return [Container]

Public Class Methods

key(test_instance, test_name) click to toggle source

@!visibility private Creates a Hash key formatted for use with a Datum @param [TestCase] test_instance The TestCase instance for the test @param [String] test_name The name of the test @return [String] Datum compatible Hash key

# File lib/datum/datum.rb, line 22
def self.key test_instance, test_name
  Helpers.build_key(test_instance, test_name)
end
new(*attrs, &block) click to toggle source

@!visibility private

Calls superclass method Plan9::ImprovedStruct::new
# File lib/datum/datum.rb, line 27
def self.new(*attrs, &block)
  attrs.push "datum_id"
  super(*attrs, &block)
end
new(*atrs) click to toggle source

@!visibility private

# File lib/datum/datum.rb, line 55
def initialize(*atrs)
  dtm_id = configure_attributes
  is_hash_case?(*atrs) ? atrs.first[:datum_id] = dtm_id : atrs.push(dtm_id)
  datum_initialize(*atrs)
end

Protected Class Methods

init_new(struct) click to toggle source
Calls superclass method Plan9::ImmutableStruct::init_new
# File lib/datum/datum.rb, line 34
def self.init_new(struct)
  super(struct)
  datumize_constructor!(struct)
  struct
end

Private Class Methods

datumize_constructor!(struct) click to toggle source
# File lib/datum/datum.rb, line 41
def self.datumize_constructor! struct

struct.class_eval do
  alias_method :datum_initialize, :initialize

  # @!attribute [r] test_method_name
  # @return [String] The name of the test method
  attr_reader :test_method_name

  # @!attribute [r] container
  # @return [Container] A reference to the Container of this Datum
  attr_reader :container

  # @!visibility private
  def initialize(*atrs)
    dtm_id = configure_attributes
    is_hash_case?(*atrs) ? atrs.first[:datum_id] = dtm_id : atrs.push(dtm_id)
    datum_initialize(*atrs)
  end

  private
  def configure_attributes
    @container = ::Datum.send(:current_container)
    (dtm_id, @test_method_name = @container.send(:add_datum, self))[0]
  end
end
end

Private Instance Methods

configure_attributes() click to toggle source
# File lib/datum/datum.rb, line 62
def configure_attributes
  @container = ::Datum.send(:current_container)
  (dtm_id, @test_method_name = @container.send(:add_datum, self))[0]
end