cmdlet 0.0.6 → 0.2.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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.builders/.templates/FUNCTIONS.MD +19 -0
  3. data/.builders/.templates/cmdlet.rb +26 -0
  4. data/.builders/.templates/cmdlet_spec.rb +22 -0
  5. data/.builders/.templates/require_all_cmdlets.rb +5 -0
  6. data/.builders/_.rb +11 -1
  7. data/.builders/boot.rb +6 -3
  8. data/.builders/data/categories.json +28 -0
  9. data/.builders/data/cmdlets/array.json +121 -0
  10. data/.builders/data/cmdlets/comparison.json +245 -0
  11. data/.builders/data/cmdlets/inflection.json +129 -0
  12. data/.builders/director/category_builder.rb +26 -0
  13. data/.builders/director/category_dao.rb +38 -0
  14. data/.builders/director/category_director.rb +39 -0
  15. data/.builders/director/cmdlet_builder.rb +67 -0
  16. data/.builders/director/cmdlet_child.rb +39 -0
  17. data/.builders/director/cmdlet_dao.rb +29 -0
  18. data/.builders/director/cmdlet_director.rb +60 -0
  19. data/.builders/director/dao.rb +16 -0
  20. data/.builders/documents/commands.rb +222 -28
  21. data/.builders/documents/use_cases.rb +32 -34
  22. data/.builders/documents/x_functions.rb +7 -10
  23. data/.builders/generators/01-bootstrap.rb +112 -112
  24. data/.builders/generators/20-categories.rb +16 -0
  25. data/.builders/generators/30-commands-bak.rb +53 -0
  26. data/.builders/generators/cmdlets/array.rb +71 -0
  27. data/.builders/generators/cmdlets/comparison.rb +126 -0
  28. data/.builders/generators/cmdlets/inflection.rb +93 -0
  29. data/CHANGELOG.md +37 -0
  30. data/Guardfile +1 -1
  31. data/lib/cmdlet/_.rb +19 -0
  32. data/lib/cmdlet/all_commands.rb +3 -0
  33. data/lib/cmdlet/array/join.rb +22 -0
  34. data/lib/cmdlet/array/join_post.rb +22 -0
  35. data/lib/cmdlet/array/join_pre.rb +22 -0
  36. data/lib/cmdlet/base_cmdlet.rb +17 -0
  37. data/lib/cmdlet/comparison/and.rb +16 -0
  38. data/lib/cmdlet/comparison/default.rb +20 -0
  39. data/lib/cmdlet/comparison/eq.rb +20 -0
  40. data/lib/cmdlet/comparison/gt.rb +17 -0
  41. data/lib/cmdlet/comparison/gte.rb +17 -0
  42. data/lib/cmdlet/comparison/lt.rb +17 -0
  43. data/lib/cmdlet/comparison/lte.rb +17 -0
  44. data/lib/cmdlet/comparison/ne.rb +20 -0
  45. data/lib/cmdlet/comparison/or.rb +16 -0
  46. data/lib/cmdlet/inflection/ordinal.rb +20 -0
  47. data/lib/cmdlet/inflection/ordinalize.rb +20 -0
  48. data/lib/cmdlet/inflection/pluralize.rb +20 -0
  49. data/lib/cmdlet/inflection/pluralize_by_number.rb +28 -0
  50. data/lib/cmdlet/inflection/singularize.rb +20 -0
  51. data/lib/cmdlet/version.rb +1 -1
  52. data/lib/cmdlet.rb +5 -0
  53. data/package-lock.json +2 -2
  54. data/package.json +1 -1
  55. metadata +46 -5
  56. data/.builders/documents/_.rb +0 -4
  57. data/.builders/documents/categories.rb +0 -24
  58. data/.builders/documents/functions.rb +0 -226
@@ -1,6 +1,6 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  def category_blueprint
3
-
4
4
  fn_builder
5
5
  .init
6
6
  .category(:array , active: 0 , title: 'Array' , description: 'Functions for working with Array')
@@ -24,11 +24,9 @@ def category_blueprint
24
24
  .category(:regex , active: 0 , title: 'Regex' , description: 'Functions for working with Regex')
25
25
  .category(:string , active: 0 , title: 'String' , description: 'Functions for working with String')
26
26
  .category(:url , active: 0 , title: 'Url' , description: 'Functions for working with Url')
27
-
28
27
  end
29
28
 
30
29
  def function_blueprint
31
-
32
30
  fn_builder
33
31
  .init
34
32
  .for_category(:array)
@@ -41,11 +39,11 @@ def function_blueprint
41
39
  .for_category(:html)
42
40
  .for_category(:i18n)
43
41
  .for_category(:inflection)
44
- .function(:ordinal)
45
- .function(:ordinalize)
46
- .function(:pluralize_by_number)
47
- .function(:pluralize)
48
- .function(:singularize)
42
+ .function(:ordinal)
43
+ .function(:ordinalize)
44
+ .function(:pluralize_by_number)
45
+ .function(:pluralize)
46
+ .function(:singularize)
49
47
  .for_category(:logging)
50
48
  .for_category(:markdown)
51
49
  .for_category(:match)
@@ -57,10 +55,9 @@ def function_blueprint
57
55
  .for_category(:regex)
58
56
  .for_category(:string)
59
57
  .for_category(:url)
60
-
61
58
  end
62
59
 
63
60
  # {{arrayify}}
64
61
  # Cast the given value to an array.
65
62
  # {{before}}
66
- # Return all of the items in the collection before the specified count. Opposite of after.
63
+ # Return all of the items in the collection before the specified count. Opposite of after.
@@ -1,121 +1,121 @@
1
+ # frozen_string_literal: true
2
+
1
3
  KManager.action :bootstrap do
2
4
  action do
3
5
  application_name = :cmdlet
4
6
 
5
7
  # Ruby Gem Bootstrap
6
8
  director = KDirector::Dsls::RubyGemDsl
7
- .init(k_builder,
8
- on_exist: :skip, # %i[skip write compare]
9
- on_action: :queue # %i[queue execute]
10
- )
11
- .data(
12
- ruby_version: '2.7',
13
- application: application_name,
14
- application_description: 'Cmdlet provides a set of functions (wrapped in the command pattern) that perform simple actions',
15
- application_lib_path: application_name.to_s,
16
- application_lib_namespace: 'Cmdlet',
17
- namespaces: ['Cmdlet'],
18
- author: 'David Cruwys',
19
- author_email: 'david@ideasmen.com.au',
20
- initial_semver: '0.0.1',
21
- main_story: 'As a Developer, I want to use simple categorized functions so that I can easily add commonplace functionality to my application',
22
- copyright_date: '2022',
23
- website: 'http://appydave.com/gems/cmdlet'
24
- )
25
- .github(
26
- active: false,
27
- repo_name: application_name
28
- ) do
29
- create_repository
30
- # delete_repository
31
- # list_repositories
32
- open_repository
33
- # run_command('git init')
34
- end
35
- .blueprint(
36
- active: false,
37
- name: :bin_hook,
38
- description: 'initialize repository',
39
- on_exist: :write) do
40
-
41
- cd(:app)
42
-
43
- run_template_script('bin/runonce/git-setup.sh', dom: dom)
44
-
45
- add('.githooks/commit-msg').run_command('chmod +x .githooks/commit-msg')
46
- add('.githooks/pre-commit').run_command('chmod +x .githooks/pre-commit')
47
-
48
- add('.gitignore')
49
-
50
- run_command('git config core.hooksPath .githooks') # enable sharable githooks (developer needs to turn this on before editing rep)
51
-
52
- run_command("git add .; git commit -m 'chore: #{self.options.description.downcase}'; git push")
53
- run_command("gh repo edit -d \"#{dom[:application_description]}\"")
54
- end
55
- .package_json(
56
- active: false,
57
- name: :package_json,
58
- description: 'Set up the package.json file for semantic versioning'
59
- ) do
60
- self
61
- .add('package.json', dom: dom)
62
- .play_actions
63
-
64
- self
65
- .add_script('release', 'semantic-release')
66
- .sort
67
- .development
68
- .npm_add_group('semver-ruby')
69
-
70
- run_command("git add .; git commit -m 'chore: #{self.options.description.downcase}'; git push")
71
- end
72
- .blueprint(
73
- active: false,
74
- name: :opinionated,
75
- description: 'opinionated GEM files',
76
- on_exist: :write) do
77
-
78
- cd(:app)
79
-
80
- add('bin/setup')
81
- add('bin/console')
82
-
83
- add("lib/#{typed_dom.application}.rb" , template_file: 'lib/applet_name.rb' , dom: dom)
84
- add("lib/#{typed_dom.application}/version.rb" , template_file: 'lib/applet_name/version.rb' , dom: dom)
85
-
86
- add('spec/spec_helper.rb')
87
- add("spec/#{typed_dom.application}_spec.rb" , template_file: 'spec/applet_name_spec.rb', dom: dom)
88
-
89
- add("#{typed_dom.application}.gemspec" , template_file: 'applet_name.gemspec', dom: dom)
90
- add('Gemfile', dom: dom)
91
- add('Guardfile', dom: dom)
92
- add('Rakefile', dom: dom)
93
- add('.rspec', dom: dom)
94
- add('.rubocop.yml', dom: dom)
95
- add('README.md', dom: dom)
96
- add('CODE_OF_CONDUCT.md', dom: dom)
97
- add('LICENSE.txt', dom: dom)
98
-
99
- run_command("rubocop -a")
100
-
101
- run_command("git add .; git commit -m 'chore: #{self.options.description.downcase}'; git push")
102
- end
103
- .blueprint(
104
- active: true,
105
- name: :ci_cd,
106
- description: 'github actions (CI/CD)',
107
- on_exist: :write) do
108
-
109
- cd(:app)
110
-
111
- run_command("gh secret set SLACK_WEBHOOK --body \"$SLACK_REPO_WEBHOOK\"")
112
- run_command("gh secret set GEM_HOST_API_KEY --body \"$GEM_HOST_API_KEY\"")
113
-
114
- add('.github/workflows/main.yml')
115
- add('.releaserc.json')
116
-
117
- run_command("git add .; git commit -m 'chore: #{self.options.description.downcase}'; git push")
118
- end
9
+ .init(k_builder,
10
+ on_exist: :skip, # %i[skip write compare]
11
+ on_action: :queue # %i[queue execute]
12
+ )
13
+ .data(
14
+ ruby_version: '2.7',
15
+ application: application_name,
16
+ application_description: 'Cmdlet provides a set of functions (wrapped in the command pattern) that perform simple actions',
17
+ application_lib_path: application_name.to_s,
18
+ application_lib_namespace: 'Cmdlet',
19
+ namespaces: ['Cmdlet'],
20
+ author: 'David Cruwys',
21
+ author_email: 'david@ideasmen.com.au',
22
+ initial_semver: '0.0.1',
23
+ main_story: 'As a Developer, I want to use simple categorized functions so that I can easily add commonplace functionality to my application',
24
+ copyright_date: '2022',
25
+ website: 'http://appydave.com/gems/cmdlet'
26
+ )
27
+ .github(
28
+ active: false,
29
+ repo_name: application_name
30
+ ) do
31
+ create_repository
32
+ # delete_repository
33
+ # list_repositories
34
+ open_repository
35
+ # run_command('git init')
36
+ end
37
+ .blueprint(
38
+ active: false,
39
+ name: :bin_hook,
40
+ description: 'initialize repository',
41
+ on_exist: :write
42
+ ) do
43
+ cd(:app)
44
+
45
+ run_template_script('bin/runonce/git-setup.sh', dom: dom)
46
+
47
+ add('.githooks/commit-msg').run_command('chmod +x .githooks/commit-msg')
48
+ add('.githooks/pre-commit').run_command('chmod +x .githooks/pre-commit')
49
+
50
+ add('.gitignore')
51
+
52
+ run_command('git config core.hooksPath .githooks') # enable sharable githooks (developer needs to turn this on before editing rep)
53
+
54
+ run_command("git add .; git commit -m 'chore: #{options.description.downcase}'; git push")
55
+ run_command("gh repo edit -d \"#{dom[:application_description]}\"")
56
+ end
57
+ .package_json(
58
+ active: false,
59
+ name: :package_json,
60
+ description: 'Set up the package.json file for semantic versioning'
61
+ ) do
62
+ add('package.json', dom: dom)
63
+ .play_actions
64
+
65
+ add_script('release', 'semantic-release')
66
+ .sort
67
+ .development
68
+ .npm_add_group('semver-ruby')
69
+
70
+ run_command("git add .; git commit -m 'chore: #{options.description.downcase}'; git push")
71
+ end
72
+ .blueprint(
73
+ active: false,
74
+ name: :opinionated,
75
+ description: 'opinionated GEM files',
76
+ on_exist: :write
77
+ ) do
78
+ cd(:app)
79
+
80
+ add('bin/setup')
81
+ add('bin/console')
82
+
83
+ add("lib/#{typed_dom.application}.rb" , template_file: 'lib/applet_name.rb' , dom: dom)
84
+ add("lib/#{typed_dom.application}/version.rb" , template_file: 'lib/applet_name/version.rb' , dom: dom)
85
+
86
+ add('spec/spec_helper.rb')
87
+ add("spec/#{typed_dom.application}_spec.rb" , template_file: 'spec/applet_name_spec.rb', dom: dom)
88
+
89
+ add("#{typed_dom.application}.gemspec" , template_file: 'applet_name.gemspec', dom: dom)
90
+ add('Gemfile', dom: dom)
91
+ add('Guardfile', dom: dom)
92
+ add('Rakefile', dom: dom)
93
+ add('.rspec', dom: dom)
94
+ add('.rubocop.yml', dom: dom)
95
+ add('README.md', dom: dom)
96
+ add('CODE_OF_CONDUCT.md', dom: dom)
97
+ add('LICENSE.txt', dom: dom)
98
+
99
+ run_command('rubocop -a')
100
+
101
+ run_command("git add .; git commit -m 'chore: #{options.description.downcase}'; git push")
102
+ end
103
+ .blueprint(
104
+ active: true,
105
+ name: :ci_cd,
106
+ description: 'github actions (CI/CD)',
107
+ on_exist: :write
108
+ ) do
109
+ cd(:app)
110
+
111
+ run_command('gh secret set SLACK_WEBHOOK --body "$SLACK_REPO_WEBHOOK"')
112
+ run_command('gh secret set GEM_HOST_API_KEY --body "$GEM_HOST_API_KEY"')
113
+
114
+ add('.github/workflows/main.yml')
115
+ add('.releaserc.json')
116
+
117
+ run_command("git add .; git commit -m 'chore: #{options.description.downcase}'; git push")
118
+ end
119
119
 
120
120
  director.play_actions
121
121
  # director.builder.logit
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ KManager.action :categories do
4
+ action do
5
+ CategoryDirector
6
+ .init(k_builder)
7
+ .category(:case , 'Tokenize and apply case and/or separator')
8
+ .category(:comparison , 'Comparison helpers, eg. or, and, equal, not equal, less than, greater than etc.')
9
+ .category(:inflection , 'Inflection handling routines, eg. pluralize, singular, ordinalize')
10
+ .category(:string , 'String handling helpers')
11
+ .category(:array , 'Array handling routines, eg. join, join_prefix, join_post')
12
+ .category(:transform , 'Tokenize and apply case and/or separator')
13
+ .save_categories
14
+ .generate
15
+ end
16
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ KManager.action :commands_bak do
4
+ action do
5
+ puts commands.first.function_description
6
+ # Ruby Gem Bootstrap
7
+ director = KDirector::Dsls::BasicDsl
8
+ .init(k_builder,
9
+ template_base_folder: '',
10
+ on_exist: :skip, # %i[skip write compare]
11
+ on_action: :queue # %i[queue execute]
12
+ )
13
+ .blueprint(
14
+ active: true,
15
+ name: :build_commands,
16
+ description: 'Build Commandlets',
17
+ on_exist: :write
18
+ ) do
19
+ cd(:lib)
20
+
21
+ # builder
22
+ # .add_file('FUNCTIONS.md',
23
+ # template_file: 'FUNCTIONS.md',
24
+ # categories: categories.sort_by { |r| r.name },
25
+ # functions: functions.sort_by { |r| [r.category, r.name] },
26
+ # on_exist: :write)
27
+
28
+ add('all_commands.rb',
29
+ template_file: 'all_commands.rb',
30
+ commands: commands.sort_by { |r| [r.category, r.name] },
31
+ on_exist: :write)
32
+
33
+ cmdlets.each do |cmdlet|
34
+ add("#{cmdlet.category}/#{cmdlet.name}.rb",
35
+ cmdlet: cmdlet,
36
+ template_file: 'command.rb',
37
+ on_exist: :write)
38
+ end
39
+ end
40
+
41
+ director.play_actions
42
+ # director.builder.logit
43
+ end
44
+ end
45
+
46
+ KManager.opts.app_name = 'commands'
47
+ KManager.opts.sleep = 2
48
+ KManager.opts.reboot_on_kill = 0
49
+ KManager.opts.reboot_sleep = 4
50
+ KManager.opts.exception_style = :short
51
+ KManager.opts.show.time_taken = true
52
+ KManager.opts.show.finished = true
53
+ KManager.opts.show.finished_message = 'FINISHED :)'
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ KManager.action :array_commands do
4
+ action do
5
+ CmdletDirector
6
+ .init(k_builder, category: :array)
7
+ .cmdlet do
8
+ name :join
9
+ description 'join an array of values with separator as a string'
10
+ result 'new String formed by joining the array elements with seperator'
11
+
12
+ parameter :values, 'array of values to join', param_type: 'String|Int'
13
+ parameter :separator, 'separator between values, defaults to comma', default: "','"
14
+
15
+ ruby <<-RUBY
16
+ return false if values.nil? || values.length == 0
17
+ values = values.reject(&:blank?)
18
+ return '' if values.length.zero?
19
+
20
+ values.join(separator)
21
+ RUBY
22
+ end
23
+ .cmdlet do
24
+ name :join_pre
25
+ description 'join an array of values with separator as a string and using the separator at the beginning of string'
26
+
27
+ parameter :values, 'array of values to join', param_type: 'String|Int'
28
+ parameter :separator, 'separator between values, defaults to comma', default: "','"
29
+
30
+ ruby <<-'RUBY'
31
+ return '' if values.nil? || !values.is_a?(::Array)
32
+ values = values.reject(&:blank?)
33
+ return '' if values.length.zero?
34
+
35
+ "#{separator}#{values.join(separator)}"
36
+ RUBY
37
+ end
38
+ .cmdlet do
39
+ name :join_pre
40
+ description 'join an array of values with separator as a string and using the separator at the beginning of string'
41
+
42
+ parameter :values, 'array of values to join', param_type: 'String|Int'
43
+ parameter :separator, 'separator between values, defaults to comma', default: "','"
44
+
45
+ ruby <<-'RUBY'
46
+ return '' if values.nil? || !values.is_a?(::Array)
47
+ values = values.reject(&:blank?)
48
+ return '' if values.length.zero?
49
+
50
+ "#{separator}#{values.join(separator)}"
51
+ RUBY
52
+ end
53
+ .cmdlet do
54
+ name :join_post
55
+ description 'join an array of values with separator as a string and using the separator at the end of string'
56
+
57
+ parameter :values, 'array of values to join', param_type: 'String|Int'
58
+ parameter :separator, 'separator between values, defaults to comma', default: "','"
59
+
60
+ ruby <<-'RUBY'
61
+ return '' if values.nil? || !values.is_a?(::Array)
62
+ values = values.reject(&:blank?)
63
+ return '' if values.length.zero?
64
+
65
+ "#{values.join(separator)}#{separator}"
66
+ RUBY
67
+ end
68
+ .generate
69
+ .debug
70
+ end
71
+ end
@@ -0,0 +1,126 @@
1
+ # frozen_string_literal: true
2
+
3
+ KManager.action :comparison_commands do
4
+ action do
5
+ CmdletDirector
6
+ .init(k_builder, category: :comparison)
7
+ .cmdlet do
8
+ name :and
9
+ description 'Return true if **all of** the given values are truthy.'
10
+ result 'return true when every value is truthy'
11
+
12
+ parameter :values, 'list of values (via *splat) to be checked via AND condition', splat: '*', param_type: 'Object'
13
+
14
+ ruby <<-RUBY
15
+ values.all? { |value| value }
16
+ RUBY
17
+ end
18
+ .cmdlet do
19
+ name :default
20
+ description 'Return true if **all of** the given values are truthy.'
21
+ result 'return true when every value is truthy'
22
+
23
+ parameter :values, 'one or more paramaters that may or may not contain nil', splat: '*', param_type: 'Object'
24
+
25
+ ruby <<-RUBY
26
+ default_value = values[-1]
27
+
28
+ find_value = values[0..-2].find { |value| !value.nil? }
29
+
30
+ find_value || default_value
31
+ RUBY
32
+
33
+ end
34
+ .cmdlet do
35
+ name :eq
36
+ description 'Return true if two values are equal'
37
+ result 'return truthy value if left hand side equals right hand side'
38
+
39
+ parameter :lhs, 'lhs - left hand side value', param_type: 'Object'
40
+ parameter :rhs, 'rhs - right hand side value', param_type: 'Object'
41
+
42
+ ruby <<-RUBY
43
+ lhs = lhs.to_s if lhs.is_a?(Symbol)
44
+ rhs = rhs.to_s if rhs.is_a?(Symbol)
45
+
46
+ lhs == rhs
47
+ RUBY
48
+ end
49
+ .cmdlet do
50
+ name :gt
51
+ description 'Return true if left hand side GREATER THAN right hand side'
52
+ result 'truthy value if left hand side GREATER THAN right hand side'
53
+
54
+ parameter :lhs, 'lhs - left hand side value', param_type: 'Object'
55
+ parameter :rhs, 'rhs - right hand side value', param_type: 'Object'
56
+
57
+ ruby <<-RUBY
58
+ lhs > rhs
59
+ RUBY
60
+ end
61
+ .cmdlet do
62
+ name :gte
63
+ description 'Return true if left hand side GREATER THAN or EQUAL TO right hand side'
64
+ result 'truthy value if left hand side GREATER THAN or EQUAL TO right hand side'
65
+
66
+ parameter :lhs, 'lhs - left hand side value', param_type: 'Object'
67
+ parameter :rhs, 'rhs - right hand side value', param_type: 'Object'
68
+
69
+ ruby <<-RUBY
70
+ lhs >= rhs
71
+ RUBY
72
+ end
73
+ .cmdlet do
74
+ name :lt
75
+ description 'Return true if left hand side LESS THAN right hand side'
76
+ result 'truthy value if left hand side LESS THAN right hand side'
77
+
78
+ parameter :lhs, 'lhs - left hand side value', param_type: 'Object'
79
+ parameter :rhs, 'rhs - right hand side value', param_type: 'Object'
80
+
81
+ ruby <<-RUBY
82
+ lhs < rhs
83
+ RUBY
84
+ end
85
+ .cmdlet do
86
+ name :lte
87
+ description 'Return true if left hand side LESS THAN or EQUAL TO right hand side'
88
+ result 'truthy value if left hand side LESS THAN or EQUAL TO right hand side'
89
+
90
+ parameter :lhs, 'lhs - left hand side value', param_type: 'Object'
91
+ parameter :rhs, 'rhs - right hand side value', param_type: 'Object'
92
+
93
+ ruby <<-RUBY
94
+ lhs <= rhs
95
+ RUBY
96
+ end
97
+ .cmdlet do
98
+ name :ne
99
+ description 'Return true if left hand side is NOT equal to right hand side'
100
+ result 'truthy value if left hand side is NOT equal to right hand side'
101
+
102
+ parameter :lhs, 'lhs - left hand side value', param_type: 'Object'
103
+ parameter :rhs, 'rhs - right hand side value', param_type: 'Object'
104
+
105
+ ruby <<-RUBY
106
+ lhs = lhs.to_s if lhs.is_a?(Symbol)
107
+ rhs = rhs.to_s if rhs.is_a?(Symbol)
108
+
109
+ lhs != rhs
110
+ RUBY
111
+ end
112
+ .cmdlet do
113
+ name :or
114
+ description 'Return true if any value is truthy.'
115
+ result 'return true when first value is truthy'
116
+
117
+ parameter :values, 'list of values (via *splat) to be checked via AND condition', splat: '*', param_type: 'Object'
118
+
119
+ ruby <<-RUBY
120
+ values.any? { |value| value }
121
+ RUBY
122
+ end
123
+ .generate
124
+ .debug
125
+ end
126
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ KManager.action :inflection_commands do
4
+ action do
5
+ CmdletDirector
6
+ .init(k_builder, category: :inflection)
7
+ .cmdlet do
8
+ name :ordinal
9
+ description 'The suffix that should be added to a number to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th'
10
+ result 'ordinal suffix that would be required for a number'
11
+
12
+ parameter :value, 'value - numeric value', param_type: 'String|Int'
13
+
14
+ ruby <<-RUBY
15
+ return '' if value.nil?
16
+
17
+ value = value.to_i if value.is_a? String
18
+
19
+ value.ordinal
20
+ RUBY
21
+ end
22
+ .cmdlet do
23
+ name :ordinalize
24
+ description 'Turns a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.'
25
+ result 'number value turned to 1st, 2nd, 3rd, 4th etc.'
26
+
27
+ parameter :value, 'value - numeric value', param_type: 'Int'
28
+
29
+ ruby <<-RUBY
30
+ return '' if value.nil?
31
+
32
+ value = value.to_i if value.is_a? String
33
+
34
+ value.ordinalize
35
+ RUBY
36
+ end
37
+ .cmdlet do
38
+ name :pluralize
39
+ description 'Returns the plural form of the word in the string'
40
+ result 'value in plural form'
41
+
42
+ parameter :value, 'value - value to pluralize', param_type: 'String'
43
+
44
+ ruby <<-RUBY
45
+ return '' if value.nil?
46
+
47
+ value = value.to_s if value.is_a?(Symbol)
48
+
49
+ value.pluralize
50
+ RUBY
51
+ end
52
+ .cmdlet do
53
+ name :pluralize_by_number
54
+ description 'Returns the plural form of the word based on a count'
55
+ result 'value and number are used to calculate plural/singular form'
56
+
57
+ parameter :value, 'value - value to pluralize', param_type: 'String'
58
+ parameter :count, 'count used to determine pluralization', param_type: 'Int'
59
+ parameter :format, '(Optional) what format should output be. :word, :number_word'
60
+
61
+ ruby <<-'RUBY'
62
+ return '' if value.nil?
63
+
64
+ count = count.to_i if count.is_a? String
65
+ format = :word if format.nil?
66
+
67
+ case format.to_sym
68
+ when :number_word, :number_and_word
69
+ "#{count} #{value.pluralize(count)}"
70
+ else # aka :word
71
+ value.pluralize(count)
72
+ end
73
+ RUBY
74
+ end
75
+ .cmdlet do
76
+ name :singularize
77
+ description 'The reverse of #pluralize, returns the singular form of a word in a string'
78
+ result 'plural value turned to singular value'
79
+
80
+ parameter :value, 'value - value to singularized', param_type: 'String'
81
+
82
+ ruby <<-RUBY
83
+ return '' if value.nil?
84
+
85
+ value = value.to_s if value.is_a?(Symbol)
86
+
87
+ value.singularize
88
+ RUBY
89
+ end
90
+ .generate
91
+ .debug
92
+ end
93
+ end