Module: Higan::Renderer::ClassMethods

Defined in:
lib/higan/renderer.rb

Instance Method Summary collapse

Instance Method Details

#default_renderer(klass) ⇒ Object



56
57
58
59
60
61
62
63
64
# File 'lib/higan/renderer.rb', line 56

def default_renderer(klass)
  column_names = klass.column_names
  ->(record) {
    column_names.map { |name|
      value = record.send(name)
      "#{name} = #{value}"
    }.join('<br>').html_safe
  }
end

#detect_renderer(target) ⇒ Object



28
29
30
31
32
33
34
35
36
37
# File 'lib/higan/renderer.rb', line 28

def detect_renderer(target)
  case
    when target.renderer
      target.renderer
    when target.template
      template_renderer(target.template)
    else
      default_renderer(target.klass)
  end
end

#local_file_path(path) ⇒ Object



4
5
6
# File 'lib/higan/renderer.rb', line 4

def local_file_path(path)
  basic[:temp_dir] + path
end

#render(name) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/higan/renderer.rb', line 39

def render(name)
  target = element_store[name]
  renderer = detect_renderer(target)

  target.element_list.map do |element|
    key = target.key(element.id)
    uploading = Uploading.find_by(key: key) || Uploading.new
    uploading.update!(
      key: key,
      path: target.path.call(element),
      body: renderer.call(element),
      source_updated_at: element.updated_at
    )
    uploading
  end
end

#render_test(name) ⇒ Object



8
9
10
# File 'lib/higan/renderer.rb', line 8

def render_test(name)
  render(name)
end

#template_renderer(file) ⇒ Object



12
13
14
15
16
17
18
# File 'lib/higan/renderer.rb', line 12

def template_renderer(file)
  ->(record) {
    view = ActionView::Base.new(ActionController::Base.view_paths, {})
    view.assign({record: record})
    view.render(file: file)
  }
end

#write_temp(name) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/higan/renderer.rb', line 20

def write_temp(name)
  render(name).flatten.each do |target|
    target_path = local_file_path(target.path)
    FileUtils.mkdir_p(File.dirname(target_path))
    File.write(target_path, target.body)
  end
end