rgeo-activerecord 0.6.0 → 1.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 050dae83a358df1f39ade771d9a422d8fe9e15d7
4
- data.tar.gz: 86c8fabb76788f275114d08cfd9568cf423a0fd5
3
+ metadata.gz: 3891bad7ab5e1f7408095e87bcf8a731a7130ba7
4
+ data.tar.gz: 4d466201e93d07234853ea049823968898761407
5
5
  SHA512:
6
- metadata.gz: aa37b062ba3f81ec42cbd761807d3345ba5c022c665495b96600025dfd146b8400b9d585344705e7b46e95298fc2f492acb784e23482288db777f288db8eb988
7
- data.tar.gz: 13b9d228dad1a0aaa3c707dc6d04cd0cb9ba99f78b71f3265a2d9fa2fd30aa6f18c1a69594997b2065571c90622af0242dce3b2cb3e514c402459640f3b51347
6
+ metadata.gz: f493f620c706f0adc498ec9f729c9d0a019fdd316f4e41e2e4fa4faef7df2a93a32143329ad01d34ad850dda6ec55a5830a6792c6f908fbe79025691540c6d32
7
+ data.tar.gz: 38b04b4a6938fea2e95128409bc9e3346a213ce9289e267e023a7da19c9e6afe3ced84ef59020a4f501081dd9969ba28dff60e8913435b0927fdbe41155f4eef
@@ -0,0 +1,29 @@
1
+ # -----------------------------------------------------------------------------
2
+ # Copyright 2010-2012 Daniel Azuma
3
+ #
4
+ # All rights reserved.
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions are met:
8
+ #
9
+ # * Redistributions of source code must retain the above copyright notice,
10
+ # this list of conditions and the following disclaimer.
11
+ # * Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ # * Neither the name of the copyright holder, nor the names of any other
15
+ # contributors to this software, may be used to endorse or promote products
16
+ # derived from this software without specific prior written permission.
17
+ #
18
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28
+ # POSSIBILITY OF SUCH DAMAGE.
29
+ # -----------------------------------------------------------------------------
@@ -31,6 +31,5 @@
31
31
  # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
32
  # POSSIBILITY OF SUCH DAMAGE.
33
33
  # -----------------------------------------------------------------------------
34
- ;
35
34
 
36
35
  require 'rgeo/active_record'
@@ -1,44 +1,3 @@
1
- # -----------------------------------------------------------------------------
2
- #
3
- # ActiveRecord extensions for RGeo
4
- #
5
- # -----------------------------------------------------------------------------
6
- # Copyright 2010-2012 Daniel Azuma
7
- #
8
- # All rights reserved.
9
- #
10
- # Redistribution and use in source and binary forms, with or without
11
- # modification, are permitted provided that the following conditions are met:
12
- #
13
- # * Redistributions of source code must retain the above copyright notice,
14
- # this list of conditions and the following disclaimer.
15
- # * Redistributions in binary form must reproduce the above copyright notice,
16
- # this list of conditions and the following disclaimer in the documentation
17
- # and/or other materials provided with the distribution.
18
- # * Neither the name of the copyright holder, nor the names of any other
19
- # contributors to this software, may be used to endorse or promote products
20
- # derived from this software without specific prior written permission.
21
- #
22
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23
- # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26
- # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27
- # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28
- # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30
- # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31
- # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
- # POSSIBILITY OF SUCH DAMAGE.
33
- # -----------------------------------------------------------------------------
34
- ;
35
-
36
-
37
- # Dependencies
38
- require 'rgeo'
39
- require 'active_record'
40
-
41
-
42
1
  # RGeo is a spatial data library for Ruby, provided by the "rgeo" gem.
43
2
  #
44
3
  # The optional RGeo::ActiveRecord module provides spatial extensions for
@@ -46,8 +5,6 @@ require 'active_record'
46
5
  # spatial connection adapters.
47
6
 
48
7
  module RGeo
49
-
50
-
51
8
  # This module contains a set of ActiveRecord extensions for RGeo.
52
9
  # Generally, you will not need to interact with the contents of this
53
10
  # module directly, unless you are writing a spatial ActiveRecord
@@ -55,29 +12,13 @@ module RGeo
55
12
 
56
13
  module ActiveRecord
57
14
  end
58
-
59
-
60
15
  end
61
16
 
62
-
63
- # The rgeo-activerecord gem installs several patches to Arel to provide
64
- # support for spatial queries.
65
-
66
- module Arel
67
- end
68
-
69
-
70
- # The rgeo-activerecord gem installs several patches to ActiveRecord
71
- # to support services needed by spatial adapters.
72
-
73
- module ActiveRecord
74
- end
75
-
76
-
77
- # Implementation files
78
- require 'rgeo/active_record/version.rb'
79
- require 'rgeo/active_record/spatial_expressions.rb'
17
+ require 'rgeo'
18
+ require 'active_record'
19
+ require 'rgeo/active_record/version'
20
+ require 'rgeo/active_record/spatial_expressions'
80
21
  require 'rgeo/active_record/arel_spatial_queries'
81
- require 'rgeo/active_record/common_adapter_elements.rb'
22
+ require 'rgeo/active_record/common_adapter_elements'
82
23
  require 'rgeo/active_record/ar_factory_settings'
83
24
  require 'rgeo/active_record/geometry_mixin'
@@ -1,55 +1,13 @@
1
- # -----------------------------------------------------------------------------
2
- #
3
- # Helper methods for ActiveRecord adapter tests
4
- #
5
- # -----------------------------------------------------------------------------
6
- # Copyright 2010-2012 Daniel Azuma
7
- #
8
- # All rights reserved.
9
- #
10
- # Redistribution and use in source and binary forms, with or without
11
- # modification, are permitted provided that the following conditions are met:
12
- #
13
- # * Redistributions of source code must retain the above copyright notice,
14
- # this list of conditions and the following disclaimer.
15
- # * Redistributions in binary form must reproduce the above copyright notice,
16
- # this list of conditions and the following disclaimer in the documentation
17
- # and/or other materials provided with the distribution.
18
- # * Neither the name of the copyright holder, nor the names of any other
19
- # contributors to this software, may be used to endorse or promote products
20
- # derived from this software without specific prior written permission.
21
- #
22
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23
- # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26
- # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27
- # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28
- # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30
- # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31
- # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
- # POSSIBILITY OF SUCH DAMAGE.
33
- # -----------------------------------------------------------------------------
34
- ;
35
-
36
-
37
1
  require 'rgeo/active_record'
38
2
  require 'yaml'
39
3
  require 'logger'
40
4
 
41
-
42
5
  module RGeo
43
6
  module ActiveRecord
44
-
45
-
46
7
  # A helper module for creating unit tests for adapters.
47
-
48
8
  module AdapterTestHelper
49
-
50
9
  @class_num = 0
51
10
 
52
-
53
11
  # When this module is included in a test case class, it
54
12
  # automatically attempts to load the database config file from the
55
13
  # path specified by constants defined in the class. It first tries
@@ -89,7 +47,6 @@ module RGeo
89
47
  end
90
48
  end
91
49
 
92
-
93
50
  def self.new_class(param_) # :nodoc:
94
51
  base_ = param_.kind_of?(::Class) ? param_ : ::ActiveRecord::Base
95
52
  config_ = param_.kind_of?(::Hash) ? param_ : nil
@@ -103,7 +60,6 @@ module RGeo
103
60
  klass_
104
61
  end
105
62
 
106
-
107
63
  # Default setup method that calls cleanup_tables.
108
64
  # It also defines a couple of useful factories: @factory (a
109
65
  # cartesian factory) and @geographic_factory (a spherical factory)
@@ -115,7 +71,6 @@ module RGeo
115
71
  cleanup_caches
116
72
  end
117
73
 
118
-
119
74
  # Default teardown method that calls cleanup_tables.
120
75
 
121
76
  def teardown
@@ -123,7 +78,6 @@ module RGeo
123
78
  cleanup_caches
124
79
  end
125
80
 
126
-
127
81
  # Utility method that attempts to clean up any table that was
128
82
  # created by a test method. Normally called automatically at setup
129
83
  # and teardown. If you override those methods, you'll need to call
@@ -150,12 +104,10 @@ module RGeo
150
104
 
151
105
  # Clear out any ActiveRecord caches that are present.
152
106
  # Different Rails versions use different types of caches.
153
- has_schema_cache_ = false
154
107
  klass_.connection_pool.with_connection do |c_|
155
108
  if c_.respond_to?(:schema_cache)
156
109
  # 3.2.x and 4.0.x
157
110
  c_.schema_cache.clear!
158
- has_schema_cache_ = true
159
111
  end
160
112
  if c_.respond_to?(:clear_cache!)
161
113
  # 3.1 and above
@@ -164,13 +116,8 @@ module RGeo
164
116
  # All 3.x and 4.0
165
117
  c_.clear_query_cache
166
118
  end
167
- if !has_schema_cache_ && klass_.connection_pool.respond_to?(:clear_cache!)
168
- # 3.1.x only
169
- klass_.connection_pool.clear_cache!
170
- end
171
119
  end
172
120
 
173
-
174
121
  # Utility method that creates and returns a new ActiveRecord class
175
122
  # subclassing the DEFAULT_AR_CLASS.
176
123
 
@@ -178,9 +125,6 @@ module RGeo
178
125
  @ar_class = AdapterTestHelper.new_class(self.class.const_get(:DEFAULT_AR_CLASS))
179
126
  end
180
127
 
181
-
182
128
  end
183
-
184
-
185
129
  end
186
130
  end
@@ -1,47 +1,5 @@
1
- # -----------------------------------------------------------------------------
2
- #
3
- # Additions to ActiveRecord::Base for factory settings
4
- #
5
- # -----------------------------------------------------------------------------
6
- # Copyright 2010-2012 Daniel Azuma
7
- #
8
- # All rights reserved.
9
- #
10
- # Redistribution and use in source and binary forms, with or without
11
- # modification, are permitted provided that the following conditions are met:
12
- #
13
- # * Redistributions of source code must retain the above copyright notice,
14
- # this list of conditions and the following disclaimer.
15
- # * Redistributions in binary form must reproduce the above copyright notice,
16
- # this list of conditions and the following disclaimer in the documentation
17
- # and/or other materials provided with the distribution.
18
- # * Neither the name of the copyright holder, nor the names of any other
19
- # contributors to this software, may be used to endorse or promote products
20
- # derived from this software without specific prior written permission.
21
- #
22
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23
- # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26
- # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27
- # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28
- # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30
- # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31
- # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
- # POSSIBILITY OF SUCH DAMAGE.
33
- # -----------------------------------------------------------------------------
34
- ;
35
-
36
-
37
- require 'active_record'
38
-
39
-
40
1
  module RGeo
41
-
42
2
  module ActiveRecord
43
-
44
-
45
3
  # The default factory generator for ActiveRecord::Base.
46
4
 
47
5
  DEFAULT_FACTORY_GENERATOR = ::Proc.new do |config_|
@@ -52,9 +10,7 @@ module RGeo
52
10
  end
53
11
  end
54
12
 
55
-
56
13
  # An object that manages the RGeo factories for a ConnectionPool.
57
-
58
14
  class RGeoFactorySettings
59
15
 
60
16
  def initialize # :nodoc:
@@ -62,24 +18,18 @@ module RGeo
62
18
  @column_factories = {}
63
19
  end
64
20
 
65
-
66
21
  # Get the default factory generator for the given table
67
-
68
22
  def get_factory_generator(table_name_)
69
23
  @factory_generators[table_name_.to_s] || ::RGeo::ActiveRecord::DEFAULT_FACTORY_GENERATOR
70
24
  end
71
25
 
72
-
73
26
  # Set the default factory generator for the given table
74
-
75
27
  def set_factory_generator(table_name_, gen_)
76
28
  @factory_generators[table_name_.to_s] = gen_
77
29
  end
78
30
 
79
-
80
31
  # Get the factory or factory generator for the given table name
81
32
  # and column name.
82
-
83
33
  def get_column_factory(table_name_, column_name_, params_=nil)
84
34
  table_name_ = table_name_.to_s
85
35
  column_name_ = column_name_.to_s
@@ -91,17 +41,13 @@ module RGeo
91
41
  result_
92
42
  end
93
43
 
94
-
95
44
  # Set the factory or factory generator for the given table name
96
45
  # and column name.
97
-
98
46
  def set_column_factory(table_name_, column_name_, factory_)
99
47
  (@column_factories[table_name_.to_s] ||= {})[column_name_.to_s] = factory_
100
48
  end
101
49
 
102
-
103
50
  # Clear settings for the given table name, or for all tables
104
-
105
51
  def clear!(table_name_=nil)
106
52
  if table_name_
107
53
  table_name_ = table_name_.to_s
@@ -113,22 +59,14 @@ module RGeo
113
59
  end
114
60
  end
115
61
 
116
-
117
62
  DEFAULT = self.new
118
-
119
-
120
63
  end
121
64
 
122
-
123
65
  # Additional class methods on ::ActiveRecord::Base that provide
124
66
  # a way to control the RGeo factory used for ActiveRecord objects.
125
-
126
67
  module ActiveRecordBaseFactorySettings
127
-
128
-
129
68
  # Return the RGeoFactorySettings object associated with this
130
69
  # class's connection.
131
-
132
70
  def rgeo_factory_settings
133
71
  pool_ = begin
134
72
  connection_pool
@@ -138,7 +76,6 @@ module RGeo
138
76
  pool_ ? pool_.rgeo_factory_settings : RGeoFactorySettings::DEFAULT
139
77
  end
140
78
 
141
-
142
79
  # The value of this attribute is a RGeo::Feature::FactoryGenerator
143
80
  # that is used to generate the proper factory when loading geometry
144
81
  # objects from the database. For example, if the data being loaded
@@ -154,31 +91,24 @@ module RGeo
154
91
  rgeo_factory_settings.get_factory_generator(table_name)
155
92
  end
156
93
 
157
-
158
94
  # Set the rgeo_factory_generator attribute
159
-
160
95
  def rgeo_factory_generator=(gen_)
161
96
  rgeo_factory_settings.set_factory_generator(table_name, gen_)
162
97
  end
163
98
 
164
-
165
99
  # This is a convenient way to set the rgeo_factory_generator by
166
100
  # passing a block.
167
-
168
101
  def to_generate_rgeo_factory(&block_)
169
102
  rgeo_factory_settings.set_factory_generator(table_name, block_)
170
103
  end
171
104
 
172
-
173
105
  # Set a specific factory for this ActiveRecord class and the given
174
106
  # column name. This setting, if present, overrides the result of the
175
107
  # rgeo_factory_generator.
176
-
177
108
  def set_rgeo_factory_for_column(column_name_, factory_)
178
109
  rgeo_factory_settings.set_column_factory(table_name, column_name_, factory_)
179
110
  end
180
111
 
181
-
182
112
  # Returns the factory generator or specific factory to use for this
183
113
  # ActiveRecord class and the given column name.
184
114
  # If an explicit factory was set for the given column, returns it.
@@ -186,29 +116,23 @@ module RGeo
186
116
  # rgeo_factory_generator for this class, and returns the resulting
187
117
  # factory. Otherwise, if no params hash is given, just returns the
188
118
  # rgeo_factory_generator for this class.
189
-
190
119
  def rgeo_factory_for_column(column_name_, params_=nil)
191
120
  rgeo_factory_settings.get_column_factory(table_name, column_name_, params_)
192
121
  end
193
-
194
-
195
122
  end
196
123
 
197
124
  ::ActiveRecord::Base.extend(ActiveRecordBaseFactorySettings)
198
125
 
199
-
200
126
  # :stopdoc:
201
127
 
202
-
203
128
  # Patch for connection pool to track geo factories per table name
204
-
205
129
  ::ActiveRecord::ConnectionAdapters::ConnectionPool.class_eval do
206
-
207
130
  def rgeo_factory_settings
208
131
  @_rgeo_factory_settings ||= RGeoFactorySettings.new
209
132
  end
210
133
 
211
134
  private
135
+
212
136
  alias_method :new_connection_without_rgeo_modification, :new_connection
213
137
  def new_connection
214
138
  result_ = new_connection_without_rgeo_modification
@@ -217,13 +141,9 @@ module RGeo
217
141
  end
218
142
  result_
219
143
  end
220
-
221
144
  end
222
145
 
223
-
224
146
  # :startdoc:
225
147
 
226
-
227
148
  end
228
-
229
149
  end