handlebars-helpers 0.0.5 → 0.0.65

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +3 -3
  3. data/.gitignore +1 -0
  4. data/.handlebars_helpers.json +901 -0
  5. data/.handlebars_string_formatters.json +137 -0
  6. data/.rubocop.yml +4 -2
  7. data/.vscode/settings.json +6 -0
  8. data/Gemfile +3 -0
  9. data/Rakefile +1 -0
  10. data/STORIES.md +44 -6
  11. data/handlebars-helpers.gemspec +2 -0
  12. data/lib/handlebars/helpers.rb +2 -0
  13. data/lib/handlebars/helpers/base_helper.rb +36 -0
  14. data/lib/handlebars/helpers/base_safe_string_helper.rb +17 -0
  15. data/lib/handlebars/helpers/code_ruby/classify.rb +40 -0
  16. data/lib/handlebars/helpers/code_ruby/deconstantize.rb +48 -0
  17. data/lib/handlebars/helpers/code_ruby/demodulize.rb +58 -0
  18. data/lib/handlebars/helpers/code_ruby/foreign_key.rb +49 -0
  19. data/lib/handlebars/helpers/code_ruby/tableize.rb +35 -0
  20. data/lib/handlebars/helpers/comparison/and.rb +44 -0
  21. data/lib/handlebars/helpers/comparison/default.rb +66 -0
  22. data/lib/handlebars/helpers/comparison/eq.rb +35 -0
  23. data/lib/handlebars/helpers/comparison/gt.rb +35 -0
  24. data/lib/handlebars/helpers/comparison/gte.rb +43 -0
  25. data/lib/handlebars/helpers/comparison/lt.rb +35 -0
  26. data/lib/handlebars/helpers/comparison/lte.rb +43 -0
  27. data/lib/handlebars/helpers/comparison/ne.rb +35 -0
  28. data/lib/handlebars/helpers/comparison/or.rb +56 -0
  29. data/lib/handlebars/helpers/configuration.rb +72 -0
  30. data/lib/handlebars/helpers/inflection/ordinal.rb +58 -0
  31. data/lib/handlebars/helpers/inflection/ordinalize.rb +59 -0
  32. data/lib/handlebars/helpers/inflection/pluralize.rb +36 -0
  33. data/lib/handlebars/helpers/inflection/pluralize_by_number.rb +60 -0
  34. data/lib/handlebars/helpers/inflection/singularize.rb +35 -0
  35. data/lib/handlebars/helpers/register_helpers.rb +73 -0
  36. data/lib/handlebars/helpers/string_formatting/append_if.rb +42 -0
  37. data/lib/handlebars/helpers/string_formatting/back_slash.rb +33 -0
  38. data/lib/handlebars/helpers/string_formatting/camel.rb +29 -0
  39. data/lib/handlebars/helpers/string_formatting/constantize.rb +29 -0
  40. data/lib/handlebars/helpers/string_formatting/dasherize.rb +33 -0
  41. data/lib/handlebars/helpers/string_formatting/dotirize.rb +33 -0
  42. data/lib/handlebars/helpers/string_formatting/double_colon.rb +33 -0
  43. data/lib/handlebars/helpers/string_formatting/downcase.rb +31 -0
  44. data/lib/handlebars/helpers/string_formatting/format_as.rb +57 -0
  45. data/lib/handlebars/helpers/string_formatting/humanize.rb +39 -0
  46. data/lib/handlebars/helpers/string_formatting/lamel.rb +29 -0
  47. data/lib/handlebars/helpers/string_formatting/padl.rb +58 -0
  48. data/lib/handlebars/helpers/string_formatting/padr.rb +59 -0
  49. data/lib/handlebars/helpers/string_formatting/pluserize.rb +29 -0
  50. data/lib/handlebars/helpers/string_formatting/prepend_if.rb +42 -0
  51. data/lib/handlebars/helpers/string_formatting/singularize.rb +35 -0
  52. data/lib/handlebars/helpers/string_formatting/slash.rb +33 -0
  53. data/lib/handlebars/helpers/string_formatting/snake.rb +33 -0
  54. data/lib/handlebars/helpers/string_formatting/string.js +511 -0
  55. data/lib/handlebars/helpers/string_formatting/surround.rb +49 -0
  56. data/lib/handlebars/helpers/string_formatting/surround_if.rb +43 -0
  57. data/lib/handlebars/helpers/string_formatting/titleize.rb +39 -0
  58. data/lib/handlebars/helpers/string_formatting/upcase.rb +31 -0
  59. data/lib/handlebars/helpers/string_tokenizer.rb +43 -0
  60. data/lib/handlebars/helpers/template.rb +68 -0
  61. data/lib/handlebars/helpers/version.rb +1 -1
  62. metadata +82 -3
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'handlebars/helpers/string_tokenizer'
4
+
5
+ module Handlebars
6
+ # Configuration access for Handlebars/Helpers
7
+ module Helpers
8
+ # Configuration access for handlebars/helpers
9
+ class << self
10
+ attr_writer :configuration
11
+ end
12
+
13
+ def self.configuration
14
+ @configuration ||= Configuration.new
15
+ end
16
+
17
+ def self.reset
18
+ @configuration = Configuration.new
19
+ end
20
+
21
+ def self.configure
22
+ yield(configuration)
23
+ end
24
+
25
+ # Configuration class
26
+ class Configuration
27
+ attr_accessor :tokenizer,
28
+ :helper_config_file,
29
+ :padl_count,
30
+ :padl_char,
31
+ :padr_count,
32
+ :padr_char
33
+ attr_reader :string_formatter_config_file
34
+ attr_writer :string_formatter_config
35
+
36
+ def initialize
37
+ @tokenizer = Handlebars::Helpers::StringTokenizer.new
38
+ @helper_config_file = '.handlebars_helpers.json'
39
+ @string_formatter_config_file = '.handlebars_string_formatters.json'
40
+ @padr_count = 30
41
+ @padr_char = ' '
42
+ @padl_count = 30
43
+ @padl_char = ' '
44
+ end
45
+
46
+ def string_formatter_config_file=(value)
47
+ @string_formatter_config_file = value
48
+ # updating the file will clear the config object,
49
+ # which will be reloaded on next call to string_formatter_config
50
+ self.string_formatter_config = nil
51
+ end
52
+
53
+ def string_formatter_config
54
+ @string_formatter_config ||= build_string_formatter_config
55
+ end
56
+
57
+ def build_string_formatter_config
58
+ config_content = File.read(string_formatter_config_file)
59
+ config = JSON.parse(config_content)
60
+ configured_formatters = config['formatters']
61
+ configured_formatters.each_with_object({}) do |formatter, result|
62
+ require formatter['require_path']
63
+ helper_instance = Object.const_get(formatter['class_namespace']).new
64
+
65
+ formatter['aliases'].each do |name|
66
+ result[name.to_sym] = helper_instance
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,58 @@
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/integer/inflections'
5
+
6
+ require 'handlebars/helpers/base_helper'
7
+
8
+ module Handlebars
9
+ module Helpers
10
+ # Inflection handling routines, eg. pluralize, singular, ordinalize
11
+ module Inflection
12
+ # Ordinal: The suffix that should be added to a number to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th
13
+ class Ordinal < Handlebars::Helpers::BaseHelper
14
+ # Parse will Ordinal: The suffix that should be added to a number to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th
15
+ #
16
+ # @example
17
+ #
18
+ # puts Ordinal.new.parse('1')
19
+ #
20
+ # st
21
+ #
22
+ # @example
23
+ #
24
+ # puts Ordinal.new.parse('2')
25
+ #
26
+ # nd
27
+ #
28
+ # @example
29
+ #
30
+ # puts Ordinal.new.parse('3')
31
+ #
32
+ # rd
33
+ #
34
+ # @example
35
+ #
36
+ # puts Ordinal.new.parse('4')
37
+ #
38
+ # th
39
+ #
40
+ # @param [String] value - numeric value
41
+ # @return [String] ordinal suffix that would be required for a number
42
+ def parse(value)
43
+ return '' if value.nil?
44
+
45
+ value = value.to_i if value.is_a? String
46
+
47
+ value.ordinal
48
+ end
49
+
50
+ def handlebars_helper
51
+ proc do |_context, value|
52
+ wrapper(parse(value))
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,59 @@
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/inflector/inflections'
5
+ require 'active_support/core_ext/integer/inflections'
6
+
7
+ require 'handlebars/helpers/base_helper'
8
+
9
+ module Handlebars
10
+ module Helpers
11
+ # Inflection handling routines, eg. pluralize, singular, ordinalize
12
+ module Inflection
13
+ # Ordinalize: Turns a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
14
+ class Ordinalize < Handlebars::Helpers::BaseHelper
15
+ # Parse will Ordinalize: Turns a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
16
+ #
17
+ # @example
18
+ #
19
+ # puts Ordinalize.new.parse('1')
20
+ #
21
+ # 1st
22
+ #
23
+ # @example
24
+ #
25
+ # puts Ordinalize.new.parse('2')
26
+ #
27
+ # 2nd
28
+ #
29
+ # @example
30
+ #
31
+ # puts Ordinalize.new.parse('3')
32
+ #
33
+ # 3rd
34
+ #
35
+ # @example
36
+ #
37
+ # puts Ordinalize.new.parse('4')
38
+ #
39
+ # 4th
40
+ #
41
+ # @param [String] value - numeric value
42
+ # @return [String] number value turned to 1st, 2nd, 3rd, 4th etc.
43
+ def parse(value)
44
+ return '' if value.nil?
45
+
46
+ value = value.to_i if value.is_a? String
47
+
48
+ value.ordinalize
49
+ end
50
+
51
+ def handlebars_helper
52
+ proc do |_context, value|
53
+ wrapper(parse(value))
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,36 @@
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_helper'
7
+
8
+ module Handlebars
9
+ module Helpers
10
+ # Inflection handling routines, eg. pluralize, singular, ordinalize
11
+ module Inflection
12
+ # Returns the plural form of the word in the string
13
+ class Pluralize < Handlebars::Helpers::BaseHelper
14
+ # Parse will Returns the plural form of the word in the string
15
+ #
16
+ # @example
17
+ #
18
+ # puts Pluralize.new.parse('name')
19
+ #
20
+ # names
21
+ #
22
+ # puts Pluralize.new.parse('octopus')
23
+ #
24
+ # octopi
25
+ #
26
+ #
27
+ # @return [String] value in plural form
28
+ def parse(value)
29
+ return '' if value.nil?
30
+
31
+ value.pluralize
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,60 @@
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_helper'
7
+
8
+ module Handlebars
9
+ module Helpers
10
+ # Inflection handling routines, eg. pluralize, singular, ordinalize
11
+ module Inflection
12
+ # Pluralize By Number: uses both a word and number to decide if the plural or singular form should be used.
13
+ class PluralizeByNumber < Handlebars::Helpers::BaseHelper
14
+ # Parse will Pluralize By Number: uses both a word and number to decide if the plural or singular form should be used.
15
+ #
16
+ # @example
17
+ #
18
+ # puts PluralizeByNumber.new.parse('category', '3', 'number_word')
19
+ #
20
+ # 3 categories
21
+ #
22
+ # @example
23
+ #
24
+ # puts PluralizeByNumber.new.parse('category', '3', 'word' )
25
+ #
26
+ # categories
27
+ #
28
+ # puts PluralizeByNumber.new.parse('category', '1' )
29
+ #
30
+ # category
31
+ #
32
+ # @param [String] value - value to pluralize
33
+ # @param [Integer] count - count used to determine pluralization
34
+ # @param [String] format - (Optional) what format should output be. :word, :number_word
35
+ # @return [String] value and number are used to calculate plural/singular form
36
+ def parse(value, count, format)
37
+ return '' if value.nil?
38
+
39
+ count = count.to_i if count.is_a? String
40
+ format = :word if format.nil?
41
+
42
+ case format.to_sym
43
+ when :number_word, :number_and_word
44
+ "#{count} #{value.pluralize(count)}"
45
+ else # aka :word
46
+ value.pluralize(count)
47
+ end
48
+ end
49
+
50
+ def handlebars_helper
51
+ proc do |_context, value, count, format|
52
+ # Handle optional: format
53
+ format = nil if value.is_a?(V8::Object)
54
+ wrapper(parse(value, count, format))
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,35 @@
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_helper'
7
+
8
+ module Handlebars
9
+ module Helpers
10
+ # Inflection handling routines, eg. pluralize, singular, ordinalize
11
+ module Inflection
12
+ # The reverse of #pluralize, returns the singular form of a word in a string
13
+ class Singularize < Handlebars::Helpers::BaseHelper
14
+ # Parse will reverse of #pluralize, returns the singular form of a word in a string
15
+ #
16
+ # @example
17
+ #
18
+ # puts Singularize.new.parse('names')
19
+ #
20
+ # name
21
+ #
22
+ # puts Singularize.new.parse('octopi')
23
+ #
24
+ # octopus
25
+ #
26
+ # @return [String] plural value turned to singular value
27
+ def parse(value)
28
+ return '' if value.nil?
29
+
30
+ value.singularize
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require 'handlebars'
5
+ require 'handlebars/helpers/configuration'
6
+
7
+ module Handlebars
8
+ module Helpers
9
+ # Register helpers against handlebars context
10
+ class RegisterHelpers
11
+ attr_accessor :handlebars
12
+ attr_reader :helpers
13
+
14
+ # def initialize(handlebars = Handlebars::Context.new, &block)
15
+ def initialize(&block)
16
+ @handlebars = Handlebars::Context.new
17
+
18
+ if block_given?
19
+ block.call(self) # , handlebars)
20
+ else
21
+ register_from_config
22
+ end
23
+ end
24
+
25
+ def helper(*names, &helper)
26
+ names.each do |name|
27
+ handlebars.register_helper(name, &helper)
28
+ end
29
+ end
30
+
31
+ # Register from configuration file
32
+ #
33
+ # Sample configuration
34
+ # "groups": [
35
+ # {
36
+ # "name": "string_formatting",
37
+ # "base_require": "handlebars/helpers/string_formatting",
38
+ # "base_namespace": "Handlebars::Helpers::StringFormatting",
39
+ # "description": "Case modification string manipulation methods",
40
+ # "helpers": [
41
+ # {
42
+ # "name": "camel",
43
+ # "description": "convert to camel case with first word uppercase and following words uppercase",
44
+ # "aliases": ["camel", "camelUpper", "camelU"],
45
+ # "require_path": "handlebars/helpers/string_formatting/camel",
46
+ # "class_namespace": "Handlebars::Helpers::StringFormatting::Camel"
47
+ # }
48
+ # ]
49
+ # }
50
+ # ]
51
+ def register_from_config
52
+ file = File.read Handlebars::Helpers.configuration.helper_config_file
53
+ config = JSON.parse(file)
54
+
55
+ config['groups'].each do |group|
56
+ group['helpers'].each do |helper_config|
57
+ register_config_item(helper_config)
58
+ end
59
+ end
60
+ end
61
+
62
+ private
63
+
64
+ def register_config_item(config)
65
+ require config['require_path']
66
+
67
+ helper_instance = Object.const_get(config['class_namespace']).new
68
+
69
+ helper(*config['aliases'].map(&:to_sym), &helper_instance.handlebars_helper)
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,42 @@
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
+ require 'handlebars/helpers/string_formatting/format_as'
8
+
9
+ module Handlebars
10
+ module Helpers
11
+ # String manipulation methods for case formatting
12
+ module StringFormatting
13
+ # Append If will append suffix to value, if value is not empty
14
+ class AppendIf < Handlebars::Helpers::BaseSafeStringHelper
15
+ # Parse will Append If will append suffix to value, if value is not empty
16
+ #
17
+ # @example
18
+ #
19
+ # puts AppendIf.new.parse('the quick brown', 'fox', 'dashify')
20
+ #
21
+ # the-quick-brown-fox
22
+ #
23
+ # @param [String] value - value to add suffix too
24
+ # @param [String] suffix - suffix to add to value
25
+ # @param [String] formats - list of formats to apply to value, defaults to none
26
+ # @return [String] value + suffix when value exists, otherwise ''
27
+ def parse(value, suffix, formats)
28
+ format_as = Handlebars::Helpers::StringFormatting::FormatAs.new
29
+ value.present? ? "#{format_as.parse(value, formats)}#{suffix}" : ''
30
+ end
31
+
32
+ def handlebars_helper
33
+ proc do |_context, value, suffix, formats|
34
+ # Handle optional: formats
35
+ formats = nil if formats.is_a?(V8::Object)
36
+ wrapper(parse(value, suffix, formats))
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,33 @@
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_helper'
7
+
8
+ module Handlebars
9
+ module Helpers
10
+ # String manipulation methods for case formatting
11
+ module StringFormatting
12
+ # convert to back slash notation
13
+ class BackSlash < Handlebars::Helpers::BaseHelper
14
+ # Parse will convert to back slash notation
15
+ #
16
+ # @side effects
17
+ #
18
+ # Text casing is preserved.
19
+ #
20
+ # @example
21
+ #
22
+ # puts BackSlash.new.parse('the Quick brown Fox 99')
23
+ #
24
+ # the\quick\brown\fox99
25
+ #
26
+ # @return [String] value converted to back_slash case
27
+ def parse(value)
28
+ tokenizer.parse(value, preserve_case: true, separator: '\\')
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end