Class: Splash::Templates::Template

Inherits:
Object
  • Object
show all
Defined in:
lib/splash/templates.rb

Overview

KISS template Engine

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(_options) ⇒ Template

constructor : generate the pseudo accessor for template Class from token list

Raises:



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/splash/templates.rb', line 20

def initialize(_options)


  @template_file = _options[:template_file]
  raise NoTemplateFile::new('No template file found') unless File::exist?(@template_file)
  begin
    @content = IO::readlines(@template_file).join.chomp
  rescue
    raise NoTemplateFile::new('No template file found')
  end
  token_from_template = @content.scan(/%%(\w+)%%/).flatten.uniq.map{ |item| item.downcase.to_sym}
  begin
    @list_token = _options[:list_token]
    @hash_token = Hash::new; @list_token.each{|_item| @hash_token[_item.to_s] = String::new('')}
  rescue
    raise InvalidTokenList::new("Token list malformation")
  end
  raise InvalidTokenList::new("Token list doesn't match the template") unless token_from_template.sort == @list_token.sort
  @list_token.each{|_token| eval("def #{_token}=(_value); raise ArgumentError::new('Not a String') unless _value.class == String; @hash_token['#{_token}'] = _value ;end")}
  @list_token.each{|_token| eval("def #{_token}; @hash_token['#{_token}'] ;end")}
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(_name, *_args) ⇒ Object

collector for pseudo accessor to prevent bad mapping

Raises:

  • (NotAToken)

    if caling an accessor not mapped in token list



65
66
67
# File 'lib/splash/templates.rb', line 65

def method_missing(_name,*_args)
  raise NotAToken
end

Instance Attribute Details

#contentObject (readonly)

getter of the flat content of the template



17
18
19
# File 'lib/splash/templates.rb', line 17

def content
  @content
end

#list_tokenObject (readonly)

getter of the list of token



13
14
15
# File 'lib/splash/templates.rb', line 13

def list_token
  @list_token
end

#template_fileObject (readonly)

getter of the template file



15
16
17
# File 'lib/splash/templates.rb', line 15

def template_file
  @template_file
end

Instance Method Details

#map(_hash) ⇒ Object

map a hash against templates token_list

Parameters:

  • _hash (Hash)

    a hash data to map

Raises:



53
54
55
56
57
58
59
60
61
# File 'lib/splash/templates.rb', line 53

def map(_hash)
  _data = {}
  _hash.each { |item,val|
    raise ArgumentError::new("#{item} : Not a String") unless val.class == String
    _data[item.to_s.downcase] = val
  }
  raise InvalidTokenList::new("Token list malformation") unless _data.keys.sort == @list_token.map{|_token| _token.to_s }.sort
  @hash_token = _data
end

#outputString

the templater;proceed to templating

Returns:

  • (String)

    the template output



71
72
73
74
75
76
77
78
# File 'lib/splash/templates.rb', line 71

def output
  _my_res = String::new('')
  _my_res = @content
  @list_token.each{|_token|
    _my_res.gsub!(/%%#{_token.to_s.upcase}%%/,@hash_token[_token.to_s])
  }
  return _my_res
end

#token(_token, _value) ⇒ Object

generic accessor

Parameters:

  • _token (Symbol)

    in the token list

  • _value (String)

    a text value

Raises:

  • (ArgumentError)

    if _valu is not a String



46
47
48
49
# File 'lib/splash/templates.rb', line 46

def token(_token,_value)
  raise ArgumentError::new('Not a String') unless _value.class == String
  @hash_token[_token.to_s] = _value
end