k_builder-watch 0.0.11 → 0.0.19

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: 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