knjrbfw 0.0.103 → 0.0.104
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/Gemfile.lock +12 -8
- data/VERSION +1 -1
- data/knjrbfw.gemspec +5 -2
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb +2 -2
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +9 -0
- data/lib/knj/knjdb/libknjdb.rb +30 -2
- data/lib/knj/os.rb +13 -5
- data/spec/amixer_spec.rb +17 -12
- data/spec/db_spec.rb +45 -1
- data/spec/objects_spec.rb +6 -1
- data/spec/process_spec.rb +2 -0
- metadata +19 -3
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
|
5
|
-
|
4
|
+
array_enumerator (0.0.3)
|
5
|
+
datet (0.0.25)
|
6
|
+
diff-lcs (1.2.2)
|
6
7
|
git (1.2.5)
|
7
8
|
http2 (0.0.13)
|
8
9
|
jeweler (1.8.4)
|
@@ -11,32 +12,35 @@ GEM
|
|
11
12
|
rake
|
12
13
|
rdoc
|
13
14
|
json (1.7.7)
|
14
|
-
php4r (0.0.
|
15
|
+
php4r (0.0.4)
|
15
16
|
datet
|
16
17
|
http2
|
17
|
-
|
18
|
-
|
18
|
+
string-strtr
|
19
|
+
rake (10.0.4)
|
20
|
+
rdoc (4.0.1)
|
19
21
|
json (~> 1.4)
|
20
22
|
rmagick (2.13.2)
|
21
23
|
rspec (2.13.0)
|
22
24
|
rspec-core (~> 2.13.0)
|
23
25
|
rspec-expectations (~> 2.13.0)
|
24
26
|
rspec-mocks (~> 2.13.0)
|
25
|
-
rspec-core (2.13.
|
27
|
+
rspec-core (2.13.1)
|
26
28
|
rspec-expectations (2.13.0)
|
27
29
|
diff-lcs (>= 1.1.3, < 2.0)
|
28
|
-
rspec-mocks (2.13.
|
30
|
+
rspec-mocks (2.13.1)
|
29
31
|
ruby_process (0.0.8)
|
30
32
|
tsafe
|
31
33
|
wref
|
32
34
|
sqlite3 (1.3.7)
|
35
|
+
string-strtr (0.0.3)
|
33
36
|
tsafe (0.0.11)
|
34
|
-
wref (0.0.
|
37
|
+
wref (0.0.6)
|
35
38
|
|
36
39
|
PLATFORMS
|
37
40
|
ruby
|
38
41
|
|
39
42
|
DEPENDENCIES
|
43
|
+
array_enumerator
|
40
44
|
bundler
|
41
45
|
datet
|
42
46
|
http2
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.104
|
data/knjrbfw.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "knjrbfw"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.104"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kasper Johansen"]
|
12
|
-
s.date = "2013-
|
12
|
+
s.date = "2013-04-11"
|
13
13
|
s.description = "Including stuff for HTTP, SSH and much more."
|
14
14
|
s.email = "k@spernj.org"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -284,6 +284,7 @@ Gem::Specification.new do |s|
|
|
284
284
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
285
285
|
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
286
286
|
s.add_development_dependency(%q<rmagick>, [">= 0"])
|
287
|
+
s.add_development_dependency(%q<array_enumerator>, [">= 0"])
|
287
288
|
else
|
288
289
|
s.add_dependency(%q<wref>, [">= 0"])
|
289
290
|
s.add_dependency(%q<tsafe>, [">= 0"])
|
@@ -296,6 +297,7 @@ Gem::Specification.new do |s|
|
|
296
297
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
297
298
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
298
299
|
s.add_dependency(%q<rmagick>, [">= 0"])
|
300
|
+
s.add_dependency(%q<array_enumerator>, [">= 0"])
|
299
301
|
end
|
300
302
|
else
|
301
303
|
s.add_dependency(%q<wref>, [">= 0"])
|
@@ -309,6 +311,7 @@ Gem::Specification.new do |s|
|
|
309
311
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
310
312
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
311
313
|
s.add_dependency(%q<rmagick>, [">= 0"])
|
314
|
+
s.add_dependency(%q<array_enumerator>, [">= 0"])
|
312
315
|
end
|
313
316
|
end
|
314
317
|
|
@@ -332,7 +332,7 @@ class KnjDB_mysql
|
|
332
332
|
sql << ","
|
333
333
|
end
|
334
334
|
|
335
|
-
sql <<
|
335
|
+
sql << @knjdb.sqlval(val)
|
336
336
|
end
|
337
337
|
else
|
338
338
|
hash.each do |key, val|
|
@@ -342,7 +342,7 @@ class KnjDB_mysql
|
|
342
342
|
sql << ","
|
343
343
|
end
|
344
344
|
|
345
|
-
sql <<
|
345
|
+
sql << @knjdb.sqlval(val)
|
346
346
|
end
|
347
347
|
end
|
348
348
|
end
|
@@ -113,6 +113,15 @@ class KnjDB_sqlite3::Tables::Table
|
|
113
113
|
return @data[:maxlength]
|
114
114
|
end
|
115
115
|
|
116
|
+
def reload
|
117
|
+
@data = @db.select("sqlite_master", {"type" => "table", "name" => self.name}, {"orderby" => "name"}).fetch
|
118
|
+
end
|
119
|
+
|
120
|
+
def rows_count
|
121
|
+
data = @db.q("SELECT COUNT(*) AS count FROM `#{self.name}`").fetch
|
122
|
+
return data[:count].to_i
|
123
|
+
end
|
124
|
+
|
116
125
|
#Drops the table from the database.
|
117
126
|
def drop
|
118
127
|
raise "Cant drop native table: '#{self.name}'." if self.native?
|
data/lib/knj/knjdb/libknjdb.rb
CHANGED
@@ -264,7 +264,7 @@ class Knj::Db
|
|
264
264
|
sql << "#{@sep_col}#{key}#{@sep_col}"
|
265
265
|
end
|
266
266
|
|
267
|
-
sql << ")
|
267
|
+
sql << ") VALUES ("
|
268
268
|
|
269
269
|
first = true
|
270
270
|
arr_insert.each do |key, value|
|
@@ -274,7 +274,7 @@ class Knj::Db
|
|
274
274
|
sql << ", "
|
275
275
|
end
|
276
276
|
|
277
|
-
sql <<
|
277
|
+
sql << self.sqlval(value)
|
278
278
|
end
|
279
279
|
|
280
280
|
sql << ")"
|
@@ -289,6 +289,23 @@ class Knj::Db
|
|
289
289
|
end
|
290
290
|
end
|
291
291
|
|
292
|
+
#Returns the correct SQL-value for the given value. If it is a number, then just the raw number as a string will be returned. nil's will be NULL and strings will have quotes and will be escaped.
|
293
|
+
def sqlval(val)
|
294
|
+
return @conn.sqlval(val) if @conn.respond_to?(:sqlval)
|
295
|
+
|
296
|
+
if val.is_a?(Fixnum) or val.is_a?(Integer)
|
297
|
+
return val.to_s
|
298
|
+
elsif val == nil
|
299
|
+
return "NULL"
|
300
|
+
elsif val.is_a?(Date)
|
301
|
+
return "#{@sep_val}#{Datet.in(val).dbstr(:time => false)}#{@sep_val}"
|
302
|
+
elsif val.is_a?(Time) or val.is_a?(DateTime)
|
303
|
+
return "#{@sep_val}#{Datet.in(val).dbstr}#{@sep_val}"
|
304
|
+
else
|
305
|
+
return "#{@sep_val}#{self.escape(val)}#{@sep_val}"
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
292
309
|
#Simply and optimal insert multiple rows into a table in a single query. Uses the drivers functionality if supported or inserts each row manually.
|
293
310
|
#
|
294
311
|
#===Examples
|
@@ -362,6 +379,17 @@ class Knj::Db
|
|
362
379
|
end
|
363
380
|
end
|
364
381
|
|
382
|
+
#Checks if a given selector exists. If it does, updates it to match data. If not inserts the row.
|
383
|
+
def upsert(table, selector, data)
|
384
|
+
row = self.select(table, selector, "limit" => 1).fetch
|
385
|
+
|
386
|
+
if row
|
387
|
+
self.update(table, data, row)
|
388
|
+
else
|
389
|
+
self.insert(table, selector.merge(data))
|
390
|
+
end
|
391
|
+
end
|
392
|
+
|
365
393
|
#Makes a select from the given arguments: table-name, where-terms and other arguments as limits and orders. Also takes a block to avoid raping of memory.
|
366
394
|
def select(tablename, arr_terms = nil, args = nil, &block)
|
367
395
|
#Set up vars.
|
data/lib/knj/os.rb
CHANGED
@@ -54,17 +54,18 @@ module Knj::Os
|
|
54
54
|
# print "I like it better now." if Knj::Os.os == "linux"
|
55
55
|
def self.os
|
56
56
|
if ENV["OS"]
|
57
|
-
teststring = ENV["OS"].to_s
|
57
|
+
teststring = ENV["OS"].to_s.downcase
|
58
58
|
elsif RUBY_PLATFORM
|
59
|
-
teststring = RUBY_PLATFORM.to_s
|
59
|
+
teststring = RUBY_PLATFORM.to_s.downcase
|
60
60
|
end
|
61
61
|
|
62
|
-
if teststring.
|
62
|
+
if teststring.include?("windows")
|
63
63
|
return "windows"
|
64
|
-
elsif teststring.
|
64
|
+
elsif teststring.include?("linux")
|
65
65
|
return "linux"
|
66
|
+
elsif teststring.include?("darwin")
|
66
67
|
else
|
67
|
-
raise "Could not figure out OS."
|
68
|
+
raise "Could not figure out OS: '#{teststring}'."
|
68
69
|
end
|
69
70
|
end
|
70
71
|
|
@@ -221,6 +222,11 @@ module Knj::Os
|
|
221
222
|
def self.executed_executable
|
222
223
|
return ENV["rvm_ruby_string"] if !ENV["rvm_ruby_string"].to_s.empty?
|
223
224
|
|
225
|
+
if ENV["MY_RUBY_HOME"]
|
226
|
+
ruby_bin_path = "#{ENV["MY_RUBY_HOME"]}/bin/ruby"
|
227
|
+
return ruby_bin_path if File.exists?(ruby_bin_path)
|
228
|
+
end
|
229
|
+
|
224
230
|
#Try to look the executeable up by command.
|
225
231
|
if self.os == "linux"
|
226
232
|
unix_proc = Knj::Unix_proc.find_self
|
@@ -235,6 +241,8 @@ module Knj::Os
|
|
235
241
|
end
|
236
242
|
end
|
237
243
|
|
244
|
+
puts ENV.to_hash
|
245
|
+
|
238
246
|
raise "Could not figure out the executed executable."
|
239
247
|
end
|
240
248
|
end
|
data/spec/amixer_spec.rb
CHANGED
@@ -2,24 +2,29 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
2
|
|
3
3
|
describe "Amixer" do
|
4
4
|
it "should load by using autoload" do
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
if Knj::Os.os == "linux"
|
6
|
+
require "knjrbfw"
|
7
|
+
$amixer = Knj::Amixer.new
|
8
|
+
end
|
8
9
|
end
|
9
10
|
|
10
11
|
it "should register various devices" do
|
11
|
-
|
12
|
+
if Knj::Os.os == "linux"
|
13
|
+
$devices = $amixer.devices
|
14
|
+
end
|
12
15
|
end
|
13
16
|
|
14
17
|
it "should register various mixers and do various operations on them" do
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
if Knj::Os.os == "linux"
|
19
|
+
$devices.each do |name, device|
|
20
|
+
mixers = device.mixers
|
21
|
+
|
22
|
+
if device.active?(:stream => "PLAYBACK")
|
23
|
+
mixers.each do |name, mixer|
|
24
|
+
next if !mixer.volume?
|
25
|
+
mixer.vol_add -5
|
26
|
+
mixer.vol_add 3
|
27
|
+
end
|
23
28
|
end
|
24
29
|
end
|
25
30
|
end
|
data/spec/db_spec.rb
CHANGED
@@ -42,7 +42,9 @@ describe "Db" do
|
|
42
42
|
"test_table" => {
|
43
43
|
"columns" => [
|
44
44
|
{"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
|
45
|
-
{"name" => "name", "type" => "varchar"}
|
45
|
+
{"name" => "name", "type" => "varchar"},
|
46
|
+
{"name" => "age", "type" => "int"},
|
47
|
+
{"name" => "nickname", "type" => "varchar"}
|
46
48
|
],
|
47
49
|
"indexes" => [
|
48
50
|
"name"
|
@@ -98,6 +100,25 @@ describe "Db" do
|
|
98
100
|
raise "Block with should have ran too little: #{block_ran}." if block_ran < rows_count
|
99
101
|
|
100
102
|
|
103
|
+
#Test upserting.
|
104
|
+
data = {:name => "Kasper Johansen"}
|
105
|
+
sel = {:nickname => "kaspernj"}
|
106
|
+
|
107
|
+
table = db.tables[:test_table]
|
108
|
+
table.reload
|
109
|
+
rows_count = table.rows_count
|
110
|
+
|
111
|
+
db.upsert(:test_table, sel, data)
|
112
|
+
|
113
|
+
table.reload
|
114
|
+
table.rows_count.should eql(rows_count + 1)
|
115
|
+
|
116
|
+
db.upsert(:test_table, sel, data)
|
117
|
+
|
118
|
+
table.reload
|
119
|
+
table.rows_count.should eql(rows_count + 1)
|
120
|
+
|
121
|
+
|
101
122
|
#Test dumping.
|
102
123
|
dump = Knj::Db::Dump.new(:db => db, :debug => false)
|
103
124
|
str_io = StringIO.new
|
@@ -159,4 +180,27 @@ describe "Db" do
|
|
159
180
|
#Delete test-database if everything went well.
|
160
181
|
File.unlink(db_path) if File.exists?(db_path)
|
161
182
|
end
|
183
|
+
|
184
|
+
it "should generate proper sql" do
|
185
|
+
require "knj/db"
|
186
|
+
require "knj/os"
|
187
|
+
require "rubygems"
|
188
|
+
require "sqlite3" if !Kernel.const_defined?("SQLite3") and RUBY_ENGINE != "jruby"
|
189
|
+
|
190
|
+
db_path = "#{Knj::Os.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
|
191
|
+
File.unlink(db_path) if File.exists?(db_path)
|
192
|
+
|
193
|
+
db = Knj::Db.new(
|
194
|
+
:type => "sqlite3",
|
195
|
+
:path => db_path,
|
196
|
+
:return_keys => "symbols",
|
197
|
+
:index_append_table_name => true
|
198
|
+
)
|
199
|
+
|
200
|
+
time = Time.new(1985, 6, 17, 10, 30)
|
201
|
+
db.insert(:test, {:date => time}, :return_sql => true).should eql("INSERT INTO `test` (`date`) VALUES ('1985-06-17 10:30:00')")
|
202
|
+
|
203
|
+
date = Date.new(1985, 6, 17)
|
204
|
+
db.insert(:test, {:date => date}, :return_sql => true).should eql("INSERT INTO `test` (`date`) VALUES ('1985-06-17')")
|
205
|
+
end
|
162
206
|
end
|
data/spec/objects_spec.rb
CHANGED
@@ -2,7 +2,12 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
2
|
|
3
3
|
describe "Objects" do
|
4
4
|
it "should be able to cache rows" do
|
5
|
-
|
5
|
+
begin
|
6
|
+
require "#{File.dirname(__FILE__)}/../../array_enumerator/lib/array_enumerator"
|
7
|
+
rescue LoadError
|
8
|
+
require "array_enumerator"
|
9
|
+
end
|
10
|
+
|
6
11
|
require "sqlite3" if RUBY_ENGINE != "jruby"
|
7
12
|
|
8
13
|
$db_path = "#{Knj::Os.tmpdir}/knjrbfw_objects_cache_test.sqlite3"
|
data/spec/process_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knjrbfw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.104
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: wref
|
@@ -187,6 +187,22 @@ dependencies:
|
|
187
187
|
- - ! '>='
|
188
188
|
- !ruby/object:Gem::Version
|
189
189
|
version: '0'
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: array_enumerator
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ! '>='
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0'
|
198
|
+
type: :development
|
199
|
+
prerelease: false
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ! '>='
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
190
206
|
description: Including stuff for HTTP, SSH and much more.
|
191
207
|
email: k@spernj.org
|
192
208
|
executables: []
|
@@ -455,7 +471,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
455
471
|
version: '0'
|
456
472
|
segments:
|
457
473
|
- 0
|
458
|
-
hash:
|
474
|
+
hash: -708484530570275600
|
459
475
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
460
476
|
none: false
|
461
477
|
requirements:
|