zashoku 1.5.2 → 1.5.3

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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/examples/hello/README.md +17 -0
  3. data/examples/hello/config/daemon.yml +1 -0
  4. data/examples/hello/config/view.yml +1 -0
  5. data/examples/hello/modules/hello/README.md +1 -0
  6. data/examples/hello/modules/hello/config/daemon.yml +1 -0
  7. data/examples/hello/modules/hello/config/view.yml +13 -0
  8. data/examples/hello/modules/hello/lib/hello.rb +21 -0
  9. data/examples/hello/modules/hello/lib/hello/hello_controller.rb +22 -0
  10. data/examples/hello/modules/hello/lib/hello/hello_item.rb +8 -0
  11. data/examples/hello/modules/hello/lib/hello/hello_view.rb +23 -0
  12. data/lib/constants.rb +5 -1
  13. data/lib/core/module.rb +2 -2
  14. data/lib/core/modules/conf/config/view.yml +12 -0
  15. data/lib/core/net/client.rb +18 -7
  16. data/lib/core/net/server.rb +2 -1
  17. data/lib/core/options.rb +6 -4
  18. data/lib/core/statusline/statusline.rb +1 -2
  19. data/lib/core/util/readline.rb +1 -1
  20. data/lib/core/util/util.rb +1 -1
  21. data/lib/core/view.rb +1 -2
  22. data/lib/daemon.rb +2 -1
  23. data/lib/generator.rb +3 -1
  24. data/lib/viewer.rb +9 -6
  25. data/templates/app/README.md +1 -0
  26. data/templates/app/config/daemon.yml +1 -0
  27. data/templates/app/config/view.yml +1 -0
  28. data/templates/app/lib/<name>.rb +3 -0
  29. data/templates/module/README.md +1 -0
  30. data/templates/module/config/daemon.yml +1 -0
  31. data/templates/module/config/view.yml +13 -0
  32. data/templates/module/lib/<name>.rb +21 -0
  33. data/templates/module/lib/<name>/<name>_controller.rb +10 -0
  34. data/templates/module/lib/<name>/<name>_item.rb +8 -0
  35. data/templates/module/lib/<name>/<name>_view.rb +23 -0
  36. metadata +24 -4
  37. data/lib/core/util/folder_listen.rb +0 -53
  38. data/lib/core/util/matcher.rb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 922f72730a69266a0d9887bc40d29e1f8ec6d6db
4
- data.tar.gz: 58f7296f3a64ddb859662cdb55051fe612c80a86
3
+ metadata.gz: f452ac173dc980027b942716bd56472cb40a8770
4
+ data.tar.gz: ba9020e54e6db010d51ea17a7514053514363edf
5
5
  SHA512:
6
- metadata.gz: 77359dc8bae25be4eace1ed61ce022e32a2526bf132918f862ae2d12aa5aa81733b0da5c186f8ed039ee75639221539d8b3c515173220141eb3542ca1d4dc7c7
7
- data.tar.gz: 5f7aad025b5ef676ff851c5eab70a8a9d86e7bc83edce5e2c1971df47c1e5713e8c60b332494ebdc7be276ab8a3830288c9e94473767881016e24773a581c48e
6
+ metadata.gz: 5fbce4a8509ff7a4138348221ef43b82fe37355903f5716ddc4443ba92683154becca9fc98d7bf2ced0fe6384508935035053aa77a654697edafdc3fa8dd7794
7
+ data.tar.gz: 0ed5d01d23a2549742becf9c089b25f7641b13201e3c583814a164ee595efe41a53b520e6d10cf0e2f61fa182d6de0891d26237a260158228adf1e7515f3b288
@@ -0,0 +1,17 @@
1
+ # Example hello world app
2
+
3
+ ## to run
4
+
5
+ first
6
+
7
+ ```
8
+ cd examples/hello
9
+ bin/hello -s
10
+ ```
11
+
12
+ then, in another terminal
13
+
14
+ ```
15
+ cd examples/hello
16
+ bin/hello
17
+ ```
@@ -0,0 +1 @@
1
+ ---
@@ -0,0 +1 @@
1
+ ---
@@ -0,0 +1 @@
1
+ # README for hello
@@ -0,0 +1,13 @@
1
+ ---
2
+ keymaps:
3
+ global:
4
+ #1: change_view hello
5
+ hello:
6
+
7
+ title:
8
+ hello: hello
9
+ format:
10
+ hello:
11
+ title: " %t "
12
+ parent: " %t@ %l "
13
+ child: " %t@ %l "
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zashoku
4
+ module Hello
5
+ extend Zashoku::Module
6
+
7
+ Version = [1, 0, 0].freeze
8
+ Root = File.expand_path('../', __dir__)
9
+
10
+ autoload :HelloController, File.join(Root, 'lib/hello/hello_controller')
11
+ autoload :HelloView, File.join(Root, 'lib/hello/hello_view')
12
+
13
+ def self.view
14
+ HelloView.new
15
+ end
16
+
17
+ def self.controller
18
+ HelloController.new
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'hello_item'
4
+
5
+ module Zashoku
6
+ module Hello
7
+ class HelloController < Zashoku::Controller
8
+ def items
9
+ {
10
+ HelloItem.new(title: 'hello', lang: 'en') => [
11
+ HelloItem.new(title: 'おはようございます', lang: 'jp'),
12
+ HelloItem.new(title: 'こんにちは', lang: 'jp')
13
+ ],
14
+ HelloItem.new(title: 'world', lang: 'en') => [
15
+ HelloItem.new(title: 'earth', lang: 'en'),
16
+ HelloItem.new(title: '世界', lang: 'jp')
17
+ ]
18
+ }
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zashoku
4
+ module Hello
5
+ class HelloItem < Zashoku::Item
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'hello_item'
4
+
5
+ module Zashoku
6
+ module Hello
7
+ class HelloView < Zashoku::View
8
+ def refresh_attributes
9
+ @attributes = {
10
+ 't' => Zashoku.conf.get(%w[title hello]),
11
+ }
12
+ end
13
+
14
+ def refresh_items
15
+ Zashoku.command(mod: 'remote::hello', meth: 'items')
16
+ end
17
+
18
+ def get_format
19
+ Zashoku.conf.get(%w[format hello])
20
+ end
21
+ end
22
+ end
23
+ end
@@ -3,7 +3,7 @@
3
3
  require_relative 'core/util/util'
4
4
 
5
5
  module Zashoku
6
- Version = [1, 5, 2].freeze
6
+ Version = [1, 5, 3].freeze
7
7
 
8
8
  Root = File.expand_path('../', __dir__)
9
9
 
@@ -16,6 +16,10 @@ module Zashoku
16
16
  viewer: [],
17
17
  daemon: [],
18
18
  },
19
+ log_level: {
20
+ viewer: :warn,
21
+ daemon: :info
22
+ },
19
23
  save_config: false,
20
24
  save_history: false,
21
25
  persistent_daemon: false,
@@ -26,10 +26,10 @@ module Zashoku
26
26
  def self.require_all(modules)
27
27
  modules.map do |mod|
28
28
  if require_module(mod)
29
- Zashoku.logger.debug("loaded module #{mod}")
29
+ Zashoku.logger.info("loaded module #{mod}")
30
30
  Zashoku.const_get(mod)
31
31
  else
32
- Zashoku.logger.debug("failed to load module #{mod}")
32
+ Zashoku.logger.error("failed to load module #{mod}")
33
33
  nil
34
34
  end
35
35
  end.compact
@@ -0,0 +1,12 @@
1
+ ---
2
+ keymaps:
3
+ global:
4
+ ',': change_view conf
5
+ conf:
6
+
7
+ title:
8
+ conf: config
9
+ format:
10
+ conf:
11
+ title: " %t "
12
+ parent: " %t@ %v "
@@ -4,8 +4,6 @@ require 'socket'
4
4
  require 'json'
5
5
  require 'thread'
6
6
 
7
- require 'pry'
8
-
9
7
  module Zashoku
10
8
  module Net
11
9
  class Client
@@ -16,6 +14,8 @@ module Zashoku
16
14
  @socket = connect(@host, @port)
17
15
  @alive = true
18
16
 
17
+ @timeout = 2
18
+
19
19
  @callbacks = []
20
20
 
21
21
  @command_queue = Queue.new
@@ -39,6 +39,7 @@ module Zashoku
39
39
  @events_thread&.exit
40
40
  end
41
41
 
42
+
42
43
  def self.command(host, port, msg, args = {})
43
44
  sock = TCPSocket.new(host, port)
44
45
  sock.puts(JSON.generate({'msg' => msg}.merge(args)))
@@ -78,7 +79,7 @@ module Zashoku
78
79
  def lost_connection
79
80
  @alive = false
80
81
  @socket.close
81
- Zashoku.logger.debug('lost connection')
82
+ Zashoku.logger.warn('lost connection')
82
83
  Util.alert('no connection')
83
84
  stop_threads
84
85
  end
@@ -97,7 +98,16 @@ module Zashoku
97
98
  payload = { 'msg' => msg }.merge(args)
98
99
  @command_queue << JSON.generate(payload)
99
100
 
100
- result = @result_queue.pop
101
+ result = nil
102
+ start = Time.now
103
+ thread = Thread.new do
104
+ result = @result_queue.pop
105
+ end
106
+ sleep 0.1 until result || (Time.now - start) > @timeout
107
+ thread.exit
108
+
109
+ result ||= {}
110
+
101
111
  result.keys.length == 1 ? result['response'] : result
102
112
  }
103
113
  end
@@ -119,16 +129,17 @@ module Zashoku
119
129
  end
120
130
 
121
131
  def distribute_results!
122
- response = JSON.parse(@socket.readline)
132
+ raw = @socket.readline
133
+ response = JSON.parse(raw)
123
134
  if response['event']
124
135
  @event_queue << response
125
136
  else
126
137
  @result_queue << response
127
138
  end
128
139
  rescue JSON::ParserError
129
- Zashoku.logger.debug("discarding #{response}, JSON::ParserError")
140
+ Zashoku.logger.error("discarding #{raw}, JSON::ParserError")
130
141
  rescue EOFError
131
- Zashoku.logger.debug('eof error')
142
+ Zashoku.logger.error('eof error')
132
143
  lost_connection
133
144
  rescue IOError
134
145
  Util.alert("error: socket#{@socket}")
@@ -50,6 +50,7 @@ module Zashoku
50
50
  break unless response
51
51
  end
52
52
  end
53
+ Zashoku.logger.info("client #{client.hash} disconnected")
53
54
  @clients.delete(client)
54
55
  @client_queue.delete(client)
55
56
  client.close
@@ -59,7 +60,7 @@ module Zashoku
59
60
  Thread.abort_on_exception = true
60
61
  loop do
61
62
  Thread.start(@server.accept) do |client|
62
- Zashoku.logger.debug("got client (hash: #{client.hash})")
63
+ Zashoku.logger.info("got client (hash: #{client.hash})")
63
64
  @clients << client
64
65
  @client_queue[client] = Queue.new
65
66
  handle(client)
@@ -15,7 +15,7 @@ module Zashoku
15
15
  }
16
16
 
17
17
  parser = OptionParser.new do |opts|
18
- opts.banner = 'Usage: zashoku [options]'
18
+ opts.banner = "Usage: #{Zashoku::CConf[:app][:name]} [options]"
19
19
 
20
20
  opts.on('-s [COMMAND]', '--server [COMMAND]', 'pass commands to the server') do |cmd|
21
21
  options[:server] = true
@@ -26,9 +26,11 @@ module Zashoku
26
26
  options[:daemon] = true
27
27
  end
28
28
 
29
- opts.on('-g TEMPLATE', '--generate TEMPLATE', 'generate a template') do |template|
30
- options[:template] = template
31
- options[:generate] = true
29
+ if Zashoku::CConf[:app][:name] == 'zashoku'
30
+ opts.on('-g TEMPLATE', '--generate TEMPLATE', 'generate a template') do |template|
31
+ options[:template] = template
32
+ options[:generate] = true
33
+ end
32
34
  end
33
35
 
34
36
  opts.on_tail('-h', '--help', 'Show this message') do
@@ -5,7 +5,6 @@ require_relative 'widget'
5
5
  module Zashoku
6
6
  module Statusline
7
7
  def self.new
8
- Zashoku.logger.debug('statusline.new')
9
8
  Zashoku::Statusline::Statusline.new
10
9
  end
11
10
 
@@ -16,7 +15,7 @@ module Zashoku
16
15
  @widgets = Zashoku.modules.keys.zip(Zashoku.modules.map do |_k, m|
17
16
  m.widgets if m.respond_to?(:widgets)
18
17
  end).to_h.compact
19
- Zashoku.logger.debug("loaded widgets for #{@widgets.keys.join(', ')}")
18
+ Zashoku.logger.info("loaded widgets for #{@widgets.keys.join(', ')}")
20
19
  refresh
21
20
  end
22
21
 
@@ -87,7 +87,7 @@ module Zashoku
87
87
  Curses.beep
88
88
  end
89
89
  else
90
- Zashoku.logger.debug("unknown key #{c}")
90
+ Zashoku.logger.warn("unbound key pressed: #{c}")
91
91
  Curses.beep
92
92
  end
93
93
  @history[@hy_index] = string
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'base64'
4
- require_relative 'readline'
5
4
 
6
5
  module Zashoku
7
6
  module Util
@@ -10,6 +9,7 @@ module Zashoku
10
9
  end
11
10
 
12
11
  def self.decode_object(e)
12
+ return e if e.class == Hash
13
13
  Marshal.load(Base64.decode64(e))
14
14
  rescue ArgumentError
15
15
  {}
@@ -27,7 +27,7 @@ module Zashoku
27
27
  end
28
28
 
29
29
  def dirty_all_lines
30
- @dirty_lines = 0.step(Term.rows-2).to_a
30
+ @dirty_lines = 0.step(get_len).to_a
31
31
  end
32
32
 
33
33
  def next_match
@@ -66,7 +66,6 @@ module Zashoku
66
66
 
67
67
  matches
68
68
  end.flatten(1) #.sort.reverse
69
- Zashoku.logger.debug(@matches)
70
69
  next_match
71
70
  end
72
71
 
@@ -36,6 +36,7 @@ module Zashoku
36
36
  @semaphore = Mutex.new
37
37
 
38
38
  Zashoku.logger = Logger.new(STDOUT)
39
+ Zashoku.logger.level = Zashoku::CConf[:app][:log_level][:daemon]
39
40
  # Load conf
40
41
  Zashoku.conf = DaemonConfig.new
41
42
  # Load modules
@@ -53,7 +54,7 @@ module Zashoku
53
54
  lay_traps!
54
55
  @server = Net::Server.new(Zashoku::CConf[:app][:net][:port])
55
56
  @server.handler = method(:respond)
56
- Zashoku.logger.debug('server listening')
57
+ Zashoku.logger.info('server listening')
57
58
  sleep
58
59
  end
59
60
 
@@ -38,7 +38,9 @@ module Zashoku
38
38
  def pairs
39
39
  @pairs || @pairs = {
40
40
  /<name>/ => @name,
41
- /<Name>/ => @name.capitalize
41
+ /<Name>/ => @name.capitalize,
42
+ /<zv_short>/ => Zashoku::Version.first(2).join('.'),
43
+ /<zv_long>/ => Zashoku::Version.join('.')
42
44
  }
43
45
  end
44
46
 
@@ -12,6 +12,7 @@ require_relative 'core/controller'
12
12
  require_relative 'core/config/view_config'
13
13
  require_relative 'core/net/client'
14
14
  require_relative 'core/statusline/statusline'
15
+ require_relative 'core/util/readline'
15
16
  require_relative 'core/util/term'
16
17
  require_relative 'core/util/util'
17
18
  require_relative 'core/formatter'
@@ -34,7 +35,6 @@ module Zashoku
34
35
  message[:mod] = message[:mod].gsub('remote::', '')
35
36
  Zashoku.logger.debug("sending message #{message}")
36
37
  msg = Zashoku::Util.decode_object(client.command('fwd', message))
37
- Zashoku.logger.debug('got it')
38
38
  msg
39
39
  else
40
40
  modules[message[:mod]].send(message[:meth], *message[:args])
@@ -57,6 +57,7 @@ module Zashoku
57
57
  Zashoku.logger = Logger.new(
58
58
  File.join(Zashoku::CConf[:app][:root], "#{Zashoku::CConf[:app][:name]}.log")
59
59
  )
60
+ Zashoku.logger.level = Zashoku::CConf[:app][:log_level][:viewer]
60
61
 
61
62
  Zashoku.conf = ViewConfig.new
62
63
 
@@ -75,9 +76,7 @@ module Zashoku
75
76
  end).to_h
76
77
  @view = @views.keys.first
77
78
 
78
- Zashoku.logger.debug('initializing statusline')
79
79
  @statusline = Statusline.new
80
- Zashoku.logger.debug(@statusline)
81
80
  @statusline.add_observer(self, :draw_statusline)
82
81
 
83
82
  @cmdline = Util::Readline.new(
@@ -148,8 +147,12 @@ module Zashoku
148
147
  def cleanup
149
148
  Zashoku.client.disconnect
150
149
  @key_thread&.exit
151
- Zashoku.command_server('stop') if Zashoku::CConf[:app][:persistent_daemon]
152
150
  Curses.close_screen
151
+
152
+ unless Zashoku::CConf[:app][:persistent_daemon]
153
+ Zashoku.command_server('stop')
154
+ end
155
+
153
156
  if Zashoku::Conf.save?
154
157
  Util.put_yaml(CMD_HISTORY, @cmdline.history)
155
158
  Util.put_yaml(SRCH_HISTORY, @searchline.history)
@@ -185,7 +188,7 @@ module Zashoku
185
188
  raise "no such command" if cmd.split.length == 1
186
189
  command(*cmd.split) unless cmd.empty?
187
190
  rescue StandardError => e
188
- Zashoku.logger.debug("#{cmd.split} raised an error '#{e}'")
191
+ Zashoku.logger.error("#{cmd.split} raised an error '#{e}'")
189
192
  Util.alert("Error: #{e}")
190
193
  end
191
194
 
@@ -250,7 +253,7 @@ module Zashoku
250
253
  begin
251
254
  command(mod, meth, *args)
252
255
  rescue Exception => e
253
- Zashoku.logger.debug("#{[mod, meth, args].join(', ')} raised #{e}")
256
+ Zashoku.logger.error("#{[mod, meth, args].join(', ')} raised #{e}")
254
257
  end
255
258
  end
256
259
  end
@@ -0,0 +1 @@
1
+ # readme for <name>
@@ -0,0 +1 @@
1
+ ---
@@ -0,0 +1 @@
1
+ ---
@@ -0,0 +1,3 @@
1
+ module <Name>
2
+ Version = [0, 0, 0].freeze
3
+ end
@@ -0,0 +1 @@
1
+ # README for <name>
@@ -0,0 +1,13 @@
1
+ ---
2
+ keymaps:
3
+ global:
4
+ #1: change_view <name>
5
+ <name>:
6
+
7
+ title:
8
+ <name>: <name>
9
+ format:
10
+ <name>:
11
+ title: " %t "
12
+ parent: " %t"
13
+ child: " %t "
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zashoku
4
+ module <Name>
5
+ extend Zashoku::Module
6
+
7
+ Version = [1, 0, 0].freeze
8
+ Root = File.expand_path('../', __dir__)
9
+
10
+ autoload :<Name>Controller, File.join(Root, 'lib/<name>/<name>_controller')
11
+ autoload :<Name>View, File.join(Root, 'lib/<name>/<name>_view')
12
+
13
+ def self.view
14
+ <Name>View.new
15
+ end
16
+
17
+ def self.controller
18
+ <Name>Controller.new
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '<name>_item'
4
+
5
+ module Zashoku
6
+ module <Name>
7
+ class <Name>Controller < Zashoku::Controller
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zashoku
4
+ module <Name>
5
+ class <Name>Item < Zashoku::Item
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '<name>_item'
4
+
5
+ module Zashoku
6
+ module <Name>
7
+ class <Name>View < Zashoku::View
8
+ def refresh_attributes
9
+ @attributes = {
10
+ 't' => Zashoku.conf.get(%w[title <name>]),
11
+ }
12
+ end
13
+
14
+ def refresh_items
15
+ Zashoku.command(mod: 'remote::<name>', meth: 'items')
16
+ end
17
+
18
+ def get_format
19
+ Zashoku.conf.get(%w[format <name>])
20
+ end
21
+ end
22
+ end
23
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zashoku
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - annacrombie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-27 00:00:00.000000000 Z
11
+ date: 2017-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curses
@@ -100,6 +100,16 @@ files:
100
100
  - "./README.md"
101
101
  - "./config/daemon.yml"
102
102
  - "./config/view.yml"
103
+ - "./examples/hello/README.md"
104
+ - "./examples/hello/config/daemon.yml"
105
+ - "./examples/hello/config/view.yml"
106
+ - "./examples/hello/modules/hello/README.md"
107
+ - "./examples/hello/modules/hello/config/daemon.yml"
108
+ - "./examples/hello/modules/hello/config/view.yml"
109
+ - "./examples/hello/modules/hello/lib/hello.rb"
110
+ - "./examples/hello/modules/hello/lib/hello/hello_controller.rb"
111
+ - "./examples/hello/modules/hello/lib/hello/hello_item.rb"
112
+ - "./examples/hello/modules/hello/lib/hello/hello_view.rb"
103
113
  - "./lib/constants.rb"
104
114
  - "./lib/core/config/config.rb"
105
115
  - "./lib/core/config/daemon_config.rb"
@@ -108,6 +118,7 @@ files:
108
118
  - "./lib/core/formatter.rb"
109
119
  - "./lib/core/item.rb"
110
120
  - "./lib/core/module.rb"
121
+ - "./lib/core/modules/conf/config/view.yml"
111
122
  - "./lib/core/modules/conf/lib/conf.rb"
112
123
  - "./lib/core/modules/conf/lib/conf/config_view.rb"
113
124
  - "./lib/core/net/client.rb"
@@ -115,8 +126,6 @@ files:
115
126
  - "./lib/core/options.rb"
116
127
  - "./lib/core/statusline/statusline.rb"
117
128
  - "./lib/core/statusline/widget.rb"
118
- - "./lib/core/util/folder_listen.rb"
119
- - "./lib/core/util/matcher.rb"
120
129
  - "./lib/core/util/readline.rb"
121
130
  - "./lib/core/util/term.rb"
122
131
  - "./lib/core/util/util.rb"
@@ -127,6 +136,17 @@ files:
127
136
  - "./lib/generator/module_generator.rb"
128
137
  - "./lib/viewer.rb"
129
138
  - "./lib/zashoku.rb"
139
+ - "./templates/app/README.md"
140
+ - "./templates/app/config/daemon.yml"
141
+ - "./templates/app/config/view.yml"
142
+ - "./templates/app/lib/<name>.rb"
143
+ - "./templates/module/README.md"
144
+ - "./templates/module/config/daemon.yml"
145
+ - "./templates/module/config/view.yml"
146
+ - "./templates/module/lib/<name>.rb"
147
+ - "./templates/module/lib/<name>/<name>_controller.rb"
148
+ - "./templates/module/lib/<name>/<name>_item.rb"
149
+ - "./templates/module/lib/<name>/<name>_view.rb"
130
150
  - bin/zashoku
131
151
  homepage: https://github.com/zashoku/zashoku/
132
152
  licenses:
@@ -1,53 +0,0 @@
1
- # watch for changes in a folder's existance
2
-
3
- module Zashoku
4
- module Util
5
- module FolderListen
6
-
7
- def self.to(dirs, &block)
8
- Listener.new(dirs, &block)
9
- end
10
-
11
- ##
12
- ## @brief Similar to Listen gem but uses polling and is only intended
13
- ## to be used on a small number of files. the Listen gem
14
- ## wouldn't support watching an individual FOLDER to see if
15
- ## the folder went away so this is that!
16
- ##
17
- class Listener
18
- def initialize(dirs, &block)
19
- @dirs = dirs
20
- @block = block
21
- @sleep_duration = 1
22
- @dir_hash = dir_hash
23
- end
24
-
25
- def dir_hash
26
- @dirs.map { |dir| [dir, File.exist?(dir)]}.to_h
27
- end
28
-
29
- def changed?
30
- @dir_hash != dir_hash
31
- end
32
-
33
- def stop
34
- @listen_thread.exit if @listen_thread
35
- end
36
-
37
- def start
38
- Thread.abort_on_exception = true
39
- @listen_thread = Thread.new do
40
- while true
41
- if changed?
42
- @block.call
43
- @dir_hash = dir_hash
44
- end
45
- sleep 1
46
- end
47
- end
48
- end
49
-
50
- end
51
- end
52
- end
53
- end
File without changes