ribs 0.0.1 → 0.0.2
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/README +54 -24
- data/Rakefile +1 -1
- data/lib/ribs.jar +0 -0
- data/lib/ribs.rb +32 -11
- data/lib/ribs/db.rb +10 -10
- data/lib/ribs/definition.rb +115 -151
- data/lib/ribs/{session.rb → handle.rb} +30 -24
- data/lib/ribs/repository.rb +243 -0
- data/lib/ribs/rib.rb +100 -0
- data/test/artist_spec.rb +22 -20
- data/test/define_accessors_spec.rb +27 -0
- data/test/define_model_spec.rb +41 -0
- data/test/identity_map_spec.rb +63 -0
- data/test/repository_spec.rb +79 -0
- data/test/rib_spec.rb +73 -0
- data/test/simple_select_spec.rb +22 -22
- data/test/test_helper.rb +89 -8
- data/test/track_spec.rb +90 -78
- metadata +10 -4
- data/lib/ribs/meat.rb +0 -33
data/test/artist_spec.rb
CHANGED
@@ -1,25 +1,27 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
2
|
|
3
3
|
class Artist
|
4
|
-
Ribs!
|
4
|
+
Ribs! :identity_map => false
|
5
|
+
attr_accessor :id
|
6
|
+
attr_accessor :name
|
5
7
|
end
|
6
8
|
|
7
9
|
describe Artist do
|
8
10
|
it "should be able to find all artists" do
|
9
|
-
Artist.
|
11
|
+
R(Artist).all.length.should == 3
|
10
12
|
end
|
11
13
|
|
12
14
|
it "should return correct value and type for id property" do
|
13
|
-
Artist.
|
15
|
+
R(Artist).all.map { |a| a.id }.sort.should == [1,2,3]
|
14
16
|
end
|
15
17
|
|
16
18
|
it "should return correct value and type for name property" do
|
17
|
-
Artist.
|
19
|
+
R(Artist).all.map { |a| a.name }.sort.should == ["David Bowie","New Model Army","Public Image Ltd"]
|
18
20
|
end
|
19
21
|
|
20
22
|
it "should only have the appropriate methods defined" do
|
21
23
|
methods = (Artist.instance_methods - Object.instance_methods).sort
|
22
|
-
methods.should == ['
|
24
|
+
methods.should == ['id=', 'name', 'name=']
|
23
25
|
end
|
24
26
|
|
25
27
|
it "should be possible to create a new instance by setting properties" do
|
@@ -27,8 +29,8 @@ describe Artist do
|
|
27
29
|
artist = Artist.new
|
28
30
|
artist.id = 4
|
29
31
|
artist.name = "Assemblage 23"
|
30
|
-
artist.save
|
31
|
-
artist2 = Artist.
|
32
|
+
R(artist).save
|
33
|
+
artist2 = R(Artist).get(4)
|
32
34
|
artist2.should_not be_nil
|
33
35
|
artist2.id.should == 4
|
34
36
|
artist2.name.should == "Assemblage 23"
|
@@ -39,9 +41,9 @@ describe Artist do
|
|
39
41
|
|
40
42
|
it "should be possible to create a new instance by giving properties to new" do
|
41
43
|
begin
|
42
|
-
artist = Artist.new :id => 4, :name => "Assemblage 23"
|
43
|
-
artist.save
|
44
|
-
artist2 = Artist.
|
44
|
+
artist = R(Artist).new :id => 4, :name => "Assemblage 23"
|
45
|
+
R(artist).save
|
46
|
+
artist2 = R(Artist).get(4)
|
45
47
|
artist2.should_not be_nil
|
46
48
|
artist2.id.should == 4
|
47
49
|
artist2.name.should == "Assemblage 23"
|
@@ -52,8 +54,8 @@ describe Artist do
|
|
52
54
|
|
53
55
|
it "should be possible to create a new instance by using create" do
|
54
56
|
begin
|
55
|
-
Artist.create :id => 4, :name => "Assemblage 23"
|
56
|
-
artist = Artist.
|
57
|
+
R(Artist).create :id => 4, :name => "Assemblage 23"
|
58
|
+
artist = R(Artist).get(4)
|
57
59
|
artist.should_not be_nil
|
58
60
|
artist.id.should == 4
|
59
61
|
artist.name.should == "Assemblage 23"
|
@@ -64,11 +66,11 @@ describe Artist do
|
|
64
66
|
|
65
67
|
it "should be possible to update name property on existing bean" do
|
66
68
|
begin
|
67
|
-
artist = Artist.
|
69
|
+
artist = R(Artist).get(2)
|
68
70
|
artist.name = "U2"
|
69
|
-
Artist.
|
70
|
-
artist.save
|
71
|
-
Artist.
|
71
|
+
R(Artist).get(2).name.should == "New Model Army"
|
72
|
+
R(artist).save
|
73
|
+
R(Artist).get(2).name.should == "U2"
|
72
74
|
ensure
|
73
75
|
reset_database!
|
74
76
|
end
|
@@ -76,8 +78,8 @@ describe Artist do
|
|
76
78
|
|
77
79
|
it "should be possible to delete existing bean" do
|
78
80
|
begin
|
79
|
-
Artist.
|
80
|
-
Artist.
|
81
|
+
R(R(Artist).get(2)).destroy!
|
82
|
+
R(Artist).get(2).should be_nil
|
81
83
|
ensure
|
82
84
|
reset_database!
|
83
85
|
end
|
@@ -85,8 +87,8 @@ describe Artist do
|
|
85
87
|
|
86
88
|
it "should be possible to delete existing bean by id" do
|
87
89
|
begin
|
88
|
-
Artist.destroy(2)
|
89
|
-
Artist.
|
90
|
+
R(Artist).destroy(2)
|
91
|
+
R(Artist).get(2).should be_nil
|
90
92
|
ensure
|
91
93
|
reset_database!
|
92
94
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
class Person;end
|
4
|
+
|
5
|
+
R(Person).define_accessors
|
6
|
+
|
7
|
+
describe "define_accessors" do
|
8
|
+
it "should define id accessors" do
|
9
|
+
Person.instance_methods.should include("id")
|
10
|
+
Person.instance_methods.should include("id=")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should define given_name accessors" do
|
14
|
+
Person.instance_methods.should include("given_name")
|
15
|
+
Person.instance_methods.should include("given_name=")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should define sur_name accessors" do
|
19
|
+
Person.instance_methods.should include("sur_name")
|
20
|
+
Person.instance_methods.should include("sur_name=")
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should define age accessors" do
|
24
|
+
Person.instance_methods.should include("age")
|
25
|
+
Person.instance_methods.should include("age=")
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
Ribs::define_model :Address do |rib|
|
4
|
+
rib.zip_code :column => :zip
|
5
|
+
end
|
6
|
+
|
7
|
+
describe "define_model" do
|
8
|
+
it "should create a class" do
|
9
|
+
Address.class.should == Class
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should create all the needed properties" do
|
13
|
+
Address.instance_methods.should include("id")
|
14
|
+
Address.instance_methods.should include("id=")
|
15
|
+
Address.instance_methods.should include("street")
|
16
|
+
Address.instance_methods.should include("street=")
|
17
|
+
Address.instance_methods.should include("postal")
|
18
|
+
Address.instance_methods.should include("postal=")
|
19
|
+
Address.instance_methods.should include("zip_code")
|
20
|
+
Address.instance_methods.should include("zip_code=")
|
21
|
+
Address.instance_methods.should_not include("zip")
|
22
|
+
Address.instance_methods.should_not include("zip=")
|
23
|
+
Address.instance_methods.should include("country")
|
24
|
+
Address.instance_methods.should include("country=")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should be a working Ribs class" do
|
28
|
+
R(Address).create :id => 1, :street => "foobar 42"
|
29
|
+
all = R(Address).all
|
30
|
+
all.length.should == 1
|
31
|
+
all[0].id.should == 1
|
32
|
+
all[0].street.should == "foobar 42"
|
33
|
+
all[0].zip_code.should be_nil
|
34
|
+
R(Address).get(1).street.should == all[0].street
|
35
|
+
all[0].street = "foobar 43"
|
36
|
+
R(all[0]).save
|
37
|
+
R(Address).get(1).street.should == "foobar 43"
|
38
|
+
R(Address).destroy(1)
|
39
|
+
R(Address).all.should be_empty
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
class IdentityMapAddress
|
4
|
+
Ribs! :table => :address
|
5
|
+
end
|
6
|
+
|
7
|
+
R(IdentityMapAddress).define_accessors
|
8
|
+
|
9
|
+
class IdentityMapPerson
|
10
|
+
Ribs! :identity_map => false, :table => :person
|
11
|
+
end
|
12
|
+
|
13
|
+
R(IdentityMapPerson).define_accessors
|
14
|
+
|
15
|
+
describe "Identity map" do
|
16
|
+
describe "(disabled)" do
|
17
|
+
before :all do
|
18
|
+
R(IdentityMapPerson).create :id => 1, :sur_name => "DeWhite", :age => 23
|
19
|
+
end
|
20
|
+
|
21
|
+
after :all do
|
22
|
+
R(IdentityMapPerson).destroy 1
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should return different objects with get" do
|
26
|
+
R(IdentityMapPerson).get(1).should_not == R(IdentityMapPerson).get(1)
|
27
|
+
end
|
28
|
+
it "should return different objects with all" do
|
29
|
+
R(IdentityMapPerson).all[0].should_not == R(IdentityMapPerson).all[0]
|
30
|
+
end
|
31
|
+
it "should return different objects with a combination of get and all" do
|
32
|
+
R(IdentityMapPerson).all[0].should_not == R(IdentityMapPerson).get(1)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "(enabled)" do
|
37
|
+
before :each do
|
38
|
+
@@id ||= 0
|
39
|
+
@@id += 1
|
40
|
+
R(IdentityMapAddress).create :id => @@id
|
41
|
+
end
|
42
|
+
|
43
|
+
after :each do
|
44
|
+
R(IdentityMapAddress).destroy @@id
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should return same objects with get" do
|
48
|
+
p [:BLARG, @@id]
|
49
|
+
R(IdentityMapAddress).get(@@id).should == R(IdentityMapAddress).get(@@id)
|
50
|
+
end
|
51
|
+
it "should return same objects with all" do
|
52
|
+
R(IdentityMapAddress).all[0].should == R(IdentityMapAddress).all[0]
|
53
|
+
end
|
54
|
+
it "should return same objects with a combination of get -> all" do
|
55
|
+
obj = R(IdentityMapAddress).all[0]
|
56
|
+
obj.should == R(IdentityMapAddress).get(@@id)
|
57
|
+
end
|
58
|
+
it "should return same objects with a combination of all -> get" do
|
59
|
+
obj = R(IdentityMapAddress).get(@@id)
|
60
|
+
R(IdentityMapAddress).all[0].should == obj
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
class FakeModel;end
|
4
|
+
class FakeModel::FakeSecondModel;end
|
5
|
+
|
6
|
+
describe Ribs::Repository do
|
7
|
+
before :all do
|
8
|
+
R(FakeModel)
|
9
|
+
R(FakeModel::FakeSecondModel)
|
10
|
+
|
11
|
+
R(FakeModel, :flarg)
|
12
|
+
R(FakeModel::FakeSecondModel, :flurg)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should create a Repository class for a model with default db' do
|
16
|
+
Ribs::Repository::DB_default.constants.should include("FakeModel")
|
17
|
+
Ribs::Repository::DB_default::FakeModel.class.should == Class
|
18
|
+
Ribs::Repository::DB_default::FakeModel.ancestors.should include(Ribs::Repository)
|
19
|
+
Ribs::Repository::DB_default::FakeModel.ancestors.should include(Ribs::Repository::InstanceMethods)
|
20
|
+
Ribs::Repository::DB_default::FakeModel.ancestors.should include(Ribs::Repository::FakeModel)
|
21
|
+
(class << Ribs::Repository::DB_default::FakeModel; self; end).ancestors.should include(Ribs::Repository)
|
22
|
+
(class << Ribs::Repository::DB_default::FakeModel; self; end).ancestors.should include(Ribs::Repository::ClassMethods)
|
23
|
+
(class << Ribs::Repository::DB_default::FakeModel; self; end).ancestors.should include(Ribs::Repository::FakeModel::ClassMethods)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should create a Repository class for a model with another db' do
|
27
|
+
Ribs::Repository::DB_flarg.constants.should include("FakeModel")
|
28
|
+
Ribs::Repository::DB_flarg::FakeModel.class.should == Class
|
29
|
+
Ribs::Repository::DB_flarg::FakeModel.ancestors.should include(Ribs::Repository)
|
30
|
+
Ribs::Repository::DB_flarg::FakeModel.ancestors.should include(Ribs::Repository::InstanceMethods)
|
31
|
+
Ribs::Repository::DB_flarg::FakeModel.ancestors.should include(Ribs::Repository::FakeModel)
|
32
|
+
(class << Ribs::Repository::DB_flarg::FakeModel; self; end).ancestors.should include(Ribs::Repository)
|
33
|
+
(class << Ribs::Repository::DB_flarg::FakeModel; self; end).ancestors.should include(Ribs::Repository::ClassMethods)
|
34
|
+
(class << Ribs::Repository::DB_flarg::FakeModel; self; end).ancestors.should include(Ribs::Repository::FakeModel::ClassMethods)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should create a DB place the first time asked for it' do
|
38
|
+
Ribs::Repository::DB_flux
|
39
|
+
Ribs::Repository::DB_flux.class.should == Module
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should only create a db if prefix with the DB_' do
|
43
|
+
proc do
|
44
|
+
Ribs::Repository::Noxic
|
45
|
+
end.should raise_error(NameError)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should return a Repository class for a model' do
|
49
|
+
R(FakeModel).should == Ribs::Repository::DB_default::FakeModel
|
50
|
+
R(FakeModel).model.should == ::FakeModel
|
51
|
+
R(FakeModel).database.should == :default
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'should return an instance of the Repository class for a model instance' do
|
55
|
+
ff = FakeModel.new
|
56
|
+
R(ff).should be_kind_of(Ribs::Repository::DB_default::FakeModel)
|
57
|
+
R(ff).model.should == ff
|
58
|
+
R(ff).database.should == :default
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should return a Repository class for a model with another db' do
|
62
|
+
R(FakeModel, :flarg).should == Ribs::Repository::DB_flarg::FakeModel
|
63
|
+
R(FakeModel, :flarg).model.should == ::FakeModel
|
64
|
+
R(FakeModel, :flarg).database.should == :flarg
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should return an instance of the Repository class for a model instance with another db' do
|
68
|
+
ff = FakeModel.new
|
69
|
+
R(ff, :flarg).should be_kind_of(Ribs::Repository::DB_flarg::FakeModel)
|
70
|
+
R(ff, :flarg).model.should == ff
|
71
|
+
R(ff, :flarg).database.should == :flarg
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should handle submodules correctly' do
|
75
|
+
R(FakeModel::FakeSecondModel).should == Ribs::Repository::DB_default::FakeModel_FakeSecondModel
|
76
|
+
R(FakeModel::FakeSecondModel).model.should == ::FakeModel::FakeSecondModel
|
77
|
+
R(FakeModel::FakeSecondModel).database.should == :default
|
78
|
+
end
|
79
|
+
end
|
data/test/rib_spec.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
describe Ribs::Rib do
|
4
|
+
it "should not have any methods defined except for method_missing" do
|
5
|
+
Ribs::Rib.instance_methods.sort.should ==
|
6
|
+
%w(Ribs! __send__ __id__ rspec_reset
|
7
|
+
rspec_verify should_receive
|
8
|
+
should_not_receive R received_message?
|
9
|
+
stub! __column_data__ method_missing).sort
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should be possible to define a primary key with a method call" do
|
13
|
+
r = Ribs::Rib.new
|
14
|
+
r.track_id.primary_key!
|
15
|
+
r.__column_data__.primary_keys.should == %w(track_id)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should be possible to define a primary key with a hash" do
|
19
|
+
r = Ribs::Rib.new
|
20
|
+
r.track_id :primary_key => true
|
21
|
+
r.__column_data__.primary_keys.should == %w(track_id)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should be possible to define a primary key with a simple symbol" do
|
25
|
+
r = Ribs::Rib.new
|
26
|
+
r.track_id :primary_key
|
27
|
+
r.__column_data__.primary_keys.should == %w(track_id)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should be possible to define more than one primary key" do
|
31
|
+
r = Ribs::Rib.new
|
32
|
+
r.track_id.primary_key!
|
33
|
+
r.fox_id.primary_key!
|
34
|
+
r.__column_data__.primary_keys.should == %w(track_id fox_id)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should handle methods with capital letters" do
|
38
|
+
r = Ribs::Rib.new
|
39
|
+
r.TRACK_ID.primary_key!
|
40
|
+
r.__column_data__.primary_keys.should == %w(TRACK_ID)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should be possible to define a simple columns mapping with a hash" do
|
44
|
+
r = Ribs::Rib.new
|
45
|
+
r.track_id :column => :TRUCK_ID
|
46
|
+
r.__column_data__.columns.should == { 'track_id' => ['TRUCK_ID', {:column => :TRUCK_ID}]}
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should be possible to define a simple columns mapping with a method call" do
|
50
|
+
r = Ribs::Rib.new
|
51
|
+
r.track_id.column = :TRUCK_ID
|
52
|
+
r.__column_data__.columns.should == { 'track_id' => ['TRUCK_ID', {}]}
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should be possible to define something to avoid with a method call" do
|
56
|
+
r = Ribs::Rib.new
|
57
|
+
r.track_id.avoid!
|
58
|
+
r.TRUCK_ID.avoid!
|
59
|
+
r.__column_data__.to_avoid.should == %w(track_id truck_id)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should be possible to define something to avoid with a hash" do
|
63
|
+
r = Ribs::Rib.new
|
64
|
+
r.track_id :avoid => true
|
65
|
+
r.__column_data__.to_avoid.should == %w(track_id)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should be possible to define something to avoid with a simple symbol" do
|
69
|
+
r = Ribs::Rib.new
|
70
|
+
r.track_id :avoid
|
71
|
+
r.__column_data__.to_avoid.should == %w(track_id)
|
72
|
+
end
|
73
|
+
end
|
data/test/simple_select_spec.rb
CHANGED
@@ -2,38 +2,38 @@ require File.join(File.dirname(__FILE__), 'test_helper')
|
|
2
2
|
|
3
3
|
describe "Simple select" do
|
4
4
|
it "should return correct data for ints" do
|
5
|
-
Ribs.
|
6
|
-
|
5
|
+
Ribs.with_handle do |h|
|
6
|
+
h.select("SELECT TRACK_ID, volume FROM DB_TRACK").should == [[1, 13], [2, 13]]
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should return correct data for strings" do
|
11
|
-
Ribs.
|
12
|
-
|
11
|
+
Ribs.with_handle do |h|
|
12
|
+
h.select("SELECT title, filePath FROM DB_TRACK").should == [["foobar", "c:/abc/cde/foo.mp3"], ["flux", "d:/abc/cde/flax.mp3"]]
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should return correct data for times" do
|
17
|
-
Ribs.
|
18
|
-
|
17
|
+
Ribs.with_handle do |h|
|
18
|
+
h.select("SELECT playTime FROM DB_TRACK").should == [[Time.time_at(14,50,0)], [Time.time_at(16,23,0)]]
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should return correct data for dates" do
|
23
|
-
Ribs.
|
24
|
-
|
23
|
+
Ribs.with_handle do |h|
|
24
|
+
h.select("SELECT added FROM DB_TRACK").should == [[Time.local(1984, 12, 13, 0, 0, 0)], [Time.local(1983, 12, 13, 0, 0, 0)]]
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
it "should return correct data for timestamp" do
|
29
|
-
Ribs.
|
30
|
-
|
29
|
+
Ribs.with_handle do |h|
|
30
|
+
h.select("SELECT lastPlayed FROM DB_TRACK").should == [[Time.local(1984, 12, 14, 12,3,11)], [Time.local(1982, 5, 3, 13,3,7)]]
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should return correct data for floats" do
|
35
|
-
result = Ribs.
|
36
|
-
|
35
|
+
result = Ribs.with_handle do |h|
|
36
|
+
h.select("SELECT fraction FROM DB_TRACK")
|
37
37
|
end
|
38
38
|
result[0].length.should == 1
|
39
39
|
result[0][0].should be_close(3.4, 0.00001)
|
@@ -43,8 +43,8 @@ describe "Simple select" do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
it "should return correct data for doubles" do
|
46
|
-
result = Ribs.
|
47
|
-
|
46
|
+
result = Ribs.with_handle do |h|
|
47
|
+
h.select("SELECT otherFraction FROM DB_TRACK")
|
48
48
|
end
|
49
49
|
result[0].length.should == 1
|
50
50
|
result[0][0].should be_close(5.7, 0.00001)
|
@@ -53,27 +53,27 @@ describe "Simple select" do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it "should return correct data for blobs" do
|
56
|
-
Ribs.
|
57
|
-
|
56
|
+
Ribs.with_handle do |h|
|
57
|
+
h.select("SELECT data FROM DB_TRACK").should == [["abc"], ["mumsi"]]
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
61
|
it "should return correct data for clobs" do
|
62
|
-
Ribs.
|
63
|
-
|
62
|
+
Ribs.with_handle do |h|
|
63
|
+
h.select("SELECT description FROM DB_TRACK").should == [["foobar"], ["maxi"]]
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
67
|
it "should return correct data for booleans" do
|
68
|
-
Ribs.
|
68
|
+
Ribs.with_handle do |h|
|
69
69
|
# Not strictly correct - an artifact of a lack in Derby
|
70
|
-
|
70
|
+
h.select("SELECT good FROM DB_TRACK").should == [[1], [0]]
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
74
74
|
it "should return correct data for decimal" do
|
75
|
-
Ribs.
|
76
|
-
|
75
|
+
Ribs.with_handle do |h|
|
76
|
+
h.select("SELECT price FROM DB_TRACK").should == [[BigDecimal.new("13134.11")], [BigDecimal.new("55454.33")]]
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|