sam-dm-core 0.9.10 → 0.9.11
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/.gitignore +18 -0
- data/History.txt +10 -0
- data/MIT-LICENSE +1 -1
- data/Rakefile +4 -4
- data/dm-core.gemspec +40 -0
- data/lib/dm-core.rb +1 -1
- data/lib/dm-core/adapters/data_objects_adapter.rb +2 -2
- data/lib/dm-core/adapters/in_memory_adapter.rb +87 -0
- data/lib/dm-core/adapters/mysql_adapter.rb +1 -1
- data/lib/dm-core/adapters/postgres_adapter.rb +1 -1
- data/lib/dm-core/adapters/sqlite3_adapter.rb +1 -1
- data/lib/dm-core/associations/many_to_one.rb +1 -1
- data/lib/dm-core/associations/one_to_many.rb +18 -18
- data/lib/dm-core/associations/relationship.rb +9 -3
- data/lib/dm-core/associations/relationship_chain.rb +1 -1
- data/lib/dm-core/collection.rb +3 -3
- data/lib/dm-core/model.rb +5 -4
- data/lib/dm-core/resource.rb +11 -5
- data/lib/dm-core/version.rb +1 -1
- data/script/all +3 -4
- data/spec/integration/association_spec.rb +18 -18
- data/spec/integration/association_through_spec.rb +4 -4
- data/spec/integration/associations/many_to_many_spec.rb +9 -9
- data/spec/integration/associations/many_to_one_spec.rb +1 -1
- data/spec/integration/associations/one_to_many_spec.rb +3 -3
- data/spec/integration/collection_spec.rb +2 -2
- data/spec/integration/dependency_queue_spec.rb +1 -1
- data/spec/integration/model_spec.rb +1 -1
- data/spec/integration/mysql_adapter_spec.rb +1 -1
- data/spec/integration/postgres_adapter_spec.rb +16 -16
- data/spec/integration/property_spec.rb +10 -6
- data/spec/integration/query_spec.rb +4 -4
- data/spec/integration/repository_spec.rb +1 -1
- data/spec/integration/sqlite3_adapter_spec.rb +7 -7
- data/spec/integration/sti_spec.rb +6 -6
- data/spec/integration/strategic_eager_loading_spec.rb +14 -11
- data/spec/integration/type_spec.rb +10 -6
- data/spec/lib/logging_helper.rb +11 -11
- data/spec/models/content.rb +16 -0
- data/spec/spec_helper.rb +8 -4
- data/spec/unit/adapters/data_objects_adapter_spec.rb +9 -5
- data/spec/unit/adapters/in_memory_adapter_spec.rb +98 -0
- data/spec/unit/adapters/postgres_adapter_spec.rb +5 -5
- data/spec/unit/associations/many_to_many_spec.rb +2 -2
- data/spec/unit/associations/many_to_one_spec.rb +3 -3
- data/spec/unit/associations/one_to_many_spec.rb +2 -2
- data/spec/unit/associations/relationship_spec.rb +6 -6
- data/spec/unit/associations_spec.rb +21 -21
- data/spec/unit/identity_map_spec.rb +3 -3
- data/spec/unit/is_spec.rb +7 -7
- data/spec/unit/property_spec.rb +7 -7
- data/spec/unit/resource_spec.rb +12 -12
- data/spec/unit/transaction_spec.rb +1 -1
- data/tasks/dm.rb +1 -1
- metadata +10 -5
@@ -1,11 +1,15 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
2
2
|
|
3
|
-
|
4
|
-
require '
|
3
|
+
if RUBY_VERSION >= '1.9.0'
|
4
|
+
require 'csv'
|
5
|
+
else
|
6
|
+
gem 'fastercsv', '~>1.4.0'
|
7
|
+
require 'fastercsv'
|
8
|
+
end
|
5
9
|
|
6
10
|
describe DataMapper::Property do
|
7
11
|
before do
|
8
|
-
module PropertySpec
|
12
|
+
module ::PropertySpec
|
9
13
|
class Resource
|
10
14
|
include DataMapper::Resource
|
11
15
|
end
|
@@ -23,7 +27,7 @@ if ADAPTER
|
|
23
27
|
describe DataMapper::Property, "with #{ADAPTER}" do
|
24
28
|
describe " tracking strategies" do
|
25
29
|
before :all do
|
26
|
-
class Actor
|
30
|
+
class ::Actor
|
27
31
|
include DataMapper::Resource
|
28
32
|
|
29
33
|
property :id, Serial
|
@@ -145,7 +149,7 @@ if ADAPTER
|
|
145
149
|
|
146
150
|
describe "lazy loading" do
|
147
151
|
before :all do
|
148
|
-
class RowBoat
|
152
|
+
class ::RowBoat
|
149
153
|
include DataMapper::Resource
|
150
154
|
property :id, Serial
|
151
155
|
property :notes, String, :lazy => [:notes]
|
@@ -198,7 +202,7 @@ if ADAPTER
|
|
198
202
|
|
199
203
|
describe 'defaults' do
|
200
204
|
before :all do
|
201
|
-
class Catamaran
|
205
|
+
class ::Catamaran
|
202
206
|
include DataMapper::Resource
|
203
207
|
property :id, Serial
|
204
208
|
property :name, String
|
@@ -424,8 +424,8 @@ if ADAPTER
|
|
424
424
|
factory = DataMapper::Associations::Relationship.new(
|
425
425
|
:factory,
|
426
426
|
ADAPTER,
|
427
|
-
|
428
|
-
|
427
|
+
QuerySpec::Vehicle,
|
428
|
+
QuerySpec::Factory,
|
429
429
|
{ :child_key => [ :factory_id ], :parent_key => [ :id ] }
|
430
430
|
)
|
431
431
|
results = repository(ADAPTER) { QuerySpec::Vehicle.all(:links => [ factory ]) }
|
@@ -446,8 +446,8 @@ if ADAPTER
|
|
446
446
|
region = DataMapper::Associations::Relationship.new(
|
447
447
|
:region,
|
448
448
|
ADAPTER,
|
449
|
-
|
450
|
-
|
449
|
+
QuerySpec::Factory,
|
450
|
+
QuerySpec::Region,
|
451
451
|
{ :child_key => [ :region_id ], :parent_key => [ :id ] }
|
452
452
|
)
|
453
453
|
results = repository(ADAPTER) { QuerySpec::Vehicle.all(:links => [ 'factory', region ]) }
|
@@ -3,7 +3,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
3
3
|
if ADAPTER
|
4
4
|
describe DataMapper::Repository, "with #{ADAPTER}" do
|
5
5
|
before :all do
|
6
|
-
class SerialFinderSpec
|
6
|
+
class ::SerialFinderSpec
|
7
7
|
include DataMapper::Resource
|
8
8
|
|
9
9
|
property :id, Serial
|
@@ -8,7 +8,7 @@ if HAS_SQLITE3
|
|
8
8
|
|
9
9
|
describe "auto migrating" do
|
10
10
|
before :all do
|
11
|
-
class Sputnik
|
11
|
+
class ::Sputnik
|
12
12
|
include DataMapper::Resource
|
13
13
|
|
14
14
|
property :id, Serial
|
@@ -30,7 +30,7 @@ if HAS_SQLITE3
|
|
30
30
|
|
31
31
|
describe "querying metadata" do
|
32
32
|
before :all do
|
33
|
-
class Sputnik
|
33
|
+
class ::Sputnik
|
34
34
|
include DataMapper::Resource
|
35
35
|
|
36
36
|
property :id, Serial
|
@@ -76,7 +76,7 @@ if HAS_SQLITE3
|
|
76
76
|
|
77
77
|
describe "handling transactions" do
|
78
78
|
before :all do
|
79
|
-
class Sputnik
|
79
|
+
class ::Sputnik
|
80
80
|
include DataMapper::Resource
|
81
81
|
|
82
82
|
property :id, Serial
|
@@ -108,7 +108,7 @@ if HAS_SQLITE3
|
|
108
108
|
|
109
109
|
describe "reading & writing a database" do
|
110
110
|
before :all do
|
111
|
-
class User
|
111
|
+
class ::User
|
112
112
|
include DataMapper::Resource
|
113
113
|
|
114
114
|
property :id, Serial
|
@@ -134,7 +134,7 @@ if HAS_SQLITE3
|
|
134
134
|
result.should be_kind_of(Array)
|
135
135
|
row = result.first
|
136
136
|
row.should be_kind_of(Struct)
|
137
|
-
row.members.should == %w{id name}
|
137
|
+
row.members.map { |m| m.to_s }.should == %w{id name}
|
138
138
|
|
139
139
|
row.id.should == 1
|
140
140
|
row.name.should == 'Paul'
|
@@ -153,7 +153,7 @@ if HAS_SQLITE3
|
|
153
153
|
|
154
154
|
describe "CRUD for serial Key" do
|
155
155
|
before :all do
|
156
|
-
class VideoGame
|
156
|
+
class ::VideoGame
|
157
157
|
include DataMapper::Resource
|
158
158
|
|
159
159
|
property :id, Serial
|
@@ -255,7 +255,7 @@ if HAS_SQLITE3
|
|
255
255
|
|
256
256
|
describe "CRUD for Composite Key" do
|
257
257
|
before :all do
|
258
|
-
class BankCustomer
|
258
|
+
class ::BankCustomer
|
259
259
|
include DataMapper::Resource
|
260
260
|
|
261
261
|
property :bank, String, :key => true
|
@@ -8,7 +8,7 @@ if HAS_SQLITE3
|
|
8
8
|
|
9
9
|
@property_class = Struct.new(:name, :type, :nullable, :default, :serial)
|
10
10
|
|
11
|
-
class Book
|
11
|
+
class ::Book
|
12
12
|
include DataMapper::Resource
|
13
13
|
|
14
14
|
property :id, Serial
|
@@ -17,23 +17,23 @@ if HAS_SQLITE3
|
|
17
17
|
property :class_type, Discriminator
|
18
18
|
end
|
19
19
|
|
20
|
-
class Propaganda < Book
|
20
|
+
class ::Propaganda < Book
|
21
21
|
property :marxist, Boolean, :nullable => false, :default => false
|
22
22
|
end
|
23
23
|
|
24
|
-
class Fiction < Book
|
24
|
+
class ::Fiction < Book
|
25
25
|
property :series, String
|
26
26
|
end
|
27
27
|
|
28
|
-
class ShortStory < Fiction
|
28
|
+
class ::ShortStory < Fiction
|
29
29
|
property :moral, String
|
30
30
|
end
|
31
31
|
|
32
|
-
class ScienceFiction < Fiction
|
32
|
+
class ::ScienceFiction < Fiction
|
33
33
|
property :aliens, Boolean
|
34
34
|
end
|
35
35
|
|
36
|
-
class SpaceWestern < ScienceFiction
|
36
|
+
class ::SpaceWestern < ScienceFiction
|
37
37
|
property :cowboys, Boolean
|
38
38
|
end
|
39
39
|
end
|
@@ -4,7 +4,7 @@ describe "Strategic Eager Loading" do
|
|
4
4
|
include LoggingHelper
|
5
5
|
|
6
6
|
before :all do
|
7
|
-
class Zoo
|
7
|
+
class ::Zoo
|
8
8
|
include DataMapper::Resource
|
9
9
|
def self.default_repository_name; ADAPTER end
|
10
10
|
|
@@ -14,7 +14,7 @@ describe "Strategic Eager Loading" do
|
|
14
14
|
has n, :exhibits
|
15
15
|
end
|
16
16
|
|
17
|
-
class Exhibit
|
17
|
+
class ::Exhibit
|
18
18
|
include DataMapper::Resource
|
19
19
|
def self.default_repository_name; ADAPTER end
|
20
20
|
|
@@ -26,7 +26,7 @@ describe "Strategic Eager Loading" do
|
|
26
26
|
has n, :animals
|
27
27
|
end
|
28
28
|
|
29
|
-
class Animal
|
29
|
+
class ::Animal
|
30
30
|
include DataMapper::Resource
|
31
31
|
def self.default_repository_name; ADAPTER end
|
32
32
|
|
@@ -67,11 +67,12 @@ describe "Strategic Eager Loading" do
|
|
67
67
|
logger do |log|
|
68
68
|
dallas.exhibits.entries # load all exhibits for zoos in identity_map
|
69
69
|
dallas.exhibits.size.should == 1
|
70
|
+
|
70
71
|
log.readlines.size.should == 1
|
71
|
-
end
|
72
72
|
|
73
|
-
|
74
|
-
|
73
|
+
repository.identity_map(Zoo).keys.sort.should == zoo_ids
|
74
|
+
repository.identity_map(Exhibit).keys.sort.should == exhibit_ids
|
75
|
+
end
|
75
76
|
|
76
77
|
logger do |log|
|
77
78
|
zoos.each { |zoo| zoo.exhibits.entries } # issues no queries
|
@@ -97,16 +98,17 @@ describe "Strategic Eager Loading" do
|
|
97
98
|
logger do |log|
|
98
99
|
reptiles = dallas.exhibits(:name => 'Reptiles')
|
99
100
|
reptiles.size.should == 1
|
101
|
+
|
100
102
|
log.readlines.size.should == 1
|
101
103
|
end
|
102
104
|
|
103
105
|
logger do |log|
|
104
106
|
primates = dallas.exhibits(:name => 'Primates')
|
105
107
|
primates.size.should == 1
|
108
|
+
primates.should_not == reptiles
|
109
|
+
|
106
110
|
log.readlines.size.should == 1
|
107
111
|
end
|
108
|
-
|
109
|
-
primates.should_not == reptiles
|
110
112
|
end
|
111
113
|
end
|
112
114
|
|
@@ -121,11 +123,12 @@ describe "Strategic Eager Loading" do
|
|
121
123
|
|
122
124
|
logger do |log|
|
123
125
|
bear.exhibit
|
126
|
+
|
127
|
+
repository.identity_map(Animal).keys.sort.should == animal_ids
|
128
|
+
repository.identity_map(Exhibit).keys.sort.should == exhibit_ids
|
129
|
+
|
124
130
|
log.readlines.size.should == 1
|
125
131
|
end
|
126
|
-
|
127
|
-
repository.identity_map(Animal).keys.sort.should == animal_ids
|
128
|
-
repository.identity_map(Exhibit).keys.sort.should == exhibit_ids
|
129
132
|
end
|
130
133
|
end
|
131
134
|
|
@@ -1,10 +1,14 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
2
2
|
|
3
|
-
|
4
|
-
require '
|
3
|
+
if RUBY_VERSION >= '1.9.0'
|
4
|
+
require 'csv'
|
5
|
+
else
|
6
|
+
gem 'fastercsv', '~>1.4.0'
|
7
|
+
require 'fastercsv'
|
8
|
+
end
|
5
9
|
|
6
10
|
if ADAPTER
|
7
|
-
module TypeTests
|
11
|
+
module ::TypeTests
|
8
12
|
class Impostor < DataMapper::Type
|
9
13
|
primitive String
|
10
14
|
end
|
@@ -25,7 +29,7 @@ if ADAPTER
|
|
25
29
|
end
|
26
30
|
end
|
27
31
|
|
28
|
-
class Lemon
|
32
|
+
class ::Lemon
|
29
33
|
include DataMapper::Resource
|
30
34
|
|
31
35
|
def self.default_repository_name
|
@@ -37,7 +41,7 @@ if ADAPTER
|
|
37
41
|
property :deleted_at, DataMapper::Types::ParanoidDateTime
|
38
42
|
end
|
39
43
|
|
40
|
-
class Lime
|
44
|
+
class ::Lime
|
41
45
|
include DataMapper::Resource
|
42
46
|
|
43
47
|
def self.default_repository_name
|
@@ -199,7 +203,7 @@ if ADAPTER
|
|
199
203
|
DataMapper::Repository.adapters[:alternate_paranoid] = repository(ADAPTER).adapter.dup
|
200
204
|
|
201
205
|
Object.send(:remove_const, :Orange) if defined?(Orange)
|
202
|
-
class Orange
|
206
|
+
class ::Orange
|
203
207
|
include DataMapper::Resource
|
204
208
|
|
205
209
|
def self.default_repository_name
|
data/spec/lib/logging_helper.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
module LoggingHelper
|
2
|
-
def logger
|
3
|
-
|
4
|
-
|
2
|
+
def logger
|
3
|
+
class << DataMapper.logger
|
4
|
+
attr_writer :log
|
5
|
+
end
|
6
|
+
|
7
|
+
old_log = DataMapper.logger.log
|
5
8
|
|
6
|
-
log_path = File.join(SPEC_ROOT, "tmp.log")
|
7
|
-
handle = File.open(log_path, "a+")
|
8
|
-
current_adapter.logger = DataObjects::Logger.new(log_path, 0)
|
9
9
|
begin
|
10
|
-
|
10
|
+
StringIO.new('') do |io|
|
11
|
+
DataMapper.logger.log = io
|
12
|
+
yield io
|
13
|
+
end
|
11
14
|
ensure
|
12
|
-
|
13
|
-
handle.close
|
14
|
-
current_adapter.logger = old_logger
|
15
|
-
File.delete(log_path)
|
15
|
+
DataMapper.logger.log = old_log
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Content
|
2
|
+
class Dialect
|
3
|
+
include DataMapper::Resource
|
4
|
+
|
5
|
+
property :id, Serial
|
6
|
+
property :name, String
|
7
|
+
property :code, String
|
8
|
+
end
|
9
|
+
|
10
|
+
class Locale
|
11
|
+
include DataMapper::Resource
|
12
|
+
|
13
|
+
property :id, Serial
|
14
|
+
property :name, String
|
15
|
+
end
|
16
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,12 +8,11 @@ SPEC_ROOT = Pathname(__FILE__).dirname.expand_path
|
|
8
8
|
require SPEC_ROOT.parent + 'lib/dm-core'
|
9
9
|
|
10
10
|
# Load the various helpers for the spec suite
|
11
|
-
Dir[DataMapper.root / 'spec' / 'lib' / '*.rb'].each do |file|
|
11
|
+
Dir[(DataMapper.root / 'spec' / 'lib' / '*.rb').to_s].each do |file|
|
12
12
|
require file
|
13
13
|
end
|
14
14
|
|
15
15
|
# setup mock adapters
|
16
|
-
DataMapper.setup(:default, "sqlite3::memory:")
|
17
16
|
DataMapper.setup(:default2, "sqlite3::memory:")
|
18
17
|
|
19
18
|
[ :mock, :legacy, :west_coast, :east_coast ].each do |repository_name|
|
@@ -30,8 +29,13 @@ end
|
|
30
29
|
#
|
31
30
|
def setup_adapter(name, default_uri)
|
32
31
|
begin
|
33
|
-
DataMapper.setup(name, ENV["#{name.to_s.upcase}_SPEC_URI"] || default_uri)
|
34
|
-
|
32
|
+
adapter = DataMapper.setup(name, ENV["#{name.to_s.upcase}_SPEC_URI"] || default_uri)
|
33
|
+
|
34
|
+
if name.to_s == ENV['ADAPTER']
|
35
|
+
Object.const_set('ADAPTER', ENV['ADAPTER'].to_sym)
|
36
|
+
DataMapper::Repository.adapters[:default] = adapter
|
37
|
+
end
|
38
|
+
|
35
39
|
true
|
36
40
|
rescue Exception => e
|
37
41
|
if name.to_s == ENV['ADAPTER']
|
@@ -7,7 +7,7 @@ require DataMapper.root / 'spec' / 'unit' / 'adapters' / 'adapter_shared_spec'
|
|
7
7
|
|
8
8
|
describe DataMapper::Adapters::DataObjectsAdapter do
|
9
9
|
before :all do
|
10
|
-
class Cheese
|
10
|
+
class ::Cheese
|
11
11
|
include DataMapper::Resource
|
12
12
|
property :id, Serial
|
13
13
|
property :name, String, :nullable => false
|
@@ -26,7 +26,7 @@ describe DataMapper::Adapters::DataObjectsAdapter do
|
|
26
26
|
describe "#find_by_sql" do
|
27
27
|
|
28
28
|
before do
|
29
|
-
class Plupp
|
29
|
+
class ::Plupp
|
30
30
|
include DataMapper::Resource
|
31
31
|
property :id, Integer, :key => true
|
32
32
|
property :name, String
|
@@ -34,7 +34,7 @@ describe DataMapper::Adapters::DataObjectsAdapter do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
it "should be added to DataMapper::Model" do
|
37
|
-
DataMapper::Model.instance_methods.include?("find_by_sql").should == true
|
37
|
+
DataMapper::Model.instance_methods.map { |m| m.to_s }.include?("find_by_sql").should == true
|
38
38
|
Plupp.should respond_to(:find_by_sql)
|
39
39
|
end
|
40
40
|
|
@@ -73,7 +73,11 @@ describe DataMapper::Adapters::DataObjectsAdapter do
|
|
73
73
|
end
|
74
74
|
|
75
75
|
it "should accept a Query argument with or without options hash" do
|
76
|
-
|
76
|
+
if ADAPTER == :mysql
|
77
|
+
@connection.should_receive(:create_command).twice.with('SELECT `name` FROM `plupps` WHERE (`name` = ?) ORDER BY `id`').and_return(@command)
|
78
|
+
else
|
79
|
+
@connection.should_receive(:create_command).twice.with('SELECT "name" FROM "plupps" WHERE ("name" = ?) ORDER BY "id"').and_return(@command)
|
80
|
+
end
|
77
81
|
@command.should_receive(:execute_reader).twice.with('my pretty plur').and_return(@reader)
|
78
82
|
Plupp.should_receive(:repository).any_number_of_times.and_return(@repository)
|
79
83
|
Plupp.should_receive(:repository).any_number_of_times.with(:plupp_repo).and_return(@repository)
|
@@ -573,7 +577,7 @@ describe DataMapper::Adapters::DataObjectsAdapter do
|
|
573
577
|
|
574
578
|
result = @adapter.query('SQL STRING')
|
575
579
|
|
576
|
-
result.first.members.should == %w
|
580
|
+
result.first.members.map { |m| m.to_s }.should == %w[ id user_name age ]
|
577
581
|
end
|
578
582
|
|
579
583
|
it 'should convert each row into the struct' do
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', "..", 'spec_helper'))
|
2
|
+
|
3
|
+
describe DataMapper::Adapters::InMemoryAdapter do
|
4
|
+
before do
|
5
|
+
DataMapper.setup(:inmem, :adapter => 'in_memory')
|
6
|
+
|
7
|
+
class ::Heffalump
|
8
|
+
include DataMapper::Resource
|
9
|
+
|
10
|
+
def self.default_repository_name
|
11
|
+
:inmem
|
12
|
+
end
|
13
|
+
|
14
|
+
property :color, String, :key => true # TODO: Drop the 'must have a key' limitation
|
15
|
+
property :num_spots, Integer
|
16
|
+
property :striped, Boolean
|
17
|
+
end
|
18
|
+
|
19
|
+
@heff1 = Heffalump.create(:color => 'Black', :num_spots => 0, :striped => true)
|
20
|
+
@heff2 = Heffalump.create(:color => 'Brown', :num_spots => 25, :striped => false)
|
21
|
+
@heff3 = Heffalump.create(:color => 'Blue', :num_spots => nil, :striped => false)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should successfully save an object' do
|
25
|
+
@heff1.new_record?.should be_false
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should be able to get the object' do
|
29
|
+
Heffalump.get('Black').should == @heff1
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should be able to get all the objects' do
|
33
|
+
Heffalump.all.should == [@heff1, @heff2, @heff3]
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should be able to search for objects with equal value' do
|
37
|
+
Heffalump.all(:striped => true).should == [@heff1]
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should be able to search for objects included in an array of values' do
|
41
|
+
Heffalump.all(:num_spots => [ 25, 50, 75, 100 ]).should == [@heff2]
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should be able to search for objects included in a range of values' do
|
45
|
+
Heffalump.all(:num_spots => 25..100).should == [@heff2]
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should be able to search for objects with nil value' do
|
49
|
+
Heffalump.all(:num_spots => nil).should == [@heff3]
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should be able to search for objects with not equal value' do
|
53
|
+
Heffalump.all(:striped.not => true).should == [@heff2, @heff3]
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should be able to search for objects not included in an array of values' do
|
57
|
+
Heffalump.all(:num_spots.not => [ 25, 50, 75, 100 ]).should == [@heff1, @heff3]
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should be able to search for objects not included in a range of values' do
|
61
|
+
Heffalump.all(:num_spots.not => 25..100).should == [@heff1, @heff3]
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should be able to search for objects with not nil value' do
|
65
|
+
Heffalump.all(:num_spots.not => nil).should == [@heff1, @heff2]
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should be able to search for objects that match value' do
|
69
|
+
Heffalump.all(:color.like => 'Bl').should == [@heff1, @heff3]
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should be able to search for objects with value greater than' do
|
73
|
+
Heffalump.all(:num_spots.gt => 0).should == [@heff2]
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'should be able to search for objects with value greater than or equal to' do
|
77
|
+
Heffalump.all(:num_spots.gte => 0).should == [@heff1, @heff2]
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should be able to search for objects with value less than' do
|
81
|
+
Heffalump.all(:num_spots.lt => 1).should == [@heff1]
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'should be able to search for objects with value less than or equal to' do
|
85
|
+
Heffalump.all(:num_spots.lte => 0).should == [@heff1]
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'should be able to update an object' do
|
89
|
+
@heff1.num_spots = 10
|
90
|
+
@heff1.save
|
91
|
+
Heffalump.get('Black').num_spots.should == 10
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'should be able to destroy an object' do
|
95
|
+
@heff1.destroy
|
96
|
+
Heffalump.all.size.should == 2
|
97
|
+
end
|
98
|
+
end
|