Class: AppleData::DSL::DataFileDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/apple_data/dsl/data_file_definition.rb

Overview

The DSL that is used when defining a data file

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDataFileDefinition

Returns a new instance of DataFileDefinition.



7
8
9
10
# File 'lib/apple_data/dsl/data_file_definition.rb', line 7

def initialize
  @collections = {}
  @methods = {}
end

Instance Attribute Details

#default_filename=(value) ⇒ Object (writeonly)

Sets the attribute default_filename

Parameters:

  • value

    the value to set the attribute default_filename to.



33
34
35
# File 'lib/apple_data/dsl/data_file_definition.rb', line 33

def default_filename=(value)
  @default_filename = value
end

Instance Method Details

#build!Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/apple_data/dsl/data_file_definition.rb', line 35

def build!
  klass = Class.new(DataFile)

  klass.const_set(:DEFAULT_FILENAME, @default_filename)
  klass.const_set(:COLLECTIONS, @collections)

  @collections.each_value do |collection_definition|
    collection_definition.build!(klass)
  end

  @methods.each do |name, proc|
    klass.define_method(name, &proc)
  end

  klass
end

#collection(collection_name, mapper = nil) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/apple_data/dsl/data_file_definition.rb', line 12

def collection(collection_name, mapper = nil, &)
  data_collection_name = self.class.name
  @collections[collection_name] = AppleData::DSL::CollectionDefinition.new(collection_name, mapper)
  if block_given? && @collections[collection_name].mapper.nil?
    @collections[collection_name].mapper = Class.new(AppleData::SchemaBase)
    @collections[collection_name].mapper.const_set(:DATA_COLLECTION_NAME, data_collection_name)
    @collections[collection_name].mapper.const_set(:COLLECTION_NAME, collection_name)
    @collections[collection_name].mapper.instance_eval do
      def name
        "#{self.class.const_get(:DATA_COLLECTION_NAME)}:#{self.class.const_get(:COLLECTION_NAME)}"
      end
    end
    @collections[collection_name].mapper.class_eval(&)
  end
  @collections[collection_name]
end

#define_method(name, &proc) ⇒ Object



29
30
31
# File 'lib/apple_data/dsl/data_file_definition.rb', line 29

def define_method(name, &proc)
  @methods[name] = proc
end