k_builder 0.0.57 → 0.0.62

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: 85fabea0178e317cd8bd8658d91b8813a143e48a8af8710465f5531cfba00535
4
- data.tar.gz: b86a69632dac4f08256af550addfea622cd78d26dec7b92e5801f087bd917da7
3
+ metadata.gz: c3544040b2994f74c65d824516980a5ca980d441c53e97629920c23513cf76a2
4
+ data.tar.gz: e0c8e494f82a58e1564f59cfb66f960f6a99561a3cc28bfab81c17a77a3b4f8d
5
5
  SHA512:
6
- metadata.gz: e23dfcad31466228dca0ada1a183ff422878a0d5893358f3561fb545748c5a91f1b1e6ed123f5bae2d1117b72c4605cfc08e68c7c2993fb86df0387a2abe7325
7
- data.tar.gz: 8c563d0d7aebb402540852839b55e14c639c1a451e837345b3913f72f6674a3db894089a966d107cc80b3d65ea1c3f720d3716e278bfeac4397c3231dca5c141
6
+ metadata.gz: 8a27d1f32b26b8878260c11f15a0285b64a65769d9b17631cb05f9c772deab1ddf97bb3f7db9ab392efd9d9b257344bb85272827de19228905b9fe4493d6a485
7
+ data.tar.gz: f1a237017caff54b821d750dc9e467ec659a7127abae3d9640afe4a997c83afd9347c0113c99eb60d78c849875d26c34305983dbfc478d9e33a6be229ad8149f
data/.rubocop.yml CHANGED
@@ -7,6 +7,7 @@ AllCops:
7
7
  Exclude:
8
8
  - "_/**/*"
9
9
  - "spec/samples/**/*"
10
+ - "bin/*"
10
11
 
11
12
  Metrics/BlockLength:
12
13
  Exclude:
data/bin/k CHANGED
@@ -5,7 +5,7 @@
5
5
  # chmod +x bin/k
6
6
 
7
7
  help = %(
8
- ----------------------------------------------------------------------
8
+ ----------------------------------------------------------------------
9
9
  Klue Scripts - Help
10
10
  ----------------------------------------------------------------------
11
11
  k - This Help File
data/k_builder.gemspec CHANGED
@@ -42,6 +42,8 @@ Gem::Specification.new do |spec|
42
42
  spec.add_dependency 'k_log', '~> 0'
43
43
  spec.add_dependency 'k_type', '~> 0'
44
44
  spec.add_dependency 'k_util', '~> 0'
45
+ spec.add_dependency 'rubocop', '~> 1.8'
46
+
45
47
  # spec.add_dependency "anyway_config" , ">= 2.0.0"
46
48
  # spec.add_dependency "config" , ">= 3.0.0"
47
49
  end
data/lib/k_builder.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'rubocop'
4
+
3
5
  require 'k_log'
4
6
  require 'k_util'
5
7
  require 'k_type'
@@ -8,6 +10,8 @@ require 'k_builder/base_builder'
8
10
  require 'k_builder/base_configuration'
9
11
  require 'k_builder/configuration'
10
12
  require 'k_builder/file_segments'
13
+ require 'k_builder/commands/base_command'
14
+ require 'k_builder/commands/rubo_cop_command'
11
15
 
12
16
  require 'handlebars/helpers/template'
13
17
 
@@ -8,6 +8,8 @@ module KBuilder
8
8
  # Setter methods (are NOT fluent) can be created as needed
9
9
  # these methods would not be prefixed with the set_
10
10
  class BaseBuilder
11
+ include KLog::Logging
12
+
11
13
  attr_reader :configuration
12
14
 
13
15
  attr_accessor :target_folders
@@ -57,6 +59,19 @@ module KBuilder
57
59
  }
58
60
  end
59
61
 
62
+ def debug
63
+ log.subheading 'kbuilder'
64
+
65
+ log.kv 'current folder key' , current_folder_key
66
+ log.kv 'current folder' , target_folder
67
+ target_folders.debug(title: 'target_folders')
68
+
69
+ log.info ''
70
+
71
+ template_folders.debug(title: 'template folders (search order)')
72
+ ''
73
+ end
74
+
60
75
  # ----------------------------------------------------------------------
61
76
  # Fluent interface
62
77
  # ----------------------------------------------------------------------
@@ -81,6 +96,7 @@ module KBuilder
81
96
  # @option opts [String] :to Recipient email
82
97
  # @option opts [String] :body The email's body
83
98
  def add_file(file, **opts)
99
+ # move to command
84
100
  full_file = opts.key?(:folder_key) ? target_file(file, folder: opts[:folder_key]) : target_file(file)
85
101
 
86
102
  # Need logging options that can log these internal details
@@ -92,11 +108,22 @@ module KBuilder
92
108
 
93
109
  # Prettier needs to work with the original file name
94
110
  run_prettier file if opts.key?(:pretty)
111
+ # Need support for rubocop -a
95
112
 
96
113
  self
97
114
  end
98
115
  alias touch add_file # it is expected that you would not supply any options, just a file name
99
116
 
117
+ def make_folder(folder_key = nil, sub_path: nil)
118
+ folder_key = current_folder_key if folder_key.nil?
119
+ folder = target_folder(folder_key)
120
+ folder = File.join(folder, sub_path) unless sub_path.nil?
121
+
122
+ FileUtils.mkdir_p(folder)
123
+
124
+ self
125
+ end
126
+
100
127
  # Add content to the clipboard
101
128
  #
102
129
  # @option opts [String] :content Supply the content that you want to write to the file
@@ -108,6 +135,7 @@ module KBuilder
108
135
  # @option opts [String] :to Recipient email
109
136
  # @option opts [String] :body The email's body
110
137
  def add_clipboard(**opts)
138
+ # move to command
111
139
  content = process_any_content(**opts)
112
140
 
113
141
  begin
@@ -125,6 +153,7 @@ module KBuilder
125
153
  alias clipboard_copy add_clipboard
126
154
 
127
155
  def vscode(*file_parts, folder: current_folder_key)
156
+ # move to command
128
157
  file = target_file(*file_parts, folder: folder)
129
158
 
130
159
  rc "code #{file}"
@@ -234,9 +263,19 @@ module KBuilder
234
263
 
235
264
  return unless opts[:content_file]
236
265
 
237
- cf = opts[:content_file]
266
+ # NOTE: when using content file, you still want to search for it in the template folders, I THINK?
267
+ cf = find_template_file(opts[:content_file])
268
+
269
+ return "content not found: #{opts[:content_file]}" if cf.nil?
270
+
271
+ # cf = opts[:content_file]
272
+
273
+ # unless File.exist?(cf)
274
+ # cf_from_template_folders = find_template_file(cf)
275
+ # return "Content not found: #{File.expand_path(cf)}" unless File.exist?(cf_from_template_folders)
238
276
 
239
- return "Content not found: #{File.expand_path(cf)}" unless File.exist?(cf)
277
+ # cf = cf_from_template_folders
278
+ # end
240
279
 
241
280
  File.read(cf)
242
281
  end
@@ -281,6 +320,15 @@ module KBuilder
281
320
  Handlebars::Helpers::Template.render(template_content, opts) unless template_content.nil?
282
321
  end
283
322
 
323
+ def run_cop(file, **opts)
324
+ command = Commands::RuboCopCommand.new(file, builder: self, **opts)
325
+ command.execute
326
+
327
+ self
328
+ end
329
+
330
+ # Need to handle absolute files, see
331
+ # /Users/davidcruwys/dev/printspeak/reference_application/printspeak-domain/.builders/presentation/presentation_builder/commands/copy_ruby_resource_command.rb
284
332
  def run_prettier(file, log_level: :log)
285
333
  # command = "prettier --check #{file} --write #{file}"
286
334
  command = "npx prettier --loglevel #{log_level} --write #{file}"
@@ -298,6 +346,8 @@ module KBuilder
298
346
 
299
347
  puts build_command
300
348
 
349
+ # need to support the fork process options as I was not able to run
350
+ # k_builder_watch -n because it hid all the following output
301
351
  system(build_command)
302
352
  end
303
353
  alias rc run_command
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KBuilder
4
+ module Commands
5
+ # Base command for single responsibility actions that can be fired
6
+ # from methods in the builder.
7
+ #
8
+ # Uses the command pattern
9
+ class BaseCommand
10
+ include KLog::Logging
11
+
12
+ attr_accessor :builder
13
+ attr_accessor :valid
14
+
15
+ def initialize(**opts)
16
+ @builder = opts[:builder]
17
+ @valid = true
18
+ end
19
+
20
+ def guard(message)
21
+ # THIS SHOULD ONLY LOG IF DEBUGGING IS TURNED ON
22
+ log.error(message)
23
+ @valid = false
24
+ end
25
+
26
+ def valid?
27
+ @valid
28
+ end
29
+
30
+ def debug(title: nil)
31
+ log.section_heading(title) if title
32
+ debug_values if respond_to?(:debug_values)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KBuilder
4
+ module Commands
5
+ # Run RuboCop against a file
6
+ class RuboCopCommand < BaseCommand
7
+ attr_reader :file_pattern
8
+ attr_reader :fix_safe
9
+ attr_reader :fix_unsafe
10
+ attr_reader :rubo_config_file
11
+ attr_reader :show_console
12
+
13
+ attr_reader :cop_options
14
+ attr_reader :cop_opt_values
15
+
16
+ # Initialize RuboCop command
17
+ #
18
+ # @param [String] file_pattern File name or file pattern
19
+ # @param [Hash] **opts The options
20
+ # @option opts [Boolean] :fix_safe RuboCop -a option will fix simple and safe issues
21
+ # @option opts [Boolean] :fix_unsafe RuboCop -A option will fix simple but potentially unsafe issues
22
+ # @option opts [Boolean] :show_console This will show in console, or if false set --out ~/last_cop.txt so that console is redirected to file
23
+ # @option opts [String] :rubo_config_file YAML file with RuboCop configuration options
24
+ #
25
+ # @example Cop for single file with auto fix turned on for simple issues
26
+ #
27
+ # RubCopCommand.new('abc.rb', fix_safe: true)
28
+ #
29
+ # @example Cop for all spec files to auto simple and unsafe issues
30
+ #
31
+ # RubCopCommand.new('spec/**/*.rb', fix_unsafe: true)
32
+ def initialize(file_pattern, **opts)
33
+ super(**opts)
34
+
35
+ @valid = true
36
+
37
+ self.file_pattern = file_pattern
38
+
39
+ self.fix_safe = opts[:fix_safe]
40
+ self.fix_unsafe = opts[:fix_unsafe]
41
+ self.show_console = opts[:show_console]
42
+ self.rubo_config_file = opts[:rubo_config_file]
43
+ end
44
+
45
+ def execute
46
+ return unless valid?
47
+
48
+ cop_run
49
+ end
50
+
51
+ def cli_options
52
+ cli_options = []
53
+ # quite is the same as simple, except you will see nothing if no offenses
54
+ cli_options << '--format' << 'quiet' # 'simple'
55
+ cli_options << '-a' if fix_safe
56
+ cli_options << '-A' if fix_unsafe
57
+ cli_options << '--config' << rubo_config_file if rubo_config_file
58
+ cli_options << '--out' << '~/last_cop.txt' unless show_console
59
+ cli_options << file_pattern
60
+ cli_options
61
+ end
62
+
63
+ def debug_values
64
+ log.kv 'rubocop target', file_pattern
65
+ log.kv '-a', 'automatic fix for safe issues' if fix_safe
66
+ log.kv '-A', 'automatic fix for potentially unsafe issues' if fix_unsafe
67
+ log.kv '-config', rubo_config_file if rubo_config_file
68
+ end
69
+
70
+ private
71
+
72
+ def file_pattern=(value)
73
+ @file_pattern = value
74
+
75
+ if value.nil? || value.empty?
76
+ guard 'file_pattern is required'
77
+ elsif Pathname.glob(value).length.zero?
78
+ guard 'file_pattern does not reference an existing file'
79
+ end
80
+ end
81
+
82
+ def fix_safe=(value)
83
+ @fix_safe = value || false
84
+ end
85
+
86
+ def fix_unsafe=(value)
87
+ @fix_unsafe = value || false
88
+ end
89
+
90
+ def show_console=(value)
91
+ @show_console = value || false
92
+ end
93
+
94
+ def rubo_config_file=(value)
95
+ @rubo_config_file = value
96
+
97
+ return if value.nil? || value.empty?
98
+
99
+ guard("Unknown RuboCop config file: #{value}") unless File.exist?(value)
100
+ end
101
+
102
+ def cop_run
103
+ cli = RuboCop::CLI.new
104
+
105
+ # log.section_heading('CLI OPTIONS')
106
+ # log.block cli_options
107
+
108
+ cli.run(cli_options)
109
+ end
110
+ end
111
+ end
112
+ end
@@ -48,25 +48,15 @@ module KBuilder
48
48
  @template_folders = orig.template_folders.clone
49
49
  end
50
50
 
51
- # rubocop:disable Metrics/AbcSize
52
51
  def debug
53
52
  log.subheading 'kbuilder base configuration'
54
53
 
55
- log.section_heading 'target_folders'
56
- target_folders.folders.each_key do |key|
57
- folder = target_folders.folders[key]
58
- log.kv key.to_s, folder
59
- end
60
- log.info ''
54
+ target_folders.debug(title: 'target_folders')
61
55
 
62
- log.section_heading 'template folders (search order)'
56
+ log.info ''
63
57
 
64
- template_folders.ordered_keys.each do |key|
65
- folder = template_folders.folders[key]
66
- log.kv key.to_s, folder
67
- end
58
+ template_folders.debug(title: 'template folders (search order)')
68
59
  ''
69
60
  end
70
- # rubocop:enable Metrics/AbcSize
71
61
  end
72
62
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KBuilder
4
- VERSION = '0.0.57'
4
+ VERSION = '0.0.62'
5
5
  end
data/~/last_cop.txt ADDED
@@ -0,0 +1,19 @@
1
+ == /var/folders/jh/nffr8l5j4rzgc7s386gj770r0000gn/T/rspec-20210701-95573-12q1az6/make-pretty.rb ==
2
+ C: 1: 1: Naming/FileName: The name of this source file (make-pretty.rb) should use snake_case.
3
+ C: 1: 1: [Corrected] Style/FrozenStringLiteralComment: Missing frozen string literal comment.
4
+ C: 2: 1: [Corrected] Layout/EmptyLineAfterMagicComment: Add an empty line after magic comments.
5
+ C: 2: 1: [Corrected] Layout/IndentationWidth: Use 2 (not 0) spaces for indentation.
6
+ C: 2: 1: [Corrected] Style/SingleLineMethods: Avoid single-line method definitions.
7
+ C: 2: 19: [Corrected] Layout/SpaceAfterComma: Space missing after comma.
8
+ W: 2: 20: [Corrected] Lint/UnusedMethodArgument: Unused method argument - xyz. If it's necessary, use _ or _xyz as an argument name to indicate that it won't be used.
9
+ C: 2: 30: [Corrected] Layout/SpaceAroundOperators: Surrounding space missing for operator =.
10
+ C: 3: 1: Style/Documentation: Missing top-level class documentation comment.
11
+ C: 3: 4: [Corrected] Layout/TrailingEmptyLines: Final newline missing.
12
+ C: 3: 28: [Corrected] Style/Semicolon: Do not use semicolons to terminate expressions.
13
+ C: 3: 29: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
14
+ C: 4: 3: [Corrected] Layout/IndentationWidth: Use 2 (not 0) spaces for indentation.
15
+ C: 4: 13: [Corrected] Style/Semicolon: Do not use semicolons to terminate expressions.
16
+ C: 4: 14: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
17
+ W: 5: 1: [Corrected] Layout/DefEndAlignment: end at 5, 0 is not aligned with def at 3, 2.
18
+
19
+ 1 file inspected, 16 offenses detected, 14 offenses corrected
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.57
4
+ version: 0.0.62
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-04-19 00:00:00.000000000 Z
11
+ date: 2021-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: handlebars-helpers
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.8'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.8'
69
83
  description: " K Builder provides various fluent builders for initializing applications
70
84
  with different language requirements\n"
71
85
  email:
@@ -97,6 +111,8 @@ files:
97
111
  - lib/k_builder.rb
98
112
  - lib/k_builder/base_builder.rb
99
113
  - lib/k_builder/base_configuration.rb
114
+ - lib/k_builder/commands/base_command.rb
115
+ - lib/k_builder/commands/rubo_cop_command.rb
100
116
  - lib/k_builder/configuration.rb
101
117
  - lib/k_builder/file_segments.rb
102
118
  - lib/k_builder/version.rb
@@ -107,6 +123,7 @@ files:
107
123
  - usage/_out5.png
108
124
  - usage/_usage_folder_after.png
109
125
  - usage/_usage_folder_before.png
126
+ - "~/last_cop.txt"
110
127
  homepage: http://appydave.com
111
128
  licenses:
112
129
  - MIT