k_director 0.0.13 → 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: bf47752180cf17668d865a97b7b02c5cbc72ca1147a0d54a4033fad5f6d4dd7e
4
- data.tar.gz: 8a88afd5bb024ff19f08fcfe7a90de2fe3bdd113a4a5bcc056dd67546379f6e5
3
+ metadata.gz: d0c8985292cf5c11bd7bd5e7887be4c29bf72e13095a4c7f1b7195595188a39a
4
+ data.tar.gz: aa90b26840c62e1c8e60edc0b4aeda07b62a76fa106de2618eb2571a48791680
5
5
  SHA512:
6
- metadata.gz: 5858b4cb0b5a58c1d48c5f1d22e395fdb14930468996fa2ffa6ab1601d91f9f0cb91a65909de6b446d222c07e6ffe831cd2c49c11880fef8176c24359c025c5c
7
- data.tar.gz: 59591fcbad758b23a768ec30f0ec36776d85e42b8956fbc340eaf2880a79fdaad2b8cbd7d0095c26a3b6a67844b4ee4c3e98492187963275f60cba284ff864c0
6
+ metadata.gz: '0458d1254d8ca4e459d3aa2a6bf23de2b3437d8df7cf0ded66376f6618f5f55f3ae4016506cde7381a81c095140200835950161b47041e6aaa6d086197547aaf'
7
+ data.tar.gz: 5f8d84e42051822825f82310c3a6ac1afb6fb87beeb10acb68137583b351fa6c92fe7d09356bbc4f03df4c0922cce9a9dd0a5ac4747174ca1f33d4a7c853b9e4
@@ -17,7 +17,7 @@ KManager.action :bootstrap do
17
17
  author: 'David Cruwys',
18
18
  author_email: 'david@ideasmen.com.au',
19
19
  avatar: 'Developer',
20
- initial_semver: '0.0.1',
20
+ initial_semver: '0.0.13',
21
21
  main_story: 'As a Developer, I want to generate code using a DSL, so that I can speed up application development',
22
22
  copyright_date: '2022',
23
23
  website: 'http://appydave.com/gems/k_director'
@@ -68,7 +68,6 @@ KManager.action :bootstrap do
68
68
 
69
69
  # add("lib/#{dom.application}.rb" , template_file: 'lib/applet_name.rb' , dom: dom)
70
70
  # add("lib/#{dom.application}/version.rb" , template_file: 'lib/applet_name/version.rb' , dom: dom)
71
- # add(".ver", dom: dom)
72
71
 
73
72
  # add('spec/spec_helper.rb')
74
73
  # add("spec/#{dom.application}_spec.rb" , template_file: 'spec/applet_name_spec.rb', dom: dom)
@@ -96,30 +95,14 @@ KManager.action :bootstrap do
96
95
  self.dom = OpenStruct.new(parent.options.to_h.merge(options.to_h))
97
96
 
98
97
  # run_command("gh secret set SLACK_WEBHOOK --body \"$SLACK_REPO_WEBHOOK\"")
99
- # add('.github/workflows/main.yml')
100
- # add('.github/workflows/semver.yml')
101
- # add('.releaserc')
102
-
103
- # run_command("git add .; git commit -m 'chore: #{self.options.description.downcase}'; git push")
104
- end
105
- .blueprint(
106
- name: :intitial_gem_release,
107
- description: 'initial GEM release',
108
- on_exist: :write) do
109
-
110
- cd(:app)
111
- self.dom = OpenStruct.new(parent.options.to_h.merge(options.to_h))
112
-
113
- # run_command("rake publish && rake clean")
114
98
  # run_command("gh secret set GEM_HOST_API_KEY --body \"$GEM_HOST_API_KEY\"")
115
99
  # add('.github/workflows/main.yml')
116
100
  # add('.github/workflows/semver.yml')
117
- # add('.releaserc')
101
+ # add('.releaserc.json')
118
102
 
119
103
  # run_command("git add .; git commit -m 'chore: #{self.options.description.downcase}'; git push")
120
104
  end
121
105
 
122
-
123
106
  # director.k_builder.debug
124
107
  director.play_actions
125
108
  # director.builder.logit
data/.releaserc.json CHANGED
@@ -20,8 +20,8 @@
20
20
  [
21
21
  "@semantic-release/changelog",
22
22
  {
23
- "changelogFile": "docs/CHANGE.md",
24
- "changelogFileTitle": "k_director Changelog"
23
+ "changelogFile": "docs/CHANGELOG.md",
24
+ "changelogFileTitle": "KDirector Changelog"
25
25
  }
26
26
  ],
27
27
  [
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/README.md CHANGED
@@ -22,7 +22,6 @@ Or install it yourself as:
22
22
  gem install k_director
23
23
  ```
24
24
 
25
-
26
25
  ## Stories
27
26
 
28
27
  ### Main Story
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_util', '~> 0.0.0'
46
+ spec.add_dependency 'k_builder', '~> 0.0.0'
47
+ spec.add_dependency 'k_util', '~> 0.0.0'
47
48
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KDirector
4
+ module Builders
5
+ # Data builder for KBuilder Actions
6
+ class ActionsBuilder < KDirector::Builders::DomBuilder
7
+ def initialize
8
+ super(schema)
9
+ end
10
+
11
+ def queue_action(action)
12
+ dom[:actions] << current_node(action)
13
+ end
14
+
15
+ def actions
16
+ dom[:actions]
17
+ end
18
+
19
+ private
20
+
21
+ def schema
22
+ {
23
+ actions: []
24
+ }
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KDirector
4
+ module Builders
5
+ # Base document builder
6
+ class DomBuilder
7
+ attr_reader :dom
8
+ attr_reader :node
9
+
10
+ def initialize(dom = nil)
11
+ @dom = dom || schema
12
+ end
13
+
14
+ def current_node(node)
15
+ @node = node
16
+ end
17
+
18
+ alias last_node node
19
+
20
+ def reset
21
+ @dom = schema
22
+ @last_node = nil
23
+ end
24
+
25
+ def schema
26
+ {}
27
+ end
28
+
29
+ def logit
30
+ puts JSON.pretty_generate(dom)
31
+ # log.structure(dom)
32
+
33
+ self
34
+ end
35
+
36
+ def data
37
+ KUtil.data.to_open_struct(@dom)
38
+ end
39
+ end
40
+ end
41
+ 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.0.13'
4
+ VERSION = '0.2.0'
5
5
  end
data/lib/k_director.rb CHANGED
@@ -1,6 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'k_log'
4
+ require 'k_util'
5
+ require 'k_builder'
6
+
3
7
  require_relative 'k_director/version'
8
+ require_relative 'k_director/builders/dom_builder'
9
+ require_relative 'k_director/builders/actions_builder'
10
+ require_relative 'k_director/directors/base_director'
11
+ require_relative 'k_director/directors/child_director'
4
12
 
5
13
  module KDirector
6
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.0.13",
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.0.13",
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,9 +1,9 @@
1
1
  {
2
2
  "name": "k_director",
3
- "version": "0.0.13",
3
+ "version": "0.2.0",
4
4
  "description": "Command line and CI/CD tools for k_director",
5
5
  "scripts": {
6
- "release": "semantic-release --no-ci"
6
+ "release": "semantic-release"
7
7
  },
8
8
  "devDependencies": {
9
9
  "semantic-release": "^19.0.2",
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.0.13
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-25 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,34 @@ 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
41
+ - !ruby/object:Gem::Dependency
42
+ name: k_util
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.0.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.0.0
27
55
  description: " KDirector provides domain specific language implementations for
28
56
  code generation\n"
29
57
  email:
@@ -47,22 +75,24 @@ files:
47
75
  - ".github/workflows/main.yml"
48
76
  - ".github/workflows/semver.yml"
49
77
  - ".gitignore"
50
- - ".releaserc-old"
51
78
  - ".releaserc.json"
52
79
  - ".rspec"
53
80
  - ".rubocop.yml"
54
- - ".ver"
55
81
  - Gemfile
56
82
  - Guardfile
57
83
  - README.md
58
84
  - Rakefile
59
85
  - bin/console
60
86
  - bin/setup
61
- - docs/CHANGE.md
87
+ - docs/CHANGELOG.md
62
88
  - docs/CODE_OF_CONDUCT.md
63
89
  - docs/LICENSE.txt
64
90
  - k_director.gemspec
65
91
  - lib/k_director.rb
92
+ - lib/k_director/builders/actions_builder.rb
93
+ - lib/k_director/builders/dom_builder.rb
94
+ - lib/k_director/directors/base_director.rb
95
+ - lib/k_director/directors/child_director.rb
66
96
  - lib/k_director/version.rb
67
97
  - package-lock.json
68
98
  - package.json
@@ -72,7 +102,7 @@ licenses:
72
102
  - MIT
73
103
  metadata:
74
104
  rubygems_mfa_required: 'true'
75
- post_install_message:
105
+ post_install_message:
76
106
  rdoc_options: []
77
107
  require_paths:
78
108
  - lib
@@ -87,8 +117,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
117
  - !ruby/object:Gem::Version
88
118
  version: '0'
89
119
  requirements: []
90
- rubygems_version: 3.2.33
91
- signing_key:
120
+ rubygems_version: 3.1.2
121
+ signing_key:
92
122
  specification_version: 4
93
123
  summary: KDirector provides domain specific language implementations for code generation
94
124
  test_files: []
data/.releaserc-old DELETED
@@ -1,46 +0,0 @@
1
- {
2
- "branches": [
3
- "main"
4
- ],
5
- "verifyRelease": [{
6
- "path": "@semantic-release/exec",
7
- "cmd": "git config --global user.name 'David Cruwys';echo '${nextRelease.version}' > .ver;git add .;git commit -am '${nextRelease.version} [skip ci]';git push"
8
- }],
9
- "plugins": [
10
- "@semantic-release/commit-analyzer",
11
- "@semantic-release/release-notes-generator",
12
- [
13
- "@semantic-release/npm",
14
- {
15
- "npmPublish": false
16
- }
17
- ],
18
- [
19
- "@klueless-js/semantic-release-rubygem",
20
- {
21
- "gemPublish": false
22
- }
23
- ],
24
- "semantic-release-rubygem",
25
- [
26
- "@semantic-release/changelog",
27
- {
28
- "changelogFile": "docs/CHANGELOG.md",
29
- "changelogFileTitle": "k_director Changelog"
30
- }
31
- ],
32
- [
33
- "@semantic-release/git",
34
- {
35
- "assets": [
36
- "lib/k_director/version.rb",
37
- "docs/CHANGELOG.md"
38
- ],
39
- "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
40
- }
41
- ],
42
- "@semantic-release/github"
43
- ],
44
- "repositoryUrl": "git@github.com:klueless-io/k_director.git"
45
- }
46
-
data/.ver DELETED
@@ -1 +0,0 @@
1
- 0.0.1
data/docs/CHANGE.md DELETED
@@ -1,28 +0,0 @@
1
- ## [0.0.12](https://github.com/klueless-io/k_director/compare/v0.0.11...v0.0.12) (2022-01-25)
2
-
3
-
4
- ### Bug Fixes
5
-
6
- * test publish [#11](https://github.com/klueless-io/k_director/issues/11) ([04f84a8](https://github.com/klueless-io/k_director/commit/04f84a8bf0c955bb3073d13a4ccb7a95c2c757a7))
7
-
8
- ## [0.0.11](https://github.com/klueless-io/k_director/compare/v0.0.10...v0.0.11) (2022-01-25)
9
-
10
-
11
- ### Bug Fixes
12
-
13
- * test publish [#10](https://github.com/klueless-io/k_director/issues/10) ([70e1b34](https://github.com/klueless-io/k_director/commit/70e1b3462fac657fd924d0ebaa757c316a7d77bb))
14
- * test publish [#9](https://github.com/klueless-io/k_director/issues/9) ([3fc7fd2](https://github.com/klueless-io/k_director/commit/3fc7fd2784679b8666ef4ddb9365c423ef3de55f))
15
-
16
- ## [0.0.6](https://github.com/klueless-io/k_director/compare/v0.0.5...v0.0.6) (2022-01-25)
17
-
18
-
19
- ### Bug Fixes
20
-
21
- * test publish [#3](https://github.com/klueless-io/k_director/issues/3) ([90f7067](https://github.com/klueless-io/k_director/commit/90f7067547fb26d09001ea3411d211def680bd46))
22
-
23
- ## [0.0.4](https://github.com/klueless-io/k_director/compare/v0.0.3...v0.0.4) (2022-01-25)
24
-
25
-
26
- ### Bug Fixes
27
-
28
- * test publish [#1](https://github.com/klueless-io/k_director/issues/1) ([1d001af](https://github.com/klueless-io/k_director/commit/1d001afb6087a50003ff3c18d53b10d35df31a1c))