rgeo-activerecord 0.6.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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