handlebarsjs 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,10 @@
1
+ // This function will be needed in future when I can figure out how to cache templates.
2
+ // function compile_template(template) {
3
+ // return Handlebars.compile(template);
4
+ // }
5
+
6
+ // This is the main function that is called by the client.
7
+ function process_template(template, data) {
8
+ const compiled_template = Handlebars.compile(template);
9
+ return compiled_template(data);
10
+ }
@@ -0,0 +1,3 @@
1
+ Handlebars.registerHelper('loud', function (input) {
2
+ return input.toUpperCase()
3
+ })
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Handlebarsjs
4
+ # API for interacting with Javascript while providing native Ruby helpers
5
+ class Javascript
6
+ attr_reader :snapshot_builder
7
+
8
+ def initialize
9
+ @snapshot_builder = SnapshotBuilder.new
10
+ end
11
+
12
+ def eval(script)
13
+ context.eval(script)
14
+ end
15
+
16
+ def attach(script, block)
17
+ context.attach(script, block)
18
+ end
19
+
20
+ def call(function_name, *arguments)
21
+ context.call(function_name, *arguments)
22
+ end
23
+
24
+ private
25
+
26
+ def context
27
+ @context ||= MiniRacer::Context.new(snapshot: snapshot_builder.build)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Handlebarsjs
4
+ # Wraps MiniRacer snapshot and provides clean API
5
+ class SnapshotBuilder
6
+ attr_reader :scripts
7
+
8
+ def initialize
9
+ @scripts = []
10
+ end
11
+
12
+ def add_library(name, script: nil, path: nil)
13
+ add_script(name, 'library', script: script, path: path)
14
+ end
15
+
16
+ def register_helper(name)
17
+ add_script(name, 'helper', script: "Handlebars.registerHelper('#{name}', ruby_#{name})")
18
+ end
19
+
20
+ def script
21
+ scripts.map { |script| "// #{script[:type]} - #{script[:name]}\n#{script[:script]}" }.join("\n\n")
22
+ end
23
+
24
+ def build
25
+ @build ||= MiniRacer::Snapshot.new(script)
26
+ end
27
+
28
+ private
29
+
30
+ def add_script(name, type, script: nil, path: nil)
31
+ raise Handlebarsjs::Error, 'script or path is required' if script.nil? && path.nil?
32
+ raise Handlebarsjs::Error, 'script and path are mutually exclusive' if script && path
33
+
34
+ script ||= File.read(path)
35
+ add_script_item(name, type, script, path)
36
+ end
37
+
38
+ def add_script_item(name, type, script, path = nil)
39
+ @build = nil
40
+ scripts << {
41
+ name: name,
42
+ type: type,
43
+ script: script,
44
+ path: path
45
+ }
46
+ end
47
+ end
48
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Handlebarsjs
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
data/lib/handlebarsjs.rb CHANGED
@@ -1,15 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'mini_racer'
3
4
  require_relative 'handlebarsjs/version'
5
+ require_relative 'handlebarsjs/snapshot_builder'
6
+ require_relative 'handlebarsjs/javascript'
7
+ require_relative 'handlebarsjs/handlebars'
4
8
 
5
9
  module Handlebarsjs
10
+ HANDLEBARS_LIBRARY_PATH = 'lib/handlebarsjs/javascript/handlebars-4.7.7.js'
11
+ HANDLEBARS_API_PATH = 'lib/handlebarsjs/javascript/handlebars-api.js'
12
+
6
13
  # raise Handlebarsjs::Error, 'Sample message'
7
14
  Error = Class.new(StandardError)
8
15
 
9
16
  # Your code goes here...
10
17
  end
11
18
 
12
- if ENV['KLUE_DEBUG']&.to_s&.downcase == 'true'
19
+ if ENV.fetch('KLUE_DEBUG', 'false').downcase == 'true'
13
20
  namespace = 'Handlebarsjs::Version'
14
21
  file_path = $LOADED_FEATURES.find { |f| f.include?('handlebarsjs/version') }
15
22
  version = Handlebarsjs::VERSION.ljust(9)
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "handlebarsjs",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "handlebarsjs",
9
- "version": "0.1.0",
9
+ "version": "0.2.0",
10
10
  "devDependencies": {
11
11
  "@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
12
12
  "@semantic-release/changelog": "^6.0.1",
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "handlebarsjs",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "handlebarsjs GEM wraps the handlebars.js library and provides ruby/javascript interoperability",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: handlebarsjs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-17 00:00:00.000000000 Z
11
+ date: 2022-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: k_log
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: mini_racer
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description: " handlebarsjs GEM wraps the handlebars.js library and provides ruby/javascript
28
42
  interoperability\n"
29
43
  email:
@@ -49,9 +63,21 @@ files:
49
63
  - Rakefile
50
64
  - bin/console
51
65
  - bin/setup
66
+ - docs/domain_model.drawio
67
+ - docs/domain_model.json
68
+ - docs/domain_model.svg
69
+ - docs/domain_model_custom.drawio
52
70
  - docs/project-plan/project.drawio
53
71
  - docs/project-plan/project_in_progress.svg
54
72
  - lib/handlebarsjs.rb
73
+ - lib/handlebarsjs/api.rb
74
+ - lib/handlebarsjs/handlebars.rb
75
+ - lib/handlebarsjs/helpers/comparison/and.rb
76
+ - lib/handlebarsjs/javascript.rb
77
+ - lib/handlebarsjs/javascript/handlebars-4.7.7.js
78
+ - lib/handlebarsjs/javascript/handlebars-api.js
79
+ - lib/handlebarsjs/javascript/handlebars-helpers.js
80
+ - lib/handlebarsjs/snapshot_builder.rb
55
81
  - lib/handlebarsjs/version.rb
56
82
  - package-lock.json
57
83
  - package.json