divebar 0.1.1
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 +7 -0
- data/bin/divebar-example-stdout +20 -0
- data/bin/divebar-example-xsetroot +20 -0
- data/lib/divebar.rb +6 -0
- data/lib/divebar/config.rb +26 -0
- data/lib/divebar/drivers/output/stdout.rb +13 -0
- data/lib/divebar/drivers/output/xsetroot.rb +15 -0
- data/lib/divebar/drivers/view/erb.rb +39 -0
- data/lib/divebar/instance.rb +32 -0
- data/lib/divebar/plugin.rb +22 -0
- data/lib/divebar/pluginlist.rb +32 -0
- data/lib/divebar/plugins/clock.rb +17 -0
- data/lib/divebar/plugins/loadavg.rb +22 -0
- data/lib/divebar/version.rb +5 -0
- data/lib/divebar/viewlist.rb +28 -0
- data/views/base.erb +1 -0
- metadata +79 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7108613d17c1c87e5fc31b59dbab1471c7e4905576df7544b2aac7fd41777ad7
|
4
|
+
data.tar.gz: 15958d89d8528b82138963ceb8ef053d7cf77ded05f86478074cc8a5d5a54d20
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d8fea8c2a44ba3463931ae18177a2b76ab16e59dbb3ff7af69d245dea784c716cfae5067cf1d80245f45b1346c19eb375545f0d58198cff3cdb87a51c6550d09
|
7
|
+
data.tar.gz: 75a8cd8bebdff60628e53810e25f0e4d393fae7f6536701db94591f6e7f5bc6bcd94d287054d7c87e5d69f83682c23f0db505b479139c54502db83a223aebb1f
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'divebar'
|
5
|
+
require 'divebar/plugins/clock'
|
6
|
+
require 'divebar/plugins/loadavg'
|
7
|
+
require 'divebar/drivers/view/erb'
|
8
|
+
require 'divebar/drivers/output/stdout'
|
9
|
+
|
10
|
+
divebar = Divebar::Instance.new
|
11
|
+
|
12
|
+
divebar.config.update_interval 1
|
13
|
+
divebar.config.plugins.register Divebar::Plugin::Clock
|
14
|
+
divebar.config.plugins.register Divebar::Plugin::Loadavg
|
15
|
+
divebar.config.views.driver Divebar::Driver::View::Erb
|
16
|
+
divebar.config.views.register 'base'
|
17
|
+
divebar.config.views.default 'base'
|
18
|
+
divebar.config.output_driver Divebar::Driver::Output::Stdout
|
19
|
+
|
20
|
+
divebar.start
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'divebar'
|
5
|
+
require 'divebar/plugins/clock'
|
6
|
+
require 'divebar/plugins/loadavg'
|
7
|
+
require 'divebar/drivers/view/erb'
|
8
|
+
require 'divebar/drivers/output/xsetroot'
|
9
|
+
|
10
|
+
divebar = Divebar::Instance.new
|
11
|
+
|
12
|
+
divebar.config.update_interval 1
|
13
|
+
divebar.config.plugins.register Divebar::Plugin::Clock
|
14
|
+
divebar.config.plugins.register Divebar::Plugin::Loadavg
|
15
|
+
divebar.config.views.driver Divebar::Driver::View::Erb
|
16
|
+
divebar.config.views.register 'base'
|
17
|
+
divebar.config.views.default 'base'
|
18
|
+
divebar.config.output_driver Divebar::Driver::Output::XSetRoot
|
19
|
+
|
20
|
+
divebar.start
|
data/lib/divebar.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'divebar/pluginlist'
|
4
|
+
require 'divebar/viewlist'
|
5
|
+
|
6
|
+
module Divebar
|
7
|
+
class Config
|
8
|
+
attr_accessor :plugins, :views
|
9
|
+
|
10
|
+
def initialize(instance_bind)
|
11
|
+
@update_interval = 1
|
12
|
+
@plugins = Divebar::PluginList.new(instance_bind)
|
13
|
+
@views = Divebar::ViewList.new(instance_bind)
|
14
|
+
end
|
15
|
+
|
16
|
+
def update_interval(interval = nil)
|
17
|
+
@update_interval = interval unless interval.nil?
|
18
|
+
@update_interval
|
19
|
+
end
|
20
|
+
|
21
|
+
def output_driver(klass = nil, instance_bind = nil)
|
22
|
+
@output_driver = klass.new unless klass.nil?
|
23
|
+
@output_driver
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'erb'
|
4
|
+
require 'divebar/version'
|
5
|
+
|
6
|
+
module Divebar
|
7
|
+
module Driver
|
8
|
+
class View
|
9
|
+
class Erb
|
10
|
+
def initialize(instance_bind)
|
11
|
+
@instance = instance_bind
|
12
|
+
end
|
13
|
+
|
14
|
+
def register_view(filepath)
|
15
|
+
ERB.new(File.read(find_file(filepath)))
|
16
|
+
end
|
17
|
+
|
18
|
+
def render(view)
|
19
|
+
view.result(@instance).chomp
|
20
|
+
end
|
21
|
+
|
22
|
+
private def find_file(filepath)
|
23
|
+
searchpath = [filepath,
|
24
|
+
"#{Dir.pwd}/views/#{filepath}",
|
25
|
+
"#{Dir.pwd}/views/#{filepath}.erb",
|
26
|
+
"#{File.dirname(__FILE__)}/views/#{filepath}",
|
27
|
+
"#{File.dirname(__FILE__)}/views/#{filepath}.erb"] +
|
28
|
+
Gem.path.map { |p| "#{p}/gems/divebar-#{Divebar::VERSION}/views/#{filepath}" } +
|
29
|
+
Gem.path.map { |p| "#{p}/gems/divebar-#{Divebar::VERSION}/views/#{filepath}.erb" }
|
30
|
+
realpath = searchpath.find { |file| File.exist?(file) }
|
31
|
+
raise IOError, "Could not find template file #{filepath} in searchpath #{searchpath}" if realpath.nil?
|
32
|
+
|
33
|
+
realpath
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ostruct'
|
4
|
+
require 'divebar/config'
|
5
|
+
|
6
|
+
module Divebar
|
7
|
+
# The Main class for Divebar; instantiate this with a config and run .loop
|
8
|
+
class Instance
|
9
|
+
attr_accessor :config, :data
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@data = OpenStruct.new
|
13
|
+
@config = Divebar::Config.new(binding())
|
14
|
+
end
|
15
|
+
|
16
|
+
def start
|
17
|
+
loop do
|
18
|
+
sleep config.update_interval
|
19
|
+
draw(render(config.views.default))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def draw(arg)
|
24
|
+
@config.output_driver.draw(arg)
|
25
|
+
end
|
26
|
+
|
27
|
+
def render(arg)
|
28
|
+
@config.views.driver.render(arg)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Divebar
|
4
|
+
class Plugin
|
5
|
+
attr_accessor :options
|
6
|
+
|
7
|
+
def initialize(instance_bind, options = {})
|
8
|
+
@options = options
|
9
|
+
@options[:update_interval] = 1 unless options[:update_interval]
|
10
|
+
@instance = instance_bind
|
11
|
+
end
|
12
|
+
|
13
|
+
def start
|
14
|
+
Thread.new do
|
15
|
+
loop do
|
16
|
+
@instance.eval("@data")[plugin_name] = tick
|
17
|
+
sleep options[:update_interval]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Divebar
|
4
|
+
class PluginList
|
5
|
+
attr_reader :list, :threads
|
6
|
+
|
7
|
+
def initialize(instance_bind)
|
8
|
+
@list = []
|
9
|
+
@threads = []
|
10
|
+
@instance = instance_bind
|
11
|
+
end
|
12
|
+
|
13
|
+
def register(plugin, **options)
|
14
|
+
case plugin.class
|
15
|
+
when String
|
16
|
+
@list << get_class(plugin).new(@instance, options)
|
17
|
+
@threads << @list.last.start
|
18
|
+
when Class
|
19
|
+
@list << plugin.new(@instance, options)
|
20
|
+
@threads << @list.last.start
|
21
|
+
else
|
22
|
+
raise ArgumentError, 'Expected Class Name or Class.to_s for plugin'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private def get_class(str)
|
27
|
+
str.split('::').inject(Object) do |mod, class_name|
|
28
|
+
mod.const_get(class_name)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'divebar/plugin'
|
5
|
+
|
6
|
+
module Divebar
|
7
|
+
class Plugin
|
8
|
+
class Loadavg < Divebar::Plugin
|
9
|
+
def configure
|
10
|
+
options[:update_interval] = 5
|
11
|
+
end
|
12
|
+
|
13
|
+
def tick
|
14
|
+
File.read('/proc/loadavg').split
|
15
|
+
end
|
16
|
+
|
17
|
+
def plugin_name
|
18
|
+
'loadavg'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Divebar
|
4
|
+
class ViewList
|
5
|
+
attr_reader :list
|
6
|
+
|
7
|
+
def initialize(instance_bind)
|
8
|
+
@list = {}
|
9
|
+
@instance = instance_bind
|
10
|
+
end
|
11
|
+
|
12
|
+
def driver(klass = nil)
|
13
|
+
@driver = klass.new(@instance) unless klass.nil?
|
14
|
+
@driver
|
15
|
+
end
|
16
|
+
|
17
|
+
def default(viewname = nil)
|
18
|
+
@default = viewname unless viewname.nil?
|
19
|
+
list[@default]
|
20
|
+
end
|
21
|
+
|
22
|
+
def register(viewname)
|
23
|
+
raise 'Set the view driver before registering views' unless @driver
|
24
|
+
|
25
|
+
list[viewname] = @driver.register_view(viewname)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/views/base.erb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<%= @data.clock %> :: <%= @data.loadavg.first %>
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: divebar
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Bucky Wolfe
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-01-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: xstorename
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.1.0
|
20
|
+
- - "~>"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.1.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.1.0
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.1.0
|
33
|
+
description: A framework for building statusbars.
|
34
|
+
email: pmigneous@gmail.com
|
35
|
+
executables:
|
36
|
+
- divebar-example-stdout
|
37
|
+
- divebar-example-xsetroot
|
38
|
+
extensions: []
|
39
|
+
extra_rdoc_files: []
|
40
|
+
files:
|
41
|
+
- bin/divebar-example-stdout
|
42
|
+
- bin/divebar-example-xsetroot
|
43
|
+
- lib/divebar.rb
|
44
|
+
- lib/divebar/config.rb
|
45
|
+
- lib/divebar/drivers/output/stdout.rb
|
46
|
+
- lib/divebar/drivers/output/xsetroot.rb
|
47
|
+
- lib/divebar/drivers/view/erb.rb
|
48
|
+
- lib/divebar/instance.rb
|
49
|
+
- lib/divebar/plugin.rb
|
50
|
+
- lib/divebar/pluginlist.rb
|
51
|
+
- lib/divebar/plugins/clock.rb
|
52
|
+
- lib/divebar/plugins/loadavg.rb
|
53
|
+
- lib/divebar/version.rb
|
54
|
+
- lib/divebar/viewlist.rb
|
55
|
+
- views/base.erb
|
56
|
+
homepage: http://github.com/igneous/divebar
|
57
|
+
licenses:
|
58
|
+
- MIT
|
59
|
+
metadata: {}
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
requirements: []
|
75
|
+
rubygems_version: 3.0.1
|
76
|
+
signing_key:
|
77
|
+
specification_version: 4
|
78
|
+
summary: divebar
|
79
|
+
test_files: []
|