handlebars-helpers 0.0.75 → 0.0.77

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: 2f3e731d6bec7c72fa08a28e7b1c9f809ec0d45c6791dec2af973c79d6a11333
4
- data.tar.gz: 5b999e2998bdd697d27912a0febd8b42d7205d694bfd3d8727877736205b6acd
3
+ metadata.gz: ef6712aacb680e54f0ef3127506c404319ce38bec06bf00f7f1a7d082cfc7d87
4
+ data.tar.gz: 181568f89da2c8c78121d8e8e2777906dacd3c714bef1af165cc006022fdacc3
5
5
  SHA512:
6
- metadata.gz: 2653f9d142501232e4e18e24cb05827b72b21e44e430c5e0e89412623966dbcdacee1b390b74414a70be80aee48cbf1cc93b0e3581adaeb66fa6f5d1511bde8a
7
- data.tar.gz: 72f244787c379d0f84a1a631610df27e41443c13b84073ca915f06ea309b9ae3765a53f4a1ac0c27061f3895f57c91b76f224276b62066f5904eb7df21c452cd
6
+ metadata.gz: ff8f9e14297e84a9b42e2c020de73ac1e65ff4d69d3eb6a72f11bad76d3d66eb914cb6a05ac8767f537055d552161dba053ee0ae75b3a62e1d3449a11396347a
7
+ data.tar.gz: 25c0733abc52e39a5d46b1234b2d07226f5fdad40e2499d7b2acfc2271260ef6642561e41175edf2ce58e402306ec4984bc8fc5e48458d6b058ef2bcac419178
@@ -364,6 +364,26 @@
364
364
  "https://github.com/helpers/handlebars-helpers/blob/master/test/misc.js"
365
365
  ],
366
366
  "helpers": [
367
+ {
368
+ "name": "json",
369
+ "description": "value as JSON string",
370
+ "test_in": null,
371
+ "test_out": null,
372
+ "tests": [
373
+ {
374
+ "alias": "json",
375
+ "expected_value": "{ \"david\": \"was here\" }",
376
+ "params": [
377
+ { "name": "value", "value": "{ \"david\": \"was here\" }" }
378
+ ],
379
+ "template": "{{json value}}"
380
+ }
381
+ ],
382
+ "aliases": ["json"],
383
+ "require_path": "handlebars/helpers/misc/json",
384
+ "class_namespace": "Handlebars::Helpers::Misc::Json",
385
+ "is_string_formatter": null
386
+ },
367
387
  {
368
388
  "name": "safe",
369
389
  "description": "value in safe string format",
@@ -36,9 +36,9 @@ Gem::Specification.new do |spec|
36
36
  end
37
37
  end
38
38
 
39
- spec.files.each do |file|
40
- puts file
41
- end
39
+ # spec.files.each do |file|
40
+ # puts file
41
+ # end
42
42
  spec.bindir = 'exe'
43
43
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
44
44
  spec.require_paths = ['lib']
@@ -51,6 +51,6 @@ Gem::Specification.new do |spec|
51
51
  ]
52
52
 
53
53
  # spec.add_dependency 'tty-box', '~> 0.5.0'
54
- spec.add_dependency 'activesupport'
55
- spec.add_dependency 'handlebars'
54
+ spec.add_dependency 'activesupport' , '~> 6'
55
+ spec.add_dependency 'handlebars' , '~> 0.8.0'
56
56
  end
@@ -3,6 +3,8 @@
3
3
  require 'handlebars/helpers/version'
4
4
  require 'handlebars/helpers/template'
5
5
  require 'handlebars/helpers/register_helpers'
6
+ # ruby docs is not showing all classes because
7
+ # this gem dynamically loads the classes for performance reasons
6
8
 
7
9
  module Handlebars
8
10
  module Helpers
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ # reference: https://github.com/rails/rails/blob/master/activesupport/lib/active_support/inflector/methods.rb
4
+ require 'active_support/core_ext/string'
5
+
6
+ require 'handlebars/helpers/base_safe_string_helper'
7
+
8
+ module Handlebars
9
+ module Helpers
10
+ # Miscellaneous handling routines
11
+ module Misc
12
+ # Json will take handlebars object and write it out as JSON
13
+ class Json < Handlebars::Helpers::BaseSafeStringHelper
14
+ # Parse will take a ruby or handlebars object and write it out as JSON
15
+ #
16
+ # @example
17
+ #
18
+ # puts Json.new.parse({david: "was here", why: ['reason1', 'reason2', 'reason3']})
19
+ #
20
+ # { "david": "was here" }
21
+ #
22
+ # @param [Object] value - object to be converted to JSON string
23
+ # @return [String] value as JSON string
24
+ def parse(value)
25
+ value = '' if value.nil?
26
+
27
+ value = parse_json(value).to_json if value.is_a?(Hash) || value.is_a?(OpenStruct) || value.is_a?(V8::Object) || value.is_a?(V8::Array)
28
+
29
+ value
30
+ end
31
+
32
+ def handlebars_helper
33
+ proc do |_context, value|
34
+ # Handle optional: value
35
+ # value = nil if value.is_a?(V8::Object)
36
+ wrapper(parse(value))
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ # This needs to be in a data_helper
43
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Style/HashEachMethods
44
+ def parse_json(value, hash = {})
45
+ return value.map { |item| parse_json(item) } if value.is_a?(V8::Array)
46
+
47
+ return struct_to_hash(value) if value.is_a?(OpenStruct)
48
+
49
+ return value unless value.is_a?(V8::Object)
50
+
51
+ value.keys.each do |key|
52
+ hash[key] = case value[key]
53
+ when V8::Object
54
+ parse_json(value[key])
55
+ when V8::Array
56
+ value[key].map do |item|
57
+ case item
58
+ when V8::Object, V8::Array
59
+ parse_json(item)
60
+ when String
61
+ item
62
+ else
63
+ item.values
64
+ end
65
+ end
66
+ else
67
+ value[key]
68
+ end
69
+ end
70
+
71
+ hash
72
+ end
73
+ # rubocop:enable Metrics/PerceivedComplexity, Style/HashEachMethods
74
+
75
+ # Needs to move into a GEM and make sure I have consistency
76
+ def struct_to_hash(data)
77
+ # No test yet
78
+ if data.is_a?(Array)
79
+ return data.map { |v| v.is_a?(OpenStruct) ? struct_to_hash(v) : v }
80
+ end
81
+
82
+ data.each_pair.with_object({}) do |(key, value), hash|
83
+ case value
84
+ when OpenStruct
85
+ hash[key] = struct_to_hash(value)
86
+ when Array
87
+ # No test yet
88
+ values = value.map { |v| v.is_a?(OpenStruct) ? struct_to_hash(v) : v }
89
+ hash[key] = values
90
+ else
91
+ hash[key] = value
92
+ end
93
+ end
94
+ end
95
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
96
+ end
97
+ end
98
+ end
99
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Handlebars
4
4
  module Helpers
5
- VERSION = '0.0.75'
5
+ VERSION = '0.0.77'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: handlebars-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.75
4
+ version: 0.0.77
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-14 00:00:00.000000000 Z
11
+ date: 2021-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: handlebars
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 0.8.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 0.8.0
41
41
  description: Handlebars Helpers provides (42) handlebars helpers across (5) categories
42
42
  email:
43
43
  - david@ideasmen.com.au
@@ -95,6 +95,7 @@ files:
95
95
  - lib/handlebars/helpers/inflection/pluralize.rb
96
96
  - lib/handlebars/helpers/inflection/pluralize_by_number.rb
97
97
  - lib/handlebars/helpers/inflection/singularize.rb
98
+ - lib/handlebars/helpers/misc/json.rb
98
99
  - lib/handlebars/helpers/misc/noop.rb
99
100
  - lib/handlebars/helpers/misc/safe.rb
100
101
  - lib/handlebars/helpers/register_helpers.rb