k_builder 0.0.53 → 0.0.59

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: 122c7daee609c40dbd918d5bb98640c3850d3cb0c54eeabee10e4d4082c036f3
4
- data.tar.gz: 3c2041cd23f31b624860a141858f0c54ac995cf49b277bd591acb94a37cb1456
3
+ metadata.gz: cbc297bfc032f0b46f8930052990d5593ec6c490e5616ebb56d340dd0dad7ec6
4
+ data.tar.gz: f15472d59d723cd64995cc2402a94a3c1e67ffe2bcdd698de0e6c6475c615e47
5
5
  SHA512:
6
- metadata.gz: ae5aa592ffe9845c5438a80761a2ee8dccf358d4d32cfa6f84926038d64433c9e041911ba464c29811617b871a3c174baadb23d2dadb57bf76bcd9de44487ff9
7
- data.tar.gz: c009caabf877b46d424e529bce376477835153338eef1b6bd2fd833fdbfb3b7cca157238823efd86aa44513c0ba5bd7e7fab5571a9799666ba9ab81624e4cb7f
6
+ metadata.gz: 0f8df1c0e2d708a2f11104b9dc01d1dd71d9fab123c473d610d2fec9f95de27469ff6729545b1b63105c14fe6576600694dbe43fc0783c70e7a44b8f6906f1b0
7
+ data.tar.gz: 38b884a40257519f61a116d5e063261029220c543628f4122247745cfeb2d8f400a66186cf64de8fa50ee9989cf14f64e49c2162ad08e3ade510ad3a06f1e274
data/k_builder.gemspec CHANGED
@@ -40,6 +40,7 @@ Gem::Specification.new do |spec|
40
40
 
41
41
  spec.add_dependency 'handlebars-helpers', '~> 0'
42
42
  spec.add_dependency 'k_log', '~> 0'
43
+ spec.add_dependency 'k_type', '~> 0'
43
44
  spec.add_dependency 'k_util', '~> 0'
44
45
  # spec.add_dependency "anyway_config" , ">= 2.0.0"
45
46
  # spec.add_dependency "config" , ">= 3.0.0"
data/lib/k_builder.rb CHANGED
@@ -1,30 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'k_log'
4
+ require 'k_util'
5
+ require 'k_type'
3
6
  require 'k_builder/version'
4
7
  require 'k_builder/base_builder'
5
8
  require 'k_builder/base_configuration'
6
9
  require 'k_builder/configuration'
7
10
  require 'k_builder/file_segments'
8
- require 'k_builder/named_folders'
9
- require 'k_builder/layered_folders'
10
- require 'k_log'
11
- require 'k_util'
12
11
 
13
12
  require 'handlebars/helpers/template'
14
13
 
15
14
  module KBuilder
16
15
  # raise KBuilder::Error, 'Sample message'
17
16
  class Error < StandardError; end
18
-
19
- # Need to move this into a KLog factory
20
- def self.configure_logger
21
- logger = Logger.new($stdout)
22
- logger.level = Logger::DEBUG
23
- logger.formatter = KLog::LogFormatter.new
24
- KLog::LogUtil.new(logger)
25
- end
26
17
  end
27
18
 
28
- L = KBuilder.configure_logger
29
-
30
- puts "KBuilder::Version: #{KBuilder::VERSION}" if ENV['KLUE_DEBUG']&.to_s&.downcase == 'true'
19
+ if ENV['KLUE_DEBUG']&.to_s&.downcase == 'true'
20
+ namespace = 'KBuilder::Version'
21
+ file_path = $LOADED_FEATURES.find { |f| f.include?('k_builder/version') }
22
+ version = KBuilder::VERSION.ljust(9)
23
+ puts "#{namespace.ljust(35)} : #{version.ljust(9)} : #{file_path}"
24
+ end
@@ -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,17 @@ module KBuilder
57
59
  }
58
60
  end
59
61
 
62
+ def debug
63
+ log.subheading 'kbuilder'
64
+
65
+ target_folders.debug(title: 'target_folders')
66
+
67
+ log.info ''
68
+
69
+ template_folders.debug(title: 'template folders (search order)')
70
+ ''
71
+ end
72
+
60
73
  # ----------------------------------------------------------------------
61
74
  # Fluent interface
62
75
  # ----------------------------------------------------------------------
@@ -81,6 +94,7 @@ module KBuilder
81
94
  # @option opts [String] :to Recipient email
82
95
  # @option opts [String] :body The email's body
83
96
  def add_file(file, **opts)
97
+ # move to command
84
98
  full_file = opts.key?(:folder_key) ? target_file(file, folder: opts[:folder_key]) : target_file(file)
85
99
 
86
100
  # Need logging options that can log these internal details
@@ -92,11 +106,22 @@ module KBuilder
92
106
 
93
107
  # Prettier needs to work with the original file name
94
108
  run_prettier file if opts.key?(:pretty)
109
+ # Need support for rubocop -a
95
110
 
96
111
  self
97
112
  end
98
113
  alias touch add_file # it is expected that you would not supply any options, just a file name
99
114
 
115
+ def make_folder(folder_key = nil, sub_path: nil)
116
+ folder_key = current_folder_key if folder_key.nil?
117
+ folder = target_folder(folder_key)
118
+ folder = File.join(folder, sub_path) unless sub_path.nil?
119
+
120
+ FileUtils.mkdir_p(folder)
121
+
122
+ self
123
+ end
124
+
100
125
  # Add content to the clipboard
101
126
  #
102
127
  # @option opts [String] :content Supply the content that you want to write to the file
@@ -108,6 +133,7 @@ module KBuilder
108
133
  # @option opts [String] :to Recipient email
109
134
  # @option opts [String] :body The email's body
110
135
  def add_clipboard(**opts)
136
+ # move to command
111
137
  content = process_any_content(**opts)
112
138
 
113
139
  begin
@@ -125,6 +151,7 @@ module KBuilder
125
151
  alias clipboard_copy add_clipboard
126
152
 
127
153
  def vscode(*file_parts, folder: current_folder_key)
154
+ # move to command
128
155
  file = target_file(*file_parts, folder: folder)
129
156
 
130
157
  rc "code #{file}"
@@ -234,9 +261,19 @@ module KBuilder
234
261
 
235
262
  return unless opts[:content_file]
236
263
 
237
- cf = opts[:content_file]
264
+ # NOTE: when using content file, you still want to search for it in the template folders, I THINK?
265
+ cf = find_template_file(opts[:content_file])
266
+
267
+ return "content not found: #{opts[:content_file]}" if cf.nil?
268
+
269
+ # cf = opts[:content_file]
270
+
271
+ # unless File.exist?(cf)
272
+ # cf_from_template_folders = find_template_file(cf)
273
+ # return "Content not found: #{File.expand_path(cf)}" unless File.exist?(cf_from_template_folders)
238
274
 
239
- return "Content not found: #{File.expand_path(cf)}" unless File.exist?(cf)
275
+ # cf = cf_from_template_folders
276
+ # end
240
277
 
241
278
  File.read(cf)
242
279
  end
@@ -298,6 +335,8 @@ module KBuilder
298
335
 
299
336
  puts build_command
300
337
 
338
+ # need to support the fork process options as I was not able to run
339
+ # k_builder_watch -n because it hid all the following output
301
340
  system(build_command)
302
341
  end
303
342
  alias rc run_command
@@ -3,17 +3,25 @@
3
3
  module KBuilder
4
4
  # Base configuration object for all k_builder* GEM
5
5
  class BaseConfiguration
6
- def self.attach_to(klass_me, klass_target, accessor_name)
7
- # Create a memoized getter to an instance of the attaching class (:klass_me)
6
+ class << self
7
+ # Attach a child configuration with it's own settings to a parent configuration
8
8
  #
9
- # def third_party
10
- # @third_party ||= KBuilder::ThirdPartyGem::Configuration.new
11
- # end
12
- klass_target.send(:define_method, accessor_name) do
13
- return instance_variable_get("@#{accessor_name}") if instance_variable_defined?("@#{accessor_name}")
9
+ # @param [Class] klass_child what class would you like as the child
10
+ # @param [Class] klass_parent what class would you like to extend with a new child configuration
11
+ # @param [Symbol] accessor_name what is the name of the accessor that you are adding
12
+ def attach_config_to_parent(klass_child, klass_parent, accessor_name)
13
+ # Create a memoized getter to an instance of the attaching class (:klass_child)
14
+ #
15
+ # def third_party
16
+ # @third_party ||= KBuilder::ThirdPartyGem::Configuration.new
17
+ # end
18
+ klass_parent.send(:define_method, accessor_name) do
19
+ return instance_variable_get("@#{accessor_name}") if instance_variable_defined?("@#{accessor_name}")
14
20
 
15
- instance_variable_set("@#{accessor_name}", klass_me.new)
21
+ instance_variable_set("@#{accessor_name}", klass_child.new)
22
+ end
16
23
  end
24
+ alias attach_to attach_config_to_parent
17
25
  end
18
26
 
19
27
  # move out into module
@@ -29,6 +37,7 @@ module KBuilder
29
37
  hash
30
38
  end
31
39
 
40
+ # This code is being moved into k_util (data)
32
41
  # Any basic (aka primitive) type
33
42
  def basic_type?(value)
34
43
  value.is_a?(String) ||
@@ -19,9 +19,17 @@ module KBuilder
19
19
  yield(configuration)
20
20
  end
21
21
 
22
+ # Does this class need to move out into k_types?
23
+ # It is being used with k_manager in a similar fashion
24
+ #
22
25
  # Configuration class
23
26
  class Configuration < BaseConfiguration
27
+ include KLog::Logging
28
+
29
+ # Target folders provide a set named folders that can be written to
24
30
  attr_accessor :target_folders
31
+
32
+ # Template folders provides layered folders that templates can exist within
25
33
  attr_accessor :template_folders
26
34
 
27
35
  def initialize
@@ -29,8 +37,8 @@ module KBuilder
29
37
  # @target_folder = Dir.getwd
30
38
  # @template_folder = File.join(Dir.getwd, '.templates')
31
39
  # @global_template_folder = nil
32
- @target_folders = NamedFolders.new
33
- @template_folders = LayeredFolders.new
40
+ @target_folders = KType::NamedFolders.new
41
+ @template_folders = KType::LayeredFolders.new
34
42
  end
35
43
 
36
44
  def initialize_copy(orig)
@@ -40,25 +48,15 @@ module KBuilder
40
48
  @template_folders = orig.template_folders.clone
41
49
  end
42
50
 
43
- # rubocop:disable Metrics/AbcSize
44
51
  def debug
45
- L.subheading 'kbuilder base configuration'
52
+ log.subheading 'kbuilder base configuration'
46
53
 
47
- L.section_heading 'target_folders'
48
- target_folders.folders.each_key do |key|
49
- folder = target_folders.folders[key]
50
- L.kv key.to_s, folder
51
- end
52
- L.info ''
54
+ target_folders.debug(title: 'target_folders')
53
55
 
54
- L.section_heading 'template folders (search order)'
56
+ log.info ''
55
57
 
56
- template_folders.ordered_keys.each do |key|
57
- folder = template_folders.folders[key]
58
- L.kv key.to_s, folder
59
- end
58
+ template_folders.debug(title: 'template folders (search order)')
60
59
  ''
61
60
  end
62
- # rubocop:enable Metrics/AbcSize
63
61
  end
64
62
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KBuilder
4
- VERSION = '0.0.53'
4
+ VERSION = '0.0.59'
5
5
  end
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.53
4
+ version: 0.0.59
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-01 00:00:00.000000000 Z
11
+ date: 2021-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: handlebars-helpers
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: k_type
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: k_util
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -85,8 +99,6 @@ files:
85
99
  - lib/k_builder/base_configuration.rb
86
100
  - lib/k_builder/configuration.rb
87
101
  - lib/k_builder/file_segments.rb
88
- - lib/k_builder/layered_folders.rb
89
- - lib/k_builder/named_folders.rb
90
102
  - lib/k_builder/version.rb
91
103
  - usage/_out1.png
92
104
  - usage/_out2.png
@@ -1,104 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module KBuilder
4
- #
5
- # Named folders makes sense for generated/output folders because you may want
6
- # more than one type of location to generate output.
7
- #
8
- # Don't confuse multiple named output folders with sub-paths, when you want to
9
- # build up a file name in a child folder, you can do that as part of building
10
- # the filename.
11
- #
12
- # The idea behind named folders is for when you have two or more totally different
13
- # outputs that (may live in the a similar location) or live in different locations.
14
-
15
- # Layered folders allow files to be found in any of the searchable folders
16
- #
17
- # They derive from and thus work just like named folders in that they allow folders
18
- # to be stored with easy to remember names/alias's.
19
- #
20
- # Where they differ is that they are retrieved in preferential search order that is
21
- # by default (First In, Last Out) priority aka a Stack (Last In, First Out) or
22
- # optionally over ridden via the search_order method
23
- #
24
- # Layered folders makes sense for use with template files and source data/model
25
- # where you can have specific usage files available and if they are not found then
26
- # you can use fall-back files in other folders.
27
- #
28
- # example:
29
- # folders = LayeredFolders.new
30
- # folders.add(:global , '~/global_templates')
31
- # folders.add(:domain , '/my-project/domain_templates')
32
- # folders.add(:app , '/my-project/my-app/.templates')
33
- #
34
- # # Find a file and folder will in folders in this order
35
- # # app_templates, then domain_templates and then finally global templates
36
- # # ['/my-project/my-app/.templates', '/my-project/domain_templates', '~/global_templates']
37
- # #
38
- # # Find a file called template1.txt and return its fully-qualified path
39
- # folders.find_file('template1.txt')
40
- #
41
- # # As above, but returns the folder only, file name and sub-paths are ignored
42
- # folders.find_file_folder('template1.txt')
43
- # folders.find_file_folder('abc/xyz/deep-template.txt')
44
- #
45
- # # If an additional folder is added, say in child configuration that is designed
46
- # # to override some of the global templates, then you can run a search_order
47
- # # method to re-order the templates
48
- #
49
- # folders.add(:global_shim , '~/global_templates_shim')
50
- # folders.search_order(:app, :domain, :global_shim, :global)
51
- #
52
- # class Builder < KBuilder::BaseBuilder
53
- class LayeredFolders < KBuilder::NamedFolders
54
- attr_reader :ordered_keys
55
- attr_reader :ordered_folders
56
-
57
- def initialize
58
- super()
59
-
60
- @ordered_keys = []
61
- @ordered_folders = []
62
- end
63
-
64
- def initialize_copy(orig)
65
- super(orig)
66
-
67
- @ordered_keys = orig.ordered_keys.clone
68
- @ordered_folders = orig.ordered_folders.clone
69
- end
70
-
71
- def add(folder_key, *folder_parts)
72
- folder = super(folder_key, *folder_parts)
73
-
74
- ordered_keys.prepend(folder_key)
75
- ordered_folders.prepend(folder)
76
-
77
- folder
78
- end
79
-
80
- # File name or array of sub-paths plus file
81
- #
82
- # Return the folder that a file is found in
83
- def find_file(file_parts)
84
- folder = find_file_folder(file_parts)
85
- folder.nil? ? nil : File.join(folder, file_parts)
86
- end
87
-
88
- # File name or array of sub-paths plus file
89
- #
90
- # Return the folder that a file is found in
91
- def find_file_folder(file_parts)
92
- ordered_folders.find { |folder| File.exist?(File.join(folder, file_parts)) }
93
- end
94
-
95
- def to_h
96
- {
97
- ordered: {
98
- keys: ordered_keys,
99
- folders: ordered_folders
100
- }
101
- }.merge(@folders)
102
- end
103
- end
104
- end
@@ -1,116 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module KBuilder
4
- # Named folders allow folders to be stored with easy to remember names/alias's
5
- # Secondarily, you can also build up file names based on these named folders.
6
- #
7
- # Named folders makes sense for generated/output folders because you may want
8
- # more than one type of location to generate output.
9
- #
10
- # Don't confuse multiple named output folders with sub-paths, when you want to
11
- # build up a file name in a child folder, you can do that as part of building
12
- # the filename.
13
- #
14
- # The idea behind named folders is for when you have two or more totally different
15
- # outputs that (may live in the a similar location) or live in different locations.
16
- # Samples:
17
- # name: :code - generating source code into a project
18
- # name: :slide - generating slide deck into a documentation folder
19
- # name: :webpack - folder where you might generate webpack files, e.g. webpack.config.*.json
20
- #
21
- # example:
22
- # folders = NamedFolders.new
23
- # folders.add(:csharp , '~/dev/csharp/cool-project')
24
- # folders.add(:package_json , :csharp)
25
- # folders.add(:webpack , folders.join(:csharp, 'config'))
26
- # folders.add(:builder , folders.join(:csharp, 'builder'))
27
- # folders.add(:slides , '~/doc/csharp/cool-project')
28
- #
29
- # puts folders.get(:builder)
30
- #
31
- # puts folders.get_filename(:csharp, 'Program.cs')
32
- # puts folders.get_filename(:csharp, 'Models/Order.cs')
33
- # puts folders.get_filename(:csharp, 'Models', 'Order.cs')
34
- #
35
- # Do I need to support :default?
36
- class NamedFolders
37
- attr_reader :folders
38
-
39
- attr_reader :current
40
-
41
- def initialize
42
- @folders = {}
43
- @current = nil
44
- end
45
-
46
- def initialize_copy(orig)
47
- super(orig)
48
-
49
- @folders = orig.folders.clone
50
- end
51
-
52
- def current=(folder_key)
53
- guard_folder_key(folder_key)
54
- @current = folder_key
55
- end
56
-
57
- # Add support for file_parts
58
- def add(folder_key, *folder_parts)
59
- # get a predefined folder by symbol
60
- folder = join_folder_parts(folder_parts)
61
- if folder.is_a?(Symbol)
62
- folder = get(folder)
63
- elsif folder.start_with?('~')
64
- folder = File.expand_path(folder)
65
- end
66
-
67
- @current = folder_key if @current.nil?
68
- folders[folder_key] = folder
69
- end
70
-
71
- # Get a folder
72
- def get(folder_key)
73
- guard_folder_key(folder_key)
74
- folders[folder_key]
75
- end
76
-
77
- # Join the lookup folder key with the subpath folder parts (optionally + filename) and return the folder or filename
78
- #
79
- # Return fully qualified filename
80
- def join(folder_key, *file_folder_parts)
81
- folder = get(folder_key)
82
-
83
- File.join(folder, file_folder_parts)
84
- end
85
- # Get a file name using the lookup folder key and the file name or array of sub-paths plus filename
86
- alias get_filename join
87
-
88
- def folder_keys
89
- @folders.keys
90
- end
91
-
92
- def to_h
93
- @folders
94
- end
95
-
96
- private
97
-
98
- def join_folder_parts(folder_parts)
99
- raise KBuilder::Error, 'No folder part provided' if folder_parts.nil? || folder_parts.length.zero?
100
-
101
- # If only one part, and that can be a folder or :folder_key, then just return it
102
- return folder_parts.first if folder_parts.length == 1
103
-
104
- folder_parts = folder_parts.map.with_index do |folder_part, index|
105
- folder_part = get(folder_part) if index.zero? && folder_part.is_a?(Symbol)
106
- folder_part
107
- end
108
-
109
- File.join(folder_parts)
110
- end
111
-
112
- def guard_folder_key(folder_key)
113
- raise KBuilder::Error, "Folder not found, this folder key not found: #{folder_key}" unless folders.key?(folder_key)
114
- end
115
- end
116
- end