rgeo-activerecord 0.5.0 → 0.6.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 050dae83a358df1f39ade771d9a422d8fe9e15d7
4
+ data.tar.gz: 86c8fabb76788f275114d08cfd9568cf423a0fd5
5
+ SHA512:
6
+ metadata.gz: aa37b062ba3f81ec42cbd761807d3345ba5c022c665495b96600025dfd146b8400b9d585344705e7b46e95298fc2f492acb784e23482288db777f288db8eb988
7
+ data.tar.gz: 13b9d228dad1a0aaa3c707dc6d04cd0cb9ba99f78b71f3265a2d9fa2fd30aa6f18c1a69594997b2065571c90622af0242dce3b2cb3e514c402459640f3b51347
data/Version CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.6.0
@@ -62,13 +62,13 @@ module RGeo
62
62
  # mapping for the database, and it also uses the type information
63
63
  # in the node to determine when to cast string arguments to WKT,
64
64
 
65
- def visit_RGeo_ActiveRecord_SpatialNamedFunction(node_)
65
+ def visit_RGeo_ActiveRecord_SpatialNamedFunction(node_, *args)
66
66
  name_ = st_func(node_.name)
67
67
  exprs_ = []
68
68
  node_.expressions.each_with_index do |expr_, index_|
69
- exprs_ << (node_.spatial_argument?(index_) ? visit_in_spatial_context(expr_) : visit(expr_))
69
+ exprs_ << (node_.spatial_argument?(index_) ? visit_in_spatial_context(expr_, *args) : visit(expr_, *args))
70
70
  end
71
- "#{name_}(#{node_.distinct ? 'DISTINCT ' : ''}#{exprs_.join(', ')})#{node_.alias ? " AS #{visit node_.alias}" : ''}"
71
+ "#{name_}(#{node_.distinct ? 'DISTINCT ' : ''}#{exprs_.join(', ')})#{node_.alias ? " AS #{visit(node_.alias, *args)}" : ''}"
72
72
  end
73
73
 
74
74
 
@@ -76,16 +76,16 @@ module RGeo
76
76
  # The node must be a string (in which case it is treated as WKT),
77
77
  # an RGeo feature, or a spatial attribute.
78
78
 
79
- def visit_in_spatial_context(node_)
79
+ def visit_in_spatial_context(node_, *args)
80
80
  case node_
81
81
  when ::String
82
- "#{st_func('ST_WKTToSQL')}(#{visit_String(node_)})"
82
+ "#{st_func('ST_WKTToSQL')}(#{visit_String(node_, *args)})"
83
83
  when ::RGeo::Feature::Instance
84
- visit_RGeo_Feature_Instance(node_)
84
+ visit_RGeo_Feature_Instance(node_, *args)
85
85
  when ::RGeo::Cartesian::BoundingBox
86
- visit_RGeo_Cartesian_BoundingBox(node_)
86
+ visit_RGeo_Cartesian_BoundingBox(node_, *args)
87
87
  else
88
- visit(node_)
88
+ visit(node_, *args)
89
89
  end
90
90
  end
91
91
 
@@ -136,11 +136,11 @@ module RGeo
136
136
  # by default.
137
137
 
138
138
  ::Arel::Visitors::Visitor.class_eval do
139
- def visit_RGeo_ActiveRecord_SpatialConstantNode(node_)
139
+ def visit_RGeo_ActiveRecord_SpatialConstantNode(node_, *args)
140
140
  if respond_to?(:visit_in_spatial_context)
141
- visit_in_spatial_context(node_.delegate)
141
+ visit_in_spatial_context(node_.delegate, *args)
142
142
  else
143
- visit(node_.delegate)
143
+ visit(node_.delegate, *args)
144
144
  end
145
145
  end
146
146
  end
@@ -0,0 +1,124 @@
1
+ # From https://github.com/rails/arel/blob/4-0-stable/test/support/fake_record.rb
2
+ module FakeRecord
3
+ class Column < Struct.new(:name, :type)
4
+ end
5
+
6
+ class Connection
7
+ attr_reader :tables
8
+ attr_accessor :visitor
9
+
10
+ def initialize(visitor = nil)
11
+ @tables = %w{ users photos developers products}
12
+ @columns = {
13
+ 'users' => [
14
+ Column.new('id', :integer),
15
+ Column.new('name', :string),
16
+ Column.new('bool', :boolean),
17
+ Column.new('created_at', :date)
18
+ ],
19
+ 'products' => [
20
+ Column.new('id', :integer),
21
+ Column.new('price', :decimal)
22
+ ]
23
+ }
24
+ @columns_hash = {
25
+ 'users' => Hash[@columns['users'].map { |x| [x.name, x] }],
26
+ 'products' => Hash[@columns['products'].map { |x| [x.name, x] }]
27
+ }
28
+ @primary_keys = {
29
+ 'users' => 'id',
30
+ 'products' => 'id'
31
+ }
32
+ @visitor = visitor
33
+ end
34
+
35
+ def columns_hash table_name
36
+ @columns_hash[table_name]
37
+ end
38
+
39
+ def primary_key name
40
+ @primary_keys[name.to_s]
41
+ end
42
+
43
+ def table_exists? name
44
+ @tables.include? name.to_s
45
+ end
46
+
47
+ def columns name, message = nil
48
+ @columns[name.to_s]
49
+ end
50
+
51
+ def quote_table_name name
52
+ "\"#{name.to_s}\""
53
+ end
54
+
55
+ def quote_column_name name
56
+ "\"#{name.to_s}\""
57
+ end
58
+
59
+ def schema_cache
60
+ self
61
+ end
62
+
63
+ def quote thing, column = nil
64
+ if column && column.type == :integer
65
+ return 'NULL' if thing.nil?
66
+ return thing.to_i
67
+ end
68
+
69
+ case thing
70
+ when true
71
+ "'t'"
72
+ when false
73
+ "'f'"
74
+ when nil
75
+ 'NULL'
76
+ when Numeric
77
+ thing
78
+ else
79
+ "'#{thing}'"
80
+ end
81
+ end
82
+ end
83
+
84
+ class ConnectionPool
85
+ class Spec < Struct.new(:config)
86
+ end
87
+
88
+ attr_reader :spec, :connection
89
+
90
+ def initialize
91
+ @spec = Spec.new(:adapter => 'america')
92
+ @connection = Connection.new
93
+ @connection.visitor = Arel::Visitors::ToSql.new(connection)
94
+ end
95
+
96
+ def with_connection
97
+ yield connection
98
+ end
99
+
100
+ def table_exists? name
101
+ connection.tables.include? name.to_s
102
+ end
103
+
104
+ def columns_hash
105
+ connection.columns_hash
106
+ end
107
+
108
+ def schema_cache
109
+ connection
110
+ end
111
+ end
112
+
113
+ class Base
114
+ attr_accessor :connection_pool
115
+
116
+ def initialize
117
+ @connection_pool = ConnectionPool.new
118
+ end
119
+
120
+ def connection
121
+ connection_pool.connection
122
+ end
123
+ end
124
+ end
data/test/tc_basic.rb CHANGED
@@ -34,9 +34,7 @@
34
34
  ;
35
35
 
36
36
 
37
- require 'test/unit'
38
- require 'rgeo/active_record'
39
-
37
+ require 'test_helper'
40
38
 
41
39
  module RGeo
42
40
  module ActiveRecord
@@ -102,9 +100,21 @@ module RGeo
102
100
  assert_equal({'type' => 'Point', 'coordinates' => [1.0, 2.0]}, p_.as_json)
103
101
  end
104
102
 
103
+ def test_arel_visit_SpatialConstantNode
104
+ visitor = arel_visitor
105
+ sql = visitor.accept(Arel.spatial('POINT (1.0 2.0)'))
106
+ assert_equal("ST_WKTToSQL('POINT (1.0 2.0)')", sql)
107
+ end
105
108
 
109
+ # SpatialNamedFunction is not used in pre-2.1 Arel.
110
+ if(AREL_VERSION_MAJOR > 2 || (AREL_VERSION_MAJOR == 2 && AREL_VERSION_MINOR >= 1))
111
+ def test_arel_visit_SpatialNamedFunction
112
+ visitor = arel_visitor
113
+ sql = visitor.accept(Arel.spatial('POINT (1.0 2.0)').st_astext)
114
+ assert_equal("ST_AsText(ST_WKTToSQL('POINT (1.0 2.0)'))", sql)
115
+ end
116
+ end
106
117
  end
107
-
108
118
  end
109
119
  end
110
120
  end
@@ -0,0 +1,21 @@
1
+ require 'test/unit'
2
+ require 'rgeo/active_record'
3
+ require 'support/fake_record'
4
+
5
+ AREL_VERSION_MAJOR, AREL_VERSION_MINOR, AREL_VERSION_PATCH = ::Arel::VERSION.split('.').map { |part| part.to_i }
6
+ Arel::Visitors::PostgreSQL.send(:include, ::RGeo::ActiveRecord::SpatialToSql)
7
+ Arel::Table.engine = Arel::Sql::Engine.new(FakeRecord::Base.new)
8
+
9
+ def arel_visitor
10
+ # The argument for constructing visitor objects depends on the version of
11
+ # Arel.
12
+ if(AREL_VERSION_MAJOR <= 2)
13
+ if(AREL_VERSION_MAJOR == 2 && AREL_VERSION_MINOR == 0)
14
+ Arel::Visitors::PostgreSQL.new(Arel::Table.engine)
15
+ else
16
+ Arel::Visitors::PostgreSQL.new(Arel::Table.engine.connection_pool)
17
+ end
18
+ else
19
+ Arel::Visitors::PostgreSQL.new(Arel::Table.engine.connection)
20
+ end
21
+ end
metadata CHANGED
@@ -1,94 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rgeo-activerecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
5
- prerelease:
4
+ version: 0.6.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Daniel Azuma
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-27 00:00:00.000000000 Z
11
+ date: 2014-05-06 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rgeo
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: 0.3.20
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: 0.3.20
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: activerecord
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: 3.0.3
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: 3.0.3
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: arel
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: 2.0.6
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: 2.0.6
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rake
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ">="
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rdoc
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - ">="
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - ">="
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  description: RGeo is a geospatial data library for Ruby. RGeo::ActiveRecord is an
@@ -101,6 +90,11 @@ extra_rdoc_files:
101
90
  - History.rdoc
102
91
  - README.rdoc
103
92
  files:
93
+ - History.rdoc
94
+ - README.rdoc
95
+ - Version
96
+ - lib/rgeo-activerecord.rb
97
+ - lib/rgeo/active_record.rb
104
98
  - lib/rgeo/active_record/adapter_test_helper.rb
105
99
  - lib/rgeo/active_record/ar_factory_settings.rb
106
100
  - lib/rgeo/active_record/arel_spatial_queries.rb
@@ -109,35 +103,32 @@ files:
109
103
  - lib/rgeo/active_record/spatial_expressions.rb
110
104
  - lib/rgeo/active_record/task_hacker.rb
111
105
  - lib/rgeo/active_record/version.rb
112
- - lib/rgeo/active_record.rb
113
- - lib/rgeo-activerecord.rb
106
+ - test/support/fake_record.rb
114
107
  - test/tc_basic.rb
115
- - History.rdoc
116
- - README.rdoc
117
- - Version
108
+ - test/test_helper.rb
118
109
  homepage: http://dazuma.github.com/rgeo-activerecord
119
110
  licenses: []
111
+ metadata: {}
120
112
  post_install_message:
121
113
  rdoc_options: []
122
114
  require_paths:
123
115
  - lib
124
116
  required_ruby_version: !ruby/object:Gem::Requirement
125
- none: false
126
117
  requirements:
127
- - - ! '>='
118
+ - - ">="
128
119
  - !ruby/object:Gem::Version
129
120
  version: 1.8.7
130
121
  required_rubygems_version: !ruby/object:Gem::Requirement
131
- none: false
132
122
  requirements:
133
- - - ! '>'
123
+ - - ">="
134
124
  - !ruby/object:Gem::Version
135
- version: 1.3.1
125
+ version: '0'
136
126
  requirements: []
137
127
  rubyforge_project: virtuoso
138
- rubygems_version: 1.8.21
128
+ rubygems_version: 2.2.2
139
129
  signing_key:
140
- specification_version: 3
130
+ specification_version: 4
141
131
  summary: An RGeo module providing spatial extensions to ActiveRecord.
142
132
  test_files:
143
133
  - test/tc_basic.rb
134
+ has_rdoc: