baza 0.0.16 → 0.0.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +2 -20
- data/VERSION +1 -1
- data/baza.gemspec +7 -6
- data/include/db.rb +2 -4
- data/include/drivers/mysql/mysql_column.rb +1 -1
- data/include/drivers/mysql/mysql_index.rb +1 -1
- data/include/drivers/mysql/mysql_table.rb +1 -1
- data/include/errors.rb +3 -0
- data/include/idquery.rb +1 -7
- data/include/model_handler.rb +19 -22
- data/include/model_handler_sqlhelper.rb +4 -9
- data/include/revision.rb +7 -7
- data/lib/baza.rb +3 -1
- data/spec/model_handler_spec.rb +47 -49
- metadata +12 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f015976dbd7947d3e767c03acbe2c5d5483c1548
|
4
|
+
data.tar.gz: 2c1d7124db801479e2fcbeb1b48bc2bcc4305654
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f28b9caab9178b57d0dd4576fa07914076a0c9b8305ba8fc853f301cd86473c0769113db5521a5b06a993809b39599ebad34bbed57368724e66d4ad5ce7f92a
|
7
|
+
data.tar.gz: 44fcf2c1583d49a375f6e1afff64b565901efb65c285d1dce8c31b96f8d04a619834182608018c7ff11c387861b81fea77a4d72300a4eeeb6bec2d2abd72d511
|
data/Gemfile
CHANGED
@@ -5,9 +5,9 @@ source "http://rubygems.org"
|
|
5
5
|
|
6
6
|
gem "datet", "~> 0.0.25"
|
7
7
|
gem "wref", "~> 0.0.8"
|
8
|
-
gem "knjrbfw", "~> 0.0.111"
|
9
8
|
gem "array_enumerator", "~> 0.0.7"
|
10
9
|
gem "string-cases", "~> 0.0.1"
|
10
|
+
gem 'event_handler', '~> 0.0.0'
|
11
11
|
|
12
12
|
# Add dependencies to develop your gem here.
|
13
13
|
# Include everything needed to run rake, tests, features, etc.
|
data/Gemfile.lock
CHANGED
@@ -25,6 +25,7 @@ GEM
|
|
25
25
|
thread_safe (~> 0.3, >= 0.3.1)
|
26
26
|
diff-lcs (1.2.5)
|
27
27
|
docile (1.1.5)
|
28
|
+
event_handler (0.0.0)
|
28
29
|
faraday (0.9.0)
|
29
30
|
multipart-post (>= 1.2, < 3)
|
30
31
|
git (1.2.8)
|
@@ -38,8 +39,6 @@ GEM
|
|
38
39
|
oauth2
|
39
40
|
hashie (3.3.1)
|
40
41
|
highline (1.6.21)
|
41
|
-
http2 (0.0.30)
|
42
|
-
string-cases
|
43
42
|
i18n (0.6.11)
|
44
43
|
jeweler (2.0.1)
|
45
44
|
builder
|
@@ -53,13 +52,6 @@ GEM
|
|
53
52
|
json (1.8.1)
|
54
53
|
json (1.8.1-java)
|
55
54
|
jwt (1.0.0)
|
56
|
-
knjrbfw (0.0.111)
|
57
|
-
datet
|
58
|
-
http2
|
59
|
-
php4r
|
60
|
-
ruby_process
|
61
|
-
tsafe
|
62
|
-
wref (>= 0.0.8)
|
63
55
|
mini_portile (0.6.0)
|
64
56
|
minitest (5.4.2)
|
65
57
|
multi_json (1.10.1)
|
@@ -75,10 +67,6 @@ GEM
|
|
75
67
|
multi_json (~> 1.3)
|
76
68
|
multi_xml (~> 0.5)
|
77
69
|
rack (~> 1.2)
|
78
|
-
php4r (0.0.4)
|
79
|
-
datet
|
80
|
-
http2
|
81
|
-
string-strtr
|
82
70
|
rack (1.5.2)
|
83
71
|
rake (10.3.2)
|
84
72
|
rdoc (4.1.2)
|
@@ -95,10 +83,6 @@ GEM
|
|
95
83
|
rspec-mocks (3.1.3)
|
96
84
|
rspec-support (~> 3.1.0)
|
97
85
|
rspec-support (3.1.2)
|
98
|
-
ruby_process (0.0.13)
|
99
|
-
string-cases
|
100
|
-
tsafe
|
101
|
-
wref
|
102
86
|
simplecov (0.9.1)
|
103
87
|
docile (~> 1.1.0)
|
104
88
|
multi_json (~> 1.0)
|
@@ -106,10 +90,8 @@ GEM
|
|
106
90
|
simplecov-html (0.8.0)
|
107
91
|
sqlite3 (1.3.10)
|
108
92
|
string-cases (0.0.1)
|
109
|
-
string-strtr (0.0.3)
|
110
93
|
thread_safe (0.3.4)
|
111
94
|
thread_safe (0.3.4-java)
|
112
|
-
tsafe (0.0.11)
|
113
95
|
tzinfo (1.2.2)
|
114
96
|
thread_safe (~> 0.1)
|
115
97
|
wref (0.0.8)
|
@@ -124,8 +106,8 @@ DEPENDENCIES
|
|
124
106
|
bundler
|
125
107
|
codeclimate-test-reporter
|
126
108
|
datet (~> 0.0.25)
|
109
|
+
event_handler (~> 0.0.0)
|
127
110
|
jeweler
|
128
|
-
knjrbfw (~> 0.0.111)
|
129
111
|
mysql2
|
130
112
|
rdoc
|
131
113
|
rspec
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.17
|
data/baza.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: baza 0.0.
|
5
|
+
# stub: baza 0.0.17 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "baza"
|
9
|
-
s.version = "0.0.
|
9
|
+
s.version = "0.0.17"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Kasper Johansen"]
|
14
|
-
s.date = "2015-05-
|
14
|
+
s.date = "2015-05-31"
|
15
15
|
s.description = "A database abstraction layer, model framework and database framework."
|
16
16
|
s.email = "kj@gfish.com"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -57,6 +57,7 @@ Gem::Specification.new do |s|
|
|
57
57
|
"include/drivers/sqlite3/sqlite3_table.rb",
|
58
58
|
"include/drivers/sqlite3/sqlite3_tables.rb",
|
59
59
|
"include/dump.rb",
|
60
|
+
"include/errors.rb",
|
60
61
|
"include/idquery.rb",
|
61
62
|
"include/index.rb",
|
62
63
|
"include/model.rb",
|
@@ -98,9 +99,9 @@ Gem::Specification.new do |s|
|
|
98
99
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
99
100
|
s.add_runtime_dependency(%q<datet>, ["~> 0.0.25"])
|
100
101
|
s.add_runtime_dependency(%q<wref>, ["~> 0.0.8"])
|
101
|
-
s.add_runtime_dependency(%q<knjrbfw>, ["~> 0.0.111"])
|
102
102
|
s.add_runtime_dependency(%q<array_enumerator>, ["~> 0.0.7"])
|
103
103
|
s.add_runtime_dependency(%q<string-cases>, ["~> 0.0.1"])
|
104
|
+
s.add_runtime_dependency(%q<event_handler>, ["~> 0.0.0"])
|
104
105
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
105
106
|
s.add_development_dependency(%q<rdoc>, [">= 0"])
|
106
107
|
s.add_development_dependency(%q<bundler>, [">= 0"])
|
@@ -111,9 +112,9 @@ Gem::Specification.new do |s|
|
|
111
112
|
else
|
112
113
|
s.add_dependency(%q<datet>, ["~> 0.0.25"])
|
113
114
|
s.add_dependency(%q<wref>, ["~> 0.0.8"])
|
114
|
-
s.add_dependency(%q<knjrbfw>, ["~> 0.0.111"])
|
115
115
|
s.add_dependency(%q<array_enumerator>, ["~> 0.0.7"])
|
116
116
|
s.add_dependency(%q<string-cases>, ["~> 0.0.1"])
|
117
|
+
s.add_dependency(%q<event_handler>, ["~> 0.0.0"])
|
117
118
|
s.add_dependency(%q<rspec>, [">= 0"])
|
118
119
|
s.add_dependency(%q<rdoc>, [">= 0"])
|
119
120
|
s.add_dependency(%q<bundler>, [">= 0"])
|
@@ -125,9 +126,9 @@ Gem::Specification.new do |s|
|
|
125
126
|
else
|
126
127
|
s.add_dependency(%q<datet>, ["~> 0.0.25"])
|
127
128
|
s.add_dependency(%q<wref>, ["~> 0.0.8"])
|
128
|
-
s.add_dependency(%q<knjrbfw>, ["~> 0.0.111"])
|
129
129
|
s.add_dependency(%q<array_enumerator>, ["~> 0.0.7"])
|
130
130
|
s.add_dependency(%q<string-cases>, ["~> 0.0.1"])
|
131
|
+
s.add_dependency(%q<event_handler>, ["~> 0.0.0"])
|
131
132
|
s.add_dependency(%q<rspec>, [">= 0"])
|
132
133
|
s.add_dependency(%q<rdoc>, [">= 0"])
|
133
134
|
s.add_dependency(%q<bundler>, [">= 0"])
|
data/include/db.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
require "knjrbfw"
|
2
|
-
Knj.gem_require([:wref, :datet])
|
3
|
-
|
4
1
|
#A wrapper of several possible database-types.
|
5
2
|
#
|
6
3
|
#===Examples
|
@@ -567,7 +564,8 @@ class Baza::Db
|
|
567
564
|
|
568
565
|
if value.is_a?(Array)
|
569
566
|
raise "Array for column '#{key}' was empty." if value.empty?
|
570
|
-
|
567
|
+
values = value.map { |v| "'#{escape(v)}'" }.join(',')
|
568
|
+
sql << "#{@sep_col}#{key}#{@sep_col} IN (#{values})"
|
571
569
|
elsif value.is_a?(Hash)
|
572
570
|
raise "Dont know how to handle hash."
|
573
571
|
else
|
@@ -18,7 +18,7 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
18
18
|
@data = @db.q("SHOW TABLE STATUS WHERE `Name` = '#{@db.esc(self.name)}'").fetch
|
19
19
|
end
|
20
20
|
|
21
|
-
#Used to validate in
|
21
|
+
#Used to validate in Wref::Map.
|
22
22
|
def __object_unique_id__
|
23
23
|
return @data[:Name]
|
24
24
|
end
|
data/include/errors.rb
ADDED
data/include/idquery.rb
CHANGED
@@ -87,13 +87,7 @@ class Baza::Idquery
|
|
87
87
|
return nil
|
88
88
|
end
|
89
89
|
|
90
|
-
ids_sql =
|
91
|
-
:arr => ids,
|
92
|
-
:callback => proc{|val| @args[:db].esc(val)},
|
93
|
-
:sep => ",",
|
94
|
-
:surr => "'"
|
95
|
-
)
|
96
|
-
|
90
|
+
ids_sql = ids.map { |id| "'#{@args[:db].esc(id)}'" }.join(',')
|
97
91
|
query_str = "SELECT * FROM #{table_esc} WHERE #{table_esc}.#{col_esc} IN (#{ids_sql})"
|
98
92
|
print "Query: #{query_str}\n" if @debug
|
99
93
|
|
data/include/model_handler.rb
CHANGED
@@ -5,7 +5,10 @@ class Baza::ModelHandler
|
|
5
5
|
attr_reader :args, :events, :data, :ids_cache, :ids_cache_should
|
6
6
|
|
7
7
|
def initialize(args)
|
8
|
-
require
|
8
|
+
require 'array_enumerator' if args[:array_enum]
|
9
|
+
require 'event_handler'
|
10
|
+
require 'monitor'
|
11
|
+
require 'ostruct'
|
9
12
|
|
10
13
|
@callbacks = {}
|
11
14
|
@args = args
|
@@ -18,11 +21,8 @@ class Baza::ModelHandler
|
|
18
21
|
@data = {}
|
19
22
|
@lock_require = Monitor.new
|
20
23
|
|
21
|
-
Knj.gem_require(:Wref, "wref") if @args[:cache] == :weak and !Kernel.const_defined?(:Wref)
|
22
|
-
require "#{@args[:array_enumerator_path]}array_enumerator" if @args[:array_enum] and !Kernel.const_defined?(:Array_enumerator)
|
23
|
-
|
24
24
|
#Set up various events.
|
25
|
-
@events =
|
25
|
+
@events = EventHandler.new
|
26
26
|
@events.add_event(:name => :no_html, :connections_max => 1)
|
27
27
|
@events.add_event(:name => :no_name, :connections_max => 1)
|
28
28
|
@events.add_event(:name => :no_date, :connections_max => 1)
|
@@ -67,7 +67,7 @@ class Baza::ModelHandler
|
|
67
67
|
#Caches all IDs for a specific classname.
|
68
68
|
def cache_ids(classname)
|
69
69
|
classname = classname.to_sym
|
70
|
-
return nil if !@ids_cache_should
|
70
|
+
return nil if !@ids_cache_should || !@ids_cache_should[classname]
|
71
71
|
|
72
72
|
newcache = {}
|
73
73
|
@args[:db].q("SELECT `#{@args[:col_id]}` FROM `#{classname}` ORDER BY `#{@args[:col_id]}`") do |data|
|
@@ -270,7 +270,7 @@ class Baza::ModelHandler
|
|
270
270
|
classob = @args[:module].const_get(classname)
|
271
271
|
end
|
272
272
|
|
273
|
-
pass_arg =
|
273
|
+
pass_arg = OpenStruct.new(:ob => self, :db => @args[:db])
|
274
274
|
classob.load_columns(pass_arg) if classob.respond_to?(:load_columns)
|
275
275
|
classob.datarow_init(pass_arg) if classob.respond_to?(:datarow_init)
|
276
276
|
end
|
@@ -444,7 +444,7 @@ class Baza::ModelHandler
|
|
444
444
|
classob = @args[:module].const_get(classname)
|
445
445
|
|
446
446
|
raise "list-function has not been implemented for '#{classname}'." if !classob.respond_to?("list")
|
447
|
-
ret = classob.list(
|
447
|
+
ret = classob.list(OpenStruct.new(:args => args, :ob => self, :db => @args[:db]), &block)
|
448
448
|
|
449
449
|
#If 'ret' is an array and a block is given then the list-method didnt return blocks. We emulate it instead with the following code.
|
450
450
|
if block and ret.is_a?(Array)
|
@@ -485,7 +485,11 @@ class Baza::ModelHandler
|
|
485
485
|
end
|
486
486
|
end
|
487
487
|
|
488
|
-
|
488
|
+
if block
|
489
|
+
enum.each(&block)
|
490
|
+
else
|
491
|
+
return ArrayEnumerator.new(enum)
|
492
|
+
end
|
489
493
|
end
|
490
494
|
|
491
495
|
#Returns select-options-HTML for inserting into a HTML-select-element.
|
@@ -554,7 +558,6 @@ class Baza::ModelHandler
|
|
554
558
|
|
555
559
|
#Returns a hash which can be used to generate HTML-select-elements.
|
556
560
|
def list_optshash(classname, args = {})
|
557
|
-
Knj::ArrayExt.hash_sym(args)
|
558
561
|
classname = classname.to_sym
|
559
562
|
|
560
563
|
if args[:list_args].is_a?(Hash)
|
@@ -563,11 +566,7 @@ class Baza::ModelHandler
|
|
563
566
|
list_args = {}
|
564
567
|
end
|
565
568
|
|
566
|
-
|
567
|
-
list = Dictionary.new
|
568
|
-
else
|
569
|
-
list = {}
|
570
|
-
end
|
569
|
+
list = {}
|
571
570
|
|
572
571
|
if args[:addnew] or args[:add]
|
573
572
|
list["0"] = _("Add new")
|
@@ -649,7 +648,7 @@ class Baza::ModelHandler
|
|
649
648
|
|
650
649
|
if @args[:custom]
|
651
650
|
classobj = @args[:module].const_get(classname)
|
652
|
-
retob = classobj.add(
|
651
|
+
retob = classobj.add(OpenStruct.new(
|
653
652
|
:ob => self,
|
654
653
|
:data => data
|
655
654
|
))
|
@@ -657,7 +656,7 @@ class Baza::ModelHandler
|
|
657
656
|
classobj = @args[:module].const_get(classname)
|
658
657
|
|
659
658
|
#Run the class 'add'-method to check various data.
|
660
|
-
classobj.add(
|
659
|
+
classobj.add(OpenStruct.new(:ob => self, :db => @args[:db], :data => data)) if classobj.respond_to?(:add)
|
661
660
|
|
662
661
|
#Check if various required data is given. If not then raise an error telling about it.
|
663
662
|
required_data = classobj.required_data
|
@@ -698,7 +697,7 @@ class Baza::ModelHandler
|
|
698
697
|
def adds(classname, datas)
|
699
698
|
if @args[:module].const_get(classname).respond_to?(:add)
|
700
699
|
datas.each do |data|
|
701
|
-
@args[:module].const_get(classname).add(
|
700
|
+
@args[:module].const_get(classname).add(OpenStruct.new(
|
702
701
|
:ob => self,
|
703
702
|
:db => self.db,
|
704
703
|
:data => data
|
@@ -721,7 +720,7 @@ class Baza::ModelHandler
|
|
721
720
|
#Sometimes this raises the exception but actually responds to the class? Therefore commented out. - knj
|
722
721
|
#raise "The class '#{class_obj.name}' has no such method: '#{method_name}' (#{class_obj.methods.sort.join(", ")})." if !class_obj.respond_to?(method_name)
|
723
722
|
|
724
|
-
pass_args = [
|
723
|
+
pass_args = [OpenStruct.new(:ob => self, :db => self.db)]
|
725
724
|
|
726
725
|
args.each do |arg|
|
727
726
|
pass_args << arg
|
@@ -888,7 +887,7 @@ class Baza::ModelHandler
|
|
888
887
|
elsif @args[:cache] == :none
|
889
888
|
return false
|
890
889
|
else
|
891
|
-
return false
|
890
|
+
return false unless @objects.key?(classn)
|
892
891
|
@objects[classn] = {}
|
893
892
|
GC.start
|
894
893
|
|
@@ -920,5 +919,3 @@ class Baza::ModelHandler
|
|
920
919
|
return @objects.keys
|
921
920
|
end
|
922
921
|
end
|
923
|
-
|
924
|
-
require "#{$knjpath}objects/objects_sqlhelper"
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
1
3
|
class Baza::ModelHandler
|
2
4
|
#This method helps build SQL from Objects-instances list-method. It should not be called directly but only through Objects.list.
|
3
5
|
def sqlhelper(list_args, args_def)
|
@@ -224,14 +226,7 @@ class Baza::ModelHandler
|
|
224
226
|
if val.empty? and db.opts[:type].to_s == "mysql"
|
225
227
|
sql_where << " AND false"
|
226
228
|
else
|
227
|
-
escape_sql =
|
228
|
-
:arr => val,
|
229
|
-
:callback => proc{|value|
|
230
|
-
db.escape(value)
|
231
|
-
},
|
232
|
-
:sep => ",",
|
233
|
-
:surr => "'"
|
234
|
-
)
|
229
|
+
escape_sql = val.map { |v| "'#{db.escape(v)}'" }.join(',')
|
235
230
|
sql_where << " AND #{table}`#{db.esc_col(key)}` IN (#{escape_sql})"
|
236
231
|
end
|
237
232
|
elsif val.is_a?(Hash) and val[:type].to_sym == :col
|
@@ -241,7 +236,7 @@ class Baza::ModelHandler
|
|
241
236
|
elsif val.is_a?(Hash) and val[:type] == :sqlval and val[:val] == :null
|
242
237
|
sql_where << " AND #{table}`#{db.esc_col(key)}` IS NULL"
|
243
238
|
elsif val.is_a?(Proc)
|
244
|
-
call_args =
|
239
|
+
call_args = OpenStruct.new(:ob => self, :db => db)
|
245
240
|
sql_where << " AND #{table}`#{db.esc_col(key)}` = '#{db.esc(val.call(call_args))}'"
|
246
241
|
else
|
247
242
|
sql_where << " AND #{table}`#{db.esc_col(key)}` = '#{db.esc(val)}'"
|
data/include/revision.rb
CHANGED
@@ -42,18 +42,18 @@ class Baza::Revision
|
|
42
42
|
|
43
43
|
schema = args[:schema]
|
44
44
|
db = args[:db]
|
45
|
-
raise "No 'db' was given."
|
45
|
+
raise "No 'db' was given." unless db
|
46
46
|
|
47
47
|
schema.each do |key, val|
|
48
48
|
raise "Invalid key for schema: '#{key}' (#{key.class.name})." unless INIT_DB_SCHEMA_ALLOWED_ARGS.include?(key)
|
49
49
|
end
|
50
50
|
|
51
51
|
#Check for normal bugs and raise apropiate error.
|
52
|
-
raise "'schema' argument was not a Hash: '#{schema.class.name}'."
|
53
|
-
raise "No tables given."
|
52
|
+
raise "'schema' argument was not a Hash: '#{schema.class.name}'." unless schema.is_a?(Hash)
|
53
|
+
raise "No tables given." unless schema.has_key?(:tables)
|
54
54
|
|
55
55
|
#Cache tables to avoid constant reloading.
|
56
|
-
if !args.key?(:tables_cache)
|
56
|
+
if !args.key?(:tables_cache) || args[:tables_cache]
|
57
57
|
puts "Caching tables-list." if args[:debug]
|
58
58
|
tables = db.tables.list
|
59
59
|
else
|
@@ -157,7 +157,7 @@ class Baza::Revision
|
|
157
157
|
callback_data = col_data[:on_before_alter].call(:db => db, :table => table_obj, :col => col_obj, :col_data => col_data)
|
158
158
|
if callback_data and callback_data[:action]
|
159
159
|
if callback_data[:action] == :retry
|
160
|
-
raise
|
160
|
+
raise Baza::Errors::Retry
|
161
161
|
end
|
162
162
|
end
|
163
163
|
end
|
@@ -288,7 +288,7 @@ class Baza::Revision
|
|
288
288
|
puts "Renaming table: '#{table_name_rename}' to '#{table_name}'." if args[:debug]
|
289
289
|
table_rename = db.tables[table_name_rename.to_sym]
|
290
290
|
table_rename.rename(table_name)
|
291
|
-
raise
|
291
|
+
raise Baza::Errors::Retry
|
292
292
|
rescue Errno::ENOENT
|
293
293
|
next
|
294
294
|
end
|
@@ -317,7 +317,7 @@ class Baza::Revision
|
|
317
317
|
|
318
318
|
rows_init(:db => db, :table => table_obj, :rows => table_data[:rows]) if table_data[:rows]
|
319
319
|
end
|
320
|
-
rescue
|
320
|
+
rescue Baza::Errors::Retry
|
321
321
|
retry
|
322
322
|
end
|
323
323
|
end
|
data/lib/baza.rb
CHANGED
data/spec/model_handler_spec.rb
CHANGED
@@ -1,14 +1,8 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe "Objects" do
|
4
|
-
|
5
|
-
|
6
|
-
require "#{File.dirname(__FILE__)}/../../array_enumerator/lib/array_enumerator"
|
7
|
-
rescue LoadError
|
8
|
-
require "array_enumerator"
|
9
|
-
end
|
10
|
-
|
11
|
-
require "sqlite3" if RUBY_ENGINE != "jruby"
|
4
|
+
before(:all) do
|
5
|
+
require "sqlite3" unless RUBY_ENGINE == "jruby"
|
12
6
|
require "tmpdir"
|
13
7
|
|
14
8
|
$db_path = "#{Dir.tmpdir}/knjrbfw_objects_cache_test.sqlite3"
|
@@ -55,6 +49,36 @@ describe "Objects" do
|
|
55
49
|
{:username => "User 5"}
|
56
50
|
])
|
57
51
|
|
52
|
+
class Project < Baza::Model
|
53
|
+
has_many [
|
54
|
+
{:class => :Task, :col => :project_id, :depends => true}
|
55
|
+
]
|
56
|
+
end
|
57
|
+
|
58
|
+
class Task < Baza::Model
|
59
|
+
has_one [
|
60
|
+
{:class => :Person, :required => true},
|
61
|
+
:Project
|
62
|
+
]
|
63
|
+
end
|
64
|
+
|
65
|
+
class Person < Baza::Model
|
66
|
+
has_one [:Project]
|
67
|
+
|
68
|
+
has_many [
|
69
|
+
{:class => :Timelog, :autozero => true}
|
70
|
+
]
|
71
|
+
|
72
|
+
def html
|
73
|
+
return self[:name]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class Timelog < Baza::Model
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should be able to cache rows" do
|
58
82
|
raise "Expected user-ID-cache to be 5 but it wasnt: #{$ob.ids_cache[:User].length}" if $ob.ids_cache[:User].length != 5
|
59
83
|
|
60
84
|
user = $ob.get(:User, 4)
|
@@ -83,7 +107,9 @@ describe "Objects" do
|
|
83
107
|
#Stress it to test threadsafety...
|
84
108
|
threads = []
|
85
109
|
0.upto(5) do |tc|
|
86
|
-
threads <<
|
110
|
+
threads << Thread.new do
|
111
|
+
Thread.current.abort_on_exception = true
|
112
|
+
|
87
113
|
0.upto(5) do |ic|
|
88
114
|
user = $ob.add(:User, {:username => "User #{tc}-#{ic}"})
|
89
115
|
raise "No user returned." if !user
|
@@ -123,7 +149,9 @@ describe "Objects" do
|
|
123
149
|
|
124
150
|
threads = []
|
125
151
|
0.upto(5) do
|
126
|
-
threads <<
|
152
|
+
threads << Thread.new do
|
153
|
+
Thread.current.abort_on_exception = true
|
154
|
+
|
127
155
|
0.upto(5) do
|
128
156
|
ret = $ob2.add(:Group, {:groupname => "User 1"}, {:skip_ret => true})
|
129
157
|
raise "Expected empty return but got something: #{ret}" if ret
|
@@ -142,7 +170,9 @@ describe "Objects" do
|
|
142
170
|
|
143
171
|
#Moved from "knjrbfw_spec.rb"
|
144
172
|
it "should be able to generate a sample SQLite database and add a sample table, with sample columns and with a sample index to it" do
|
145
|
-
|
173
|
+
require 'tmpdir'
|
174
|
+
|
175
|
+
$db_path = "#{Dir.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
|
146
176
|
$db = Baza::Db.new(
|
147
177
|
:type => :sqlite3,
|
148
178
|
:path => $db_path,
|
@@ -192,7 +222,7 @@ describe "Objects" do
|
|
192
222
|
table = $db.tables[:Project]
|
193
223
|
|
194
224
|
indexes = table.indexes
|
195
|
-
raise "Could not find the sample-index 'category_id' that should have been created."
|
225
|
+
raise "Could not find the sample-index 'category_id' that should have been created." unless indexes[:Project__category_id]
|
196
226
|
|
197
227
|
|
198
228
|
#If we insert a row the ID should increase and the name should be the same as inserted (or something is very very wrong)...
|
@@ -211,35 +241,6 @@ describe "Objects" do
|
|
211
241
|
end
|
212
242
|
|
213
243
|
it "should be able to automatic generate methods on datarow-classes (has_many, has_one)." do
|
214
|
-
class Project < Baza::Model
|
215
|
-
has_many [
|
216
|
-
{:class => :Task, :col => :project_id, :depends => true}
|
217
|
-
]
|
218
|
-
end
|
219
|
-
|
220
|
-
class Task < Baza::Model
|
221
|
-
has_one [
|
222
|
-
{:class => :Person, :required => true},
|
223
|
-
:Project
|
224
|
-
]
|
225
|
-
end
|
226
|
-
|
227
|
-
class Person < Baza::Model
|
228
|
-
has_one [:Project]
|
229
|
-
|
230
|
-
has_many [
|
231
|
-
{:class => :Timelog, :autozero => true}
|
232
|
-
]
|
233
|
-
|
234
|
-
def html
|
235
|
-
return self[:name]
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
|
-
class Timelog < Baza::Model
|
240
|
-
|
241
|
-
end
|
242
|
-
|
243
244
|
$ob = Baza::ModelHandler.new(:db => $db, :datarow => true, :require => false)
|
244
245
|
|
245
246
|
$ob.add(:Person, {
|
@@ -312,13 +313,9 @@ describe "Objects" do
|
|
312
313
|
end
|
313
314
|
|
314
315
|
it "should be able to generate lists for inputs" do
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
:type => :select,
|
319
|
-
:default => 1,
|
320
|
-
:opts => $ob.list_optshash(:Task)
|
321
|
-
}])
|
316
|
+
list = $ob.list_optshash(:Task)
|
317
|
+
list.length.should eq 1
|
318
|
+
list[1].should eq 'Test task'
|
322
319
|
end
|
323
320
|
|
324
321
|
it "should be able to connect to objects 'no-html' callback and test it." do
|
@@ -408,7 +405,8 @@ describe "Objects" do
|
|
408
405
|
end
|
409
406
|
|
410
407
|
it "should delete the temp database again." do
|
411
|
-
|
408
|
+
require 'tmpdir'
|
409
|
+
db_path = "#{Dir.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
|
412
410
|
File.unlink(db_path) if File.exists?(db_path)
|
413
411
|
end
|
414
412
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: baza
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kasper Johansen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: datet
|
@@ -39,47 +39,47 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.0.8
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: array_enumerator
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.0.
|
47
|
+
version: 0.0.7
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.0.
|
54
|
+
version: 0.0.7
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: string-cases
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.0.
|
61
|
+
version: 0.0.1
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.0.
|
68
|
+
version: 0.0.1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: event_handler
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.0.
|
75
|
+
version: 0.0.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.0.
|
82
|
+
version: 0.0.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -224,6 +224,7 @@ files:
|
|
224
224
|
- include/drivers/sqlite3/sqlite3_table.rb
|
225
225
|
- include/drivers/sqlite3/sqlite3_tables.rb
|
226
226
|
- include/dump.rb
|
227
|
+
- include/errors.rb
|
227
228
|
- include/idquery.rb
|
228
229
|
- include/index.rb
|
229
230
|
- include/model.rb
|