k_director 0.0.13 → 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: 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))