k_builder-watch 0.0.12 → 0.0.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.builders/basic.rb +6 -11
- 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/{watcher.rb → action_watcher.rb} +30 -17
- data/lib/k_builder/watch/base_action.rb +18 -0
- data/lib/k_builder/watch/cli.rb +58 -93
- data/lib/k_builder/watch/cli_options.rb +83 -0
- data/lib/k_builder/watch/execute.rb +66 -0
- data/lib/k_builder/watch/new_builder.rb +20 -0
- data/lib/k_builder/watch/version.rb +1 -1
- metadata +11 -46
- data/.builders/x.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 142956cc2a4580c84ce3d27428a6889194bccfa1b852a1078a0f0911856c344f
|
4
|
+
data.tar.gz: 2b9dad2922b0a808f8abbb5e989bf5fe28cd362ab1be325facaf2b3ebcc20627
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0530597821350e11912cac7d22aaed0d789d50ae1d9fb07ff75381bcd392b0ab55485930c73921dc1f7d841465e0b94be5aa6d39baa0491e6a600e67a1a5153
|
7
|
+
data.tar.gz: 926200d6a53c96bc3adf3dd6c526fa297715ba5e820babaef152ae806b142d45add157bf7dbfb5866b981ba5722eab5a53faca6510209e99c74100562ad861dc
|
data/.builders/basic.rb
CHANGED
@@ -1,14 +1,7 @@
|
|
1
|
-
|
1
|
+
require '_initialize.rb'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
puts 'fucit'
|
6
|
-
# load 'x.rb'
|
7
|
-
# puts JSON.pretty_generate(KBuilder.configuration.to_h)
|
8
|
-
|
9
|
-
# builder = KBuilder::BaseBuilder.init
|
10
|
-
|
11
|
-
# builder
|
3
|
+
builder = KBuilder::BaseBuilder
|
4
|
+
.init
|
12
5
|
# .add_file('main.rb', template_file: 'class.rb', name: 'main')
|
13
6
|
# .add_file('person.rb',
|
14
7
|
# template_file: 'model.rb',
|
@@ -31,4 +24,6 @@ puts 'fucit'
|
|
31
24
|
# puts file
|
32
25
|
# puts File.exist?(file)
|
33
26
|
# system("code #{file}")
|
34
|
-
# puts 'basic'
|
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(35)} : #{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
|
@@ -6,24 +6,23 @@ require 'io/console'
|
|
6
6
|
# require 'bundler/setup'
|
7
7
|
# require 'webpack5/builder'
|
8
8
|
# require 'handlebars/helpers/configuration'
|
9
|
-
|
10
9
|
module KBuilder
|
11
10
|
# Watch supports any watch and execute processes for builders
|
12
11
|
module Watch
|
13
12
|
# Watcher does the actual file watching and run the processor
|
14
|
-
class
|
13
|
+
class ActionWatcher < KBuilder::Watch::BaseAction
|
15
14
|
attr_accessor :directory
|
16
15
|
|
17
|
-
|
18
|
-
@directory = directory
|
19
|
-
end
|
16
|
+
# TODO: Need to support folder exclusions so that I can place .templates, in with .builders
|
20
17
|
|
21
|
-
|
22
|
-
|
18
|
+
def run
|
19
|
+
@directory = options.watch_path
|
20
|
+
start
|
21
|
+
end
|
23
22
|
|
24
23
|
def start
|
25
|
-
clear_screen
|
26
|
-
puts
|
24
|
+
# clear_screen
|
25
|
+
puts "KBuilder-Watch: v#{KBuilder::Watch::VERSION} is watching for file changes"
|
27
26
|
puts "Directory: #{directory}"
|
28
27
|
# puts "Watch File: #{watch_file}"
|
29
28
|
|
@@ -38,23 +37,37 @@ module KBuilder
|
|
38
37
|
|
39
38
|
# rubocop:disable Lint/RescueException
|
40
39
|
def process_updated_file(filename)
|
41
|
-
|
42
|
-
|
40
|
+
clear_screen
|
41
|
+
update_load_path(filename)
|
43
42
|
|
44
43
|
puts "File updated: #{filename}"
|
45
44
|
|
46
45
|
content = File.read(filename)
|
47
|
-
Object.class_eval(content,
|
46
|
+
Object.class_eval(content, filename)
|
48
47
|
rescue Exception => e
|
49
48
|
puts e.message
|
50
|
-
puts e.backtrace
|
49
|
+
puts e.backtrace
|
50
|
+
.select { |ex| ex.start_with?(filename) }
|
51
|
+
.map { |m| m.delete_suffix(":in `process_updated_file'") }
|
52
|
+
.join("\n")
|
53
|
+
# puts '-' * 70
|
54
|
+
# puts e.backtrace.join("\n")
|
51
55
|
end
|
52
56
|
# rubocop:enable Lint/RescueException
|
53
|
-
end
|
54
57
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
+
private
|
59
|
+
|
60
|
+
def update_load_path(filename)
|
61
|
+
dirname = File.dirname(filename)
|
62
|
+
|
63
|
+
# This needs to be in detailed logging
|
64
|
+
$LOAD_PATH.unshift(dirname) unless $LOAD_PATH.find { |path| path.start_with?(dirname) }
|
65
|
+
end
|
66
|
+
|
67
|
+
def clear_screen
|
68
|
+
puts "\n" * 70
|
69
|
+
$stdout.clear_screen
|
70
|
+
end
|
58
71
|
end
|
59
72
|
end
|
60
73
|
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
@@ -1,136 +1,101 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
2
|
require 'pry'
|
4
3
|
require 'k_builder'
|
5
4
|
require 'json'
|
6
5
|
require 'getoptlong'
|
6
|
+
require 'forwardable'
|
7
7
|
|
8
8
|
module KBuilder
|
9
9
|
module Watch
|
10
10
|
# Command line interface for starting the watcher
|
11
11
|
class Cli
|
12
|
-
|
13
|
-
|
14
|
-
attr_accessor :
|
15
|
-
attr_accessor :base_path
|
16
|
-
attr_accessor :path
|
17
|
-
attr_accessor :watch_path
|
18
|
-
attr_accessor :help
|
12
|
+
extend Forwardable
|
13
|
+
|
14
|
+
attr_accessor :opts
|
19
15
|
|
16
|
+
def_delegators :opts, :base_path, :debug?, :help?, :new?
|
17
|
+
|
20
18
|
def initialize
|
21
|
-
|
22
|
-
# @name = nil
|
23
|
-
@debug = false
|
24
|
-
@watch_path = nil
|
25
|
-
@base_path = Dir.pwd
|
26
|
-
@path = nil
|
19
|
+
@opts = KBuilder::Watch::CliOptions.new
|
27
20
|
|
21
|
+
process_arguments
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.parse_options
|
25
|
+
new.opts
|
26
|
+
end
|
27
|
+
|
28
|
+
def process_arguments
|
28
29
|
parse_arguments
|
29
|
-
|
30
|
+
|
31
|
+
set_watch_path_arg
|
32
|
+
set_watch_path
|
30
33
|
end
|
31
34
|
|
32
35
|
def options
|
33
|
-
# ['--repeat' , '-r', GetoptLong::REQUIRED_ARGUMENT],
|
34
|
-
# ['--name' , '-n', GetoptLong::OPTIONAL_ARGUMENT]
|
35
36
|
GetoptLong.new(
|
36
37
|
['--help' , '-h', GetoptLong::NO_ARGUMENT],
|
37
|
-
['--debug' , GetoptLong::NO_ARGUMENT]
|
38
|
+
['--debug' , GetoptLong::NO_ARGUMENT],
|
39
|
+
['--new' , '-n', GetoptLong::OPTIONAL_ARGUMENT]
|
38
40
|
)
|
39
41
|
end
|
40
42
|
|
41
|
-
def post_process_arguments
|
42
|
-
set_watch_path
|
43
|
-
end
|
44
|
-
|
45
43
|
def parse_arguments
|
46
|
-
# bin/run -l -r 2 --name -- spec/samples
|
47
44
|
options.each do |opt, arg|
|
48
|
-
|
45
|
+
# Arguments like -nKafeOwner and -n KafeOwner should both become 'KafeOwner'
|
46
|
+
parse_option(opt, arg.strip)
|
49
47
|
end
|
50
|
-
|
51
|
-
parse_final_argument
|
52
48
|
end
|
53
49
|
|
54
|
-
def
|
55
|
-
|
56
|
-
puts 'Missing dir argument (try --help)'
|
57
|
-
exit 0
|
58
|
-
end
|
59
|
-
|
60
|
-
@path = ARGV.shift
|
50
|
+
def to_h
|
51
|
+
@opts.to_h
|
61
52
|
end
|
62
53
|
|
63
|
-
|
54
|
+
private
|
55
|
+
|
56
|
+
# rubocop:disable Metrics/AbcSize
|
57
|
+
def parse_option(opt, arg)
|
64
58
|
case opt
|
65
59
|
when '--help'
|
66
|
-
@help = true
|
60
|
+
@opts.help = true
|
67
61
|
when '--debug'
|
68
|
-
@debug = true
|
69
|
-
|
70
|
-
|
71
|
-
# when '--name' # sample
|
72
|
-
# @name = (arg == '' ? 'John' : arg)
|
62
|
+
@opts.debug = true
|
63
|
+
when '--new'
|
64
|
+
parse_new_option(arg)
|
73
65
|
end
|
74
66
|
end
|
75
67
|
|
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
|
68
|
+
def parse_new_option(arg)
|
69
|
+
@opts.new_arg = arg.to_s
|
70
|
+
if @opts.new_arg == ''
|
71
|
+
@opts.new_app_path = @opts.base_path
|
72
|
+
@opts.new_watch_path = File.join(@opts.base_path, '.builders')
|
73
|
+
else
|
74
|
+
@opts.new_app_path = File.join(@opts.base_path, @opts.new_arg)
|
75
|
+
@opts.new_watch_path = File.join(@opts.base_path, @opts.new_arg, '.builders')
|
76
|
+
end
|
109
77
|
end
|
78
|
+
# rubocop:enable Metrics/AbcSize
|
110
79
|
|
111
|
-
def
|
112
|
-
|
113
|
-
|
80
|
+
def set_watch_path
|
81
|
+
if new?
|
82
|
+
@opts.watch_path = @opts.new_watch_path
|
83
|
+
return
|
84
|
+
end
|
114
85
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
base_path: base_path,
|
121
|
-
watch_path: watch_path,
|
122
|
-
path: path
|
123
|
-
}
|
86
|
+
@opts.watch_path = if KUtil.file.home_or_absolute?(@opts.watch_path_arg)
|
87
|
+
File.expand_path(@opts.watch_path_arg)
|
88
|
+
else
|
89
|
+
File.absolute_path(@opts.watch_path_arg, @opts.base_path)
|
90
|
+
end
|
124
91
|
end
|
125
92
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
File.absolute_path(path, base_path)
|
133
|
-
end
|
93
|
+
def set_watch_path_arg
|
94
|
+
@opts.watch_path_arg = if ARGV.length == 1
|
95
|
+
ARGV.shift
|
96
|
+
else
|
97
|
+
'.'
|
98
|
+
end
|
134
99
|
end
|
135
100
|
end
|
136
101
|
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,66 @@
|
|
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
|
+
if options.new?
|
54
|
+
run_action(:new_builder)
|
55
|
+
|
56
|
+
# Originally I allowed new to proceed straight into watcher, but it is problematic to mix
|
57
|
+
# builder creation in with builder watching, they are two different tasks that should be
|
58
|
+
# run separately
|
59
|
+
exit
|
60
|
+
end
|
61
|
+
|
62
|
+
run_action(:watcher)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
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.20
|
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-05-21 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:
|
@@ -77,7 +35,6 @@ extra_rdoc_files: []
|
|
77
35
|
files:
|
78
36
|
- ".builders/_initialize.rb"
|
79
37
|
- ".builders/basic.rb"
|
80
|
-
- ".builders/x.rb"
|
81
38
|
- ".github/workflows/main.yml"
|
82
39
|
- ".gitignore"
|
83
40
|
- ".rspec"
|
@@ -90,6 +47,7 @@ files:
|
|
90
47
|
- README.md
|
91
48
|
- Rakefile
|
92
49
|
- STORIES.md
|
50
|
+
- ToDo.md
|
93
51
|
- USAGE.md
|
94
52
|
- bin/console
|
95
53
|
- bin/k
|
@@ -102,9 +60,16 @@ files:
|
|
102
60
|
- hooks/update-version
|
103
61
|
- k_builder-watch.gemspec
|
104
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
|
105
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
|
106
72
|
- lib/k_builder/watch/version.rb
|
107
|
-
- lib/k_builder/watch/watcher.rb
|
108
73
|
homepage: http://appydave.com/gems/k-builder-watch
|
109
74
|
licenses:
|
110
75
|
- MIT
|
data/.builders/x.rb
DELETED
File without changes
|