Class: GoodData::CloverGenerator::DSL::Project

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeProject

Returns a new instance of Project.



130
131
132
# File 'lib/dsl/project_dsl.rb', line 130

def initialize
  @usecases = []
end

Instance Attribute Details

#dimsObject

Returns the value of attribute dims.



121
122
123
# File 'lib/dsl/project_dsl.rb', line 121

def dims
  @dims
end

#nameObject

Returns the value of attribute name.



121
122
123
# File 'lib/dsl/project_dsl.rb', line 121

def name
  @name
end

#usecasesObject

Returns the value of attribute usecases.



121
122
123
# File 'lib/dsl/project_dsl.rb', line 121

def usecases
  @usecases
end

Class Method Details

.define(&script) ⇒ Object



123
124
125
126
127
128
# File 'lib/dsl/project_dsl.rb', line 123

def self.define(&script)
  print self
  x = self.new
  x.instance_eval(&script)
  x
end

Instance Method Details

#compare_fields(sources, datasets) ⇒ Object



189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# File 'lib/dsl/project_dsl.rb', line 189

def compare_fields(sources, datasets)
  a = sources.reduce([]) do |memo, source|
    x = source[:object]
    memo.concat(source[:fields].map {|f| [x, f[:name]]})
    memo
  end
  
  b = datasets.reduce([]) do |memo, source|
    x = source[:name]
    memo.concat(source[:fields].map {|f| [x, f[:name]]})
    memo
  end
  result = (a | b) - (a & b)
  if result.count > 0
    puts "------------------"
    puts "All fields not in"
    puts "------------------"
    result.each {|x| pp x}
    fail "Some fields form source are not used"
  end
end

#get_datasetsObject



179
180
181
182
183
184
185
186
187
# File 'lib/dsl/project_dsl.rb', line 179

def get_datasets
  configs = []
  FileUtils.cd('./sinks') do
    Dir.glob('*.json').each do|f|
      configs << JSON.parse(File.read(f), :symbolize_names => true)
    end
  end
  configs
end

#get_sourcesObject



148
149
150
151
152
153
154
155
156
# File 'lib/dsl/project_dsl.rb', line 148

def get_sources
  configs = []
  FileUtils.cd('./taps') do
    Dir.glob('*.json').each do|f|
      configs << JSON.parse(File.read(f), :symbolize_names => true)
    end
  end
  configs
end


158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'lib/dsl/project_dsl.rb', line 158

def print_sources(taps)
  puts
  puts "Printing sources"
  puts "================"
  puts
  taps.each do |tap|
    fail "Provided tap #{tap[:object]} does not seem to be tap" if tap[:type] != "tap"
    if tap[:source] == "salesforce"
      table = Terminal::Table.new(:title => "#{tap[:source]} => #{tap[:object]}", :style => {:width => 30}) do |t|
        tap[:fields].each do |f|
          t << [f[:name], f[:name]]
        end
      end
      puts table
      puts
    end
  end

end

#project_name(name) ⇒ Object



134
135
136
# File 'lib/dsl/project_dsl.rb', line 134

def project_name(name)
  @name = name
end

#run(repo) ⇒ Object



211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
# File 'lib/dsl/project_dsl.rb', line 211

def run(repo)
  puts "Running"

  puts "looking for dimension definitions"
  dims.each do |dim|
    puts "found #{dim}"
  end
  
  sources = get_sources
  fail "You have no sources defined" if sources.empty?
  puts "Found #{sources.count} sources"
  
  
  datasets = get_datasets
  fail "You have no datasets defined" if datasets.empty?
  puts "Found #{datasets.count} sources"

  puts "Composing the tree"
  you = GoodData::CloverGenerator::Dependency::N.new({
    :name => name,
    :type => "project",
    :provides => [],
    :requires => @usecases
  })
    
  provided_dims = @dims.map do |dim_to_provide|
    GoodData::CloverGenerator::Dependency::N.new({
      :package => dim_to_provide.split("/").first,
      :name => dim_to_provide.split("/").last,
      :provides => [dim_to_provide.split("/").last],
      :type => "dim",
      :requires => []
    })
  end

  provided_dims.each {|x| repo << x}
  # graph = resolve(repo, you)
  # to_dot(graph)
  v = GoodData::CloverGenerator::Dependency::Visitor.new
end

#use_dims(dims) ⇒ Object



138
139
140
# File 'lib/dsl/project_dsl.rb', line 138

def use_dims(dims)
  @dims = dims
end

#use_usecase(usecase) ⇒ Object



142
143
144
# File 'lib/dsl/project_dsl.rb', line 142

def use_usecase(usecase)
  @usecases << usecase
end