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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 877ec75e394602ed2e76d68471f91f8b0bc6ab3e999bb1f1efc1a65c31bd0d11
4
- data.tar.gz: f34786d2d37180d8b2e978df8aa21e524d76ce9cd4661e8891da0b854523b668
3
+ metadata.gz: d3a7de38baf2fb6e2dc1f58929dadecda1ac13514c8f6c54332162d69b92c780
4
+ data.tar.gz: 51e43285707bbfeeb5b6e6ce77adeec64189f6159741748a022beb208f43a90c
5
5
  SHA512:
6
- metadata.gz: 87c57f82500f7f7818dd823153a973a65b2b3604e7d75b76cebcad3d8c565e15ff4dfa6c38e45c77d7b82cdb3b7dcb5b321309c98dc8a7e5f6613c000a76a0ef
7
- data.tar.gz: 96129025060ad6dbe86c266184e52d884bd05aaae2e0db6c816d472d6da96dbf21be765bc191956ed5ad7761e784f626fb38b9ddf1fc51fb5854e327de0f5f56
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
+
@@ -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
- $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(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
@@ -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
- # 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
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
- # @repetitions = 1
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
- post_process_arguments
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
- parse_option(opt, arg)
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 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
57
+ def to_h
58
+ @opts.to_h
61
59
  end
62
60
 
63
- def parse_option(opt, _arg)
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
- # when '--repeat'
70
- # @repetitions = arg.to_i
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 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
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 display_debug
112
- puts JSON.pretty_generate(to_h)
113
- end
87
+ def set_watch_path
88
+ if new?
89
+ @opts.watch_path = @opts.new_watch_path
90
+ return
91
+ end
114
92
 
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
- }
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
- 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
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module KBuilder
4
4
  module Watch
5
- VERSION = '0.0.11'
5
+ VERSION = '0.0.19'
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.11
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-03-24 00:00:00.000000000 Z
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