k_builder 0.0.53 → 0.0.59

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