Skip to content
This repository has been archived by the owner on Apr 17, 2018. It is now read-only.

Commit

Permalink
Added repository name as an argument to methods where it is optional
Browse files Browse the repository at this point in the history
  • Loading branch information
Dan Kubb committed Jun 12, 2008
1 parent 73c9eb2 commit 5990fda
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 31 deletions.
16 changes: 8 additions & 8 deletions lib/dm-core/adapters/data_objects_adapter.rb
Expand Up @@ -499,7 +499,7 @@ def drop_table_statement(model)
# TODO: move to dm-more/dm-migrations
def create_index_statements(model)
table_name = model.storage_name(name)
model.properties.indexes.collect do |index_name, properties|
model.properties(name).indexes.collect do |index_name, properties|
"CREATE INDEX #{quote_column_name('index_' + table_name + '_' + index_name)} ON " +
"#{quote_table_name(table_name)} (#{properties.collect{|p| quote_column_name(p)}.join ','})"
end
Expand All @@ -508,7 +508,7 @@ def create_index_statements(model)
# TODO: move to dm-more/dm-migrations
def create_unique_index_statements(model)
table_name = model.storage_name(name)
model.properties.unique_indexes.collect do |index_name, properties|
model.properties(name).unique_indexes.collect do |index_name, properties|
"CREATE UNIQUE INDEX #{quote_column_name('unique_index_' + table_name + '_' + index_name)} ON " +
"#{quote_table_name(table_name)} (#{properties.collect{|p| quote_column_name(p)}.join ','})"
end
Expand Down Expand Up @@ -649,23 +649,23 @@ def find_by_sql(*args)
end
end

the_repository = repository(repository_name)
raise "#find_by_sql only available for Repositories served by a DataObjectsAdapter" unless the_repository.adapter.is_a?(DataMapper::Adapters::DataObjectsAdapter)
repository = repository(repository_name)
raise "#find_by_sql only available for Repositories served by a DataObjectsAdapter" unless repository.adapter.is_a?(DataMapper::Adapters::DataObjectsAdapter)

if query
sql = the_repository.adapter.send(:read_statement, query)
sql = repository.adapter.send(:read_statement, query)
bind_values = query.bind_values
end

raise "#find_by_sql requires a query of some kind to work" unless sql

properties ||= self.properties
properties ||= self.properties(repository.name)

Collection.new(Query.new(repository, self)) do |collection|
repository.adapter.send(:with_connection) do |connection|
begin
command = connection.create_command(sql)
command = connection.create_command(sql)

begin
reader = command.execute_reader(*bind_values)

while(reader.next!)
Expand Down
4 changes: 2 additions & 2 deletions lib/dm-core/adapters/sqlite3_adapter.rb
Expand Up @@ -56,8 +56,8 @@ def create_table_statement(model)
# skip adding the primary key if one of the columns is serial. In
# SQLite the serial column must be the primary key, so it has already
# been defined
unless model.properties.any? { |p| p.serial? }
if (key = model.properties.key).any?
unless model.properties(name).any? { |p| p.serial? }
if (key = model.properties(name).key).any?
statement << ", PRIMARY KEY(#{ key.collect { |p| quote_column_name(p.field(name)) } * ', '})"
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/dm-core/query.rb
Expand Up @@ -128,7 +128,7 @@ def reverse

def reverse!
# set the default sort order
order = normalize_order(self.order.any? ? self.order : model.default_order)
order = normalize_order(self.order.any? ? self.order : model.default_order(repository.name))

# reverse the sort order
update(:order => order.map { |o| o.reverse })
Expand Down
21 changes: 4 additions & 17 deletions lib/dm-core/resource.rb
Expand Up @@ -296,7 +296,7 @@ def save(context = :default)

child_associations.each { |a| a.save }

success = if dirty? || (new_record? && model.key.any? { |p| p.serial? })
success = if dirty? || (new_record? && model.key(repository.name).any? { |p| p.serial? })
new_record? ? create : update
end

Expand Down Expand Up @@ -568,11 +568,11 @@ def initialize(attributes = {}) # :nodoc:
end

def assert_valid_model # :nodoc:
if model.properties.empty? && model.relationships.empty?
if model.properties(repository.name).empty? && model.relationships(repository.name).empty?
raise IncompleteResourceError, "#{model.name} must have at least one property or relationship to be initialized."
end

if model.properties.key.empty?
if model.properties(repository.name).key.empty?
raise IncompleteResourceError, "#{model.name} must have a key."
end
end
Expand Down Expand Up @@ -762,32 +762,19 @@ def inheritance_property(repository_name = default_repository_name)
@properties[repository_name].inheritance_property
end

##
#
# @see Repository#get
def get(*key)
repository.identity_map(self).get(key) || first(to_query(repository, key))
end

##
#
# @see Resource#get
# @raise <ObjectNotFoundError> "could not find .... with key: ...."
def get!(*key)
get(*key) || raise(ObjectNotFoundError, "Could not find #{self.name} with key #{key.inspect}")
end

##
#
# @see Repository#all
def all(query = {})
repository = repository_for_finder(query)
repository.read_many(scoped_query(repository, query))
end

##
#
# @see Repository#first
def first(*args)
query = args.last.respond_to?(:merge) ? args.pop : {}
repository = repository_for_finder(query)
Expand All @@ -809,7 +796,7 @@ def first_or_create(query, attributes = {})
resource = allocate
query = query.dup

self.properties.key.each do |property|
properties(repository.name).key.each do |property|
if value = query.delete(property.name)
resource.send("#{property.name}=", value)
end
Expand Down
6 changes: 3 additions & 3 deletions spec/unit/query_spec.rb
Expand Up @@ -8,7 +8,7 @@
[ :limit, 1 ],
[ :limit, 2 ],
[ :order, [ DataMapper::Query::Direction.new(Article.properties[:created_at], :desc) ] ],
[ :fields, Article.properties(:default).defaults.to_a ], # TODO: fill in allowed default value
[ :fields, Article.properties.defaults.to_a ], # TODO: fill in allowed default value
#[ :links, [ :stub ] ], # TODO: fill in allowed default value
[ :includes, [ :stub ] ], # TODO: fill in allowed default value
]
Expand Down Expand Up @@ -162,7 +162,7 @@ class Acl

describe 'should normalize' do
it '#fields' do
DataMapper::Query.new(@repository, Article, :fields => [:id]).fields.should == Article.properties(:default).slice(:id)
DataMapper::Query.new(@repository, Article, :fields => [:id]).fields.should == Article.properties.slice(:id)
end
end

Expand Down Expand Up @@ -287,7 +287,7 @@ class Acl

it "#fields with other fields unique values" do
other = DataMapper::Query.new(@repository, Article, :fields => [ :blog_id ])
@query.update(other).fields.should == Article.properties(:default).slice(:blog_id)
@query.update(other).fields.should == Article.properties.slice(:blog_id)
end

it '#conditions with other conditions when they are unique' do
Expand Down

0 comments on commit 5990fda

Please sign in to comment.