sbf-dm-core 1.3.0.beta
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.
- checksums.yaml +7 -0
- data/.autotest +29 -0
- data/.document +5 -0
- data/.gitignore +44 -0
- data/.rspec +1 -0
- data/.rubocop.yml +468 -0
- data/.travis.yml +57 -0
- data/.yardopts +1 -0
- data/Gemfile +70 -0
- data/LICENSE +20 -0
- data/README.md +269 -0
- data/Rakefile +4 -0
- data/dm-core.gemspec +21 -0
- data/lib/dm-core/adapters/abstract_adapter.rb +233 -0
- data/lib/dm-core/adapters/in_memory_adapter.rb +110 -0
- data/lib/dm-core/adapters.rb +249 -0
- data/lib/dm-core/associations/many_to_many.rb +477 -0
- data/lib/dm-core/associations/many_to_one.rb +282 -0
- data/lib/dm-core/associations/one_to_many.rb +332 -0
- data/lib/dm-core/associations/one_to_one.rb +84 -0
- data/lib/dm-core/associations/relationship.rb +650 -0
- data/lib/dm-core/backwards.rb +11 -0
- data/lib/dm-core/collection.rb +1486 -0
- data/lib/dm-core/core_ext/kernel.rb +21 -0
- data/lib/dm-core/core_ext/pathname.rb +4 -0
- data/lib/dm-core/core_ext/symbol.rb +10 -0
- data/lib/dm-core/identity_map.rb +6 -0
- data/lib/dm-core/model/hook.rb +99 -0
- data/lib/dm-core/model/is.rb +30 -0
- data/lib/dm-core/model/property.rb +244 -0
- data/lib/dm-core/model/relationship.rb +366 -0
- data/lib/dm-core/model/scope.rb +87 -0
- data/lib/dm-core/model.rb +876 -0
- data/lib/dm-core/property/binary.rb +19 -0
- data/lib/dm-core/property/boolean.rb +35 -0
- data/lib/dm-core/property/class.rb +23 -0
- data/lib/dm-core/property/date.rb +45 -0
- data/lib/dm-core/property/date_time.rb +44 -0
- data/lib/dm-core/property/decimal.rb +47 -0
- data/lib/dm-core/property/discriminator.rb +40 -0
- data/lib/dm-core/property/float.rb +27 -0
- data/lib/dm-core/property/integer.rb +32 -0
- data/lib/dm-core/property/invalid_value_error.rb +17 -0
- data/lib/dm-core/property/lookup.rb +26 -0
- data/lib/dm-core/property/numeric.rb +35 -0
- data/lib/dm-core/property/object.rb +33 -0
- data/lib/dm-core/property/serial.rb +13 -0
- data/lib/dm-core/property/string.rb +47 -0
- data/lib/dm-core/property/text.rb +12 -0
- data/lib/dm-core/property/time.rb +46 -0
- data/lib/dm-core/property/typecast/numeric.rb +32 -0
- data/lib/dm-core/property/typecast/time.rb +33 -0
- data/lib/dm-core/property.rb +856 -0
- data/lib/dm-core/property_set.rb +177 -0
- data/lib/dm-core/query/conditions/comparison.rb +886 -0
- data/lib/dm-core/query/conditions/operation.rb +710 -0
- data/lib/dm-core/query/direction.rb +33 -0
- data/lib/dm-core/query/operator.rb +34 -0
- data/lib/dm-core/query/path.rb +113 -0
- data/lib/dm-core/query/sort.rb +38 -0
- data/lib/dm-core/query.rb +1352 -0
- data/lib/dm-core/relationship_set.rb +69 -0
- data/lib/dm-core/repository.rb +226 -0
- data/lib/dm-core/resource/persistence_state/clean.rb +36 -0
- data/lib/dm-core/resource/persistence_state/deleted.rb +26 -0
- data/lib/dm-core/resource/persistence_state/dirty.rb +91 -0
- data/lib/dm-core/resource/persistence_state/immutable.rb +32 -0
- data/lib/dm-core/resource/persistence_state/persisted.rb +25 -0
- data/lib/dm-core/resource/persistence_state/transient.rb +87 -0
- data/lib/dm-core/resource/persistence_state.rb +70 -0
- data/lib/dm-core/resource.rb +1220 -0
- data/lib/dm-core/spec/lib/adapter_helpers.rb +63 -0
- data/lib/dm-core/spec/lib/collection_helpers.rb +21 -0
- data/lib/dm-core/spec/lib/counter_adapter.rb +38 -0
- data/lib/dm-core/spec/lib/pending_helpers.rb +50 -0
- data/lib/dm-core/spec/lib/spec_helper.rb +74 -0
- data/lib/dm-core/spec/setup.rb +164 -0
- data/lib/dm-core/spec/shared/adapter_spec.rb +366 -0
- data/lib/dm-core/spec/shared/public/property_spec.rb +229 -0
- data/lib/dm-core/spec/shared/resource_spec.rb +1221 -0
- data/lib/dm-core/spec/shared/sel_spec.rb +111 -0
- data/lib/dm-core/spec/shared/semipublic/property_spec.rb +184 -0
- data/lib/dm-core/spec/shared/semipublic/query/conditions/abstract_comparison_spec.rb +261 -0
- data/lib/dm-core/support/assertions.rb +8 -0
- data/lib/dm-core/support/chainable.rb +18 -0
- data/lib/dm-core/support/deprecate.rb +12 -0
- data/lib/dm-core/support/descendant_set.rb +89 -0
- data/lib/dm-core/support/equalizer.rb +48 -0
- data/lib/dm-core/support/ext/array.rb +22 -0
- data/lib/dm-core/support/ext/blank.rb +25 -0
- data/lib/dm-core/support/ext/hash.rb +67 -0
- data/lib/dm-core/support/ext/module.rb +47 -0
- data/lib/dm-core/support/ext/object.rb +57 -0
- data/lib/dm-core/support/ext/string.rb +24 -0
- data/lib/dm-core/support/ext/try_dup.rb +12 -0
- data/lib/dm-core/support/hook.rb +388 -0
- data/lib/dm-core/support/inflections.rb +60 -0
- data/lib/dm-core/support/inflector/inflections.rb +211 -0
- data/lib/dm-core/support/inflector/methods.rb +151 -0
- data/lib/dm-core/support/lazy_array.rb +451 -0
- data/lib/dm-core/support/local_object_space.rb +13 -0
- data/lib/dm-core/support/logger.rb +201 -0
- data/lib/dm-core/support/mash.rb +176 -0
- data/lib/dm-core/support/naming_conventions.rb +109 -0
- data/lib/dm-core/support/ordered_set.rb +381 -0
- data/lib/dm-core/support/subject.rb +33 -0
- data/lib/dm-core/support/subject_set.rb +251 -0
- data/lib/dm-core/version.rb +3 -0
- data/lib/dm-core.rb +274 -0
- data/script/performance.rb +275 -0
- data/script/profile.rb +218 -0
- data/spec/lib/rspec_immediate_feedback_formatter.rb +54 -0
- data/spec/public/associations/many_to_many/read_multiple_join_spec.rb +69 -0
- data/spec/public/associations/many_to_many_spec.rb +197 -0
- data/spec/public/associations/many_to_one_spec.rb +83 -0
- data/spec/public/associations/many_to_one_with_boolean_cpk_spec.rb +40 -0
- data/spec/public/associations/many_to_one_with_custom_fk_spec.rb +49 -0
- data/spec/public/associations/one_to_many_spec.rb +81 -0
- data/spec/public/associations/one_to_one_spec.rb +176 -0
- data/spec/public/associations/one_to_one_with_boolean_cpk_spec.rb +46 -0
- data/spec/public/collection_spec.rb +69 -0
- data/spec/public/finalize_spec.rb +77 -0
- data/spec/public/model/hook_spec.rb +245 -0
- data/spec/public/model/property_spec.rb +91 -0
- data/spec/public/model/relationship_spec.rb +1040 -0
- data/spec/public/model_spec.rb +456 -0
- data/spec/public/property/binary_spec.rb +43 -0
- data/spec/public/property/boolean_spec.rb +21 -0
- data/spec/public/property/class_spec.rb +27 -0
- data/spec/public/property/date_spec.rb +21 -0
- data/spec/public/property/date_time_spec.rb +21 -0
- data/spec/public/property/decimal_spec.rb +23 -0
- data/spec/public/property/discriminator_spec.rb +134 -0
- data/spec/public/property/float_spec.rb +22 -0
- data/spec/public/property/integer_spec.rb +22 -0
- data/spec/public/property/object_spec.rb +117 -0
- data/spec/public/property/serial_spec.rb +22 -0
- data/spec/public/property/string_spec.rb +21 -0
- data/spec/public/property/text_spec.rb +62 -0
- data/spec/public/property/time_spec.rb +21 -0
- data/spec/public/property_spec.rb +333 -0
- data/spec/public/resource/state_spec.rb +72 -0
- data/spec/public/resource_spec.rb +289 -0
- data/spec/public/sel_spec.rb +53 -0
- data/spec/public/setup_spec.rb +145 -0
- data/spec/public/shared/association_collection_shared_spec.rb +309 -0
- data/spec/public/shared/collection_finder_shared_spec.rb +267 -0
- data/spec/public/shared/collection_shared_spec.rb +1637 -0
- data/spec/public/shared/finder_shared_spec.rb +1647 -0
- data/spec/semipublic/adapters/abstract_adapter_spec.rb +30 -0
- data/spec/semipublic/adapters/in_memory_adapter_spec.rb +13 -0
- data/spec/semipublic/associations/many_to_many_spec.rb +94 -0
- data/spec/semipublic/associations/many_to_one_spec.rb +63 -0
- data/spec/semipublic/associations/one_to_many_spec.rb +55 -0
- data/spec/semipublic/associations/one_to_one_spec.rb +53 -0
- data/spec/semipublic/associations/relationship_spec.rb +200 -0
- data/spec/semipublic/associations_spec.rb +177 -0
- data/spec/semipublic/collection_spec.rb +110 -0
- data/spec/semipublic/model_spec.rb +96 -0
- data/spec/semipublic/property/binary_spec.rb +13 -0
- data/spec/semipublic/property/boolean_spec.rb +47 -0
- data/spec/semipublic/property/class_spec.rb +33 -0
- data/spec/semipublic/property/date_spec.rb +43 -0
- data/spec/semipublic/property/date_time_spec.rb +46 -0
- data/spec/semipublic/property/decimal_spec.rb +83 -0
- data/spec/semipublic/property/discriminator_spec.rb +19 -0
- data/spec/semipublic/property/float_spec.rb +82 -0
- data/spec/semipublic/property/integer_spec.rb +82 -0
- data/spec/semipublic/property/lookup_spec.rb +29 -0
- data/spec/semipublic/property/serial_spec.rb +13 -0
- data/spec/semipublic/property/string_spec.rb +13 -0
- data/spec/semipublic/property/text_spec.rb +31 -0
- data/spec/semipublic/property/time_spec.rb +50 -0
- data/spec/semipublic/property_spec.rb +114 -0
- data/spec/semipublic/query/conditions/comparison_spec.rb +1502 -0
- data/spec/semipublic/query/conditions/operation_spec.rb +1296 -0
- data/spec/semipublic/query/path_spec.rb +471 -0
- data/spec/semipublic/query_spec.rb +3665 -0
- data/spec/semipublic/resource/state/clean_spec.rb +89 -0
- data/spec/semipublic/resource/state/deleted_spec.rb +79 -0
- data/spec/semipublic/resource/state/dirty_spec.rb +163 -0
- data/spec/semipublic/resource/state/immutable_spec.rb +107 -0
- data/spec/semipublic/resource/state/transient_spec.rb +163 -0
- data/spec/semipublic/resource/state_spec.rb +230 -0
- data/spec/semipublic/resource_spec.rb +23 -0
- data/spec/semipublic/shared/condition_shared_spec.rb +9 -0
- data/spec/semipublic/shared/resource_shared_spec.rb +198 -0
- data/spec/semipublic/shared/resource_state_shared_spec.rb +91 -0
- data/spec/semipublic/shared/subject_shared_spec.rb +79 -0
- data/spec/spec_helper.rb +34 -0
- data/spec/support/core_ext/hash.rb +10 -0
- data/spec/support/core_ext/inheritable_attributes.rb +46 -0
- data/spec/support/properties/huge_integer.rb +17 -0
- data/spec/unit/array_spec.rb +23 -0
- data/spec/unit/blank_spec.rb +73 -0
- data/spec/unit/data_mapper/ordered_set/append_spec.rb +26 -0
- data/spec/unit/data_mapper/ordered_set/clear_spec.rb +24 -0
- data/spec/unit/data_mapper/ordered_set/delete_spec.rb +28 -0
- data/spec/unit/data_mapper/ordered_set/each_spec.rb +19 -0
- data/spec/unit/data_mapper/ordered_set/empty_spec.rb +20 -0
- data/spec/unit/data_mapper/ordered_set/entries_spec.rb +22 -0
- data/spec/unit/data_mapper/ordered_set/eql_spec.rb +51 -0
- data/spec/unit/data_mapper/ordered_set/equal_value_spec.rb +84 -0
- data/spec/unit/data_mapper/ordered_set/hash_spec.rb +12 -0
- data/spec/unit/data_mapper/ordered_set/include_spec.rb +23 -0
- data/spec/unit/data_mapper/ordered_set/index_spec.rb +28 -0
- data/spec/unit/data_mapper/ordered_set/initialize_spec.rb +32 -0
- data/spec/unit/data_mapper/ordered_set/merge_spec.rb +36 -0
- data/spec/unit/data_mapper/ordered_set/shared/append_spec.rb +24 -0
- data/spec/unit/data_mapper/ordered_set/shared/clear_spec.rb +9 -0
- data/spec/unit/data_mapper/ordered_set/shared/delete_spec.rb +25 -0
- data/spec/unit/data_mapper/ordered_set/shared/each_spec.rb +17 -0
- data/spec/unit/data_mapper/ordered_set/shared/empty_spec.rb +9 -0
- data/spec/unit/data_mapper/ordered_set/shared/entries_spec.rb +9 -0
- data/spec/unit/data_mapper/ordered_set/shared/include_spec.rb +9 -0
- data/spec/unit/data_mapper/ordered_set/shared/index_spec.rb +13 -0
- data/spec/unit/data_mapper/ordered_set/shared/initialize_spec.rb +28 -0
- data/spec/unit/data_mapper/ordered_set/shared/merge_spec.rb +28 -0
- data/spec/unit/data_mapper/ordered_set/shared/size_spec.rb +13 -0
- data/spec/unit/data_mapper/ordered_set/shared/to_ary_spec.rb +11 -0
- data/spec/unit/data_mapper/ordered_set/size_spec.rb +27 -0
- data/spec/unit/data_mapper/ordered_set/to_ary_spec.rb +23 -0
- data/spec/unit/data_mapper/subject_set/append_spec.rb +47 -0
- data/spec/unit/data_mapper/subject_set/clear_spec.rb +34 -0
- data/spec/unit/data_mapper/subject_set/delete_spec.rb +40 -0
- data/spec/unit/data_mapper/subject_set/each_spec.rb +30 -0
- data/spec/unit/data_mapper/subject_set/empty_spec.rb +31 -0
- data/spec/unit/data_mapper/subject_set/entries_spec.rb +31 -0
- data/spec/unit/data_mapper/subject_set/get_spec.rb +34 -0
- data/spec/unit/data_mapper/subject_set/include_spec.rb +32 -0
- data/spec/unit/data_mapper/subject_set/named_spec.rb +33 -0
- data/spec/unit/data_mapper/subject_set/shared/append_spec.rb +18 -0
- data/spec/unit/data_mapper/subject_set/shared/clear_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/delete_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/each_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/empty_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/entries_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/get_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/include_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/named_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/size_spec.rb +13 -0
- data/spec/unit/data_mapper/subject_set/shared/to_ary_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/values_at_spec.rb +44 -0
- data/spec/unit/data_mapper/subject_set/size_spec.rb +42 -0
- data/spec/unit/data_mapper/subject_set/to_ary_spec.rb +34 -0
- data/spec/unit/data_mapper/subject_set/values_at_spec.rb +57 -0
- data/spec/unit/hash_spec.rb +27 -0
- data/spec/unit/hook_spec.rb +1216 -0
- data/spec/unit/inflections_spec.rb +14 -0
- data/spec/unit/lazy_array_spec.rb +1949 -0
- data/spec/unit/mash_spec.rb +289 -0
- data/spec/unit/module_spec.rb +70 -0
- data/spec/unit/object_spec.rb +38 -0
- data/spec/unit/try_dup_spec.rb +46 -0
- data/tasks/ci.rake +1 -0
- data/tasks/spec.rake +18 -0
- data/tasks/yard.rake +9 -0
- data/tasks/yardstick.rake +19 -0
- metadata +323 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
module DataMapper
|
|
2
|
+
module Adapters
|
|
3
|
+
extend DataMapper::Assertions, Chainable
|
|
4
|
+
|
|
5
|
+
# Set up an adapter for a storage engine
|
|
6
|
+
#
|
|
7
|
+
# @see DataMapper.setup
|
|
8
|
+
#
|
|
9
|
+
# @api private
|
|
10
|
+
def self.new(repository_name, options)
|
|
11
|
+
options = normalize_options(options)
|
|
12
|
+
|
|
13
|
+
case options.fetch(:adapter)
|
|
14
|
+
when 'java'
|
|
15
|
+
# discover the real adapter
|
|
16
|
+
jndi_uri = "#{options[:scheme]}:#{options[:path]}"
|
|
17
|
+
context = javax.naming.InitialContext.new
|
|
18
|
+
ds = context.lookup(jndi_uri)
|
|
19
|
+
conn = ds.getConnection
|
|
20
|
+
begin
|
|
21
|
+
metadata = conn.getMetaData
|
|
22
|
+
driver_name = metadata.getDriverName
|
|
23
|
+
|
|
24
|
+
driver = case driver_name
|
|
25
|
+
when /mysql/i then 'mysql'
|
|
26
|
+
when /oracle/i then 'oracle'
|
|
27
|
+
when /postgres/i then 'postgres'
|
|
28
|
+
when /sqlite/i then 'sqlite'
|
|
29
|
+
when /sqlserver|tds|Microsoft SQL/i then 'sqlserver'
|
|
30
|
+
end
|
|
31
|
+
options[:adapter] = driver
|
|
32
|
+
ensure
|
|
33
|
+
conn.close
|
|
34
|
+
end
|
|
35
|
+
else
|
|
36
|
+
driver = options.fetch(:adapter)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
adapter_class(driver).new(repository_name, options)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# The path used to require the in memory adapter
|
|
43
|
+
#
|
|
44
|
+
# Set this if you want to register your own adapter
|
|
45
|
+
# to be used when you specify an 'in_memory' connection
|
|
46
|
+
# during
|
|
47
|
+
#
|
|
48
|
+
# @see DataMapper.setup
|
|
49
|
+
#
|
|
50
|
+
# @param [String] path
|
|
51
|
+
# the path used to require the desired in memory adapter
|
|
52
|
+
#
|
|
53
|
+
# @api semipublic
|
|
54
|
+
def self.in_memory_adapter_path=(path)
|
|
55
|
+
@in_memory_adapter_path = path
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# The path used to require the in memory adapter
|
|
59
|
+
#
|
|
60
|
+
# @see DataMapper.setup
|
|
61
|
+
#
|
|
62
|
+
# @return [String]
|
|
63
|
+
# the path used to require the desired in memory adapter
|
|
64
|
+
#
|
|
65
|
+
# @api semipublic
|
|
66
|
+
def self.in_memory_adapter_path
|
|
67
|
+
@in_memory_adapter_path ||= 'dm-core/adapters/in_memory_adapter'
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
class << self
|
|
71
|
+
# Normalize the arguments passed to new()
|
|
72
|
+
#
|
|
73
|
+
# Turns options hash or connection URI into the options hash used
|
|
74
|
+
# by the adapter.
|
|
75
|
+
#
|
|
76
|
+
# @param [Hash, Addressable::URI, String] options
|
|
77
|
+
# the options to be normalized
|
|
78
|
+
#
|
|
79
|
+
# @return [Mash]
|
|
80
|
+
# the options normalized as a Mash
|
|
81
|
+
#
|
|
82
|
+
# @api private
|
|
83
|
+
private def normalize_options(options)
|
|
84
|
+
case options
|
|
85
|
+
when Hash then normalize_options_hash(options)
|
|
86
|
+
when Addressable::URI then normalize_options_uri(options)
|
|
87
|
+
when String then normalize_options_string(options)
|
|
88
|
+
else
|
|
89
|
+
assert_kind_of 'options', options, Hash, Addressable::URI, String
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Normalize Hash options into a Mash
|
|
94
|
+
#
|
|
95
|
+
# @param [Hash] hash
|
|
96
|
+
# the hash to be normalized
|
|
97
|
+
#
|
|
98
|
+
# @return [Mash]
|
|
99
|
+
# the options normalized as a Mash
|
|
100
|
+
#
|
|
101
|
+
# @api private
|
|
102
|
+
private def normalize_options_hash(hash)
|
|
103
|
+
DataMapper::Ext::Hash.to_mash(hash)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Normalize Addressable::URI options into a Mash
|
|
107
|
+
#
|
|
108
|
+
# @param [Addressable::URI] uri
|
|
109
|
+
# the uri to be normalized
|
|
110
|
+
#
|
|
111
|
+
# @return [Mash]
|
|
112
|
+
# the options normalized as a Mash
|
|
113
|
+
#
|
|
114
|
+
# @api private
|
|
115
|
+
private def normalize_options_uri(uri)
|
|
116
|
+
options = normalize_options_hash(uri.to_hash)
|
|
117
|
+
|
|
118
|
+
# Extract the name/value pairs from the query portion of the
|
|
119
|
+
# connection uri, and set them as options directly.
|
|
120
|
+
options.update(uri.query_values) if options.fetch(:query)
|
|
121
|
+
|
|
122
|
+
options[:adapter] = options.fetch(:scheme)
|
|
123
|
+
|
|
124
|
+
options
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Normalize String options into a Mash
|
|
128
|
+
#
|
|
129
|
+
# @param [String] string
|
|
130
|
+
# the string to be normalized
|
|
131
|
+
#
|
|
132
|
+
# @return [Mash]
|
|
133
|
+
# the options normalized as a Mash
|
|
134
|
+
#
|
|
135
|
+
# @api private
|
|
136
|
+
private def normalize_options_string(string)
|
|
137
|
+
normalize_options_uri(Addressable::URI.parse(string))
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# Return the adapter class constant
|
|
141
|
+
#
|
|
142
|
+
# @example
|
|
143
|
+
# DataMapper::Adapters.send(:adapter_class, 'mysql') # => DataMapper::Adapters::MysqlAdapter
|
|
144
|
+
#
|
|
145
|
+
# @param [Symbol] name
|
|
146
|
+
# the name of the adapter
|
|
147
|
+
#
|
|
148
|
+
# @return [Class]
|
|
149
|
+
# the AbstractAdapter subclass
|
|
150
|
+
#
|
|
151
|
+
# @api private
|
|
152
|
+
private def adapter_class(name)
|
|
153
|
+
adapter_name = normalize_adapter_name(name)
|
|
154
|
+
class_name = (DataMapper::Inflector.camelize(adapter_name) << 'Adapter').to_sym
|
|
155
|
+
load_adapter(adapter_name) unless const_defined?(class_name)
|
|
156
|
+
const_get(class_name)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# Return the name of the adapter
|
|
160
|
+
#
|
|
161
|
+
# @example
|
|
162
|
+
# DataMapper::Adapters.adapter_name('MysqlAdapter') # => 'mysql'
|
|
163
|
+
#
|
|
164
|
+
# @param [String] const_name
|
|
165
|
+
# the adapter constant name
|
|
166
|
+
#
|
|
167
|
+
# @return [String]
|
|
168
|
+
# the name of the adapter
|
|
169
|
+
#
|
|
170
|
+
# @api semipublic
|
|
171
|
+
private def adapter_name(const_name)
|
|
172
|
+
const_name.to_s.chomp('Adapter').downcase
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Require the adapter library
|
|
176
|
+
#
|
|
177
|
+
# @param [String, Symbol] name
|
|
178
|
+
# the name of the adapter
|
|
179
|
+
#
|
|
180
|
+
# @return [Boolean]
|
|
181
|
+
# true if the adapter is loaded
|
|
182
|
+
#
|
|
183
|
+
# @api private
|
|
184
|
+
private def load_adapter(name)
|
|
185
|
+
require "dm-#{name}-adapter"
|
|
186
|
+
rescue LoadError => e
|
|
187
|
+
begin
|
|
188
|
+
require in_memory_adapter?(name) ? in_memory_adapter_path : legacy_path(name)
|
|
189
|
+
rescue LoadError
|
|
190
|
+
raise e
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# Returns whether or not the given adapter name is considered an in memory adapter
|
|
195
|
+
#
|
|
196
|
+
# @param [String, Symbol] name
|
|
197
|
+
# the name of the adapter
|
|
198
|
+
#
|
|
199
|
+
# @return [Boolean]
|
|
200
|
+
# true if the adapter is considered to be an in memory adapter
|
|
201
|
+
#
|
|
202
|
+
# @api private
|
|
203
|
+
private def in_memory_adapter?(name)
|
|
204
|
+
name.to_s == 'in_memory'
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# Returns the fallback filename that would be used to require the named adapter
|
|
208
|
+
#
|
|
209
|
+
# The fallback format is "#{name}_adapter" and will be phased out in favor of
|
|
210
|
+
# the properly 'namespaced' "dm-#{name}-adapter" format.
|
|
211
|
+
#
|
|
212
|
+
# @param [String, Symbol] name
|
|
213
|
+
# the name of the adapter to require
|
|
214
|
+
#
|
|
215
|
+
# @return [String]
|
|
216
|
+
# the filename that gets required for the adapter identified by name
|
|
217
|
+
#
|
|
218
|
+
# @api private
|
|
219
|
+
private def legacy_path(name)
|
|
220
|
+
"#{name}_adapter"
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
# Adjust the adapter name to match the name used in the gem providing the adapter
|
|
224
|
+
#
|
|
225
|
+
# @param [String, Symbol] name
|
|
226
|
+
# the name of the adapter
|
|
227
|
+
#
|
|
228
|
+
# @return [String]
|
|
229
|
+
# the normalized adapter name
|
|
230
|
+
#
|
|
231
|
+
# @api private
|
|
232
|
+
private def normalize_adapter_name(name)
|
|
233
|
+
case (original = name.to_s)
|
|
234
|
+
when 'sqlite3'
|
|
235
|
+
'sqlite'
|
|
236
|
+
when 'inmemory' # Addressable >= v2.4 does not support underscores in scheme
|
|
237
|
+
'in_memory'
|
|
238
|
+
else
|
|
239
|
+
original
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
extendable do
|
|
245
|
+
# @api private
|
|
246
|
+
def const_added(_const_name); end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|