handlebarsjs 0.6.3 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 83ccfdd308c499bfbbb4127a52fa9af19aa1f1cc8d7326b371c16da0f0e45400
4
- data.tar.gz: 60eea0159f3065bf24798a096298706a13d568fe5417690c1edb46ecedaa4ee5
3
+ metadata.gz: 58a93fc0ff8ee926166b36c99e17e122d5a021a47baeb8333723d92a14afdbf8
4
+ data.tar.gz: 5f63d1066db8a9d0163b46b43a54ac59536d3e06e2bd2297cf53291c01d69a1b
5
5
  SHA512:
6
- metadata.gz: bcee4752350cb7d5e2ee11c8ef0a7ca373589b60d9252497e125a815d234582585e0b94be3868505a6aca7bf60c25de6c1b8e98ff0a371c0cd744772c39edaa5
7
- data.tar.gz: 17ffdd8d6c166a37fcd714c72eec08ca181a76aa2c8e7151d97a07b5feec9c3ef749632a3817b889dfd3366ad65a0156c44fcc178ff8193fc5afd78048aa9521
6
+ metadata.gz: 32659c1788e4a22ce665315bfcf893333d3fa07510eda438d8bba3c007acf3501ab08dfe73d153517c2e2515b5eefa398a16551d5eccc60e69654a970c7d0951
7
+ data.tar.gz: 8ffda416eda0a82362b6cac19ca52a2260aa768d62bb9926b8ca0abd54d81e42acf18b6780a122141abd0c68a1559e770d3e558b7c89ab8c2025ea0464a50d7f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,31 @@
1
+ # [0.8.0](https://github.com/klueless-io/handlebarsjs/compare/v0.7.0...v0.8.0) (2022-07-16)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * test gha tests ([d4d8c9c](https://github.com/klueless-io/handlebarsjs/commit/d4d8c9c6802fc9ea2543f72a22718dac4b424b90))
7
+ * test gha tests ([d3284d8](https://github.com/klueless-io/handlebarsjs/commit/d3284d8d0049a38c0aa9f72adde07d2d8c4b8229))
8
+
9
+
10
+ ### Features
11
+
12
+ * add safe support ([83a81c7](https://github.com/klueless-io/handlebarsjs/commit/83a81c751e3acb69a9befb88b86122fcf1a20abc))
13
+ * add safe support ([c458f6d](https://github.com/klueless-io/handlebarsjs/commit/c458f6d3e1d0101840af6898ea3067ad828fb5fb))
14
+
15
+ # [0.7.0](https://github.com/klueless-io/handlebarsjs/compare/v0.6.3...v0.7.0) (2022-07-15)
16
+
17
+
18
+ ### Features
19
+
20
+ * add alias support ([ae81c61](https://github.com/klueless-io/handlebarsjs/commit/ae81c61d569dd44e9ae50832f69a0f29d30e9523))
21
+
22
+ ## [0.6.3](https://github.com/klueless-io/handlebarsjs/compare/v0.6.2...v0.6.3) (2022-07-14)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * add_all_defaults to configuration ([5755639](https://github.com/klueless-io/handlebarsjs/commit/575563988b17eb17807ce7b7b2ca76e06eba796d))
28
+
1
29
  ## [0.6.2](https://github.com/klueless-io/handlebarsjs/compare/v0.6.1...v0.6.2) (2022-07-13)
2
30
 
3
31
 
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
 
@@ -16,8 +15,13 @@ module Handlebarsjs
16
15
 
17
16
  HelperConfig = Struct.new(:name, :helper)
18
17
 
19
- def helper(name, helper)
20
- @helpers << HelperConfig.new(name, helper)
18
+ def helper(name, helper, aliases: [])
19
+ names = [name.to_sym]
20
+ names = (names + aliases.map(&:to_sym)).uniq
21
+
22
+ names.each do |helper_name|
23
+ @helpers << HelperConfig.new(helper_name, helper)
24
+ end
21
25
  end
22
26
  end
23
27
  end
@@ -8,31 +8,32 @@ 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
14
15
  KConfig.configure do |config|
15
16
  config.handlebars.helper(:join, Handlebarsjs::Helpers::Array::Join.new)
16
- config.handlebars.helper(:join_pre, Handlebarsjs::Helpers::Array::JoinPre.new)
17
17
  config.handlebars.helper(:join_post, Handlebarsjs::Helpers::Array::JoinPost.new)
18
+ config.handlebars.helper(:join_pre, Handlebarsjs::Helpers::Array::JoinPre.new)
18
19
  end
19
20
  end
20
21
 
21
22
  def add_case_defaults
22
23
  KConfig.configure do |config|
23
- config.handlebars.helper(:back_slash, Handlebarsjs::Helpers::Case::BackSlash.new)
24
- config.handlebars.helper(:camel, Handlebarsjs::Helpers::Case::Camel.new)
25
- config.handlebars.helper(:constant, Handlebarsjs::Helpers::Case::Constant.new)
26
- config.handlebars.helper(:dash, Handlebarsjs::Helpers::Case::Dash.new)
27
- config.handlebars.helper(:dot, Handlebarsjs::Helpers::Case::Dot.new)
24
+ config.handlebars.helper(:back_slash, Handlebarsjs::Helpers::Case::BackSlash.new, aliases: %i[backward_slash slash_backward])
25
+ config.handlebars.helper(:camel, Handlebarsjs::Helpers::Case::Camel.new, aliases: %i[camel_upper camelUpper camelU pascalcase])
26
+ config.handlebars.helper(:constant, Handlebarsjs::Helpers::Case::Constant.new, aliases: %i[constantize])
27
+ config.handlebars.helper(:dash, Handlebarsjs::Helpers::Case::Dash.new, aliases: %i[dasherize dashify dashcase hyphenate])
28
+ config.handlebars.helper(:dot, Handlebarsjs::Helpers::Case::Dot.new, aliases: %i[dotirize dotify dotcase hyphenate])
28
29
  config.handlebars.helper(:double_colon, Handlebarsjs::Helpers::Case::DoubleColon.new)
29
- config.handlebars.helper(:human, Handlebarsjs::Helpers::Case::Human.new)
30
- config.handlebars.helper(:lamel, Handlebarsjs::Helpers::Case::Lamel.new)
31
- config.handlebars.helper(:lower, Handlebarsjs::Helpers::Case::Lower.new)
32
- config.handlebars.helper(:slash, Handlebarsjs::Helpers::Case::Slash.new)
30
+ config.handlebars.helper(:human, Handlebarsjs::Helpers::Case::Human.new, aliases: %i[humanize sentence])
31
+ config.handlebars.helper(:lamel, Handlebarsjs::Helpers::Case::Lamel.new, aliases: %i[camel_lower camelLower camelL])
32
+ config.handlebars.helper(:lower, Handlebarsjs::Helpers::Case::Lower.new, aliases: %i[lowercase downcase])
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(:upper, Handlebarsjs::Helpers::Case::Upper.new)
35
+ config.handlebars.helper(:title, Handlebarsjs::Helpers::Case::Title.new, aliases: %i[titleize])
36
+ config.handlebars.helper(:upper, Handlebarsjs::Helpers::Case::Upper.new, aliases: %i[upcase uppercase])
36
37
  end
37
38
  end
38
39
 
@@ -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.6.3'
4
+ VERSION = '0.9.0'
5
5
  end
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "handlebarsjs",
3
- "version": "0.6.3",
3
+ "version": "0.9.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "handlebarsjs",
9
- "version": "0.6.3",
9
+ "version": "0.9.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.6.3",
3
+ "version": "0.9.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.6.3
4
+ version: 0.9.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-14 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