handlebarsjs 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4962fdcc88f1a68831b1907b713aa3f8996ca23dee96da1d970545a2875c0b44
4
- data.tar.gz: 3eaa1ec0405fc12467286ac2e0db49af24269f7fe589e0365ce16439b43799c3
3
+ metadata.gz: d738c40219cfaa348afd07afcb59bc572ea7ee40d2cb35f5b28f7b9273e05e01
4
+ data.tar.gz: 65f1494627bc268671e240d1d133a73dd79ccbdfdbbb3f0eb38baa19831cff47
5
5
  SHA512:
6
- metadata.gz: a5aa1c58ae7e8de87949843cd3b6d90abcc04928c55a97181fca747b64aa7e2e53af87c16ee89c05112136dc8723b521caf1058948476ce7c38db46030d6a6b9
7
- data.tar.gz: f50f5ad4daff693c4c9b0ef2f3756f2073b952165178831ac0e7361986021d0d54e100aae0647fc66aa7dd58d0173dd5639901c842349a61df5ce57025525830
6
+ metadata.gz: 0a720a3372be65f40f4e43450c480b416679366011eda8e3d6fc9dc479ddbbcc05d11a3f408fed14d9da7c615cea72d890afffc9c142a2e31f18c8ab5e606d30
7
+ data.tar.gz: 46c659bce100021e60775a1b1b25faeb399cdc6caf8747dee1778eef395be16aa20f2bd0c5a3f1ee45a86044b320ba919117ae52f13ccd85a9fa325542e82acf
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [0.7.0](https://github.com/klueless-io/handlebarsjs/compare/v0.6.3...v0.7.0) (2022-07-15)
2
+
3
+
4
+ ### Features
5
+
6
+ * add alias support ([ae81c61](https://github.com/klueless-io/handlebarsjs/commit/ae81c61d569dd44e9ae50832f69a0f29d30e9523))
7
+
1
8
  ## [0.6.3](https://github.com/klueless-io/handlebarsjs/compare/v0.6.2...v0.6.3) (2022-07-14)
2
9
 
3
10
 
data/lib/_.rb CHANGED
@@ -31,3 +31,4 @@ require_relative 'handlebarsjs/helpers/inflection/pluralize'
31
31
  require_relative 'handlebarsjs/helpers/inflection/pluralize_number'
32
32
  require_relative 'handlebarsjs/helpers/inflection/pluralize_number_word'
33
33
  require_relative 'handlebarsjs/helpers/inflection/singularize'
34
+ require_relative 'handlebarsjs/helpers/misc/safe'
@@ -4,20 +4,27 @@ module Handlebarsjs
4
4
  # Extend base helper for each of your custom handlebars-helpers
5
5
  class BaseHelper
6
6
  attr_reader :cmdlet
7
+ attr_reader :safe
8
+ attr_reader :parameter_names
7
9
 
8
10
  # Preferred way to register the internal command is via register_cmdlet
9
11
  # but you can also register the command directly in the initializer and
10
12
  # that can be handy if you use a custom configured cmdlet
11
- def initialize(cmdlet = nil)
12
- @cmdlet = cmdlet
13
- @cmdlet = self.class.cmdlet.new if @cmdlet.nil? && self.class.cmdlet
13
+ def initialize(cmdlet = nil, safe: nil, parameter_names: nil)
14
+ initialize_cmdlet(cmdlet)
15
+ initialize_safe(safe)
16
+ initialize_parameter_names(parameter_names)
14
17
  end
15
18
 
16
19
  class << self
17
20
  attr_reader :cmdlet
21
+ attr_reader :safe
22
+ attr_reader :parameter_names
18
23
 
19
- def register_cmdlet(cmdlet)
24
+ def register_cmdlet(cmdlet, safe: false, parameter_names: [])
20
25
  @cmdlet = cmdlet
26
+ @safe = safe
27
+ @parameter_names = parameter_names
21
28
  end
22
29
  end
23
30
 
@@ -33,5 +40,24 @@ module Handlebarsjs
33
40
  def to_proc
34
41
  ->(value, _opts) { wrapper(cmdlet.call(value)) }
35
42
  end
43
+
44
+ private
45
+
46
+ def initialize_cmdlet(cmdlet)
47
+ @cmdlet = cmdlet
48
+ @cmdlet = self.class.cmdlet.new if @cmdlet.nil? && self.class.cmdlet
49
+ end
50
+
51
+ def initialize_safe(safe)
52
+ @safe = safe
53
+ @safe = self.class.safe if @safe.nil? && self.class.safe
54
+ @safe = false if @safe.nil?
55
+ end
56
+
57
+ def initialize_parameter_names(parameter_names)
58
+ @parameter_names = parameter_names
59
+ @parameter_names = self.class.parameter_names if parameter_names.nil? && self.class.parameter_names
60
+ @parameter_names = [] if @parameter_names.nil?
61
+ end
36
62
  end
37
63
  end
@@ -10,6 +10,24 @@ module Handlebarsjs
10
10
  add_configured_helpers
11
11
  end
12
12
 
13
+ class << self
14
+ def register_helper_script(name)
15
+ <<-JAVASCRIPT
16
+ Handlebars.registerHelper('#{name}', ruby_#{name})
17
+ JAVASCRIPT
18
+ end
19
+
20
+ def register_safe_string_helper_script(name, parameter_names)
21
+ parameters = (parameter_names + ['_opts']).join(', ')
22
+
23
+ <<-JAVASCRIPT
24
+ Handlebars.registerHelper('#{name}', function (#{parameters}) {
25
+ return new Handlebars.SafeString(ruby_#{name}(#{parameters}));
26
+ })
27
+ JAVASCRIPT
28
+ end
29
+ end
30
+
13
31
  def process_template(template, options = {})
14
32
  # TODO: process template function may be improved with some type of caching
15
33
  context.call('process_template', template, options)
@@ -1,8 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Handlebarsjs
4
- # handlebars.handlebars_snapshot.add_helper(helper_name, helper)
5
- # Structure for storing Cmdlet configuration
4
+ # Configuration data such has helpers for handlebarsjs
6
5
  class HandlebarsConfiguration
7
6
  include KLog::Logging
8
7
 
@@ -8,6 +8,7 @@ module Handlebarsjs
8
8
  add_case_defaults
9
9
  add_comparison_defaults
10
10
  add_inflection_defaults
11
+ add_misc_defaults
11
12
  end
12
13
 
13
14
  def add_array_defaults
@@ -31,7 +32,7 @@ module Handlebarsjs
31
32
  config.handlebars.helper(:lower, Handlebarsjs::Helpers::Case::Lower.new, aliases: %i[lowercase downcase])
32
33
  config.handlebars.helper(:slash, Handlebarsjs::Helpers::Case::Slash.new, aliases: %i[forward_slash slash_forward])
33
34
  config.handlebars.helper(:snake, Handlebarsjs::Helpers::Case::Snake.new)
34
- config.handlebars.helper(:title, Handlebarsjs::Helpers::Case::Title.new)
35
+ config.handlebars.helper(:title, Handlebarsjs::Helpers::Case::Title.new, aliases: %i[titleize])
35
36
  config.handlebars.helper(:upper, Handlebarsjs::Helpers::Case::Upper.new, aliases: %i[upcase uppercase])
36
37
  end
37
38
  end
@@ -60,5 +61,11 @@ module Handlebarsjs
60
61
  config.handlebars.helper(:singularize, Handlebarsjs::Helpers::Inflection::Singularize.new)
61
62
  end
62
63
  end
64
+
65
+ def add_misc_defaults
66
+ KConfig.configure do |config|
67
+ config.handlebars.helper(:safe, Handlebarsjs::Helpers::Misc::Safe.new)
68
+ end
69
+ end
63
70
  end
64
71
  end
@@ -25,10 +25,23 @@ module Handlebarsjs
25
25
  end
26
26
 
27
27
  def add_helper(name, helper)
28
- return add_helper_entry(name, callback: helper) if helper.is_a?(Proc)
29
- return add_helper_entry(name, helper: helper, callback: helper.to_proc) if helper.respond_to?(:to_proc)
28
+ add_helper_entry(
29
+ name: name,
30
+ helper: helper,
31
+ callback: helper.to_proc,
32
+ safe: helper.safe,
33
+ parameters: helper.parameter_names
34
+ )
35
+ end
30
36
 
31
- raise Handlebarsjs::Error, 'helper must be a callback or implement to_proc method' if callback.nil?
37
+ def add_callback(name, callback, safe, parameters)
38
+ add_helper_entry(
39
+ name: name,
40
+ helper: nil,
41
+ callback: callback,
42
+ safe: safe,
43
+ parameters: parameters
44
+ )
32
45
  end
33
46
 
34
47
  def register_helper(name)
@@ -43,18 +56,16 @@ module Handlebarsjs
43
56
  @snapshot ||= MiniRacer::Snapshot.new(script)
44
57
  end
45
58
 
46
- # rubocop:disable Style/DocumentDynamicEvalDefinition
47
59
  def new_context
48
60
  context = MiniRacer::Context.new(snapshot: snapshot)
49
61
 
50
- helpers.each do |helper|
51
- context.attach("ruby_#{helper[:name]}", helper[:callback])
52
- context.eval("Handlebars.registerHelper('#{helper[:name]}', ruby_#{helper[:name]})")
62
+ helpers.each do |helper_entry|
63
+ attach_ruby(context, helper_entry)
64
+ eval_register_helper(context, helper_entry)
53
65
  end
54
66
 
55
67
  context
56
68
  end
57
- # rubocop:enable Style/DocumentDynamicEvalDefinition
58
69
 
59
70
  # not currently used
60
71
  def dirty?
@@ -66,6 +77,19 @@ module Handlebarsjs
66
77
  log.structure(data)
67
78
  end
68
79
 
80
+ def debug_register_scripts
81
+ register_scripts = helpers.map do |helper|
82
+ # Handlebarsjs::Handlebars.register_safe_string_helper_script(
83
+ # helper[:name]
84
+ # )
85
+ # helper[:helper].build_register_helper_script(
86
+ # helper[:name],
87
+ # safe: helper[:safe]
88
+ # )
89
+ end
90
+ puts register_scripts.join("\n")
91
+ end
92
+
69
93
  private
70
94
 
71
95
  def add_script(name, type, script: nil, path: nil)
@@ -76,12 +100,18 @@ module Handlebarsjs
76
100
  add_script_item(name, type, script, path)
77
101
  end
78
102
 
79
- def add_helper_entry(name, helper: nil, callback: nil)
80
- @helpers << {
81
- name: name,
82
- helper: helper,
83
- callback: callback
103
+ def add_helper_entry(**args)
104
+ entry = {
105
+ name: args[:name],
106
+ helper: args[:helper],
107
+ callback: args[:callback],
108
+ safe: args[:safe],
109
+ parameters: args[:parameters]
84
110
  }
111
+
112
+ @helpers << entry
113
+
114
+ entry
85
115
  end
86
116
 
87
117
  def add_script_item(name, type, script, path = nil)
@@ -93,5 +123,29 @@ module Handlebarsjs
93
123
  path: path
94
124
  }
95
125
  end
126
+
127
+ # This context should be on handlebars, not snapshot (I THINK)
128
+ def attach_ruby(context, helper_entry)
129
+ name = helper_entry[:name]
130
+ callback = helper_entry[:callback]
131
+
132
+ context.attach("ruby_#{name}", callback)
133
+ end
134
+
135
+ def eval_register_helper(context, helper_entry)
136
+ script = if helper_entry[:safe]
137
+ Handlebarsjs::Handlebars.register_safe_string_helper_script(helper_entry[:name], helper_entry[:parameters])
138
+ else
139
+ Handlebarsjs::Handlebars.register_helper_script(helper_entry[:name])
140
+ end
141
+
142
+ context.eval(script)
143
+ end
144
+
145
+ def build_register_helper_script(helper_entry)
146
+ return Handlebarsjs::Handlebars.register_safe_string_helper_script(helper_entry[:name], helper_entry[:parameters]) if helper_entry[:safe]
147
+
148
+ Handlebarsjs::Handlebars.register_helper_script(helper_entry[:name])
149
+ end
96
150
  end
97
151
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Handlebarsjs
4
+ module Helpers
5
+ # Miscellaneous cmdlets
6
+ module Misc
7
+ # Safe: pass through the value with &lt;&gt; and single and double quotes left as is
8
+ class Safe < Handlebarsjs::BaseHelper
9
+ register_cmdlet(Cmdlet::Misc::Safe, safe: true, parameter_names: [:value])
10
+
11
+ def to_proc
12
+ ->(value, _opts) { wrapper(cmdlet.call(value)) }
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -314,6 +314,23 @@ return /******/ (function(modules) { // webpackBootstrap
314
314
  logger: _logger2['default'],
315
315
  log: _logger2['default'].log,
316
316
 
317
+
318
+ // Handlebars.registerHelper('encodeMyString',function(inputData){
319
+ // return new Handlebars.SafeString(inputData);
320
+ // });
321
+ // safeStringHelper: safeStringHelper(name, fn)
322
+
323
+ // How do I write a callback function to wrap a callback function in javascript
324
+ // registerSafeHelper: function registerSafeHelper(name, fn) {
325
+ // new_function: function(fn) {
326
+ // return function(context, options) {
327
+ // return new Handlebars.SafeString(fn(context, options)); "<hello />"
328
+ // };
329
+ // }
330
+ // registerHelper(name, new_function)
331
+ // },
332
+
333
+
317
334
  registerHelper: function registerHelper(name, fn) {
318
335
  if (_utils.toString.call(name) === objectType) {
319
336
  if (fn) {
@@ -1,3 +1,12 @@
1
1
  Handlebars.registerHelper('loud', function (input) {
2
2
  return input.toUpperCase()
3
- })
3
+ })
4
+
5
+ Handlebars.registerHelper('allow_html', function (some_html) {
6
+ return new Handlebars.SafeString(some_html);
7
+ })
8
+
9
+ // Handlebars.registerHelper('i_am_safe_xxx', function (some_html) {
10
+ // some_html = "doe some thing"
11
+ // return new Handlebars.SafeString(some_html);
12
+ // })
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Handlebarsjs
4
- VERSION = '0.7.0'
4
+ VERSION = '0.8.0'
5
5
  end
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "handlebarsjs",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "handlebarsjs",
9
- "version": "0.7.0",
9
+ "version": "0.8.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.7.0",
3
+ "version": "0.8.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.7.0
4
+ version: 0.8.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-07-15 00:00:00.000000000 Z
11
+ date: 2022-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cmdlet
@@ -128,6 +128,7 @@ files:
128
128
  - lib/handlebarsjs/helpers/inflection/pluralize_number.rb
129
129
  - lib/handlebarsjs/helpers/inflection/pluralize_number_word.rb
130
130
  - lib/handlebarsjs/helpers/inflection/singularize.rb
131
+ - lib/handlebarsjs/helpers/misc/safe.rb
131
132
  - lib/handlebarsjs/javascript.rb
132
133
  - lib/handlebarsjs/javascript/handlebars-4.7.7.js
133
134
  - lib/handlebarsjs/javascript/handlebars-api.js