k_director 0.1.2 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d209a43e4a6ff73dcaee458f9c1b7a568a2afd4f554028054ce5392918c1dcc3
4
- data.tar.gz: a54f0d64cf0bc1f5e55c3599d886585f3062c50c30deac454a1ac1dea14478b6
3
+ metadata.gz: d0c8985292cf5c11bd7bd5e7887be4c29bf72e13095a4c7f1b7195595188a39a
4
+ data.tar.gz: aa90b26840c62e1c8e60edc0b4aeda07b62a76fa106de2618eb2571a48791680
5
5
  SHA512:
6
- metadata.gz: 80737996ee3d29ac2aab7f3bb86ccb0184354298897f686d214be6bb35b1c9e71e5304a610e48f0b8691a20b8aee38531910ca7db895dc9aec881fc2142eb50b
7
- data.tar.gz: 8f8f1ae7621f296216a3b7a8b5d1decd2335382ec648f631015bc9966aa689ac6d87ac16f39484881063a2fe32ee47463346d88a1c0c8bd6f66d102bdc08d806
6
+ metadata.gz: '0458d1254d8ca4e459d3aa2a6bf23de2b3437d8df7cf0ded66376f6618f5f55f3ae4016506cde7381a81c095140200835950161b47041e6aaa6d086197547aaf'
7
+ data.tar.gz: 5f8d84e42051822825f82310c3a6ac1afb6fb87beeb10acb68137583b351fa6c92fe7d09356bbc4f03df4c0922cce9a9dd0a5ac4747174ca1f33d4a7c853b9e4
data/.rubocop.yml CHANGED
@@ -52,6 +52,9 @@ Style/BlockComments:
52
52
  Include:
53
53
  - "**/spec/*"
54
54
 
55
+ Style/OpenStructUse:
56
+ Enabled: false
57
+
55
58
  # My Preferences - Start
56
59
  Metrics/ClassLength:
57
60
  Enabled: false
data/docs/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ ## [0.1.2](https://github.com/klueless-io/k_director/compare/v0.1.1...v0.1.2) (2022-01-26)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * add semver change log ([2069bd2](https://github.com/klueless-io/k_director/commit/2069bd24b9d32649c666480da76781514beeecf3))
7
+
8
+
9
+ ## [0.1.1](https://github.com/klueless-io/k_director/compare/v0.1.0...v0.1.1) (2022-01-26)
10
+
11
+ ### Feature
12
+
13
+ * add dom and action builder ([a61e841](https://github.com/klueless-io/k_director/commit/a61e841a40f544f4751e4aaa012d60a447d2dfab))
data/k_director.gemspec CHANGED
@@ -43,5 +43,6 @@ Gem::Specification.new do |spec|
43
43
 
44
44
  spec.add_dependency 'k_log', '~> 0.0.0'
45
45
  # spec.add_dependency 'k_type', '~> 0.0.0'
46
+ spec.add_dependency 'k_builder', '~> 0.0.0'
46
47
  spec.add_dependency 'k_util', '~> 0.0.0'
47
48
  end
@@ -0,0 +1,157 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KDirector
4
+ module Directors
5
+ # Base Director is paired with the ActionsBuilder and provides a base
6
+ # on which to build code generation directors.
7
+ class BaseDirector
8
+ include KLog::Logging
9
+
10
+ class << self
11
+ def init(k_builder, builder = nil, **opts)
12
+ if builder.nil?
13
+ builder = KDirector::Builders::ActionsBuilder.new
14
+ else
15
+ builder.reset
16
+ end
17
+
18
+ new(k_builder, builder, **opts)
19
+ end
20
+ end
21
+
22
+ attr_reader :builder
23
+ attr_reader :k_builder
24
+ attr_reader :options
25
+ attr_accessor :dom
26
+
27
+ def initialize(k_builder, builder, **opts)
28
+ @k_builder = k_builder
29
+ @builder = builder
30
+ @options = OpenStruct.new(**opts)
31
+
32
+ @options.director_name ||= default_director_name
33
+ @options.template_base_folder ||= default_template_base_folder
34
+ @options.on_exist ||= :skip # %i[skip write compare]
35
+ @options.on_action ||= :queue # %i[queue execute]
36
+ end
37
+
38
+ # Used by child directors to inherit options from parent
39
+ def inherited_opts(**opts)
40
+ {
41
+ on_exist: @options.on_exist,
42
+ on_action: @options.on_action,
43
+ template_base_folder: @options.template_base_folder
44
+ }.merge(opts)
45
+ end
46
+
47
+ def director_name
48
+ @options.director_name
49
+ end
50
+
51
+ def template_base_folder
52
+ @options.template_base_folder
53
+ end
54
+
55
+ def on_exist
56
+ @options.on_exist
57
+ end
58
+
59
+ def on_action
60
+ @options.on_action
61
+ end
62
+
63
+ # Add a file to target folder
64
+ def add_file(file, **opts)
65
+ opts = {
66
+ on_exist: on_exist
67
+ }.merge(opts)
68
+
69
+ # WHAT IS THIS FOR?
70
+ opts[:dom] = dom if dom
71
+
72
+ handle_action(k_builder.add_file_action(file, **opts))
73
+
74
+ self
75
+ end
76
+
77
+ # Set current target folder
78
+ # rubocop:disable Naming/AccessorMethodName
79
+ def set_current_folder_action(folder_key)
80
+ # RUN (not handle), current folder effects subsequent actions and so it needs to be executed straight away.
81
+ run_action(k_builder.set_current_folder_action(folder_key))
82
+
83
+ self
84
+ end
85
+ # rubocop:enable Naming/AccessorMethodName
86
+ alias cd set_current_folder_action
87
+
88
+ # Run a command using shell, this is useful with command line tools
89
+ def run_command(command)
90
+ handle_action(k_builder.run_command_action(command))
91
+
92
+ self
93
+ end
94
+
95
+ # Run a command using Open3.capture2, can be used in place of run_command
96
+ # but is also useful with multiline scripts
97
+ def run_script(script)
98
+ handle_action(k_builder.run_script_action(script))
99
+
100
+ self
101
+ end
102
+
103
+ # play any un-played actions
104
+ def play_actions
105
+ k_builder.play_actions(builder.actions)
106
+ end
107
+
108
+ def debug
109
+ log.section_heading director_name
110
+
111
+ h = options.to_h.sort.to_h
112
+ h.each_key do |key|
113
+ # requires k_funky
114
+ log.kv(titleize.parse(key.to_s), h[key])
115
+ end
116
+ nil
117
+ end
118
+
119
+ # def debug_info
120
+ # log.kv 'Template Root Folder' , k_builder.template_folders.folder_paths
121
+ # log.kv 'Template Base Folder' , template_base_folder
122
+ # log.kv 'on_exist' , on_exist
123
+ # log.kv 'on_action' , on_action
124
+ # end
125
+
126
+ private
127
+
128
+ def default_template_base_folder
129
+ ''
130
+ end
131
+
132
+ def default_director_name
133
+ titleize.parse(self.class.name.split('::').last)
134
+ end
135
+
136
+ def folder_parts(*parts)
137
+ parts.reject(&:blank?).map(&:to_s)
138
+ end
139
+
140
+ def handle_action(action)
141
+ builder.queue_action(action)
142
+ k_builder.play_action(action) if on_action == :execute
143
+ end
144
+
145
+ # run action will queue an action just like handle_action, but it will also run it immediately
146
+ def run_action(action)
147
+ builder.queue_action(action)
148
+ k_builder.run_action(action)
149
+ end
150
+
151
+ def titleize
152
+ require 'handlebars/helpers/string_formatting/titleize'
153
+ Handlebars::Helpers::StringFormatting::Titleize.new
154
+ end
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KDirector
4
+ module Directors
5
+ # Child directors hang of a parent director and provide fluent builders for
6
+ # specialized flow control, e.g branching of a RubyGem Director into a GitHub
7
+ # Child director
8
+ class ChildDirector < KDirector::Directors::BaseDirector
9
+ attr_reader :parent
10
+
11
+ def initialize(parent, **opts)
12
+ @parent = parent
13
+
14
+ super(parent.k_builder, parent.builder, **@parent.inherited_opts(**opts))
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KDirector
4
- VERSION = '0.1.2'
4
+ VERSION = '0.2.0'
5
5
  end
data/lib/k_director.rb CHANGED
@@ -1,10 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'k_log'
3
4
  require 'k_util'
5
+ require 'k_builder'
4
6
 
5
7
  require_relative 'k_director/version'
6
8
  require_relative 'k_director/builders/dom_builder'
7
9
  require_relative 'k_director/builders/actions_builder'
10
+ require_relative 'k_director/directors/base_director'
11
+ require_relative 'k_director/directors/child_director'
8
12
 
9
13
  module KDirector
10
14
  # raise KDirector::Error, 'Sample message'
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "k_director",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "k_director",
9
- "version": "0.1.2",
9
+ "version": "0.2.0",
10
10
  "devDependencies": {
11
11
  "@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
12
12
  "@semantic-release/changelog": "^6.0.1",
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "k_director",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "Command line and CI/CD tools for k_director",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k_director
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-26 00:00:00.000000000 Z
11
+ date: 2022-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: k_log
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: k_builder
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.0.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: k_util
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -70,12 +84,15 @@ files:
70
84
  - Rakefile
71
85
  - bin/console
72
86
  - bin/setup
87
+ - docs/CHANGELOG.md
73
88
  - docs/CODE_OF_CONDUCT.md
74
89
  - docs/LICENSE.txt
75
90
  - k_director.gemspec
76
91
  - lib/k_director.rb
77
92
  - lib/k_director/builders/actions_builder.rb
78
93
  - lib/k_director/builders/dom_builder.rb
94
+ - lib/k_director/directors/base_director.rb
95
+ - lib/k_director/directors/child_director.rb
79
96
  - lib/k_director/version.rb
80
97
  - package-lock.json
81
98
  - package.json