handlebarsjs 0.7.0 → 0.10.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: 4962fdcc88f1a68831b1907b713aa3f8996ca23dee96da1d970545a2875c0b44
4
- data.tar.gz: 3eaa1ec0405fc12467286ac2e0db49af24269f7fe589e0365ce16439b43799c3
3
+ metadata.gz: 32d0cd3d55545bf49ae8486479829203e3216ab77a1b86604e7c2f9f50940c34
4
+ data.tar.gz: e9ea077cd19602f48176d3b41bf406166fa227bef848af7d2c1bd1fcc3d14e69
5
5
  SHA512:
6
- metadata.gz: a5aa1c58ae7e8de87949843cd3b6d90abcc04928c55a97181fca747b64aa7e2e53af87c16ee89c05112136dc8723b521caf1058948476ce7c38db46030d6a6b9
7
- data.tar.gz: f50f5ad4daff693c4c9b0ef2f3756f2073b952165178831ac0e7361986021d0d54e100aae0647fc66aa7dd58d0173dd5639901c842349a61df5ce57025525830
6
+ metadata.gz: 1a4ddb649bb51fe9d4c69db398359900110875c735f1cf7f173ead88ffd6efe00242805b3fabf74d29fad824803a36840d5c22baefb0cb5b50b0b811ffb71d33
7
+ data.tar.gz: 25f2430f5a18232d231d7f0d38b9a10c990d2ea928b5b1a44b0d232c3b4f5638bebcda09e36a49e4be7767b1bba4d1b0e50bc7f36b261fd3ac903295ddba4cde
data/.rubocop.yml CHANGED
@@ -15,7 +15,7 @@ Metrics/BlockLength:
15
15
  Exclude:
16
16
  - "**/spec/**/*"
17
17
  - "*.gemspec"
18
- IgnoredMethods:
18
+ AllowedMethods:
19
19
  - configure
20
20
  - context
21
21
  - define
data/CHANGELOG.md CHANGED
@@ -1,3 +1,31 @@
1
+ # [0.9.0](https://github.com/klueless-io/handlebarsjs/compare/v0.8.0...v0.9.0) (2022-07-16)
2
+
3
+
4
+ ### Features
5
+
6
+ * add safe support ([edc7062](https://github.com/klueless-io/handlebarsjs/commit/edc70623130ca6ae397b3532e4609ffd825cd7a3))
7
+
8
+ # [0.8.0](https://github.com/klueless-io/handlebarsjs/compare/v0.7.0...v0.8.0) (2022-07-16)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * test gha tests ([d4d8c9c](https://github.com/klueless-io/handlebarsjs/commit/d4d8c9c6802fc9ea2543f72a22718dac4b424b90))
14
+ * test gha tests ([d3284d8](https://github.com/klueless-io/handlebarsjs/commit/d3284d8d0049a38c0aa9f72adde07d2d8c4b8229))
15
+
16
+
17
+ ### Features
18
+
19
+ * add safe support ([83a81c7](https://github.com/klueless-io/handlebarsjs/commit/83a81c751e3acb69a9befb88b86122fcf1a20abc))
20
+ * add safe support ([c458f6d](https://github.com/klueless-io/handlebarsjs/commit/c458f6d3e1d0101840af6898ea3067ad828fb5fb))
21
+
22
+ # [0.7.0](https://github.com/klueless-io/handlebarsjs/compare/v0.6.3...v0.7.0) (2022-07-15)
23
+
24
+
25
+ ### Features
26
+
27
+ * add alias support ([ae81c61](https://github.com/klueless-io/handlebarsjs/commit/ae81c61d569dd44e9ae50832f69a0f29d30e9523))
28
+
1
29
  ## [0.6.3](https://github.com/klueless-io/handlebarsjs/compare/v0.6.2...v0.6.3) (2022-07-14)
2
30
 
3
31
 
data/lib/_.rb CHANGED
@@ -31,3 +31,6 @@ 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'
35
+ require_relative 'handlebarsjs/helpers/str/padl'
36
+ require_relative 'handlebarsjs/helpers/str/padr'
@@ -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,8 @@ module Handlebarsjs
8
8
  add_case_defaults
9
9
  add_comparison_defaults
10
10
  add_inflection_defaults
11
+ add_misc_defaults
12
+ add_str_defaults
11
13
  end
12
14
 
13
15
  def add_array_defaults
@@ -31,7 +33,7 @@ module Handlebarsjs
31
33
  config.handlebars.helper(:lower, Handlebarsjs::Helpers::Case::Lower.new, aliases: %i[lowercase downcase])
32
34
  config.handlebars.helper(:slash, Handlebarsjs::Helpers::Case::Slash.new, aliases: %i[forward_slash slash_forward])
33
35
  config.handlebars.helper(:snake, Handlebarsjs::Helpers::Case::Snake.new)
34
- config.handlebars.helper(:title, Handlebarsjs::Helpers::Case::Title.new)
36
+ config.handlebars.helper(:title, Handlebarsjs::Helpers::Case::Title.new, aliases: %i[titleize])
35
37
  config.handlebars.helper(:upper, Handlebarsjs::Helpers::Case::Upper.new, aliases: %i[upcase uppercase])
36
38
  end
37
39
  end
@@ -60,5 +62,18 @@ module Handlebarsjs
60
62
  config.handlebars.helper(:singularize, Handlebarsjs::Helpers::Inflection::Singularize.new)
61
63
  end
62
64
  end
65
+
66
+ def add_misc_defaults
67
+ KConfig.configure do |config|
68
+ config.handlebars.helper(:safe, Handlebarsjs::Helpers::Misc::Safe.new)
69
+ end
70
+ end
71
+
72
+ def add_str_defaults
73
+ KConfig.configure do |config|
74
+ config.handlebars.helper(:padl, Handlebarsjs::Helpers::Str::Padl.new)
75
+ config.handlebars.helper(:padr, Handlebarsjs::Helpers::Str::Padr.new)
76
+ end
77
+ end
63
78
  end
64
79
  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
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Handlebarsjs
4
+ module Helpers
5
+ # String manipulation
6
+ module Str
7
+ # Padl: take the value and give it padding on the left hand side
8
+ class Padl < Handlebarsjs::BaseHelper
9
+ register_cmdlet(Cmdlet::Str::Padl)
10
+
11
+ def to_proc
12
+ ->(value, count = nil, char = nil, _opts) { wrapper(cmdlet.call(value, count, char)) }
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Handlebarsjs
4
+ module Helpers
5
+ # String manipulation
6
+ module Str
7
+ # Padr: take the value and give it padding on the right hand side
8
+ class Padr < Handlebarsjs::BaseHelper
9
+ register_cmdlet(Cmdlet::Str::Padr)
10
+
11
+ def to_proc
12
+ ->(value, count = nil, char = nil, _opts) { cmdlet.call(value, count, char) }
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.10.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.10.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.10.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.10.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.10.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-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cmdlet
@@ -69,7 +69,6 @@ files:
69
69
  - ".builders/director/handlebars_helper_director.rb"
70
70
  - ".builders/generators/01-bootstrap.rb"
71
71
  - ".builders/generators/domain_model.rb"
72
- - ".builders/generators/helpers/comparison_helpers.rb"
73
72
  - ".builders/generators/project-plan.rb"
74
73
  - ".releaserc.json"
75
74
  - ".rspec"
@@ -128,6 +127,9 @@ files:
128
127
  - lib/handlebarsjs/helpers/inflection/pluralize_number.rb
129
128
  - lib/handlebarsjs/helpers/inflection/pluralize_number_word.rb
130
129
  - lib/handlebarsjs/helpers/inflection/singularize.rb
130
+ - lib/handlebarsjs/helpers/misc/safe.rb
131
+ - lib/handlebarsjs/helpers/str/padl.rb
132
+ - lib/handlebarsjs/helpers/str/padr.rb
131
133
  - lib/handlebarsjs/javascript.rb
132
134
  - lib/handlebarsjs/javascript/handlebars-4.7.7.js
133
135
  - lib/handlebarsjs/javascript/handlebars-api.js
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # base_class_require 'handlebars/helpers/comparison/base_helper'
4
- # base_class 'Handlebars::Helpers::Comparison::BaseHelper'
5
- # example_input_value 'var1 and var2'
6
- # example_output_value 'truthy block'
7
- # test_input_value 'var1 and var2'
8
- # test_output_value 'truthy block'
9
-
10
- KManager.action :comparison_helpers do
11
- action do
12
- common = OpenStruct.new(
13
- category_name: 'comparison',
14
- category_description: 'Comparison helpers, eg. or, and, equal, not equal, less than, greater than etc.'
15
- )
16
-
17
- HandlebarsHelperDirector
18
- .init(k_builder, on_exist: :write, on_action: :execute)
19
- .helper do
20
- category common.category_name
21
- category_description common.category_description
22
- name 'and'
23
- description 'And: Block helper that renders a block if **all of** the given values are truthy. If an inverse block is specified it will be rendered when falsy.'
24
- result "return block when every value is truthy"
25
- parameter('values', 'list of values (via *splat) to be checked via AND condition', splat: true)
26
-
27
- example <<-TEXT
28
- {{#if (and p1 p2 p3 p4 p5)}}
29
- found
30
- {{/if}}
31
- TEXT
32
-
33
- example <<-TEXT
34
- {{#if (and name age)}}
35
- {{name}}-{{age}}
36
- {{else}}
37
- no name or age
38
- {{/if}}
39
- TEXT
40
- end
41
- .build_helpers
42
- .debug
43
- end
44
- end