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 +4 -4
- data/k_builder.gemspec +1 -0
- data/lib/k_builder.rb +9 -15
- data/lib/k_builder/base_builder.rb +41 -2
- data/lib/k_builder/base_configuration.rb +17 -8
- data/lib/k_builder/configuration.rb +14 -16
- data/lib/k_builder/version.rb +1 -1
- metadata +16 -4
- data/lib/k_builder/layered_folders.rb +0 -104
- data/lib/k_builder/named_folders.rb +0 -116
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cbc297bfc032f0b46f8930052990d5593ec6c490e5616ebb56d340dd0dad7ec6
|
4
|
+
data.tar.gz: f15472d59d723cd64995cc2402a94a3c1e67ffe2bcdd698de0e6c6475c615e47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
29
|
-
|
30
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
7
|
-
#
|
6
|
+
class << self
|
7
|
+
# Attach a child configuration with it's own settings to a parent configuration
|
8
8
|
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
|
13
|
-
|
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
|
-
|
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
|
-
|
52
|
+
log.subheading 'kbuilder base configuration'
|
46
53
|
|
47
|
-
|
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
|
-
|
56
|
+
log.info ''
|
55
57
|
|
56
|
-
template_folders.
|
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
|
data/lib/k_builder/version.rb
CHANGED
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.
|
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-
|
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
|