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

Commit

Permalink
Minor cleanup to uses of Enumerable#any?
Browse files Browse the repository at this point in the history
* There is a subtle problem with Enumerble#any? in that it will only
  return true if there is at least one true value in the enumerable.
  However, if you have something like [ nil, false ] it will think the
  Array is empty.
* Added Enumerable#empty? to have the same semantics as Array#empty? in
  that it returns true if there is at least one entry in the Enumerable,
  regardless of whether it's true or false.
* Simplified DO adapter empty InclusionComparison test
* Validate FK values using the property key valid? tests instead of
  checking for nil explicitly.
* Added missing files to manifest and gemspec
  • Loading branch information
dkubb committed Oct 27, 2009
1 parent 0e5e389 commit 983a822
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 8 deletions.
4 changes: 4 additions & 0 deletions Manifest.txt
Expand Up @@ -21,13 +21,15 @@ lib/dm-core/adapters/mysql_adapter.rb
lib/dm-core/adapters/oracle_adapter.rb
lib/dm-core/adapters/postgres_adapter.rb
lib/dm-core/adapters/sqlite3_adapter.rb
lib/dm-core/adapters/sqlserver_adapter.rb
lib/dm-core/adapters/yaml_adapter.rb
lib/dm-core/associations/many_to_many.rb
lib/dm-core/associations/many_to_one.rb
lib/dm-core/associations/one_to_many.rb
lib/dm-core/associations/one_to_one.rb
lib/dm-core/associations/relationship.rb
lib/dm-core/collection.rb
lib/dm-core/core_ext/enumerable.rb
lib/dm-core/core_ext/kernel.rb
lib/dm-core/core_ext/symbol.rb
lib/dm-core/identity_map.rb
Expand Down Expand Up @@ -89,6 +91,7 @@ spec/public/resource_spec.rb
spec/public/sel_spec.rb
spec/public/setup_spec.rb
spec/public/shared/association_collection_shared_spec.rb
spec/public/shared/collection_finder_shared_spec.rb
spec/public/shared/collection_shared_spec.rb
spec/public/shared/finder_shared_spec.rb
spec/public/shared/resource_shared_spec.rb
Expand All @@ -101,6 +104,7 @@ spec/semipublic/adapters/mysql_adapter_spec.rb
spec/semipublic/adapters/oracle_adapter_spec.rb
spec/semipublic/adapters/postgres_adapter_spec.rb
spec/semipublic/adapters/sqlite3_adapter_spec.rb
spec/semipublic/adapters/sqlserver_adapter_spec.rb
spec/semipublic/adapters/yaml_adapter_spec.rb
spec/semipublic/associations/many_to_one_spec.rb
spec/semipublic/associations/relationship_spec.rb
Expand Down
4 changes: 2 additions & 2 deletions dm-core.gemspec
Expand Up @@ -6,11 +6,11 @@ Gem::Specification.new do |s|

s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Dan Kubb"]
s.date = %q{2009-10-15}
s.date = %q{2009-10-27}
s.description = %q{Faster, Better, Simpler.}
s.email = ["dan.kubb@gmail.com"]
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
s.files = [".autotest", ".gitignore", "CONTRIBUTING", "FAQ", "History.txt", "MIT-LICENSE", "Manifest.txt", "QUICKLINKS", "README.txt", "Rakefile", "SPECS", "TODO", "deps.rip", "dm-core.gemspec", "lib/dm-core.rb", "lib/dm-core/adapters.rb", "lib/dm-core/adapters/abstract_adapter.rb", "lib/dm-core/adapters/data_objects_adapter.rb", "lib/dm-core/adapters/in_memory_adapter.rb", "lib/dm-core/adapters/mysql_adapter.rb", "lib/dm-core/adapters/oracle_adapter.rb", "lib/dm-core/adapters/postgres_adapter.rb", "lib/dm-core/adapters/sqlite3_adapter.rb", "lib/dm-core/adapters/yaml_adapter.rb", "lib/dm-core/associations/many_to_many.rb", "lib/dm-core/associations/many_to_one.rb", "lib/dm-core/associations/one_to_many.rb", "lib/dm-core/associations/one_to_one.rb", "lib/dm-core/associations/relationship.rb", "lib/dm-core/collection.rb", "lib/dm-core/core_ext/kernel.rb", "lib/dm-core/core_ext/symbol.rb", "lib/dm-core/identity_map.rb", "lib/dm-core/migrations.rb", "lib/dm-core/model.rb", "lib/dm-core/model/descendant_set.rb", "lib/dm-core/model/hook.rb", "lib/dm-core/model/is.rb", "lib/dm-core/model/property.rb", "lib/dm-core/model/relationship.rb", "lib/dm-core/model/scope.rb", "lib/dm-core/property.rb", "lib/dm-core/property_set.rb", "lib/dm-core/query.rb", "lib/dm-core/query/conditions/comparison.rb", "lib/dm-core/query/conditions/operation.rb", "lib/dm-core/query/direction.rb", "lib/dm-core/query/operator.rb", "lib/dm-core/query/path.rb", "lib/dm-core/query/sort.rb", "lib/dm-core/repository.rb", "lib/dm-core/resource.rb", "lib/dm-core/spec/adapter_shared_spec.rb", "lib/dm-core/spec/data_objects_adapter_shared_spec.rb", "lib/dm-core/support/chainable.rb", "lib/dm-core/support/deprecate.rb", "lib/dm-core/support/equalizer.rb", "lib/dm-core/support/logger.rb", "lib/dm-core/support/naming_conventions.rb", "lib/dm-core/transaction.rb", "lib/dm-core/type.rb", "lib/dm-core/types/boolean.rb", "lib/dm-core/types/discriminator.rb", "lib/dm-core/types/object.rb", "lib/dm-core/types/paranoid_boolean.rb", "lib/dm-core/types/paranoid_datetime.rb", "lib/dm-core/types/serial.rb", "lib/dm-core/types/text.rb", "lib/dm-core/version.rb", "script/performance.rb", "script/profile.rb", "spec/lib/adapter_helpers.rb", "spec/lib/collection_helpers.rb", "spec/lib/counter_adapter.rb", "spec/lib/pending_helpers.rb", "spec/lib/rspec_immediate_feedback_formatter.rb", "spec/public/associations/many_to_many_spec.rb", "spec/public/associations/many_to_one_spec.rb", "spec/public/associations/many_to_one_with_boolean_cpk_spec.rb", "spec/public/associations/one_to_many_spec.rb", "spec/public/associations/one_to_one_spec.rb", "spec/public/associations/one_to_one_with_boolean_cpk_spec.rb", "spec/public/collection_spec.rb", "spec/public/migrations_spec.rb", "spec/public/model/relationship_spec.rb", "spec/public/model_spec.rb", "spec/public/property_spec.rb", "spec/public/resource_spec.rb", "spec/public/sel_spec.rb", "spec/public/setup_spec.rb", "spec/public/shared/association_collection_shared_spec.rb", "spec/public/shared/collection_shared_spec.rb", "spec/public/shared/finder_shared_spec.rb", "spec/public/shared/resource_shared_spec.rb", "spec/public/shared/sel_shared_spec.rb", "spec/public/transaction_spec.rb", "spec/public/types/discriminator_spec.rb", "spec/semipublic/adapters/abstract_adapter_spec.rb", "spec/semipublic/adapters/in_memory_adapter_spec.rb", "spec/semipublic/adapters/mysql_adapter_spec.rb", "spec/semipublic/adapters/oracle_adapter_spec.rb", "spec/semipublic/adapters/postgres_adapter_spec.rb", "spec/semipublic/adapters/sqlite3_adapter_spec.rb", "spec/semipublic/adapters/yaml_adapter_spec.rb", "spec/semipublic/associations/many_to_one_spec.rb", "spec/semipublic/associations/relationship_spec.rb", "spec/semipublic/associations_spec.rb", "spec/semipublic/collection_spec.rb", "spec/semipublic/property_spec.rb", "spec/semipublic/query/conditions_spec.rb", "spec/semipublic/query/path_spec.rb", "spec/semipublic/query_spec.rb", "spec/semipublic/resource_spec.rb", "spec/semipublic/shared/condition_shared_spec.rb", "spec/semipublic/shared/resource_shared_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "tasks/ci.rb", "tasks/dm.rb", "tasks/doc.rb", "tasks/gemspec.rb", "tasks/hoe.rb", "tasks/install.rb"]
s.files = [".autotest", ".gitignore", "CONTRIBUTING", "FAQ", "History.txt", "MIT-LICENSE", "Manifest.txt", "QUICKLINKS", "README.txt", "Rakefile", "SPECS", "TODO", "deps.rip", "dm-core.gemspec", "lib/dm-core.rb", "lib/dm-core/adapters.rb", "lib/dm-core/adapters/abstract_adapter.rb", "lib/dm-core/adapters/data_objects_adapter.rb", "lib/dm-core/adapters/in_memory_adapter.rb", "lib/dm-core/adapters/mysql_adapter.rb", "lib/dm-core/adapters/oracle_adapter.rb", "lib/dm-core/adapters/postgres_adapter.rb", "lib/dm-core/adapters/sqlite3_adapter.rb", "lib/dm-core/adapters/sqlserver_adapter.rb", "lib/dm-core/adapters/yaml_adapter.rb", "lib/dm-core/associations/many_to_many.rb", "lib/dm-core/associations/many_to_one.rb", "lib/dm-core/associations/one_to_many.rb", "lib/dm-core/associations/one_to_one.rb", "lib/dm-core/associations/relationship.rb", "lib/dm-core/collection.rb", "lib/dm-core/core_ext/enumerable.rb", "lib/dm-core/core_ext/kernel.rb", "lib/dm-core/core_ext/symbol.rb", "lib/dm-core/identity_map.rb", "lib/dm-core/migrations.rb", "lib/dm-core/model.rb", "lib/dm-core/model/descendant_set.rb", "lib/dm-core/model/hook.rb", "lib/dm-core/model/is.rb", "lib/dm-core/model/property.rb", "lib/dm-core/model/relationship.rb", "lib/dm-core/model/scope.rb", "lib/dm-core/property.rb", "lib/dm-core/property_set.rb", "lib/dm-core/query.rb", "lib/dm-core/query/conditions/comparison.rb", "lib/dm-core/query/conditions/operation.rb", "lib/dm-core/query/direction.rb", "lib/dm-core/query/operator.rb", "lib/dm-core/query/path.rb", "lib/dm-core/query/sort.rb", "lib/dm-core/repository.rb", "lib/dm-core/resource.rb", "lib/dm-core/spec/adapter_shared_spec.rb", "lib/dm-core/spec/data_objects_adapter_shared_spec.rb", "lib/dm-core/support/chainable.rb", "lib/dm-core/support/deprecate.rb", "lib/dm-core/support/equalizer.rb", "lib/dm-core/support/logger.rb", "lib/dm-core/support/naming_conventions.rb", "lib/dm-core/transaction.rb", "lib/dm-core/type.rb", "lib/dm-core/types/boolean.rb", "lib/dm-core/types/discriminator.rb", "lib/dm-core/types/object.rb", "lib/dm-core/types/paranoid_boolean.rb", "lib/dm-core/types/paranoid_datetime.rb", "lib/dm-core/types/serial.rb", "lib/dm-core/types/text.rb", "lib/dm-core/version.rb", "script/performance.rb", "script/profile.rb", "spec/lib/adapter_helpers.rb", "spec/lib/collection_helpers.rb", "spec/lib/counter_adapter.rb", "spec/lib/pending_helpers.rb", "spec/lib/rspec_immediate_feedback_formatter.rb", "spec/public/associations/many_to_many_spec.rb", "spec/public/associations/many_to_one_spec.rb", "spec/public/associations/many_to_one_with_boolean_cpk_spec.rb", "spec/public/associations/one_to_many_spec.rb", "spec/public/associations/one_to_one_spec.rb", "spec/public/associations/one_to_one_with_boolean_cpk_spec.rb", "spec/public/collection_spec.rb", "spec/public/migrations_spec.rb", "spec/public/model/relationship_spec.rb", "spec/public/model_spec.rb", "spec/public/property_spec.rb", "spec/public/resource_spec.rb", "spec/public/sel_spec.rb", "spec/public/setup_spec.rb", "spec/public/shared/association_collection_shared_spec.rb", "spec/public/shared/collection_finder_shared_spec.rb", "spec/public/shared/collection_shared_spec.rb", "spec/public/shared/finder_shared_spec.rb", "spec/public/shared/resource_shared_spec.rb", "spec/public/shared/sel_shared_spec.rb", "spec/public/transaction_spec.rb", "spec/public/types/discriminator_spec.rb", "spec/semipublic/adapters/abstract_adapter_spec.rb", "spec/semipublic/adapters/in_memory_adapter_spec.rb", "spec/semipublic/adapters/mysql_adapter_spec.rb", "spec/semipublic/adapters/oracle_adapter_spec.rb", "spec/semipublic/adapters/postgres_adapter_spec.rb", "spec/semipublic/adapters/sqlite3_adapter_spec.rb", "spec/semipublic/adapters/sqlserver_adapter_spec.rb", "spec/semipublic/adapters/yaml_adapter_spec.rb", "spec/semipublic/associations/many_to_one_spec.rb", "spec/semipublic/associations/relationship_spec.rb", "spec/semipublic/associations_spec.rb", "spec/semipublic/collection_spec.rb", "spec/semipublic/property_spec.rb", "spec/semipublic/query/conditions_spec.rb", "spec/semipublic/query/path_spec.rb", "spec/semipublic/query_spec.rb", "spec/semipublic/resource_spec.rb", "spec/semipublic/shared/condition_shared_spec.rb", "spec/semipublic/shared/resource_shared_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "tasks/ci.rb", "tasks/dm.rb", "tasks/doc.rb", "tasks/gemspec.rb", "tasks/hoe.rb", "tasks/install.rb"]
s.homepage = %q{http://datamapper.org}
s.rdoc_options = ["--main", "README.txt"]
s.require_paths = ["lib"]
Expand Down
1 change: 1 addition & 0 deletions lib/dm-core.rb
Expand Up @@ -64,6 +64,7 @@
require dir / 'transaction' # TODO: move to dm-more
require dir / 'version'

require dir / 'core_ext' / 'enumerable'
require dir / 'core_ext' / 'kernel' # TODO: do not load automatically
require dir / 'core_ext' / 'symbol' # TODO: do not load automatically

Expand Down
10 changes: 6 additions & 4 deletions lib/dm-core/adapters/data_objects_adapter.rb
Expand Up @@ -615,10 +615,12 @@ def comparison_statement(comparison, qualify)
else
return conditions_statement(comparison.foreign_key_mapping, qualify)
end
elsif @negated && comparison.slug == :in && !value.any?
return [ '1 = 1' ] # match everything
elsif comparison.slug == :in && !value.any?
return [ '1 = 0' ] # match nothing
elsif comparison.slug == :in && value.empty?
if @negated
return [ '1 = 1' ] # match everything
else
return [ '1 = 0' ] # match nothing
end
end

operator = comparison_operator(comparison)
Expand Down
6 changes: 6 additions & 0 deletions lib/dm-core/core_ext/enumerable.rb
@@ -0,0 +1,6 @@
module Enumerable
def empty?
each { return false }
true
end
end
2 changes: 1 addition & 1 deletion lib/dm-core/query.rb
Expand Up @@ -55,7 +55,7 @@ def self.target_conditions(source, source_key, target_key)
Array(source).each do |resource|
next unless source_key.loaded?(resource)
source_value = source_key.get!(resource)
next if source_value.any? { |value| value.nil? }
next unless target_key.valid?(source_value)
source_values << source_value
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/dm-core/query/conditions/comparison.rb
Expand Up @@ -511,7 +511,7 @@ def valid?
when Range
loaded_value.any? && valid_for_subject?(loaded_value.first) && valid_for_subject?(loaded_value.last)
when Enumerable
(loaded_value.any? || negated?) && loaded_value.all? { |val| valid_for_subject?(val) }
(!loaded_value.empty? || negated?) && loaded_value.all? { |val| valid_for_subject?(val) }
else
false
end
Expand Down

0 comments on commit 983a822

Please sign in to comment.