rgeo-ar 0.6.1 → 0.7.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: 07f4e76f082da2fd612d850b83cd7d30194755b9
4
- data.tar.gz: d847ade0068d38b282b81775545d61431fffddcb
3
+ metadata.gz: 884d15ce933553a27a4b32bb75f6bb4d05de3528
4
+ data.tar.gz: 2a39a44670be789d1413d0bd5f7f14dc2e36a077
5
5
  SHA512:
6
- metadata.gz: 4ec86f237ef08314c084f795d55366fa0be9c345451a82352dce1d1ba4edd414d0da3ef29551e4ef98f21da97e08e5e5c0ead220093018e97fe44f9cbca3046a
7
- data.tar.gz: 989f88e983a96cbc1fb615df1f2035580ec09606bc4c79d5bef533a7e279dd89171047996951600aef23f0bdd00537ac3a39fc1cf1db7b0c4d325d683d2d3c67
6
+ metadata.gz: 78814b6eff0aef502a235350a14d911a8dd5bf134927e3824513f490ded0e74667cf6964a543fdb8723d060e439af7efcdf54a80854891bd055733350b0418f4
7
+ data.tar.gz: 7c0ad97aa229444d9050281dc93b1565b1f37da1993b3d75a9d26ba448162a11bc15a5de78555f52ab4ca4b899c96dc7e0ec9c5fe1c9402f8f25e7b37ebdfe7a
data/LICENSE.txt ADDED
@@ -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
+ # -----------------------------------------------------------------------------
@@ -1,53 +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
1
  require 'rgeo/active_record'
36
2
  require 'yaml'
37
3
  require 'logger'
38
4
 
39
-
40
5
  module RGeo
41
6
  module ActiveRecord
42
-
43
-
44
7
  # A helper module for creating unit tests for adapters.
45
-
46
8
  module AdapterTestHelper
47
-
48
9
  @class_num = 0
49
10
 
50
-
51
11
  # When this module is included in a test case class, it
52
12
  # automatically attempts to load the database config file from the
53
13
  # path specified by constants defined in the class. It first tries
@@ -87,7 +47,6 @@ module RGeo
87
47
  end
88
48
  end
89
49
 
90
-
91
50
  def self.new_class(param_) # :nodoc:
92
51
  base_ = param_.kind_of?(::Class) ? param_ : ::ActiveRecord::Base
93
52
  config_ = param_.kind_of?(::Hash) ? param_ : nil
@@ -101,7 +60,6 @@ module RGeo
101
60
  klass_
102
61
  end
103
62
 
104
-
105
63
  # Default setup method that calls cleanup_tables.
106
64
  # It also defines a couple of useful factories: @factory (a
107
65
  # cartesian factory) and @geographic_factory (a spherical factory)
@@ -113,7 +71,6 @@ module RGeo
113
71
  cleanup_caches
114
72
  end
115
73
 
116
-
117
74
  # Default teardown method that calls cleanup_tables.
118
75
 
119
76
  def teardown
@@ -121,7 +78,6 @@ module RGeo
121
78
  cleanup_caches
122
79
  end
123
80
 
124
-
125
81
  # Utility method that attempts to clean up any table that was
126
82
  # created by a test method. Normally called automatically at setup
127
83
  # and teardown. If you override those methods, you'll need to call
@@ -162,7 +118,6 @@ module RGeo
162
118
  end
163
119
  end
164
120
 
165
-
166
121
  # Utility method that creates and returns a new ActiveRecord class
167
122
  # subclassing the DEFAULT_AR_CLASS.
168
123
 
@@ -170,9 +125,6 @@ module RGeo
170
125
  @ar_class = AdapterTestHelper.new_class(self.class.const_get(:DEFAULT_AR_CLASS))
171
126
  end
172
127
 
173
-
174
128
  end
175
-
176
-
177
129
  end
178
130
  end
@@ -1,45 +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
- require 'active_record'
36
-
37
-
38
1
  module RGeo
39
-
40
2
  module ActiveRecord
41
-
42
-
43
3
  # The default factory generator for ActiveRecord::Base.
44
4
 
45
5
  DEFAULT_FACTORY_GENERATOR = ::Proc.new do |config_|
@@ -50,9 +10,7 @@ module RGeo
50
10
  end
51
11
  end
52
12
 
53
-
54
13
  # An object that manages the RGeo factories for a ConnectionPool.
55
-
56
14
  class RGeoFactorySettings
57
15
 
58
16
  def initialize # :nodoc:
@@ -60,24 +18,18 @@ module RGeo
60
18
  @column_factories = {}
61
19
  end
62
20
 
63
-
64
21
  # Get the default factory generator for the given table
65
-
66
22
  def get_factory_generator(table_name_)
67
23
  @factory_generators[table_name_.to_s] || ::RGeo::ActiveRecord::DEFAULT_FACTORY_GENERATOR
68
24
  end
69
25
 
70
-
71
26
  # Set the default factory generator for the given table
72
-
73
27
  def set_factory_generator(table_name_, gen_)
74
28
  @factory_generators[table_name_.to_s] = gen_
75
29
  end
76
30
 
77
-
78
31
  # Get the factory or factory generator for the given table name
79
32
  # and column name.
80
-
81
33
  def get_column_factory(table_name_, column_name_, params_=nil)
82
34
  table_name_ = table_name_.to_s
83
35
  column_name_ = column_name_.to_s
@@ -89,17 +41,13 @@ module RGeo
89
41
  result_
90
42
  end
91
43
 
92
-
93
44
  # Set the factory or factory generator for the given table name
94
45
  # and column name.
95
-
96
46
  def set_column_factory(table_name_, column_name_, factory_)
97
47
  (@column_factories[table_name_.to_s] ||= {})[column_name_.to_s] = factory_
98
48
  end
99
49
 
100
-
101
50
  # Clear settings for the given table name, or for all tables
102
-
103
51
  def clear!(table_name_=nil)
104
52
  if table_name_
105
53
  table_name_ = table_name_.to_s
@@ -111,22 +59,14 @@ module RGeo
111
59
  end
112
60
  end
113
61
 
114
-
115
62
  DEFAULT = self.new
116
-
117
-
118
63
  end
119
64
 
120
-
121
65
  # Additional class methods on ::ActiveRecord::Base that provide
122
66
  # a way to control the RGeo factory used for ActiveRecord objects.
123
-
124
67
  module ActiveRecordBaseFactorySettings
125
-
126
-
127
68
  # Return the RGeoFactorySettings object associated with this
128
69
  # class's connection.
129
-
130
70
  def rgeo_factory_settings
131
71
  pool_ = begin
132
72
  connection_pool
@@ -136,7 +76,6 @@ module RGeo
136
76
  pool_ ? pool_.rgeo_factory_settings : RGeoFactorySettings::DEFAULT
137
77
  end
138
78
 
139
-
140
79
  # The value of this attribute is a RGeo::Feature::FactoryGenerator
141
80
  # that is used to generate the proper factory when loading geometry
142
81
  # objects from the database. For example, if the data being loaded
@@ -152,31 +91,24 @@ module RGeo
152
91
  rgeo_factory_settings.get_factory_generator(table_name)
153
92
  end
154
93
 
155
-
156
94
  # Set the rgeo_factory_generator attribute
157
-
158
95
  def rgeo_factory_generator=(gen_)
159
96
  rgeo_factory_settings.set_factory_generator(table_name, gen_)
160
97
  end
161
98
 
162
-
163
99
  # This is a convenient way to set the rgeo_factory_generator by
164
100
  # passing a block.
165
-
166
101
  def to_generate_rgeo_factory(&block_)
167
102
  rgeo_factory_settings.set_factory_generator(table_name, block_)
168
103
  end
169
104
 
170
-
171
105
  # Set a specific factory for this ActiveRecord class and the given
172
106
  # column name. This setting, if present, overrides the result of the
173
107
  # rgeo_factory_generator.
174
-
175
108
  def set_rgeo_factory_for_column(column_name_, factory_)
176
109
  rgeo_factory_settings.set_column_factory(table_name, column_name_, factory_)
177
110
  end
178
111
 
179
-
180
112
  # Returns the factory generator or specific factory to use for this
181
113
  # ActiveRecord class and the given column name.
182
114
  # If an explicit factory was set for the given column, returns it.
@@ -184,29 +116,23 @@ module RGeo
184
116
  # rgeo_factory_generator for this class, and returns the resulting
185
117
  # factory. Otherwise, if no params hash is given, just returns the
186
118
  # rgeo_factory_generator for this class.
187
-
188
119
  def rgeo_factory_for_column(column_name_, params_=nil)
189
120
  rgeo_factory_settings.get_column_factory(table_name, column_name_, params_)
190
121
  end
191
-
192
-
193
122
  end
194
123
 
195
124
  ::ActiveRecord::Base.extend(ActiveRecordBaseFactorySettings)
196
125
 
197
-
198
126
  # :stopdoc:
199
127
 
200
-
201
128
  # Patch for connection pool to track geo factories per table name
202
-
203
129
  ::ActiveRecord::ConnectionAdapters::ConnectionPool.class_eval do
204
-
205
130
  def rgeo_factory_settings
206
131
  @_rgeo_factory_settings ||= RGeoFactorySettings.new
207
132
  end
208
133
 
209
134
  private
135
+
210
136
  alias_method :new_connection_without_rgeo_modification, :new_connection
211
137
  def new_connection
212
138
  result_ = new_connection_without_rgeo_modification
@@ -215,13 +141,9 @@ module RGeo
215
141
  end
216
142
  result_
217
143
  end
218
-
219
144
  end
220
145
 
221
-
222
146
  # :startdoc:
223
147
 
224
-
225
148
  end
226
-
227
149
  end
@@ -1,37 +1,3 @@
1
- # -----------------------------------------------------------------------------
2
- #
3
- # Various Arel hacks to support spatial queries
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
1
  module RGeo
36
2
  module ActiveRecord
37
3
  # A set of common Arel visitor hacks for spatial ToSql visitors.
@@ -122,12 +88,6 @@ module RGeo
122
88
  alias :visit_RGeo_Cartesian_BoundingBox :visit_String
123
89
  end
124
90
 
125
- # Add tools to build spatial structures in the AST.
126
-
127
- # Allow chaining of spatial expressions from attributes
128
- ::Arel::Attribute.class_eval do
129
- include ::RGeo::ActiveRecord::SpatialExpressions
130
- end
131
91
 
132
92
  # A NamedFunction subclass that keeps track of the spatial-ness of
133
93
  # the arguments and return values, so that it can provide context to
@@ -1,54 +1,10 @@
1
- # -----------------------------------------------------------------------------
2
- #
3
- # Common tools for spatial adapters for ActiveRecord
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
- require 'active_support/core_ext/class' # Workaround for a missing require in ActiveRecord 3.2.1
37
- require 'active_record'
38
-
39
- # Force AbstractAdapter to autoload
40
- if ::ActiveRecord::ConnectionAdapters::AbstractAdapter
41
- end
42
-
1
+ # autoload AbstractAdapter
2
+ ::ActiveRecord::ConnectionAdapters::AbstractAdapter
43
3
 
44
4
  module RGeo
45
-
46
5
  module ActiveRecord
47
-
48
-
49
6
  # Some default column constructors specifications for most spatial
50
7
  # databases. Individual adapters may add to or override this list.
51
-
52
8
  DEFAULT_SPATIAL_COLUMN_CONSTRUCTORS = {
53
9
  :spatial => {:type => 'geometry'}.freeze,
54
10
  :geometry => {}.freeze,
@@ -61,13 +17,11 @@ module RGeo
61
17
  :multi_polygon => {}.freeze,
62
18
  }.freeze
63
19
 
64
-
65
20
  # Index definition struct with a spatial flag field.
66
21
 
67
22
  class SpatialIndexDefinition < Struct.new(:table, :name, :unique, :columns, :lengths, :orders, :where, :spatial)
68
23
  end
69
24
 
70
-
71
25
  # Returns a feature type module given a string type.
72
26
 
73
27
  def self.geometric_type_from_name(name_)
@@ -84,17 +38,18 @@ module RGeo
84
38
  end
85
39
  end
86
40
 
87
-
88
41
  # :stopdoc:
89
42
 
90
-
91
43
  # Provide methods for each geometric subtype during table definitions.
44
+ module GeoTableDefinitions
45
+ def self.included(base)
46
+ base.class_eval do
47
+ alias_method :method_missing_without_rgeo, :method_missing
48
+ alias_method :method_missing, :method_missing_with_rgeo
49
+ end
50
+ end
92
51
 
93
- ::ActiveRecord::ConnectionAdapters::TableDefinition.class_eval do
94
-
95
- alias_method :method_missing_without_rgeo_modification, :method_missing
96
-
97
- def method_missing(method_name_, *args_, &block_)
52
+ def method_missing_with_rgeo(method_name_, *args_, &block_)
98
53
  if @base.respond_to?(:spatial_column_constructor) && (info_ = @base.spatial_column_constructor(method_name_))
99
54
  info_ = info_.dup
100
55
  type_ = (info_.delete(:type) || method_name_).to_s
@@ -103,20 +58,24 @@ module RGeo
103
58
  column(name_, type_, opts_)
104
59
  end
105
60
  else
106
- method_missing_without_rgeo_modification(method_name_, *args_, &block_)
61
+ method_missing_without_rgeo(method_name_, *args_, &block_)
107
62
  end
108
63
  end
109
-
110
64
  end
111
65
 
66
+ ::ActiveRecord::ConnectionAdapters::TableDefinition.send :include, GeoTableDefinitions
112
67
 
113
- # Provide methods for each geometric subtype during table changes.
114
-
115
- ::ActiveRecord::ConnectionAdapters::Table.class_eval do
116
68
 
117
- alias_method :method_missing_without_rgeo_modification, :method_missing
69
+ # Provide methods for each geometric subtype during table changes.
70
+ module GeoConnectionAdapters
71
+ def self.included(base)
72
+ base.class_eval do
73
+ alias_method :method_missing_without_rgeo, :method_missing
74
+ alias_method :method_missing, :method_missing_with_rgeo
75
+ end
76
+ end
118
77
 
119
- def method_missing(method_name_, *args_, &block_)
78
+ def method_missing_with_rgeo(method_name_, *args_, &block_)
120
79
  if @base.respond_to?(:spatial_column_constructor) && (info_ = @base.spatial_column_constructor(method_name_))
121
80
  info_ = info_.dup
122
81
  type_ = (info_.delete(:type) || method_name_).to_s
@@ -125,22 +84,26 @@ module RGeo
125
84
  @base.add_column(@table_name, name_, type_, opts_)
126
85
  end
127
86
  else
128
- method_missing_without_rgeo_modification(method_name_, *args_, &block_)
87
+ method_missing_without_rgeo(method_name_, *args_, &block_)
129
88
  end
130
89
  end
131
-
132
90
  end
133
91
 
92
+ ::ActiveRecord::ConnectionAdapters::Table.send :include, GeoConnectionAdapters
134
93
 
135
- # Hack schema dumper to output spatial index flag
136
94
 
137
- ::ActiveRecord::SchemaDumper.class_eval do
95
+ # Hack schema dumper to output spatial index flag
96
+ module GeoSchemaDumper
97
+ def self.included(base)
98
+ base.class_eval do
99
+ alias_method :indexes_without_rgeo, :indexes
100
+ alias_method :indexes, :indexes_with_rgeo
101
+ end
102
+ end
138
103
 
139
104
  private
140
105
 
141
- alias_method :_old_indexes_method, :indexes
142
-
143
- def indexes(table_, stream_)
106
+ def indexes_with_rgeo(table_, stream_)
144
107
  if (indexes_ = @connection.indexes(table_)).any?
145
108
  add_index_statements_ = indexes_.map do |index_|
146
109
  statement_parts_ = [
@@ -158,19 +121,15 @@ module RGeo
158
121
  stream_.puts
159
122
  end
160
123
  end
161
-
162
124
  end
163
125
 
126
+ ::ActiveRecord::SchemaDumper.send :include, GeoSchemaDumper
164
127
 
165
- # Tell ActiveRecord to cache spatial attribute values so they don't get
166
- # re-parsed on every access.
167
128
 
168
- ::ActiveRecord::Base.attribute_types_cached_by_default << :spatial
129
+ # Tell ActiveRecord to cache spatial attribute values so they don't get re-parsed on every access.
169
130
 
131
+ ::ActiveRecord::Base.attribute_types_cached_by_default << :spatial
170
132
 
171
133
  # :startdoc:
172
-
173
-
174
134
  end
175
-
176
135
  end
@@ -1,55 +1,15 @@
1
- # -----------------------------------------------------------------------------
2
- #
3
- # Geometry mixin for JSON serialization
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
1
  module RGeo
36
-
37
2
  module ActiveRecord
38
-
39
-
40
3
  # This module is mixed into all geometry objects. It provides an
41
4
  # as_json method so that ActiveRecord knows how to generate JSON
42
5
  # for a geometry-valued field.
43
6
 
44
7
  module GeometryMixin
45
-
46
-
47
8
  # The default JSON generator Proc. Renders geometry fields as WKT.
48
9
  DEFAULT_JSON_GENERATOR = ::Proc.new{ |geom_| geom_.to_s }
49
10
 
50
11
  @json_generator = DEFAULT_JSON_GENERATOR
51
12
 
52
-
53
13
  # Set the style of JSON generation used for geometry fields in an
54
14
  # ActiveRecord model by default. You may pass nil to use
55
15
  # DEFAULT_JSON_GENERATOR, a proc that takes a geometry as the
@@ -76,7 +36,6 @@ module RGeo
76
36
  end
77
37
  end
78
38
 
79
-
80
39
  # Given a feature, returns an object that can be serialized as JSON
81
40
  # (i.e. usually a hash or string), using the current json_generator.
82
41
  # This is used to generate JSON for geometry-valued ActiveRecord
@@ -92,15 +51,9 @@ module RGeo
92
51
  def as_json(opts_=nil)
93
52
  GeometryMixin.generate_json(self)
94
53
  end
95
-
96
-
97
54
  end
98
-
99
-
100
55
  end
101
-
102
56
  end
103
57
 
104
-
105
58
  ::RGeo::Feature::MixinCollection::GLOBAL.for_type(::RGeo::Feature::Geometry).
106
59
  add(::RGeo::ActiveRecord::GeometryMixin)
@@ -1,42 +1,5 @@
1
- # -----------------------------------------------------------------------------
2
- #
3
- # Spatial expressions for Arel
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
1
  module RGeo
36
-
37
2
  module ActiveRecord
38
-
39
-
40
3
  # Returns true if spatial expressions (i.e. the methods in the
41
4
  # SpatialExpressions module) are supported. Generally, this is true
42
5
  # if Arel is at version 2.1 or later.
@@ -45,16 +8,12 @@ module RGeo
45
8
  defined?(::Arel::Nodes::NamedFunction)
46
9
  end
47
10
 
48
-
49
11
  # A set of spatial expression builders.
50
12
  # These methods can be chained off other spatial expressions to form
51
13
  # complex expressions.
52
14
  #
53
15
  # These functions require Arel 2.1 or later.
54
-
55
16
  module SpatialExpressions
56
-
57
-
58
17
  #--
59
18
  # Generic functions
60
19
  #++
@@ -64,7 +23,6 @@ module RGeo
64
23
  ::RGeo::ActiveRecord::SpatialNamedFunction.new(function_, [self] + args_, spatial_info_)
65
24
  end
66
25
 
67
-
68
26
  #--
69
27
  # Geometry functions
70
28
  #++
@@ -255,7 +213,6 @@ module RGeo
255
213
  ::RGeo::ActiveRecord::SpatialNamedFunction.new('ST_PointOnSurface', [self], [true, true])
256
214
  end
257
215
 
258
-
259
216
  #--
260
217
  # Polygon functions
261
218
  #++
@@ -274,7 +231,6 @@ module RGeo
274
231
  ::RGeo::ActiveRecord::SpatialNamedFunction.new('ST_InteriorRingN', [self, n_.to_i], [true, true, false])
275
232
  end
276
233
 
277
-
278
234
  #--
279
235
  # GeometryCollection functions
280
236
  #++
@@ -287,14 +243,16 @@ module RGeo
287
243
  ::RGeo::ActiveRecord::SpatialNamedFunction.new('ST_GeometryN', [self, n_.to_i], [true, true, false])
288
244
  end
289
245
 
290
-
291
246
  end
292
247
 
293
-
294
248
  end
295
-
296
249
  end
297
250
 
251
+ # Add tools to build spatial structures in the AST.
252
+
253
+ # Allow chaining of spatial expressions from attributes
254
+ ::Arel::Attribute.send :include, ::RGeo::ActiveRecord::SpatialExpressions
255
+
298
256
 
299
257
  module Arel
300
258
 
@@ -1,39 +1,5 @@
1
- # -----------------------------------------------------------------------------
2
- #
3
- # Version of rgeo-activerecord
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
1
  module RGeo
36
2
  module ActiveRecord
37
- VERSION = '0.6.1'.freeze
3
+ VERSION = '0.7.0'.freeze
38
4
  end
39
5
  end
@@ -1,42 +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
- # Dependencies
36
- require 'rgeo'
37
- require 'active_record'
38
-
39
-
40
1
  # RGeo is a spatial data library for Ruby, provided by the "rgeo" gem.
41
2
  #
42
3
  # The optional RGeo::ActiveRecord module provides spatial extensions for
@@ -44,8 +5,6 @@ require 'active_record'
44
5
  # spatial connection adapters.
45
6
 
46
7
  module RGeo
47
-
48
-
49
8
  # This module contains a set of ActiveRecord extensions for RGeo.
50
9
  # Generally, you will not need to interact with the contents of this
51
10
  # module directly, unless you are writing a spatial ActiveRecord
@@ -53,29 +12,13 @@ module RGeo
53
12
 
54
13
  module ActiveRecord
55
14
  end
56
-
57
-
58
15
  end
59
16
 
60
-
61
- # The rgeo-activerecord gem installs several patches to Arel to provide
62
- # support for spatial queries.
63
-
64
- module Arel
65
- end
66
-
67
-
68
- # The rgeo-activerecord gem installs several patches to ActiveRecord
69
- # to support services needed by spatial adapters.
70
-
71
- module ActiveRecord
72
- end
73
-
74
-
75
- # Implementation files
76
- require 'rgeo/active_record/version.rb'
77
- 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'
78
21
  require 'rgeo/active_record/arel_spatial_queries'
79
- require 'rgeo/active_record/common_adapter_elements.rb'
22
+ require 'rgeo/active_record/common_adapter_elements'
80
23
  require 'rgeo/active_record/ar_factory_settings'
81
24
  require 'rgeo/active_record/geometry_mixin'
data/test/tc_basic.rb CHANGED
@@ -1,55 +1,16 @@
1
- # -----------------------------------------------------------------------------
2
- #
3
- # Tests for basic ActiveRecord extensions
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
1
  require 'test_helper'
36
2
 
37
3
  module RGeo
38
4
  module ActiveRecord
39
5
  module Tests # :nodoc:
40
-
41
6
  class TestBasic < ::MiniTest::Test # :nodoc:
42
-
43
-
44
7
  class MyTable < ::ActiveRecord::Base
45
8
  end
46
9
 
47
-
48
10
  def test_has_version
49
11
  assert ::RGeo::ActiveRecord::VERSION
50
12
  end
51
13
 
52
-
53
14
  def test_default_factory_generator
54
15
  MyTable.rgeo_factory_generator = nil
55
16
  factory_ = MyTable.rgeo_factory_for_column(:hello).call(:has_z_coordinate => true, :srid => 4326)
@@ -59,7 +20,6 @@ module RGeo
59
20
  assert_equal(4326, factory_.srid)
60
21
  end
61
22
 
62
-
63
23
  def test_set_factory_generator
64
24
  MyTable.rgeo_factory_generator = ::RGeo::Geographic.method(:spherical_factory)
65
25
  factory_ = MyTable.rgeo_factory_for_column(:hello, :has_z_coordinate => true, :srid => 4326)
@@ -70,7 +30,6 @@ module RGeo
70
30
  assert_equal(4326, factory_.srid)
71
31
  end
72
32
 
73
-
74
33
  def test_specific_factory_for_column
75
34
  MyTable.rgeo_factory_generator = nil
76
35
  MyTable.set_rgeo_factory_for_column(:foo, ::RGeo::Geographic.simple_mercator_factory(:has_z_coordinate => true))
@@ -82,7 +41,6 @@ module RGeo
82
41
  assert_equal(4326, factory_.srid)
83
42
  end
84
43
 
85
-
86
44
  def test_default_as_json_wkt
87
45
  GeometryMixin.set_json_generator(nil)
88
46
  factory_ = ::RGeo::Cartesian.preferred_factory
@@ -90,7 +48,6 @@ module RGeo
90
48
  assert_equal("POINT (1.0 2.0)", p_.as_json)
91
49
  end
92
50
 
93
-
94
51
  def test_default_as_json_geojson
95
52
  GeometryMixin.set_json_generator(:geojson)
96
53
  factory_ = ::RGeo::Cartesian.preferred_factory
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rgeo-ar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Azuma
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-10 00:00:00.000000000 Z
11
+ date: 2014-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rgeo
@@ -91,6 +91,7 @@ extra_rdoc_files:
91
91
  - README.rdoc
92
92
  files:
93
93
  - History.rdoc
94
+ - LICENSE.txt
94
95
  - README.rdoc
95
96
  - lib/rgeo-activerecord.rb
96
97
  - lib/rgeo/active_record.rb
@@ -100,7 +101,6 @@ files:
100
101
  - lib/rgeo/active_record/common_adapter_elements.rb
101
102
  - lib/rgeo/active_record/geometry_mixin.rb
102
103
  - lib/rgeo/active_record/spatial_expressions.rb
103
- - lib/rgeo/active_record/task_hacker.rb
104
104
  - lib/rgeo/active_record/version.rb
105
105
  - test/support/fake_record.rb
106
106
  - test/tc_basic.rb
@@ -129,5 +129,7 @@ signing_key:
129
129
  specification_version: 4
130
130
  summary: An RGeo module providing spatial extensions to ActiveRecord.
131
131
  test_files:
132
+ - test/support/fake_record.rb
132
133
  - test/tc_basic.rb
134
+ - test/test_helper.rb
133
135
  has_rdoc:
@@ -1,104 +0,0 @@
1
- # -----------------------------------------------------------------------------
2
- #
3
- # A tool for hacking ActiveRecord's rake tasks
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
- module RGeo
37
-
38
- module ActiveRecord
39
-
40
-
41
- # A set of tools for hacking ActiveRecord's Rake tasks.
42
-
43
- module TaskHacker
44
-
45
-
46
- class Action # :nodoc:
47
-
48
- def initialize(env_, pattern_, proc_)
49
- @env = env_
50
- @pattern = pattern_
51
- @proc = proc_
52
- end
53
-
54
- def call(task_)
55
- env_ = @env || ::Rails.env || 'development'
56
- config_ = ::ActiveRecord::Base.configurations[env_]
57
- if config_
58
- if @pattern === config_['adapter']
59
- task_.actions.delete_if{ |a_| a_ != self }
60
- @proc.call(config_)
61
- end
62
- else
63
- puts "WARNING: Could not find environment #{env_.inspect} in your database.yml"
64
- end
65
- end
66
-
67
- def arity
68
- 1
69
- end
70
-
71
- end
72
-
73
-
74
- class << self
75
-
76
-
77
- # Modify a named ActiveRecord rake task.
78
- # The task must be of the form that hinges on the database adapter
79
- # name. You must provide the fully-qualified name of the rake task
80
- # to modify, the Rails environment for which to get the database
81
- # configuration (which may be nil to use the current Rails.env),
82
- # a Regexp or String identifying the adapter name for which to
83
- # modify the rake task, and a block. If the database adapter
84
- # associated with the given environment matches the given pattern,
85
- # then the rake task's action(s) will be replaced by the given
86
- # block. The block will be passed the environment's database
87
- # configuration hash.
88
-
89
- def modify(name_, env_, pattern_, &block_)
90
- if ::Rake::Task.task_defined?(name_)
91
- ::Rake::Task[name_].actions.unshift(Action.new(env_, pattern_, block_))
92
- end
93
- end
94
-
95
-
96
- end
97
-
98
-
99
- end
100
-
101
-
102
- end
103
-
104
- end