activerecord-postgresql-extensions 0.2.2 → 0.3.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.
Files changed (54) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +4 -0
  3. data/Gemfile +1 -0
  4. data/Guardfile +3 -3
  5. data/MIT-LICENSE +1 -1
  6. data/README.rdoc +10 -3
  7. data/lib/active_record/postgresql_extensions/adapter_extensions.rb +100 -60
  8. data/lib/active_record/postgresql_extensions/constraints.rb +13 -17
  9. data/lib/active_record/postgresql_extensions/event_triggers.rb +129 -0
  10. data/lib/active_record/postgresql_extensions/extensions.rb +14 -15
  11. data/lib/active_record/postgresql_extensions/features.rb +80 -41
  12. data/lib/active_record/postgresql_extensions/functions.rb +1 -1
  13. data/lib/active_record/postgresql_extensions/geometry.rb +6 -8
  14. data/lib/active_record/postgresql_extensions/indexes.rb +19 -11
  15. data/lib/active_record/postgresql_extensions/languages.rb +1 -1
  16. data/lib/active_record/postgresql_extensions/materialized_views.rb +272 -0
  17. data/lib/active_record/postgresql_extensions/permissions.rb +60 -22
  18. data/lib/active_record/postgresql_extensions/roles.rb +18 -7
  19. data/lib/active_record/postgresql_extensions/rules.rb +5 -0
  20. data/lib/active_record/postgresql_extensions/schemas.rb +39 -3
  21. data/lib/active_record/postgresql_extensions/sequences.rb +6 -3
  22. data/lib/active_record/postgresql_extensions/tables.rb +47 -19
  23. data/lib/active_record/postgresql_extensions/tablespaces.rb +1 -1
  24. data/lib/active_record/postgresql_extensions/text_search.rb +3 -3
  25. data/lib/active_record/postgresql_extensions/triggers.rb +3 -3
  26. data/lib/active_record/postgresql_extensions/types.rb +104 -1
  27. data/lib/active_record/postgresql_extensions/utils.rb +35 -13
  28. data/lib/active_record/postgresql_extensions/vacuum.rb +1 -1
  29. data/lib/active_record/postgresql_extensions/version.rb +1 -1
  30. data/lib/active_record/postgresql_extensions/views.rb +137 -6
  31. data/lib/activerecord-postgresql-extensions.rb +13 -11
  32. data/test/{adapter_tests.rb → adapter_extensions_tests.rb} +96 -3
  33. data/test/constraints_tests.rb +216 -104
  34. data/test/event_triggers_tests.rb +109 -0
  35. data/test/extensions_tests.rb +47 -39
  36. data/test/functions_tests.rb +47 -38
  37. data/test/geometry_tests.rb +268 -135
  38. data/test/{index_tests.rb → indexes_tests.rb} +16 -16
  39. data/test/languages_tests.rb +26 -9
  40. data/test/materialized_views_tests.rb +174 -0
  41. data/test/permissions_tests.rb +159 -45
  42. data/test/roles_tests.rb +17 -7
  43. data/test/rules_tests.rb +14 -6
  44. data/test/schemas_tests.rb +35 -9
  45. data/test/sequences_tests.rb +9 -11
  46. data/test/tables_tests.rb +132 -42
  47. data/test/tablespace_tests.rb +21 -15
  48. data/test/test_helper.rb +56 -10
  49. data/test/text_search_tests.rb +42 -44
  50. data/test/trigger_tests.rb +1 -3
  51. data/test/types_tests.rb +95 -0
  52. data/test/vacuum_tests.rb +1 -3
  53. data/test/views_tests.rb +203 -0
  54. metadata +22 -16
data/test/vacuum_tests.rb CHANGED
@@ -2,9 +2,7 @@
2
2
  $: << File.dirname(__FILE__)
3
3
  require 'test_helper'
4
4
 
5
- class VacuumTests < MiniTest::Unit::TestCase
6
- include PostgreSQLExtensionsTestHelper
7
-
5
+ class VacuumTests < PostgreSQLExtensionsTestCase
8
6
  def test_vacuum
9
7
  ARBC.vacuum
10
8
  ARBC.vacuum(:full => true, :freeze => true, :verbose => true, :analyze => true)
@@ -0,0 +1,203 @@
1
+
2
+ $: << File.dirname(__FILE__)
3
+ require "test_helper"
4
+
5
+ class ViewsTests < PostgreSQLExtensionsTestCase
6
+ def test_create_view
7
+ Mig.create_view("foos_view", "SELECT * FROM foos")
8
+ Mig.create_view("foos_view", "SELECT * FROM foos", :replace => true)
9
+ Mig.create_view("foos_view", "SELECT * FROM foos", :temporary => true)
10
+ Mig.create_view("foos_view", "SELECT * FROM foos", :columns => %w{ hello world })
11
+ ARBC.create_view(
12
+ { :baz => "foos_view" },
13
+ "SELECT * FROM foos"
14
+ )
15
+
16
+ assert_equal([
17
+ %{CREATE VIEW "foos_view" AS SELECT * FROM foos;},
18
+ %{CREATE OR REPLACE VIEW "foos_view" AS SELECT * FROM foos;},
19
+ %{CREATE TEMPORARY VIEW "foos_view" AS SELECT * FROM foos;},
20
+ %{CREATE VIEW "foos_view" ("hello", "world") AS SELECT * FROM foos;},
21
+ %{CREATE VIEW "baz"."foos_view" AS SELECT * FROM foos;}
22
+ ], statements)
23
+ end
24
+
25
+ def test_create_view_with_recursive
26
+ skip unless ActiveRecord::PostgreSQLExtensions::Features.view_recursive?
27
+
28
+ Mig.create_view("foos_view", "SELECT * FROM foos", :recursive => true)
29
+
30
+ assert_equal([
31
+ %{CREATE RECURSIVE VIEW "foos_view" AS SELECT * FROM foos;}
32
+ ], statements)
33
+ end
34
+
35
+ def test_drop_view
36
+ Mig.drop_view(:foos_view)
37
+ Mig.drop_view(:foos_view, :if_exists => true)
38
+ Mig.drop_view(:foos_view, :cascade => true)
39
+
40
+ assert_equal([
41
+ %{DROP VIEW "foos_view";},
42
+ %{DROP VIEW IF EXISTS "foos_view";},
43
+ %{DROP VIEW "foos_view" CASCADE;}
44
+ ], statements)
45
+ end
46
+
47
+ def test_rename_view
48
+ Mig.rename_view(:foos_view, :bars_view)
49
+ ARBC.rename_view({ :baz => :foos_view }, :bars_view)
50
+
51
+ ARBC.with_schema(:blort) do
52
+ Mig.rename_view(:foos_view, :bars_view)
53
+ end
54
+
55
+ assert_equal([
56
+ %{ALTER VIEW "foos_view" RENAME TO "bars_view";},
57
+ %{ALTER VIEW "baz"."foos_view" RENAME TO "bars_view";},
58
+ %{ALTER VIEW "blort"."foos_view" RENAME TO "bars_view";}
59
+ ], statements)
60
+ end
61
+
62
+ def test_alter_view_owner
63
+ Mig.alter_view_owner(:foos, :joe)
64
+
65
+ assert_equal([
66
+ %{ALTER VIEW "foos" OWNER TO "joe";}
67
+ ], statements)
68
+ end
69
+
70
+ def test_alter_view_schema
71
+ Mig.alter_view_schema(:foos, :bar)
72
+
73
+ assert_equal([
74
+ %{ALTER VIEW "foos" SET SCHEMA "bar";}
75
+ ], statements)
76
+ end
77
+
78
+ def test_if_exists
79
+ tester = proc {
80
+ Mig.rename_view(:foos_view, :bars_view, :if_exists => true)
81
+ }
82
+
83
+ if ActiveRecord::PostgreSQLExtensions::Features.view_if_exists?
84
+ tester.call
85
+
86
+ assert_equal([
87
+ %{ALTER VIEW IF EXISTS "foos_view" RENAME TO "bars_view";}
88
+ ], statements)
89
+ else
90
+ assert_raises(ActiveRecord::PostgreSQLExtensions::FeatureNotSupportedError) do
91
+ tester.call
92
+ end
93
+ end
94
+ end
95
+
96
+ def test_create_view_with_options
97
+ tester = proc {
98
+ Mig.create_view("foos_view", "SELECT * FROM foos",
99
+ :with_options => "security_barrier = true"
100
+ )
101
+
102
+ Mig.create_view("foos_view", "SELECT * FROM foos",
103
+ :with_options => {
104
+ :security_barrier => true
105
+ }
106
+ )
107
+ }
108
+
109
+ if ActiveRecord::PostgreSQLExtensions::Features.view_set_options?
110
+ tester.call
111
+
112
+ assert_equal([
113
+ %{CREATE VIEW "foos_view" WITH (security_barrier = true) AS SELECT * FROM foos;},
114
+ %{CREATE VIEW "foos_view" WITH ("security_barrier" = 't') AS SELECT * FROM foos;}
115
+ ], statements)
116
+ else
117
+ assert_raises(ActiveRecord::PostgreSQLExtensions::FeatureNotSupportedError) do
118
+ tester.call
119
+ end
120
+ end
121
+ end
122
+
123
+ def test_alter_view_set_options
124
+ tester = proc {
125
+ Mig.alter_view_set_options(:foos_view, 'security_barrier = true')
126
+ Mig.alter_view_set_options(:foos_view, {
127
+ :security_barrier => true
128
+ })
129
+ }
130
+
131
+ if ActiveRecord::PostgreSQLExtensions::Features.view_if_exists?
132
+ tester.call
133
+
134
+ assert_equal([
135
+ %{ALTER VIEW "foos_view" SET (security_barrier = true);},
136
+ %{ALTER VIEW "foos_view" SET ("security_barrier" = 't');}
137
+ ], statements)
138
+ else
139
+ assert_raises(ActiveRecord::PostgreSQLExtensions::FeatureNotSupportedError) do
140
+ tester.call
141
+ end
142
+ end
143
+ end
144
+
145
+ def test_alter_view_reset_options
146
+ tester = proc {
147
+ Mig.alter_view_reset_options(:foos_view, :security_barrier)
148
+ Mig.alter_view_reset_options(:foos_view, :security_barrier, :foos)
149
+ }
150
+
151
+ if ActiveRecord::PostgreSQLExtensions::Features.view_if_exists?
152
+ tester.call
153
+
154
+ assert_equal([
155
+ %{ALTER VIEW "foos_view" RESET ("security_barrier");},
156
+ %{ALTER VIEW "foos_view" RESET ("security_barrier", "foos");}
157
+ ], statements)
158
+ else
159
+ assert_raises(ActiveRecord::PostgreSQLExtensions::FeatureNotSupportedError) do
160
+ tester.call
161
+ end
162
+ end
163
+ end
164
+
165
+ def test_alter_view_set_column_default
166
+ tester = proc {
167
+ Mig.alter_view_set_column_default(:foos_view, :bar, 20)
168
+ Mig.alter_view_set_column_default(:foos_view, :bar, '100 + foo')
169
+ }
170
+
171
+ if ActiveRecord::PostgreSQLExtensions::Features.view_if_exists?
172
+ tester.call
173
+
174
+ assert_equal([
175
+ %{ALTER VIEW "foos_view" ALTER COLUMN "bar" SET DEFAULT 20;},
176
+ %{ALTER VIEW "foos_view" ALTER COLUMN "bar" SET DEFAULT 100 + foo;}
177
+ ], statements)
178
+ else
179
+ assert_raises(ActiveRecord::PostgreSQLExtensions::FeatureNotSupportedError) do
180
+ tester.call
181
+ end
182
+ end
183
+ end
184
+
185
+ def test_alter_view_drop_column_default
186
+ tester = proc {
187
+ Mig.alter_view_drop_column_default(:foos_view, :bar)
188
+ }
189
+
190
+ if ActiveRecord::PostgreSQLExtensions::Features.view_if_exists?
191
+ tester.call
192
+
193
+ assert_equal([
194
+ %{ALTER VIEW "foos_view" ALTER COLUMN "bar" DROP DEFAULT;}
195
+ ], statements)
196
+ else
197
+ assert_raises(ActiveRecord::PostgreSQLExtensions::FeatureNotSupportedError) do
198
+ tester.call
199
+ end
200
+ end
201
+ end
202
+ end
203
+
metadata CHANGED
@@ -1,32 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-postgresql-extensions
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.2.2
4
+ version: 0.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - J Smith
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-12-10 00:00:00.000000000 Z
11
+ date: 2013-10-04 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
14
+ type: :runtime
15
+ prerelease: false
16
+ name: activerecord
15
17
  version_requirements: !ruby/object:Gem::Requirement
16
18
  requirements:
17
19
  - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: '2.3'
20
- none: false
21
- name: activerecord
22
- type: :runtime
23
- prerelease: false
24
22
  requirement: !ruby/object:Gem::Requirement
25
23
  requirements:
26
24
  - - ! '>='
27
25
  - !ruby/object:Gem::Version
28
26
  version: '2.3'
29
- none: false
30
27
  description: A whole bunch of extensions the ActiveRecord PostgreSQL adapter.
31
28
  email: code@zoocasa.com
32
29
  executables: []
@@ -43,6 +40,7 @@ files:
43
40
  - activerecord-postgresql-extensions.gemspec
44
41
  - lib/active_record/postgresql_extensions/adapter_extensions.rb
45
42
  - lib/active_record/postgresql_extensions/constraints.rb
43
+ - lib/active_record/postgresql_extensions/event_triggers.rb
46
44
  - lib/active_record/postgresql_extensions/extensions.rb
47
45
  - lib/active_record/postgresql_extensions/features.rb
48
46
  - lib/active_record/postgresql_extensions/foreign_key_associations.rb
@@ -50,6 +48,7 @@ files:
50
48
  - lib/active_record/postgresql_extensions/geometry.rb
51
49
  - lib/active_record/postgresql_extensions/indexes.rb
52
50
  - lib/active_record/postgresql_extensions/languages.rb
51
+ - lib/active_record/postgresql_extensions/materialized_views.rb
53
52
  - lib/active_record/postgresql_extensions/permissions.rb
54
53
  - lib/active_record/postgresql_extensions/postgis.rb
55
54
  - lib/active_record/postgresql_extensions/roles.rb
@@ -66,14 +65,16 @@ files:
66
65
  - lib/active_record/postgresql_extensions/version.rb
67
66
  - lib/active_record/postgresql_extensions/views.rb
68
67
  - lib/activerecord-postgresql-extensions.rb
69
- - test/adapter_tests.rb
68
+ - test/adapter_extensions_tests.rb
70
69
  - test/constraints_tests.rb
71
70
  - test/database.yml
71
+ - test/event_triggers_tests.rb
72
72
  - test/extensions_tests.rb
73
73
  - test/functions_tests.rb
74
74
  - test/geometry_tests.rb
75
- - test/index_tests.rb
75
+ - test/indexes_tests.rb
76
76
  - test/languages_tests.rb
77
+ - test/materialized_views_tests.rb
77
78
  - test/permissions_tests.rb
78
79
  - test/roles_tests.rb
79
80
  - test/rules_tests.rb
@@ -84,9 +85,12 @@ files:
84
85
  - test/test_helper.rb
85
86
  - test/text_search_tests.rb
86
87
  - test/trigger_tests.rb
88
+ - test/types_tests.rb
87
89
  - test/vacuum_tests.rb
90
+ - test/views_tests.rb
88
91
  homepage: http://github.com/zoocasa/activerecord-postgresql-extensions
89
92
  licenses: []
93
+ metadata: {}
90
94
  post_install_message:
91
95
  rdoc_options: []
92
96
  require_paths:
@@ -96,28 +100,28 @@ required_ruby_version: !ruby/object:Gem::Requirement
96
100
  - - ! '>='
97
101
  - !ruby/object:Gem::Version
98
102
  version: '0'
99
- none: false
100
103
  required_rubygems_version: !ruby/object:Gem::Requirement
101
104
  requirements:
102
105
  - - ! '>='
103
106
  - !ruby/object:Gem::Version
104
107
  version: '0'
105
- none: false
106
108
  requirements: []
107
109
  rubyforge_project:
108
- rubygems_version: 1.8.23
110
+ rubygems_version: 2.1.5
109
111
  signing_key:
110
- specification_version: 3
112
+ specification_version: 4
111
113
  summary: A whole bunch of extensions the ActiveRecord PostgreSQL adapter.
112
114
  test_files:
113
- - test/adapter_tests.rb
115
+ - test/adapter_extensions_tests.rb
114
116
  - test/constraints_tests.rb
115
117
  - test/database.yml
118
+ - test/event_triggers_tests.rb
116
119
  - test/extensions_tests.rb
117
120
  - test/functions_tests.rb
118
121
  - test/geometry_tests.rb
119
- - test/index_tests.rb
122
+ - test/indexes_tests.rb
120
123
  - test/languages_tests.rb
124
+ - test/materialized_views_tests.rb
121
125
  - test/permissions_tests.rb
122
126
  - test/roles_tests.rb
123
127
  - test/rules_tests.rb
@@ -128,4 +132,6 @@ test_files:
128
132
  - test/test_helper.rb
129
133
  - test/text_search_tests.rb
130
134
  - test/trigger_tests.rb
135
+ - test/types_tests.rb
131
136
  - test/vacuum_tests.rb
137
+ - test/views_tests.rb