Module: Cranium::DSL

Defined in:
lib/cranium/dsl.rb

Defined Under Namespace

Classes: DatabaseDefinition, ExtractDefinition, ImportDefinition, SourceDefinition

Instance Method Summary collapse

Instance Method Details

#after(&block) ⇒ Object



104
105
106
# File 'lib/cranium/dsl.rb', line 104

def after(&block)
  Cranium.application.register_hook :after, &block
end

#archive(*sources) ⇒ Object



74
75
76
77
78
# File 'lib/cranium/dsl.rb', line 74

def archive(*sources)
  sources.each do |source_name|
    Cranium::Archiver.archive *Cranium.application.sources[source_name].files
  end
end

#database(name, &block) ⇒ Object



10
11
12
# File 'lib/cranium/dsl.rb', line 10

def database(name, &block)
  Cranium::Database.register_database name, &block
end

#deduplicate(source, options) ⇒ Object



46
47
48
49
50
# File 'lib/cranium/dsl.rb', line 46

def deduplicate(source, options)
  transform source => options[:into] do |record|
    output record if unique_on_fields? *options[:by]
  end
end

#extract(name, &block) ⇒ Object



22
23
24
25
26
# File 'lib/cranium/dsl.rb', line 22

def extract(name, &block)
  extract_definition = ExtractDefinition.new name
  extract_definition.instance_eval &block
  Cranium::Extract::DataExtractor.new.execute extract_definition
end

#import(name, &block) ⇒ Object



66
67
68
69
70
# File 'lib/cranium/dsl.rb', line 66

def import(name, &block)
  import_definition = ImportDefinition.new(name)
  import_definition.instance_eval &block
  Cranium::DataImporter.new.import import_definition
end

#join(source_name, options) ⇒ Object



54
55
56
57
58
59
60
61
62
# File 'lib/cranium/dsl.rb', line 54

def join(source_name, options)
  Cranium::Transformation::Join.new.tap do |join|
    join.source_left = Cranium.application.sources[source_name]
    join.source_right = Cranium.application.sources[options[:with]]
    join.target = Cranium.application.sources[options[:into]]
    join.match_fields = options[:match_on]
    join.type = options[:type] || :inner
  end.execute
end

#move(*sources, to: "") ⇒ Object



90
91
92
93
94
# File 'lib/cranium/dsl.rb', line 90

def move(*sources, to: "")
  sources.each do |source_name|
    Cranium::Archiver.move *Cranium.application.sources[source_name].files, target_directory: to
  end
end

#read(name, &block) ⇒ Object



30
31
32
33
# File 'lib/cranium/dsl.rb', line 30

def read(name, &block)
  source = Cranium.application.sources[name]
  Cranium::DataReader.new(source).read(&block)
end

#remove(*sources) ⇒ Object



82
83
84
85
86
# File 'lib/cranium/dsl.rb', line 82

def remove(*sources)
  sources.each do |source_name|
    Cranium::Archiver.remove *Cranium.application.sources[source_name].files
  end
end

#sequence(name) ⇒ Object



98
99
100
# File 'lib/cranium/dsl.rb', line 98

def sequence(name)
  Cranium::Transformation::Sequence.new name
end

#source(name, &block) ⇒ Object



16
17
18
# File 'lib/cranium/dsl.rb', line 16

def source(name, &block)
  Cranium.application.register_source name, &block
end

#transform(names, &block) ⇒ Object



37
38
39
40
41
42
# File 'lib/cranium/dsl.rb', line 37

def transform(names, &block)
  source = Cranium.application.sources[names.keys.first]
  target = Cranium.application.sources[names.values.first]

  Cranium::DataTransformer.new(source, target).transform(&block)
end