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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6404958f71123a099200477f721f4445c909e7f24d38e7b173e0403eed1a89c8
4
- data.tar.gz: 871f0744ba82f69db71a6d4bcea21502237c702372d3668f8ad516f03fa42d16
3
+ metadata.gz: 142956cc2a4580c84ce3d27428a6889194bccfa1b852a1078a0f0911856c344f
4
+ data.tar.gz: 2b9dad2922b0a808f8abbb5e989bf5fe28cd362ab1be325facaf2b3ebcc20627
5
5
  SHA512:
6
- metadata.gz: 2067da17c014db133c885e9431ce23306346ff9d70645ee224fae07640c71e75e1887ac2b35809d2286a748aaf281fd43b807a0f9944ddc697505a1de728bf28
7
- data.tar.gz: 4a016a9f28efa3f3fbd158c4d6f81ef9f7db163354e57d8aea158247d6923f8f95a5ce8b3f28bdd49746f2ee285cd93cd6248dfeff9d2be9085b5e64f7fde490
6
+ metadata.gz: b0530597821350e11912cac7d22aaed0d789d50ae1d9fb07ff75381bcd392b0ab55485930c73921dc1f7d841465e0b94be5aa6d39baa0491e6a600e67a1a5153
7
+ data.tar.gz: 926200d6a53c96bc3adf3dd6c526fa297715ba5e820babaef152ae806b142d45add157bf7dbfb5866b981ba5722eab5a53faca6510209e99c74100562ad861dc
data/.builders/basic.rb CHANGED
@@ -1,14 +1,7 @@
1
- # require '.builders/_initialize.rb'
1
+ require '_initialize.rb'
2
2
 
3
- $LOAD_PATH.unshift(File.join(Dir.pwd, '.builders'))
4
- load 'x.rb'
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
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../lib'))
5
+ require 'pry'
6
6
 
7
- require 'k_builder/watch'
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
- # directory = '/Users/davidcruwys/dev/c#/P04DomainMonopolyV1'
12
+ ENV['BUNDLE_GEMFILE'] = gem_path
13
+
14
+ require 'bundler/setup'
15
+ require 'k_builder/watch'
10
16
 
11
- cli = KBuilder::Watch::Cli.new
12
- cli.execute
17
+ options = KBuilder::Watch::Cli.parse_options
13
18
 
14
- unless cli.debug
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
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../lib'))
5
+ require 'pry'
6
6
 
7
- require 'k_builder/watch'
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
- # directory = '/Users/davidcruwys/dev/c#/P04DomainMonopolyV1'
12
+ ENV['BUNDLE_GEMFILE'] = gem_path
13
+
14
+ require 'bundler/setup'
15
+ require 'k_builder/watch'
10
16
 
11
- cli = KBuilder::Watch::Cli.new
12
- cli.execute
17
+ options = KBuilder::Watch::Cli.parse_options
13
18
 
14
- unless cli.debug
15
- watcher = KBuilder::Watch::Watcher.new(cli.watch_path)
16
- watcher.start
17
- end
19
+ KBuilder::Watch::Execute.new(options).run
@@ -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
- spec.add_dependency 'k_builder', '~> 0.0'
43
- spec.add_dependency 'k_builder-package_json', '~> 0.0'
44
- spec.add_dependency 'k_builder-webpack5', '~> 0.0'
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
@@ -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/watcher'
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 Watcher
13
+ class ActionWatcher < KBuilder::Watch::BaseAction
15
14
  attr_accessor :directory
16
15
 
17
- def initialize(directory)
18
- @directory = directory
19
- end
16
+ # TODO: Need to support folder exclusions so that I can place .templates, in with .builders
20
17
 
21
- # May need some sort of pattern filters
22
- # watch_file = File.join(directory, 'DOMAIN_INSTRUCTIONS.MD')
18
+ def run
19
+ @directory = options.watch_path
20
+ start
21
+ end
23
22
 
24
23
  def start
25
- clear_screen
26
- puts 'Watching for file changes'
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
- $LOAD_PATH.unshift(File.join(Dir.pwd, '.builders'))
42
- # Can I set __FILE__ during class_eval
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, __FILE__, __LINE__)
46
+ Object.class_eval(content, filename)
48
47
  rescue Exception => e
49
48
  puts e.message
50
- puts e.backtrace.select { |ex| ex.start_with?(filename) }.join("\n")
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
- def clear_screen
56
- puts "\n" * 70
57
- $stdout.clear_screen
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
@@ -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
- # attr_accessor :repetitions
13
- # attr_accessor :name
14
- attr_accessor :debug
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
- # @repetitions = 1
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
- post_process_arguments
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
- parse_option(opt, arg)
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 parse_final_argument
55
- if ARGV.length != 1
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
- def parse_option(opt, _arg)
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
- # when '--repeat'
70
- # @repetitions = arg.to_i
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 execute
77
- display_help if help
78
- display_debug if debug
79
-
80
- # Dir.chdir(dir)
81
- # for i in (1..repetitions)
82
- # print "Hello"
83
- # if name
84
- # print ", #{name}"
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 display_debug
112
- puts JSON.pretty_generate(to_h)
113
- end
80
+ def set_watch_path
81
+ if new?
82
+ @opts.watch_path = @opts.new_watch_path
83
+ return
84
+ end
114
85
 
115
- def to_h
116
- # repetitions: repetitions,
117
- # name: name,
118
- {
119
- debug: debug,
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
- private
127
-
128
- def set_watch_path
129
- @watch_path = if path.start_with?('~')
130
- File.expand_path(path)
131
- else
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module KBuilder
4
4
  module Watch
5
- VERSION = '0.0.12'
5
+ VERSION = '0.0.20'
6
6
  end
7
7
  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.12
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-03-24 00:00:00.000000000 Z
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