handlebars-helpers 0.0.75 → 0.0.77

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: 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