handlebarsjs 0.12.0 → 0.13.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: 4809376b984ba78e6b4144fdef39bfc08139b5dd25f8408745acc153b7a16ea3
4
- data.tar.gz: dd1bf3b3439aa212cf5e8d48bd1260fd999cdab23f8c6e7bc5649710aa3e236e
3
+ metadata.gz: f82a12060506efbddff4c69305414c8ad24cbecf14a897eae1805b6ae40a7fa5
4
+ data.tar.gz: 7d4b3aef04fd506d04fdcee4bcdc3256b6835ac92f856a1e9644ec77ff0cf194
5
5
  SHA512:
6
- metadata.gz: d59da9c6173ac1c25b9f2d0a07a57f5accd892ea1d57478e51223f7f78f08ea0b72b24add2471abcfc83921ff56b74e2cc602773c1c9d83a7feb3dc71f27a638
7
- data.tar.gz: 2479a971ab4c7e0d06708fc1cfb729d9bde647fd87a5e25b617f18ea511c518ffc5a1b8edef7f5eae707e358a3a97a099939268f63cedd736cb4985d54390d28
6
+ metadata.gz: ed39a269924ab2d1794104373d6dbe38fd6ced1b77a32bf1982f5e7310f7929713b6005d3940ecbf57ea89db54d1709efca994f629ccf4c01f60c7ff6e2c0e36
7
+ data.tar.gz: 9c05a160e762f831cd667b8c4ac14e930eed9900507f66429ff25b9b6a71f1193fea05aa49bf43c9d9b8ccf8d3ed93ce97e21d01656b70410a96c3ba8c6652e0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ # [0.12.0](https://github.com/klueless-io/handlebarsjs/compare/v0.11.3...v0.12.0) (2023-07-19)
2
+
3
+
4
+ ### Features
5
+
6
+ * add omit ([cd516d1](https://github.com/klueless-io/handlebarsjs/commit/cd516d11c3f4e304952d6bbbcd31140c82edf11d))
7
+ * reset version ([dff1b8e](https://github.com/klueless-io/handlebarsjs/commit/dff1b8e710a9e433610f5a4326c8b4e9d4a927b9))
8
+
1
9
  ## [0.11.3](https://github.com/klueless-io/handlebarsjs/compare/v0.11.2...v0.11.3) (2023-07-19)
2
10
 
3
11
 
data/lib/_.rb CHANGED
@@ -32,7 +32,6 @@ 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
34
  require_relative 'handlebarsjs/helpers/misc/format_json'
35
- require_relative 'handlebarsjs/helpers/misc/omit'
36
35
  require_relative 'handlebarsjs/helpers/misc/safe'
37
36
  require_relative 'handlebarsjs/helpers/str/padl'
38
37
  require_relative 'handlebarsjs/helpers/str/padr'
@@ -4,6 +4,7 @@ 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 :block
7
8
  attr_reader :safe
8
9
  attr_reader :parameter_names
9
10
 
@@ -13,23 +14,34 @@ module Handlebarsjs
13
14
  def initialize(cmdlet = nil, safe: nil, parameter_names: nil)
14
15
  initialize_cmdlet(cmdlet)
15
16
  initialize_safe(safe)
17
+ initialize_block(block)
16
18
  initialize_parameter_names(parameter_names)
17
19
  end
18
20
 
19
21
  class << self
20
22
  attr_reader :cmdlet
23
+ attr_reader :block
21
24
  attr_reader :safe
22
25
  attr_reader :parameter_names
23
26
 
24
- def register_cmdlet(cmdlet, safe: false, parameter_names: [])
27
+ # Register the cmdlet to be used by the helper
28
+ #
29
+ # By default, it will register an function expression helper
30
+ # You can use HTML by setting safe to true
31
+ #
32
+ # @param cmdlet [Handlebarsjs::Cmdlet::Base] the cmdlet to be used by the helper
33
+ # @param block [Boolean] whether or not this is a wrapped block
34
+ # @param safe [Boolean] whether or not the cmdlet should return HTML
35
+ # @param parameter_names [Array] the parameter names to be used by the cmdlet
36
+ def register_cmdlet(cmdlet, block: false, safe: false, parameter_names: [])
25
37
  @cmdlet = cmdlet
38
+ @block = block
26
39
  @safe = safe
27
40
  @parameter_names = parameter_names
28
41
  end
29
42
  end
30
43
 
31
- # If you need to wrap the return value in a specific
32
- # Handlebars Type, eg. SafeString, then you can override this method
44
+ # If you need to wrap the return value then you can override this method
33
45
  def wrapper(value)
34
46
  value
35
47
  end
@@ -54,6 +66,12 @@ module Handlebarsjs
54
66
  @safe = false if @safe.nil?
55
67
  end
56
68
 
69
+ def initialize_block(block)
70
+ @block = block
71
+ @block = self.class.block if @block.nil? && self.class.block
72
+ @block = false if @block.nil?
73
+ end
74
+
57
75
  def initialize_parameter_names(parameter_names)
58
76
  @parameter_names = parameter_names
59
77
  @parameter_names = self.class.parameter_names if parameter_names.nil? && self.class.parameter_names
@@ -11,13 +11,29 @@ module Handlebarsjs
11
11
  end
12
12
 
13
13
  class << self
14
- def register_helper_script(name)
14
+ def register_helper_script(name, parameter_names = [], safe: false, block: false)
15
+ if safe && block
16
+ block_helper_safe(name, parameter_names)
17
+ elsif safe
18
+ # register_safe_string_helper_script(name, parameter_names)
19
+ function_helper_safe(name, parameter_names)
20
+ elsif block
21
+ block_helper(name, parameter_names)
22
+ else
23
+ function_helper(name)
24
+ end
25
+ end
26
+
27
+ # In handlebars, this is a simple function expression
28
+ def function_helper(name)
29
+ # Not sure why I am not using paramater names, but currently it works for the existing use cases
15
30
  <<-JAVASCRIPT
16
31
  Handlebars.registerHelper('#{name}', ruby_#{name})
17
32
  JAVASCRIPT
18
33
  end
19
34
 
20
- def register_safe_string_helper_script(name, parameter_names)
35
+ # In handlebars, this is also a simple function expression that returns a SafeString when HTML is desired
36
+ def function_helper_safe(name, parameter_names)
21
37
  parameters = (parameter_names + ['_opts']).join(', ')
22
38
 
23
39
  <<-JAVASCRIPT
@@ -26,6 +42,28 @@ module Handlebarsjs
26
42
  })
27
43
  JAVASCRIPT
28
44
  end
45
+
46
+ def block_helper(name, parameter_names)
47
+ parameters = (parameter_names + ['opts']).join(', ')
48
+ ruby_parameters = parameters.length.positive? ? ", #{parameters}" : ''
49
+
50
+ <<-JAVASCRIPT
51
+ Handlebars.registerHelper('#{name}', function (#{parameters}) {
52
+ return ruby_#{name}(opts.fn(this)#{ruby_parameters});
53
+ })
54
+ JAVASCRIPT
55
+ end
56
+
57
+ def block_helper_safe(name, parameter_names)
58
+ parameters = (parameter_names + ['opts']).join(', ')
59
+ ruby_parameters = parameters.length.positive? ? ", #{parameters}" : ''
60
+
61
+ <<-JAVASCRIPT
62
+ Handlebars.registerHelper('#{name}', function (#{parameters}) {
63
+ return new Handlebars.SafeString(ruby_#{name}(opts.fn(this)#{ruby_parameters}));
64
+ })
65
+ JAVASCRIPT
66
+ end
29
67
  end
30
68
 
31
69
  def process_template(template, options = {})
@@ -41,11 +79,15 @@ module Handlebarsjs
41
79
 
42
80
  handlebars_lib_path = File.join(gem_path, Handlebarsjs::HANDLEBARS_LIBRARY_PATH)
43
81
  handlebars_api_path = File.join(gem_path, Handlebarsjs::HANDLEBARS_API_PATH)
82
+ handlebars_helpers_path = File.join(gem_path, Handlebarsjs::HANDLEBARS_HELPERS_PATH)
44
83
 
45
84
  handlebars_snapshot.add_library('handlebars', path: handlebars_lib_path)
46
85
 
47
- # Support functions for working with
86
+ # Support my custom functions from handlebars-api
48
87
  handlebars_snapshot.add_library('handlebars-api', path: handlebars_api_path)
88
+
89
+ # I have not been able to get block helpers working through ruby and so if I just need some custom JS only helpers, such as block then this is the place to do it
90
+ handlebars_snapshot.add_library('handlebars-helper', path: handlebars_helpers_path)
49
91
  end
50
92
 
51
93
  def add_configured_helpers
@@ -139,9 +139,18 @@ module Handlebarsjs
139
139
  end
140
140
 
141
141
  def build_register_helper_script(helper_entry)
142
- return Handlebarsjs::Handlebars.register_safe_string_helper_script(helper_entry[:name], helper_entry[:parameters]) if helper_entry[:safe]
142
+ # When registering a helper, set the safe flag to true when you want a HTML Safe String
143
+ # register_cmdlet(Cmdlet::SomeHtmlCommand, safe: true, parameter_names: %i[value])
144
+ name = helper_entry[:name]
145
+ safe = helper_entry[:safe] || false
146
+ block = helper_entry[:block] || false
147
+ parameter_names = helper_entry[:parameters] || []
148
+
149
+ Handlebarsjs::Handlebars.register_helper_script(name, parameter_names, safe: safe, block: block)
150
+
151
+ # return Handlebarsjs::Handlebars.register_safe_string_helper_script(helper_entry[:name], helper_entry[:parameters]) if helper_entry[:safe]
143
152
 
144
- Handlebarsjs::Handlebars.register_helper_script(helper_entry[:name])
153
+ # Handlebarsjs::Handlebars.register_helper_script(helper_entry[:name])
145
154
  end
146
155
  end
147
156
  end
@@ -1,8 +1,14 @@
1
- Handlebars.registerHelper('loud', function (input) {
2
- return input.toUpperCase()
3
- })
1
+ // Put any custom helper that you can't get to work directly with Ruby in here.
2
+ // Exampe: I have had a lot of trouble getting the block helpers to work with Ruby
3
+ // Handlebars.registerHelper('loud', function (input) {
4
+ // return input.toUpperCase()
5
+ // })
4
6
 
5
- Handlebars.registerHelper('allow_html', function (some_html) {
6
- return new Handlebars.SafeString(some_html);
7
- })
7
+ // Handlebars.registerHelper('allow_html', function (some_html) {
8
+ // return new Handlebars.SafeString(some_html);
9
+ // })
8
10
 
11
+ Handlebars.registerHelper('omit', function (_options) {
12
+ // return options.fn(this)
13
+ return ''
14
+ })
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Handlebarsjs
4
- VERSION = '0.12.0'
4
+ VERSION = '0.13.0'
5
5
  end
data/lib/handlebarsjs.rb CHANGED
@@ -16,6 +16,7 @@ require_relative '_'
16
16
  module Handlebarsjs
17
17
  HANDLEBARS_LIBRARY_PATH = 'lib/handlebarsjs/javascript/handlebars-4.7.7.js'
18
18
  HANDLEBARS_API_PATH = 'lib/handlebarsjs/javascript/handlebars-api.js'
19
+ HANDLEBARS_HELPERS_PATH = 'lib/handlebarsjs/javascript/handlebars-helpers.js'
19
20
 
20
21
  # raise Handlebarsjs::Error, 'Sample message'
21
22
  Error = Class.new(StandardError)
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "handlebarsjs",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "handlebarsjs",
9
- "version": "0.12.0",
9
+ "version": "0.13.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.12.0",
3
+ "version": "0.13.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,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: handlebarsjs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
@@ -128,7 +128,6 @@ files:
128
128
  - lib/handlebarsjs/helpers/inflection/pluralize_number_word.rb
129
129
  - lib/handlebarsjs/helpers/inflection/singularize.rb
130
130
  - lib/handlebarsjs/helpers/misc/format_json.rb
131
- - lib/handlebarsjs/helpers/misc/omit.rb
132
131
  - lib/handlebarsjs/helpers/misc/safe.rb
133
132
  - lib/handlebarsjs/helpers/str/padl.rb
134
133
  - lib/handlebarsjs/helpers/str/padr.rb
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Handlebarsjs
4
- module Helpers
5
- # Miscellaneous cmdlets
6
- module Misc
7
- # Omit: this content will not get written out, useful for commenting out code
8
- class Omit < Handlebarsjs::BaseHelper
9
- register_cmdlet(Cmdlet::Misc::Omit)
10
-
11
- def to_proc
12
- ->(value, _opts) { wrapper(cmdlet.call(value)) }
13
- end
14
- end
15
- end
16
- end
17
- end