k_director 0.1.2 → 0.2.0

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