Class: INatChannel::Template

Inherits:
Object
  • Object
show all
Defined in:
lib/inat-channel/template.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(template, data) ⇒ Template



13
14
15
16
17
18
19
20
# File 'lib/inat-channel/template.rb', line 13

def initialize template, data
  @template = template
  @data = data
  @renderer = ERB::new @template, trim_mode: '-'
  IC::TAXA_ICONS.merge! data[:taxa_icons] if data[:taxa_icons]
  IC::ICONS.merge! data[:icons] if data[:icons]
  IC::FORMATS.merge! data[:formats] if data[:formats]
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



11
12
13
# File 'lib/inat-channel/template.rb', line 11

def data
  @data
end

#templateObject (readonly)

Returns the value of attribute template.



11
12
13
# File 'lib/inat-channel/template.rb', line 11

def template
  @template
end

Class Method Details

.defaultObject



84
85
86
# File 'lib/inat-channel/template.rb', line 84

def default
  @default ||= new(DEFAULT_TEMPLATE, {}).freeze
end

.load(path) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/inat-channel/template.rb', line 43

def load path
  content = File.read path
  if content.lines(chomp: true).first == '---'
    docs = content.split(/^---\n/m, 3)
    data = if docs[0].strip.empty? && docs[1]
      YAML.safe_load docs[1], symbolize_names: true
    else
      YAML.safe_load docs[0], symbolize_names: true
    end || {}
    template = docs[2] || docs[1] || content
  else
    data = {}
    template = content
  end
  new(template, data)
end

Instance Method Details

#process(observation_source) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/inat-channel/template.rb', line 22

def process observation_source
  observation = IC::convert_observation observation_source
  vars = {
    observation: observation,
    datetime: observation.datetime,
    location: observation.location,
    places: observation.places,
    taxon: observation.taxon,
    user: observation.user,
    date: observation.date,
    time: observation.time,
    icons: IC::ICONS,
    taxa_icons: IC::TAXA_ICONS,
    config: IC::CONFIG,
    data: @data
  }
  @renderer.result_with_hash vars
end