k_builder-watch 0.0.11 → 0.0.19
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/.builders/_initialize.rb +16 -0
- data/.builders/basic.rb +29 -0
- data/Gemfile +15 -0
- data/ToDo.md +67 -0
- data/bin/run +11 -9
- data/exe/k_builder-watch +11 -9
- data/k_builder-watch.gemspec +9 -3
- data/lib/k_builder/watch.rb +24 -1
- data/lib/k_builder/watch/action_display_debug.rb +18 -0
- data/lib/k_builder/watch/action_display_help.rb +33 -0
- data/lib/k_builder/watch/action_new_builder.rb +25 -0
- data/lib/k_builder/watch/action_watcher.rb +71 -0
- data/lib/k_builder/watch/base_action.rb +18 -0
- data/lib/k_builder/watch/cli.rb +64 -92
- data/lib/k_builder/watch/cli_options.rb +83 -0
- data/lib/k_builder/watch/execute.rb +58 -0
- data/lib/k_builder/watch/new_builder.rb +20 -0
- data/lib/k_builder/watch/version.rb +1 -1
- metadata +13 -45
- data/lib/k_builder/watch/watcher.rb +0 -50
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d3a7de38baf2fb6e2dc1f58929dadecda1ac13514c8f6c54332162d69b92c780
|
4
|
+
data.tar.gz: 51e43285707bbfeeb5b6e6ce77adeec64189f6159741748a022beb208f43a90c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ae83a327a996d4f3c5441adaff2f5317d59be9be72e86d0035d80b4a88118b73aaa2f10bb71d6952993bbb4dee9fa3d5f69a4693db7806d9cf4bebf0e9c3101
|
7
|
+
data.tar.gz: a99b08bb6a0a21021b8ae3083c7049faa56541d0be4863d0622fb26c4da9fe448f808f382bef3aab0417d40da312c7210c8dfcdf7c94038110553c4f25fea7f7
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Handlebars::Helpers.configure do |config|
|
2
|
+
config_file = File.join(Gem.loaded_specs['handlebars-helpers'].full_gem_path, '.handlebars_helpers.json')
|
3
|
+
config.helper_config_file = config_file
|
4
|
+
end
|
5
|
+
|
6
|
+
KBuilder.reset
|
7
|
+
templates_ruby = '~/dev/kgems/k_dsl/_/.template/ruby-cmdlet'
|
8
|
+
target_root = '~/dev/kgems/k_builder-watch/'
|
9
|
+
|
10
|
+
KBuilder.configure do |config|
|
11
|
+
config.target_folders.add(:app , target_root)
|
12
|
+
|
13
|
+
config.template_folders.add(:global , File.join(templates_ruby , '.global_template'))
|
14
|
+
# config.template_folders.add(:app , File.join(template_root , '.app_template'))
|
15
|
+
end
|
16
|
+
|
data/.builders/basic.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require '_initialize.rb'
|
2
|
+
|
3
|
+
builder = KBuilder::BaseBuilder
|
4
|
+
.init
|
5
|
+
# .add_file('main.rb', template_file: 'class.rb', name: 'main')
|
6
|
+
# .add_file('person.rb',
|
7
|
+
# template_file: 'model.rb',
|
8
|
+
# name: 'person',
|
9
|
+
# fields: %i[first_name last_name])
|
10
|
+
# .add_file('address.rb',
|
11
|
+
# template_file: 'model.rb',
|
12
|
+
# name: 'address',
|
13
|
+
# fields: %i[street1 street2 post_code state])
|
14
|
+
# .add_file('css/index.css',
|
15
|
+
# template: '{{#each colors}} .{{.}} { color: {{.}} } {{/each}}',
|
16
|
+
# colors: %w[red blue green],
|
17
|
+
# pretty: true)
|
18
|
+
|
19
|
+
# # /Users/davidcruwys/dev/xxx-watch
|
20
|
+
# # /Users/davidcruwys/dev/xxx-watch/basic.rb
|
21
|
+
|
22
|
+
|
23
|
+
# file = builder.target_file('main.rb')
|
24
|
+
# puts file
|
25
|
+
# puts File.exist?(file)
|
26
|
+
# system("code #{file}")
|
27
|
+
# puts 'basic'
|
28
|
+
|
29
|
+
puts 'DONE!'
|
data/Gemfile
CHANGED
@@ -23,3 +23,18 @@ group :development, :test do
|
|
23
23
|
gem 'rubocop-rake', require: false
|
24
24
|
gem 'rubocop-rspec', require: false
|
25
25
|
end
|
26
|
+
|
27
|
+
# If local dependency
|
28
|
+
if ENV['KLUE_LOCAL_GEMS']&.to_s&.downcase == 'true'
|
29
|
+
group :development, :test do
|
30
|
+
puts 'Using Local GEMs'
|
31
|
+
gem 'handlebars-helpers' , path: '../handlebars-helpers'
|
32
|
+
gem 'k_builder' , path: '../k_builder'
|
33
|
+
gem 'k_builder-dotnet' , path: '../k_builder-dotnet'
|
34
|
+
gem 'k_builder-package_json' , path: '../k_builder-package_json'
|
35
|
+
gem 'k_builder-webpack5' , path: '../k_builder-webpack5'
|
36
|
+
gem 'k_doc' , path: '../k_doc'
|
37
|
+
gem 'k_log' , path: '../k_log'
|
38
|
+
gem 'k_util' , path: '../k_util'
|
39
|
+
end
|
40
|
+
end
|
data/ToDo.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# ToDo today
|
2
|
+
|
3
|
+
- Watch
|
4
|
+
- CLI - Unit Test
|
5
|
+
- Add create new builder
|
6
|
+
- Touch and code for now
|
7
|
+
- Later on it can create from template
|
8
|
+
|
9
|
+
- domains: KafeOwner.com (KafeManager.com)
|
10
|
+
- New csharp solution
|
11
|
+
- KafeOwner
|
12
|
+
- kw -t csharp -n KafeOwner
|
13
|
+
- Creates a folder called KafeOwner and then a folder called .builders
|
14
|
+
- kw -n csharp
|
15
|
+
- Creates a folder called .builders and touches setup.rb
|
16
|
+
|
17
|
+
- 11:30 Go see Ken (Move Car)
|
18
|
+
- 2pm Go See Angus
|
19
|
+
- Take some receipts
|
20
|
+
- 12pm Go to Council and get a new permit
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
Tonight:
|
25
|
+
|
26
|
+
- GPT3 Experiments across the cafe segmentation's
|
27
|
+
- CLI - Unit Test
|
28
|
+
|
29
|
+
- Call Chris
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
I figured out the issue was environmental and that got me looking up a line of code that was generated automatically in the `bin/console` file in my GEM.
|
40
|
+
|
41
|
+
The line of code was `require 'bundler/setup'` which I had often seen but never understood it's purpose [Bundler Setup](https://bundler.io/guides/bundler_setup.html).
|
42
|
+
|
43
|
+
I added that line of code to my `exe/k_builder-watch` file and now the local GEM dependencies are being loaded via the Gemfile.
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
#!/usr/bin/env ruby
|
47
|
+
|
48
|
+
# frozen_string_literal: true
|
49
|
+
|
50
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../lib'))
|
51
|
+
|
52
|
+
# LINE to ADD
|
53
|
+
require 'bundler/setup' # <-- ADD THIS LINE
|
54
|
+
|
55
|
+
require 'k_builder/watch'
|
56
|
+
|
57
|
+
cli = KBuilder::Watch::Cli.new
|
58
|
+
cli.execute
|
59
|
+
|
60
|
+
watcher = KBuilder::Watch::Watcher.new(cli.watch_path)
|
61
|
+
watcher.start
|
62
|
+
```
|
63
|
+
|
64
|
+
[![Local Dependencies][1]][1]
|
65
|
+
|
66
|
+
|
67
|
+
[1]: https://i.stack.imgur.com/KQeAb.png
|
data/bin/run
CHANGED
@@ -2,16 +2,18 @@
|
|
2
2
|
|
3
3
|
# frozen_string_literal: true
|
4
4
|
|
5
|
-
|
5
|
+
require 'pry'
|
6
6
|
|
7
|
-
|
7
|
+
lib_path = File.expand_path(File.join(File.dirname(__FILE__), '../lib'))
|
8
|
+
gem_path = File.expand_path(File.join(File.dirname(__FILE__), '../Gemfile'))
|
9
|
+
|
10
|
+
$LOAD_PATH.unshift(lib_path)
|
8
11
|
|
9
|
-
|
12
|
+
ENV['BUNDLE_GEMFILE'] = gem_path
|
13
|
+
|
14
|
+
require 'bundler/setup'
|
15
|
+
require 'k_builder/watch'
|
10
16
|
|
11
|
-
|
12
|
-
cli.execute
|
17
|
+
options = KBuilder::Watch::Cli.parse_options
|
13
18
|
|
14
|
-
|
15
|
-
watcher = KBuilder::Watch::Watcher.new(cli.watch_path)
|
16
|
-
watcher.start
|
17
|
-
end
|
19
|
+
KBuilder::Watch::Execute.new(options).run
|
data/exe/k_builder-watch
CHANGED
@@ -2,16 +2,18 @@
|
|
2
2
|
|
3
3
|
# frozen_string_literal: true
|
4
4
|
|
5
|
-
|
5
|
+
require 'pry'
|
6
6
|
|
7
|
-
|
7
|
+
lib_path = File.expand_path(File.join(File.dirname(__FILE__), '../lib'))
|
8
|
+
gem_path = File.expand_path(File.join(File.dirname(__FILE__), '../Gemfile'))
|
9
|
+
|
10
|
+
$LOAD_PATH.unshift(lib_path)
|
8
11
|
|
9
|
-
|
12
|
+
ENV['BUNDLE_GEMFILE'] = gem_path
|
13
|
+
|
14
|
+
require 'bundler/setup'
|
15
|
+
require 'k_builder/watch'
|
10
16
|
|
11
|
-
|
12
|
-
cli.execute
|
17
|
+
options = KBuilder::Watch::Cli.parse_options
|
13
18
|
|
14
|
-
|
15
|
-
watcher = KBuilder::Watch::Watcher.new(cli.watch_path)
|
16
|
-
watcher.start
|
17
|
-
end
|
19
|
+
KBuilder::Watch::Execute.new(options).run
|
data/k_builder-watch.gemspec
CHANGED
@@ -39,7 +39,13 @@ Gem::Specification.new do |spec|
|
|
39
39
|
# spec.extensions = ['ext/k_builder/watch/extconf.rb']
|
40
40
|
|
41
41
|
spec.add_dependency 'filewatcher', '~> 2.0.0.beta3'
|
42
|
-
|
43
|
-
spec.add_dependency '
|
44
|
-
spec.add_dependency 'k_builder
|
42
|
+
|
43
|
+
# spec.add_dependency 'handlebars-helpers', '~> 0.0'
|
44
|
+
# spec.add_dependency 'k_builder', '~> 0.0'
|
45
|
+
# spec.add_dependency 'k_builder-dotnet', '~> 0.0'
|
46
|
+
# spec.add_dependency 'k_builder-package_json', '~> 0.0'
|
47
|
+
# spec.add_dependency 'k_builder-webpack5', '~> 0.0'
|
48
|
+
# spec.add_dependency 'k_doc', '~> 0.0'
|
49
|
+
# spec.add_dependency 'k_log', '~> 0.0'
|
50
|
+
# spec.add_dependency 'k_util', '~> 0.0'
|
45
51
|
end
|
data/lib/k_builder/watch.rb
CHANGED
@@ -1,8 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'handlebars/helpers'
|
4
|
+
|
5
|
+
require 'k_doc'
|
6
|
+
require 'k_util'
|
7
|
+
require 'k_log'
|
8
|
+
|
9
|
+
require 'k_builder/dotnet'
|
10
|
+
require 'k_builder/package_json'
|
11
|
+
require 'k_builder/webpack5'
|
12
|
+
|
3
13
|
require 'k_builder/watch/version'
|
4
14
|
require 'k_builder/watch/cli'
|
5
|
-
require 'k_builder/watch/
|
15
|
+
require 'k_builder/watch/cli_options'
|
16
|
+
require 'k_builder/watch/base_action'
|
17
|
+
require 'k_builder/watch/action_display_help'
|
18
|
+
require 'k_builder/watch/action_display_debug'
|
19
|
+
require 'k_builder/watch/action_new_builder'
|
20
|
+
require 'k_builder/watch/action_watcher'
|
21
|
+
require 'k_builder/watch/execute'
|
6
22
|
|
7
23
|
module KBuilder
|
8
24
|
module Watch
|
@@ -10,3 +26,10 @@ module KBuilder
|
|
10
26
|
class Error < StandardError; end
|
11
27
|
end
|
12
28
|
end
|
29
|
+
|
30
|
+
if ENV['KLUE_DEBUG']&.to_s&.downcase == 'true'
|
31
|
+
namespace = 'KBuilder::Watch::Version'
|
32
|
+
file_path = $LOADED_FEATURES.find { |f| f.include?('k_builder/watch/version') }
|
33
|
+
version = KBuilder::Watch::VERSION.ljust(9)
|
34
|
+
puts "#{namespace.ljust(40)} : #{version.ljust(9)} : #{file_path}"
|
35
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pry'
|
4
|
+
require 'k_builder'
|
5
|
+
require 'json'
|
6
|
+
require 'getoptlong'
|
7
|
+
require 'forwardable'
|
8
|
+
|
9
|
+
module KBuilder
|
10
|
+
module Watch
|
11
|
+
# Action for displaying CLI debug options
|
12
|
+
class ActionDisplayDebug < KBuilder::Watch::BaseAction
|
13
|
+
def run
|
14
|
+
puts JSON.pretty_generate(@options.to_h)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pry'
|
4
|
+
require 'k_builder'
|
5
|
+
require 'json'
|
6
|
+
require 'getoptlong'
|
7
|
+
require 'forwardable'
|
8
|
+
|
9
|
+
module KBuilder
|
10
|
+
module Watch
|
11
|
+
# Action for displaying CLI help
|
12
|
+
class ActionDisplayHelp < KBuilder::Watch::BaseAction
|
13
|
+
def run
|
14
|
+
puts 'HELP: k_watcher [OPTION] ... DIR'
|
15
|
+
puts ''
|
16
|
+
puts ' -h, --help: - show help'
|
17
|
+
puts ' --debug - display debug options'
|
18
|
+
puts ' -n, --new [folder_name] - create a new .builders folder with setup file, optionally create it under the [FolderName]'
|
19
|
+
puts ''
|
20
|
+
puts ' DIR: - The directory to watch, will default to current directory "."'
|
21
|
+
puts ''
|
22
|
+
puts 'examples'
|
23
|
+
puts ''
|
24
|
+
puts 'Get Help - k_watcher -h'
|
25
|
+
puts 'Debug - k_watcher --debug'
|
26
|
+
puts 'New builder project (./.builders) - k_watcher -n'
|
27
|
+
puts 'New builder project (./HelloWorld/.builders) - k_watcher -n HelloWorld'
|
28
|
+
puts 'Watch current folder (.) - k_watcher'
|
29
|
+
puts 'Watch the subfolder (.builders) - k_watcher .builders'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pry'
|
4
|
+
require 'k_builder'
|
5
|
+
require 'json'
|
6
|
+
require 'getoptlong'
|
7
|
+
require 'forwardable'
|
8
|
+
|
9
|
+
module KBuilder
|
10
|
+
module Watch
|
11
|
+
# Action for creating a new app with .builders
|
12
|
+
class ActionNewBuilder < KBuilder::Watch::BaseAction
|
13
|
+
def run
|
14
|
+
setup_file = File.join(options.new_watch_path, 'setup.rb')
|
15
|
+
config_file = File.join(options.new_watch_path, 'config', '_.rb')
|
16
|
+
|
17
|
+
FileUtils.mkdir_p(File.dirname(config_file))
|
18
|
+
File.write(setup_file, "require 'config/_'") unless File.exist?(setup_file)
|
19
|
+
File.write(config_file, "puts '_'\n\n#require 'config/_initialize'") unless File.exist?(config_file)
|
20
|
+
|
21
|
+
system("code #{File.join(options.new_app_path, '.')}")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'filewatcher'
|
4
|
+
# require 'json'
|
5
|
+
require 'io/console'
|
6
|
+
# require 'bundler/setup'
|
7
|
+
# require 'webpack5/builder'
|
8
|
+
# require 'handlebars/helpers/configuration'
|
9
|
+
module KBuilder
|
10
|
+
# Watch supports any watch and execute processes for builders
|
11
|
+
module Watch
|
12
|
+
# Watcher does the actual file watching and run the processor
|
13
|
+
class ActionWatcher < KBuilder::Watch::BaseAction
|
14
|
+
attr_accessor :directory
|
15
|
+
|
16
|
+
def run
|
17
|
+
@directory = options.watch_path
|
18
|
+
start
|
19
|
+
end
|
20
|
+
|
21
|
+
def start
|
22
|
+
# clear_screen
|
23
|
+
puts "KBuilder-Watch: v#{KBuilder::Watch::VERSION} is watching for file changes"
|
24
|
+
puts "Directory: #{directory}"
|
25
|
+
# puts "Watch File: #{watch_file}"
|
26
|
+
|
27
|
+
Filewatcher.new(directory).watch do |changes|
|
28
|
+
changes.each do |filename, event|
|
29
|
+
puts "File #{event}: #{filename}"
|
30
|
+
|
31
|
+
process_updated_file(filename) if event == :updated
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# rubocop:disable Lint/RescueException
|
37
|
+
def process_updated_file(filename)
|
38
|
+
clear_screen
|
39
|
+
update_load_path(filename)
|
40
|
+
|
41
|
+
puts "File updated: #{filename}"
|
42
|
+
|
43
|
+
content = File.read(filename)
|
44
|
+
Object.class_eval(content, filename)
|
45
|
+
rescue Exception => e
|
46
|
+
puts e.message
|
47
|
+
puts e.backtrace
|
48
|
+
.select { |ex| ex.start_with?(filename) }
|
49
|
+
.map { |m| m.delete_suffix(":in `process_updated_file'") }
|
50
|
+
.join("\n")
|
51
|
+
# puts '-' * 70
|
52
|
+
# puts e.backtrace.join("\n")
|
53
|
+
end
|
54
|
+
# rubocop:enable Lint/RescueException
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def update_load_path(filename)
|
59
|
+
dirname = File.dirname(filename)
|
60
|
+
|
61
|
+
# This needs to be in detailed logging
|
62
|
+
$LOAD_PATH.unshift(dirname) unless $LOAD_PATH.find { |path| path.start_with?(dirname) }
|
63
|
+
end
|
64
|
+
|
65
|
+
def clear_screen
|
66
|
+
puts "\n" * 70
|
67
|
+
$stdout.clear_screen
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KBuilder
|
4
|
+
module Watch
|
5
|
+
# Base Action
|
6
|
+
class BaseAction
|
7
|
+
attr_accessor :options
|
8
|
+
|
9
|
+
def initialize(options)
|
10
|
+
@options = options
|
11
|
+
end
|
12
|
+
|
13
|
+
def run
|
14
|
+
raise KBuilder::Watch::Error, 'Descendants of BaseAction must implement the run method'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/k_builder/watch/cli.rb
CHANGED
@@ -4,133 +4,105 @@ require 'pry'
|
|
4
4
|
require 'k_builder'
|
5
5
|
require 'json'
|
6
6
|
require 'getoptlong'
|
7
|
+
require 'forwardable'
|
7
8
|
|
8
9
|
module KBuilder
|
9
10
|
module Watch
|
10
11
|
# Command line interface for starting the watcher
|
11
12
|
class Cli
|
12
|
-
|
13
|
-
|
14
|
-
attr_accessor :
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
extend Forwardable
|
14
|
+
|
15
|
+
attr_accessor :opts
|
16
|
+
|
17
|
+
def_delegators :opts, :base_path, :debug?, :help?, :new?
|
18
|
+
# :base_path,
|
19
|
+
# :watch_path_arg,
|
20
|
+
# :new_watch_path,
|
21
|
+
# :new_arg,
|
22
|
+
# :new_app_path,
|
23
|
+
# :watch_path
|
19
24
|
|
20
25
|
def initialize
|
21
|
-
|
22
|
-
# @name = nil
|
23
|
-
@debug = false
|
24
|
-
@watch_path = nil
|
25
|
-
@base_path = Dir.pwd
|
26
|
-
@path = nil
|
26
|
+
@opts = KBuilder::Watch::CliOptions.new
|
27
27
|
|
28
|
+
process_arguments
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.parse_options
|
32
|
+
new.opts
|
33
|
+
end
|
34
|
+
|
35
|
+
def process_arguments
|
28
36
|
parse_arguments
|
29
|
-
|
37
|
+
|
38
|
+
set_watch_path_arg
|
39
|
+
set_watch_path
|
30
40
|
end
|
31
41
|
|
32
42
|
def options
|
33
|
-
# ['--repeat' , '-r', GetoptLong::REQUIRED_ARGUMENT],
|
34
|
-
# ['--name' , '-n', GetoptLong::OPTIONAL_ARGUMENT]
|
35
43
|
GetoptLong.new(
|
36
44
|
['--help' , '-h', GetoptLong::NO_ARGUMENT],
|
37
|
-
['--debug' , GetoptLong::NO_ARGUMENT]
|
45
|
+
['--debug' , GetoptLong::NO_ARGUMENT],
|
46
|
+
['--new' , '-n', GetoptLong::OPTIONAL_ARGUMENT]
|
38
47
|
)
|
39
48
|
end
|
40
49
|
|
41
|
-
def post_process_arguments
|
42
|
-
set_watch_path
|
43
|
-
end
|
44
|
-
|
45
50
|
def parse_arguments
|
46
|
-
# bin/run -l -r 2 --name -- spec/samples
|
47
51
|
options.each do |opt, arg|
|
48
|
-
|
52
|
+
# Arguments like -nKafeOwner and -n KafeOwner should both become 'KafeOwner'
|
53
|
+
parse_option(opt, arg.strip)
|
49
54
|
end
|
50
|
-
|
51
|
-
parse_final_argument
|
52
55
|
end
|
53
56
|
|
54
|
-
def
|
55
|
-
|
56
|
-
puts 'Missing dir argument (try --help)'
|
57
|
-
exit 0
|
58
|
-
end
|
59
|
-
|
60
|
-
@path = ARGV.shift
|
57
|
+
def to_h
|
58
|
+
@opts.to_h
|
61
59
|
end
|
62
60
|
|
63
|
-
|
61
|
+
private
|
62
|
+
|
63
|
+
# rubocop:disable Metrics/AbcSize
|
64
|
+
def parse_option(opt, arg)
|
64
65
|
case opt
|
65
66
|
when '--help'
|
66
|
-
@help = true
|
67
|
+
@opts.help = true
|
67
68
|
when '--debug'
|
68
|
-
@debug = true
|
69
|
-
|
70
|
-
|
71
|
-
# when '--name' # sample
|
72
|
-
# @name = (arg == '' ? 'John' : arg)
|
69
|
+
@opts.debug = true
|
70
|
+
when '--new'
|
71
|
+
parse_new_option(arg)
|
73
72
|
end
|
74
73
|
end
|
75
74
|
|
76
|
-
def
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
# end
|
86
|
-
# puts
|
87
|
-
# end
|
88
|
-
end
|
89
|
-
|
90
|
-
def display_help
|
91
|
-
puts 'This is the help menu.'
|
92
|
-
puts ' -h This help file'
|
93
|
-
puts ' --debug debug options'
|
94
|
-
|
95
|
-
# hello [OPTION] ... DIR
|
96
|
-
|
97
|
-
# -h, --help:
|
98
|
-
# show help
|
99
|
-
|
100
|
-
# --repeat x, -n x:
|
101
|
-
# repeat x times
|
102
|
-
|
103
|
-
# --name [name]:
|
104
|
-
# greet user by name, if name not supplied default is John
|
105
|
-
|
106
|
-
# DIR: The directory in which to issue the greeting.
|
107
|
-
|
108
|
-
exit
|
75
|
+
def parse_new_option(arg)
|
76
|
+
@opts.new_arg = arg.to_s
|
77
|
+
if @opts.new_arg == ''
|
78
|
+
@opts.new_app_path = @opts.base_path
|
79
|
+
@opts.new_watch_path = File.join(@opts.base_path, '.builders')
|
80
|
+
else
|
81
|
+
@opts.new_app_path = File.join(@opts.base_path, @opts.new_arg)
|
82
|
+
@opts.new_watch_path = File.join(@opts.base_path, @opts.new_arg, '.builders')
|
83
|
+
end
|
109
84
|
end
|
85
|
+
# rubocop:enable Metrics/AbcSize
|
110
86
|
|
111
|
-
def
|
112
|
-
|
113
|
-
|
87
|
+
def set_watch_path
|
88
|
+
if new?
|
89
|
+
@opts.watch_path = @opts.new_watch_path
|
90
|
+
return
|
91
|
+
end
|
114
92
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
base_path: base_path,
|
121
|
-
watch_path: watch_path,
|
122
|
-
path: path
|
123
|
-
}
|
93
|
+
@opts.watch_path = if KUtil.file.home_or_absolute?(@opts.watch_path_arg)
|
94
|
+
File.expand_path(@opts.watch_path_arg)
|
95
|
+
else
|
96
|
+
File.absolute_path(@opts.watch_path_arg, @opts.base_path)
|
97
|
+
end
|
124
98
|
end
|
125
99
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
File.absolute_path(path, base_path)
|
133
|
-
end
|
100
|
+
def set_watch_path_arg
|
101
|
+
@opts.watch_path_arg = if ARGV.length == 1
|
102
|
+
ARGV.shift
|
103
|
+
else
|
104
|
+
'.'
|
105
|
+
end
|
134
106
|
end
|
135
107
|
end
|
136
108
|
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pry'
|
4
|
+
require 'k_builder'
|
5
|
+
require 'json'
|
6
|
+
require 'getoptlong'
|
7
|
+
|
8
|
+
module KBuilder
|
9
|
+
module Watch
|
10
|
+
# List of and options paths that are relevant to the KBuilder::Watch::Cli
|
11
|
+
class CliOptions
|
12
|
+
# This is the path that the watcher was started from.
|
13
|
+
# It is the default base path that other paths are relative to.
|
14
|
+
#
|
15
|
+
# Note: it is not used when paths are supplied in absolute form
|
16
|
+
attr_accessor :base_path
|
17
|
+
# attr_accessor :path
|
18
|
+
|
19
|
+
# What watch_path argument is passed in for watching
|
20
|
+
#
|
21
|
+
# This attribute will be help to build :watch_path
|
22
|
+
#
|
23
|
+
# A relative path will be relative to base_path
|
24
|
+
# An absolute path is used as is
|
25
|
+
# A home path is used as is
|
26
|
+
attr_accessor :watch_path_arg
|
27
|
+
attr_accessor :watch_path
|
28
|
+
|
29
|
+
# What :new_arg is passed in for creating a new application with
|
30
|
+
# with .builder watch capability
|
31
|
+
attr_accessor :new_arg
|
32
|
+
|
33
|
+
# Path to where the application will reside
|
34
|
+
attr_accessor :new_app_path
|
35
|
+
|
36
|
+
# Path to where the .builder files will reside
|
37
|
+
attr_accessor :new_watch_path
|
38
|
+
|
39
|
+
attr_accessor :debug
|
40
|
+
attr_accessor :help
|
41
|
+
|
42
|
+
def initialize
|
43
|
+
@base_path = Dir.pwd
|
44
|
+
|
45
|
+
@watch_path_arg = nil
|
46
|
+
@watch_path = nil
|
47
|
+
|
48
|
+
@new_arg = nil
|
49
|
+
@new_app_path = nil
|
50
|
+
@new_watch_path = nil
|
51
|
+
|
52
|
+
@debug = false
|
53
|
+
@help = false
|
54
|
+
end
|
55
|
+
|
56
|
+
def help?
|
57
|
+
!!@help
|
58
|
+
end
|
59
|
+
|
60
|
+
def debug?
|
61
|
+
!!@debug
|
62
|
+
end
|
63
|
+
|
64
|
+
def new?
|
65
|
+
!!@new_arg
|
66
|
+
end
|
67
|
+
|
68
|
+
def to_h
|
69
|
+
{
|
70
|
+
debug: debug?,
|
71
|
+
help: help?,
|
72
|
+
new: new?,
|
73
|
+
base_path: base_path,
|
74
|
+
watch_path_arg: watch_path_arg,
|
75
|
+
watch_path: watch_path,
|
76
|
+
new_arg: new_arg,
|
77
|
+
new_app_path: new_app_path,
|
78
|
+
new_watch_path: new_watch_path
|
79
|
+
}
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pry'
|
4
|
+
require 'k_builder'
|
5
|
+
require 'json'
|
6
|
+
require 'getoptlong'
|
7
|
+
|
8
|
+
module KBuilder
|
9
|
+
module Watch
|
10
|
+
# Execute based on CLI options
|
11
|
+
class Execute
|
12
|
+
DEFAULT_ACTIONS = {
|
13
|
+
help: KBuilder::Watch::ActionDisplayHelp,
|
14
|
+
debug: KBuilder::Watch::ActionDisplayDebug,
|
15
|
+
new_builder: KBuilder::Watch::ActionNewBuilder,
|
16
|
+
watcher: KBuilder::Watch::ActionWatcher
|
17
|
+
}.freeze
|
18
|
+
|
19
|
+
# watcher = KBuilder::Watch::Watcher.new(cli.watch_path)
|
20
|
+
# watcher.start
|
21
|
+
|
22
|
+
attr_accessor :actions
|
23
|
+
attr_accessor :options
|
24
|
+
|
25
|
+
# Execute one or more actions based on supplied options
|
26
|
+
#
|
27
|
+
# You can use dependency injection to provide your actions
|
28
|
+
def initialize(options, actions: DEFAULT_ACTIONS)
|
29
|
+
@actions = actions
|
30
|
+
@options = options
|
31
|
+
end
|
32
|
+
|
33
|
+
def run_action(action_key)
|
34
|
+
raise KBuilder::Watch::Error, "Unknown action: #{action_key}" unless @actions.key?(action_key)
|
35
|
+
|
36
|
+
action = actions[action_key].new(options)
|
37
|
+
action.run
|
38
|
+
end
|
39
|
+
|
40
|
+
def run
|
41
|
+
if options.help?
|
42
|
+
run_action(:help)
|
43
|
+
|
44
|
+
exit
|
45
|
+
end
|
46
|
+
|
47
|
+
if options.debug?
|
48
|
+
run_action(:debug)
|
49
|
+
|
50
|
+
exit
|
51
|
+
end
|
52
|
+
|
53
|
+
run_action(:new_builder) if options.new?
|
54
|
+
run_action(:watcher)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KBuilder
|
4
|
+
# Watch supports any watch and execute processes for builders
|
5
|
+
module Watch
|
6
|
+
# Create a new folder for application with builders
|
7
|
+
class NewBuilder
|
8
|
+
def execute(_paths)
|
9
|
+
setup_file = File.join(new_watch_path, 'setup.rb')
|
10
|
+
config_file = File.join(new_watch_path, 'config', '_.rb')
|
11
|
+
|
12
|
+
FileUtils.mkdir_p(File.dirname(config_file))
|
13
|
+
File.write(setup_file, "require 'config/_'") unless File.exist?(setup_file)
|
14
|
+
File.write(config_file, "puts '_'\n\n#require 'config/_initialize'") unless File.exist?(config_file)
|
15
|
+
|
16
|
+
system("code #{File.join(new_app_path, '.')}")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: k_builder-watch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.19
|
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-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: filewatcher
|
@@ -24,48 +24,6 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 2.0.0.beta3
|
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'
|
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'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: k_builder-package_json
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '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'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: k_builder-webpack5
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0.0'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0.0'
|
69
27
|
description: " K-Builder-Watch will watch k_builder files and when they change,
|
70
28
|
execute them\n"
|
71
29
|
email:
|
@@ -75,6 +33,8 @@ executables:
|
|
75
33
|
extensions: []
|
76
34
|
extra_rdoc_files: []
|
77
35
|
files:
|
36
|
+
- ".builders/_initialize.rb"
|
37
|
+
- ".builders/basic.rb"
|
78
38
|
- ".github/workflows/main.yml"
|
79
39
|
- ".gitignore"
|
80
40
|
- ".rspec"
|
@@ -87,6 +47,7 @@ files:
|
|
87
47
|
- README.md
|
88
48
|
- Rakefile
|
89
49
|
- STORIES.md
|
50
|
+
- ToDo.md
|
90
51
|
- USAGE.md
|
91
52
|
- bin/console
|
92
53
|
- bin/k
|
@@ -99,9 +60,16 @@ files:
|
|
99
60
|
- hooks/update-version
|
100
61
|
- k_builder-watch.gemspec
|
101
62
|
- lib/k_builder/watch.rb
|
63
|
+
- lib/k_builder/watch/action_display_debug.rb
|
64
|
+
- lib/k_builder/watch/action_display_help.rb
|
65
|
+
- lib/k_builder/watch/action_new_builder.rb
|
66
|
+
- lib/k_builder/watch/action_watcher.rb
|
67
|
+
- lib/k_builder/watch/base_action.rb
|
102
68
|
- lib/k_builder/watch/cli.rb
|
69
|
+
- lib/k_builder/watch/cli_options.rb
|
70
|
+
- lib/k_builder/watch/execute.rb
|
71
|
+
- lib/k_builder/watch/new_builder.rb
|
103
72
|
- lib/k_builder/watch/version.rb
|
104
|
-
- lib/k_builder/watch/watcher.rb
|
105
73
|
homepage: http://appydave.com/gems/k-builder-watch
|
106
74
|
licenses:
|
107
75
|
- MIT
|
@@ -1,50 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'filewatcher'
|
4
|
-
# require 'json'
|
5
|
-
require 'io/console'
|
6
|
-
# require 'bundler/setup'
|
7
|
-
# require 'webpack5/builder'
|
8
|
-
# require 'handlebars/helpers/configuration'
|
9
|
-
|
10
|
-
module KBuilder
|
11
|
-
module Watch
|
12
|
-
# Watch fo
|
13
|
-
class Watcher
|
14
|
-
attr_accessor :directory
|
15
|
-
|
16
|
-
def initialize(directory)
|
17
|
-
@directory = directory
|
18
|
-
end
|
19
|
-
|
20
|
-
# May need some sort of pattern filters
|
21
|
-
# watch_file = File.join(directory, 'DOMAIN_INSTRUCTIONS.MD')
|
22
|
-
|
23
|
-
def start
|
24
|
-
puts 'Watching for file changes'
|
25
|
-
puts "Directory: #{directory}"
|
26
|
-
# puts "Watch File: #{watch_file}"
|
27
|
-
|
28
|
-
Filewatcher.new(directory).watch do |changes|
|
29
|
-
changes.each do |filename, event|
|
30
|
-
puts "File #{event}: #{filename}"
|
31
|
-
|
32
|
-
process_updated_file(filename) if event == :updated
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def process_updated_file(filename)
|
38
|
-
puts "\n" * 70
|
39
|
-
$stdout.clear_screen
|
40
|
-
puts "File updated: #{filename}"
|
41
|
-
|
42
|
-
content = File.read(filename)
|
43
|
-
Object.class_eval content
|
44
|
-
rescue StandardError => e
|
45
|
-
puts e.message
|
46
|
-
puts e.backtrace.join("\n")
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|