Class: Handlebarsjs::HandlebarsSnapshot

Inherits:
Object
  • Object
show all
Includes:
KLog::Logging
Defined in:
lib/handlebarsjs/handlebars_snapshot.rb

Overview

Wraps MiniRacer snapshot with specific emphasis on loading Handlebars helpers onto the MiniRacer context in the correct order. So that new contexts are preloaded with the handlebars library and the configured helpers.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeHandlebarsSnapshot

Returns a new instance of HandlebarsSnapshot.



14
15
16
17
# File 'lib/handlebarsjs/handlebars_snapshot.rb', line 14

def initialize
  @scripts = []
  @helpers = []
end

Instance Attribute Details

#helpersObject (readonly)

Returns the value of attribute helpers.



12
13
14
# File 'lib/handlebarsjs/handlebars_snapshot.rb', line 12

def helpers
  @helpers
end

#scriptsObject (readonly)

Returns the value of attribute scripts.



11
12
13
# File 'lib/handlebarsjs/handlebars_snapshot.rb', line 11

def scripts
  @scripts
end

Instance Method Details

#add_callback(name, callback, safe, parameters) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/handlebarsjs/handlebars_snapshot.rb', line 37

def add_callback(name, callback, safe, parameters)
  add_helper_entry(
    name: name,
    helper: nil,
    callback: callback,
    safe: safe,
    parameters: parameters
  )
end

#add_helper(name, helper) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'lib/handlebarsjs/handlebars_snapshot.rb', line 27

def add_helper(name, helper)
  add_helper_entry(
    name: name,
    helper: helper,
    callback: helper.to_proc,
    safe: helper.safe,
    parameters: helper.parameter_names
  )
end

#add_library(name, script: nil, path: nil) ⇒ Object



19
20
21
# File 'lib/handlebarsjs/handlebars_snapshot.rb', line 19

def add_library(name, script: nil, path: nil)
  add_script(name, 'library', script: script, path: path)
end

#add_snippet(name, script: nil, path: nil) ⇒ Object



23
24
25
# File 'lib/handlebarsjs/handlebars_snapshot.rb', line 23

def add_snippet(name, script: nil, path: nil)
  add_script(name, 'snippet', script: script, path: path)
end

#debugObject



75
76
77
78
# File 'lib/handlebarsjs/handlebars_snapshot.rb', line 75

def debug
  data = { scripts: scripts, helpers: helpers }
  log.structure(data)
end

#debug_register_scriptsObject



80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/handlebarsjs/handlebars_snapshot.rb', line 80

def debug_register_scripts
  register_scripts = helpers.map do |helper|
    # Handlebarsjs::Handlebars.register_safe_string_helper_script(
    #   helper[:name]
    # )
    # helper[:helper].build_register_helper_script(
    #   helper[:name],
    #   safe: helper[:safe]
    # )
  end
  puts register_scripts.join("\n")
end

#dirty?Boolean

not currently used

Returns:

  • (Boolean)


71
72
73
# File 'lib/handlebarsjs/handlebars_snapshot.rb', line 71

def dirty?
  @snapshot.nil?
end

#new_contextObject



59
60
61
62
63
64
65
66
67
68
# File 'lib/handlebarsjs/handlebars_snapshot.rb', line 59

def new_context
  context = MiniRacer::Context.new(snapshot: snapshot)

  helpers.each do |helper_entry|
    attach_ruby(context, helper_entry)
    eval_register_helper(context, helper_entry)
  end

  context
end

#register_helper(name) ⇒ Object



47
48
49
# File 'lib/handlebarsjs/handlebars_snapshot.rb', line 47

def register_helper(name)
  add_script(name, 'helper', script: "Handlebars.registerHelper('#{name}', ruby_#{name})")
end

#scriptObject



51
52
53
# File 'lib/handlebarsjs/handlebars_snapshot.rb', line 51

def script
  scripts.map { |script| "// #{script[:type]} - #{script[:name]}\n#{script[:script]}" }.join("\n\n")
end

#snapshotObject



55
56
57
# File 'lib/handlebarsjs/handlebars_snapshot.rb', line 55

def snapshot
  @snapshot ||= MiniRacer::Snapshot.new(script)
end