knjrbfw 0.0.30 → 0.0.31
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.
- data/VERSION +1 -1
- data/knjrbfw.gemspec +2 -2
- data/lib/knj/cmd_gen.rb +27 -0
- data/lib/knj/cmd_parser.rb +5 -0
- data/lib/knj/cpufreq.rb +11 -0
- data/lib/knj/csv.rb +4 -0
- data/lib/knj/datarow.rb +201 -89
- data/lib/knj/errors.rb +11 -0
- data/lib/knj/eruby.rb +16 -0
- data/lib/knj/event_handler.rb +34 -7
- data/lib/knj/gettext_fallback.rb +5 -0
- data/lib/knj/gettext_threadded.rb +14 -2
- data/lib/knj/gtk2.rb +26 -4
- data/lib/knj/image.rb +13 -0
- data/lib/knj/knjdb/dbtime.rb +5 -0
- data/lib/knj/knjdb/revision.rb +1 -1
- data/lib/knj/kvm.rb +20 -0
- data/lib/knj/locale_strings.rb +10 -0
- data/lib/knj/locales.rb +13 -1
- data/lib/knj/rand.rb +3 -0
- data/lib/knj/strings.rb +15 -2
- data/lib/knj/threadhandler.rb +2 -2
- data/lib/knj/threadsafe.rb +2 -2
- data/lib/knj/unix_proc.rb +1 -0
- data/lib/knj/wref.rb +58 -3
- metadata +65 -59
data/lib/knj/errors.rb
CHANGED
@@ -1,10 +1,21 @@
|
|
1
1
|
#This module contains various extra errors used by the other Knj-code.
|
2
2
|
module Knj::Errors
|
3
|
+
#An error that is used when the error is just a notice.
|
3
4
|
class Notice < StandardError; end
|
5
|
+
|
6
|
+
#Typically used when an object is not found by the given arguments.
|
4
7
|
class NotFound < StandardError; end
|
8
|
+
|
9
|
+
#If invalid data was supplied to a list-method or something like it.
|
5
10
|
class InvalidData < StandardError; end
|
11
|
+
|
12
|
+
#An error that specifies that the caller should retry the operation.
|
6
13
|
class Retry < StandardError; end
|
14
|
+
|
15
|
+
#The current env does not have access to calling the method.
|
7
16
|
class NoAccess < StandardError; end
|
17
|
+
|
18
|
+
#The thing you are trying to add already exists or have already been done.
|
8
19
|
class Exists < StandardError; end
|
9
20
|
|
10
21
|
#Returns a string describing the given error. Possible arguments can be given if you want the returned string formatted as HTML.
|
data/lib/knj/eruby.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
#Uses Rubinius, Knj::Compiler, RubyVM::InstructionSequence and eval to convert and execute .rhtml-files.
|
1
2
|
class Knj::Eruby
|
2
3
|
attr_reader :connects, :error, :headers, :cookies, :fcgi
|
3
4
|
|
5
|
+
#Sets various arguments and prepares for parsing.
|
4
6
|
def initialize(args = {})
|
5
7
|
@args = args
|
6
8
|
|
@@ -33,6 +35,9 @@ class Knj::Eruby
|
|
33
35
|
self.reset_connects
|
34
36
|
end
|
35
37
|
|
38
|
+
#Imports and evaluates a new .rhtml-file.
|
39
|
+
#===Examples
|
40
|
+
# erb.import("/path/to/some_file.rhtml")
|
36
41
|
def import(filename)
|
37
42
|
@error = false
|
38
43
|
Dir.mkdir(@tmpdir) if !File.exists?(@tmpdir)
|
@@ -86,6 +91,7 @@ class Knj::Eruby
|
|
86
91
|
end
|
87
92
|
end
|
88
93
|
|
94
|
+
#Destroyes this object unsetting all variables and clearing all cache.
|
89
95
|
def destroy
|
90
96
|
@connects.clear if @connects.is_a?(Hash)
|
91
97
|
@headers.clear if @headers.is_a?(Array)
|
@@ -100,6 +106,7 @@ class Knj::Eruby
|
|
100
106
|
@cookies = nil
|
101
107
|
end
|
102
108
|
|
109
|
+
#Returns various headers as one complete string ready to be used in a HTTP-request.
|
103
110
|
def print_headers(args = {})
|
104
111
|
header_str = ""
|
105
112
|
|
@@ -116,6 +123,7 @@ class Knj::Eruby
|
|
116
123
|
return header_str
|
117
124
|
end
|
118
125
|
|
126
|
+
#Returns true if containing a status-header.
|
119
127
|
def has_status_header?
|
120
128
|
@headers.each do |header|
|
121
129
|
return true if header[0] == "Status"
|
@@ -124,23 +132,28 @@ class Knj::Eruby
|
|
124
132
|
return false
|
125
133
|
end
|
126
134
|
|
135
|
+
#Resets all connections.
|
127
136
|
def reset_connects
|
128
137
|
@connects = {}
|
129
138
|
end
|
130
139
|
|
140
|
+
#Resets all headers.
|
131
141
|
def reset_headers
|
132
142
|
@headers = []
|
133
143
|
@cookies = []
|
134
144
|
end
|
135
145
|
|
146
|
+
#Adds a new header to the list.
|
136
147
|
def header(key, value)
|
137
148
|
@headers << [key, value]
|
138
149
|
end
|
139
150
|
|
151
|
+
#Adds a new cookie to the list.
|
140
152
|
def cookie(cookie_data)
|
141
153
|
@cookies << cookie_data
|
142
154
|
end
|
143
155
|
|
156
|
+
#Connects a block to a certain event.
|
144
157
|
def connect(signal, &block)
|
145
158
|
@connects[signal] = [] if !@connects.key?(signal)
|
146
159
|
@connects[signal] << block
|
@@ -238,11 +251,14 @@ class Knj::Eruby
|
|
238
251
|
end
|
239
252
|
end
|
240
253
|
|
254
|
+
#Erubis-handler used to print to $stdout.
|
241
255
|
class Knj::Eruby::Handler < Erubis::Eruby
|
242
256
|
include Erubis::StdoutEnhancer
|
243
257
|
end
|
244
258
|
|
259
|
+
#Default binding-object which makes sure the .rhtml-file is running on an empty object.
|
245
260
|
class Knj::Eruby::Binding
|
261
|
+
#Returns the binding to the empty object.
|
246
262
|
def get_binding
|
247
263
|
return binding
|
248
264
|
end
|
data/lib/knj/event_handler.rb
CHANGED
@@ -1,9 +1,22 @@
|
|
1
|
+
#This class is used for event handeling.
|
2
|
+
#===Examples
|
3
|
+
# events = Knj::Event_handler.new
|
4
|
+
# events.add_event(:name => :test_event)
|
5
|
+
# events.connect(:test_event) do |*args|
|
6
|
+
# print "Test-event called!\n"
|
7
|
+
# end
|
8
|
+
#
|
9
|
+
# events.call(:test_event) #=> prints "Test-event called!\n"
|
1
10
|
class Knj::Event_handler
|
11
|
+
#Sets various used variables.
|
2
12
|
def initialize(args = {})
|
3
13
|
@args = args
|
4
14
|
@events = {}
|
5
15
|
end
|
6
16
|
|
17
|
+
#Adds information about a new event.
|
18
|
+
#===Examples
|
19
|
+
# events.add_event(:name => :test_event)
|
7
20
|
def add_event(event)
|
8
21
|
raise "No name given." if !event[:name]
|
9
22
|
|
@@ -15,12 +28,18 @@ class Knj::Event_handler
|
|
15
28
|
}
|
16
29
|
end
|
17
30
|
|
31
|
+
#Adds multiple events.
|
32
|
+
#===Examples
|
33
|
+
# events.add_events(:test_event, :another_event, :a_third_event)
|
18
34
|
def add_events(*events)
|
19
35
|
events.each do |event|
|
20
36
|
self.add_event(:name => event)
|
21
37
|
end
|
22
38
|
end
|
23
39
|
|
40
|
+
#Connects the given block to a given event.
|
41
|
+
#===Examples
|
42
|
+
# events.connect(:test_event){ |*args| print "Test event!\n"}
|
24
43
|
def connect(name, &block)
|
25
44
|
raise "No such event: '#{name}'." if !@events.key?(name)
|
26
45
|
|
@@ -40,11 +59,18 @@ class Knj::Event_handler
|
|
40
59
|
end
|
41
60
|
|
42
61
|
#Returns true if the given event is connected.
|
62
|
+
#===Examples
|
63
|
+
# print "Test-event is connected!" if events.connected?(:test_event)
|
43
64
|
def connected?(name)
|
44
|
-
|
45
|
-
return
|
65
|
+
raise "No such event." if !@events.key?(name)
|
66
|
+
return !@events[name][:callbacks].empty?
|
46
67
|
end
|
47
68
|
|
69
|
+
#Disconnects an event.
|
70
|
+
#===Examples
|
71
|
+
# connection_id = events.connect(:test_event){print "test event!}
|
72
|
+
# events.disconnect(:test_event, connection_id)
|
73
|
+
# events.call(:test_event) #=> Doesnt print 'test event!'.
|
48
74
|
def disconnect(name, callback_id)
|
49
75
|
raise "No such event: '#{name}'." if !@events.key?(name)
|
50
76
|
raise "No such connection: '#{name}' --> '#{callback_id}'" if !@events[name].key?(callback_id)
|
@@ -52,16 +78,17 @@ class Knj::Event_handler
|
|
52
78
|
@events[name].delete(callback_id)
|
53
79
|
end
|
54
80
|
|
81
|
+
#Returns how many blocks have been connected to an event.
|
82
|
+
#===Examples
|
83
|
+
# print "More than five connections to test-event!" if events.count_events(:test_event) > 5
|
55
84
|
def count_connects(name)
|
56
85
|
raise "No such event." if !@events.key?(name)
|
57
86
|
return @events[name][:callbacks].length
|
58
87
|
end
|
59
88
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
64
|
-
|
89
|
+
#Calls an added event.
|
90
|
+
#===Examples
|
91
|
+
# events.call(:test_event, {:data => 1})
|
65
92
|
def call(name, *args)
|
66
93
|
raise "No such event: '#{name}'." if !@events.key?(name)
|
67
94
|
event = @events[name]
|
data/lib/knj/gettext_fallback.rb
CHANGED
@@ -1,16 +1,21 @@
|
|
1
|
+
#A fallback GetText implementation that basically returns the given strings, but can be useful for using methods that uses GetText without using an actual GetText implementation.
|
1
2
|
module GetText
|
3
|
+
#Returns the given string.
|
2
4
|
def self._(string)
|
3
5
|
return string
|
4
6
|
end
|
5
7
|
|
8
|
+
#Returns the given string.
|
6
9
|
def _(string)
|
7
10
|
return string
|
8
11
|
end
|
9
12
|
|
13
|
+
#Returns the given string.
|
10
14
|
def gettext(string)
|
11
15
|
return string
|
12
16
|
end
|
13
17
|
|
18
|
+
#Doesnt do anything.
|
14
19
|
def bindtextdomain(temp1 = nil, temp2 = nil, temp3 = nil)
|
15
20
|
#nothing here.
|
16
21
|
end
|
@@ -1,6 +1,12 @@
|
|
1
|
+
#This class reads .po-files generated by something like POEdit and can be used to run multi-language applications or websites.
|
1
2
|
class Knj::Gettext_threadded
|
2
|
-
|
3
|
+
#Hash that contains all translations loaded.
|
4
|
+
attr_reader :langs
|
3
5
|
|
6
|
+
#Config-hash that contains encoding and more.
|
7
|
+
attr_reader :args
|
8
|
+
|
9
|
+
#Initializes various data.
|
4
10
|
def initialize(args = {})
|
5
11
|
@args = {
|
6
12
|
:encoding => "utf-8"
|
@@ -10,7 +16,9 @@ class Knj::Gettext_threadded
|
|
10
16
|
load_dir(@args["dir"]) if @args["dir"]
|
11
17
|
end
|
12
18
|
|
13
|
-
#Loads a 'locales'-directory with .mo- and .po-files.
|
19
|
+
#Loads a 'locales'-directory with .mo- and .po-files and fills the '@langs'-hash.
|
20
|
+
#===Examples
|
21
|
+
# gtext.load_dir("#{File.dirname(__FILE__)}/../locales")
|
14
22
|
def load_dir(dir)
|
15
23
|
@dirs << dir
|
16
24
|
check_folders = ["LC_MESSAGES", "LC_ALL"]
|
@@ -44,6 +52,10 @@ class Knj::Gettext_threadded
|
|
44
52
|
end
|
45
53
|
end
|
46
54
|
|
55
|
+
#Translates a given string to a given locale from the read .po-files.
|
56
|
+
#===Examples
|
57
|
+
# str = "Hello" #=> "Hello"
|
58
|
+
# gtext.trans("da_DK", str) #=> "Hej"
|
47
59
|
def trans(locale, str)
|
48
60
|
locale = locale.to_s
|
49
61
|
str = str.to_s
|
data/lib/knj/gtk2.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
#Contains various methods for doing stuff quick using the Gtk2-extension.
|
1
2
|
module Knj::Gtk2
|
2
3
|
#Autoloader.
|
3
4
|
def self.const_missing(name)
|
@@ -5,10 +6,15 @@ module Knj::Gtk2
|
|
5
6
|
return Knj::Gtk2.const_get(name)
|
6
7
|
end
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
#Alias for self.msgbox.
|
10
|
+
def msgbox(*args, &block)
|
11
|
+
return Knj::Gtk2.msgbox(*args, &block)
|
10
12
|
end
|
11
13
|
|
14
|
+
#Shows a dialog on the screen based on various arguments.
|
15
|
+
#===Examples
|
16
|
+
# Knj::Gtk2.msgbox("Message", "Title", "info")
|
17
|
+
# Knj::Gtk2.msgbox("Question", "Title", "yesno") #=> "yes"|"no"|"cancel"|"close"
|
12
18
|
def self.msgbox(paras, type = "warning", title = nil)
|
13
19
|
if paras.is_a?(Array)
|
14
20
|
msg = paras[0]
|
@@ -151,6 +157,9 @@ module Knj::Gtk2
|
|
151
157
|
end
|
152
158
|
end
|
153
159
|
|
160
|
+
#Takes a Gtk::Builder-object and runs labels and titles through GetText.gettext in order to translate them.
|
161
|
+
#===Examples
|
162
|
+
# Knj::Gtk2.translate(builder_obj)
|
154
163
|
def self.translate(builderob)
|
155
164
|
builderob.objects.each do |object|
|
156
165
|
class_str = object.class.to_s
|
@@ -163,6 +172,9 @@ module Knj::Gtk2
|
|
163
172
|
end
|
164
173
|
end
|
165
174
|
|
175
|
+
#Makes a Gtk::Table based on the given arguments.
|
176
|
+
#===Examples
|
177
|
+
# Knj::Gtk2.form([{"type" => "text", "name" => "txtname", "title" => _("Name")}]) #=> {"table" => <Gtk::Table>, "objects" => <Array>}
|
166
178
|
def self.form(paras)
|
167
179
|
table = Gtk::Table.new(paras.length, 2)
|
168
180
|
table.row_spacings = 4
|
@@ -239,11 +251,15 @@ module Knj::Gtk2
|
|
239
251
|
}
|
240
252
|
end
|
241
253
|
|
254
|
+
#Takes a given object and sets its value.
|
255
|
+
#===Examples
|
256
|
+
# Knj::Gtk2.form_setval(text_obj, "Hejsa")
|
257
|
+
# Knj::Gtk2.form_setval(checkbox_obj, 1)
|
242
258
|
def self.form_setval(object, val)
|
243
259
|
if object.is_a?(Gtk::Entry)
|
244
260
|
object.text = val.to_s
|
245
261
|
elsif object.is_a?(Gtk::CheckButton)
|
246
|
-
if
|
262
|
+
if val.to_s == "1"
|
247
263
|
object.active = true
|
248
264
|
else
|
249
265
|
object.active = false
|
@@ -253,11 +269,15 @@ module Knj::Gtk2
|
|
253
269
|
end
|
254
270
|
end
|
255
271
|
|
272
|
+
#Returns the value of an object regardless of that type the object is.
|
273
|
+
#===Examples
|
274
|
+
# Knj::Gtk2.form_getval(text_obj) #=> "Hejsa"
|
275
|
+
# Knj::Gtk2.form_getval(checkbox_obj) #=> "1"
|
256
276
|
def self.form_getval(object)
|
257
277
|
if object.is_a?(Gtk::Entry)
|
258
278
|
return object.text
|
259
279
|
elsif object.is_a?(Gtk::CheckButton)
|
260
|
-
if
|
280
|
+
if object.active?
|
261
281
|
return "1"
|
262
282
|
else
|
263
283
|
return "0"
|
@@ -271,7 +291,9 @@ module Knj::Gtk2
|
|
271
291
|
end
|
272
292
|
end
|
273
293
|
|
294
|
+
#Defines a shortcut-method on Gtk::Builder
|
274
295
|
class Gtk::Builder
|
296
|
+
#Proxies to Knj::Gtk2.translate
|
275
297
|
def translate
|
276
298
|
return Knj::Gtk2.translate(self)
|
277
299
|
end
|
data/lib/knj/image.rb
CHANGED
@@ -1,5 +1,14 @@
|
|
1
|
+
#This class holds methods to manipulate images.
|
1
2
|
class Knj::Image
|
2
3
|
#This function can make rounded transparent corners on an image with a given radius. Further more it can also draw borders around the entire image in a given color and take the border into account.
|
4
|
+
#===Examples
|
5
|
+
# img = Magick::Image.read(path_str)
|
6
|
+
# Knj::Image.rounded_corners(
|
7
|
+
# :img => img,
|
8
|
+
# :radius => 25,
|
9
|
+
# :border => 1,
|
10
|
+
# :border_color => "#000000"
|
11
|
+
# )
|
3
12
|
def self.rounded_corners(args)
|
4
13
|
raise "No or invalid ':img' given: '#{args}'." if !args[:img]
|
5
14
|
raise "No or invalid ':radius' given: '#{args}'." if !args[:radius].respond_to?("to_i") or args[:radius].to_i <= 0
|
@@ -154,11 +163,15 @@ class Knj::Image
|
|
154
163
|
end
|
155
164
|
|
156
165
|
#Returns the width relative to the height.
|
166
|
+
#===Examples
|
167
|
+
# Knj::Image.width_for_height(640, 480, 400) #=> 533
|
157
168
|
def self.width_for_height(orig_width, orig_height, new_height)
|
158
169
|
return (orig_width.to_f / (orig_height.to_f / new_height.to_f)).to_i
|
159
170
|
end
|
160
171
|
|
161
172
|
#Returns the height relative to the width.
|
173
|
+
#===Examples
|
174
|
+
# Knj::Image.height_for_width(640, 480, 533) #=> 399
|
162
175
|
def self.height_for_width(orig_width, orig_height, new_width)
|
163
176
|
return (orig_height.to_f / (orig_width.to_f / new_width.to_f)).to_i
|
164
177
|
end
|
data/lib/knj/knjdb/dbtime.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
+
#This class helps handeling time-columns in databases.
|
1
2
|
class Knj::Db::Dbtime
|
3
|
+
#These variables return information about the object.
|
2
4
|
attr_reader :hours, :mins, :secs, :total_secs
|
3
5
|
|
6
|
+
#Initializes the object from arguments useually given by Knj::Datarow.
|
4
7
|
def initialize(args)
|
5
8
|
args = {:time => args} if args.is_a?(String)
|
6
9
|
|
@@ -20,10 +23,12 @@ class Knj::Db::Dbtime
|
|
20
23
|
@total_secs += @secs
|
21
24
|
end
|
22
25
|
|
26
|
+
#Returns the total amount of hours.
|
23
27
|
def hours_total
|
24
28
|
return (@total_secs.to_f / 3600)
|
25
29
|
end
|
26
30
|
|
31
|
+
#Return the total amount of minutes.
|
27
32
|
def mins_total
|
28
33
|
return (@total_secs.to_f / 60)
|
29
34
|
end
|
data/lib/knj/knjdb/revision.rb
CHANGED
@@ -248,7 +248,7 @@ class Knj::Db::Revision
|
|
248
248
|
table_data["on_create_after"].call("db" => db, "table_name" => table_name, "table_data" => table_data)
|
249
249
|
end
|
250
250
|
|
251
|
-
|
251
|
+
rows_init("db" => db, "table" => table_obj, "rows" => table_data["rows"]) if table_data["rows"]
|
252
252
|
end
|
253
253
|
rescue Knj::Errors::Retry
|
254
254
|
retry
|
data/lib/knj/kvm.rb
CHANGED
@@ -1,4 +1,10 @@
|
|
1
|
+
#This class and subclasses holds various functionality to view status for Kvm-instances.
|
1
2
|
class Knj::Kvm
|
3
|
+
#Lists all running Kvm-instances on this machine.
|
4
|
+
#===Examples
|
5
|
+
# Knj::Kvm.list do |kvm|
|
6
|
+
# print kvm.pid
|
7
|
+
# end
|
2
8
|
def self.list
|
3
9
|
list = []
|
4
10
|
|
@@ -35,24 +41,32 @@ class Knj::Kvm
|
|
35
41
|
end
|
36
42
|
end
|
37
43
|
|
44
|
+
#Describes each Kvm-instance.
|
38
45
|
class Knj::Kvm::Machine
|
46
|
+
#Sets the data called from Knj::Kvm.list.
|
39
47
|
def initialize(args)
|
40
48
|
@args = args
|
41
49
|
end
|
42
50
|
|
51
|
+
#Returns the PID of the Kvm-instance.
|
43
52
|
def pid
|
44
53
|
return @args[:pid]
|
45
54
|
end
|
46
55
|
|
56
|
+
#Returns the name from the Kvm-instance.
|
47
57
|
def name
|
48
58
|
return @args[:name]
|
49
59
|
end
|
50
60
|
|
61
|
+
#Returns the MAC from a network interfaces on the Kvm-instance.
|
51
62
|
def mac
|
52
63
|
raise "No MAC-address has been registered for this machine." if !@args.key?(:mac)
|
53
64
|
return @args[:mac]
|
54
65
|
end
|
55
66
|
|
67
|
+
#Returns what virtual interface the Kvm is using.
|
68
|
+
#===Examples
|
69
|
+
# kvm.iface #=> "vnet12"
|
56
70
|
def iface
|
57
71
|
if !@iface
|
58
72
|
res = Knj::Os.shellcmd("ifconfig | grep \"#{self.mac[3, self.mac.length]}\"")
|
@@ -67,6 +81,9 @@ class Knj::Kvm::Machine
|
|
67
81
|
return @iface
|
68
82
|
end
|
69
83
|
|
84
|
+
#Returns various data about the networking (how much have been sent and recieved).
|
85
|
+
#===Examples
|
86
|
+
# kvm.net_status #=> {:tx => 1024, :rx => 2048}
|
70
87
|
def net_status
|
71
88
|
res = Knj::Os.shellcmd("ifconfig \"#{self.iface}\"")
|
72
89
|
|
@@ -83,6 +100,9 @@ class Knj::Kvm::Machine
|
|
83
100
|
return ret
|
84
101
|
end
|
85
102
|
|
103
|
+
#Returns various data about how much disk IO the Kvm-instance have been using.
|
104
|
+
#===Examples
|
105
|
+
# kvm.io_status #=> {:read_bytes => 1024, :write_bytes => 2048}
|
86
106
|
def io_status
|
87
107
|
io_status = File.read("/proc/#{self.pid}/io")
|
88
108
|
|