rails_sql_views 0.6.1 → 0.8.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.
- data/CHANGELOG +5 -1
- data/LICENSE +7 -0
- data/Rakefile +30 -72
- data/TODO +2 -0
- data/lib/active_record/view.rb +76 -0
- data/lib/core_ext/module.rb +11 -9
- data/lib/rails_sql_views.rb +16 -21
- data/lib/rails_sql_views/connection_adapters/abstract/schema_definitions.rb +2 -6
- data/lib/rails_sql_views/connection_adapters/abstract/schema_statements.rb +26 -9
- data/lib/rails_sql_views/connection_adapters/abstract_adapter.rb +24 -3
- data/lib/rails_sql_views/connection_adapters/mysql_adapter.rb +36 -9
- data/lib/rails_sql_views/connection_adapters/oci_adapter.rb +5 -4
- data/lib/rails_sql_views/connection_adapters/oracle_adapter.rb +5 -4
- data/lib/rails_sql_views/connection_adapters/oracleenhanced_adapter.rb +39 -0
- data/lib/rails_sql_views/connection_adapters/oracleenhanced_adapter.rb.orig +72 -0
- data/lib/rails_sql_views/connection_adapters/postgresql_adapter.rb +28 -2
- data/lib/rails_sql_views/connection_adapters/postgresql_adapter.rb.orig +69 -0
- data/lib/rails_sql_views/connection_adapters/sqlite_adapter.rb +66 -0
- data/lib/rails_sql_views/connection_adapters/sqlserver_adapter.rb +11 -4
- data/lib/rails_sql_views/loader.rb +18 -0
- data/lib/rails_sql_views/schema_dumper.rb +53 -16
- data/lib/rails_sql_views/version.rb +2 -2
- data/test/adapter_test.rb +82 -0
- data/test/connection/native_mysql/connection.rb +32 -0
- data/test/connection/native_postgresql/connection.rb +31 -0
- data/test/connection/oracle_enhanced/connection.rb +29 -0
- data/test/models/item.rb +4 -0
- data/test/models/person.rb +5 -0
- data/test/models/person2.rb +3 -0
- data/test/models/place.rb +2 -0
- data/test/models/v_person.rb +4 -0
- data/test/models/v_profile.rb +3 -0
- data/test/schema.native_mysql.expected.rb +51 -0
- data/test/schema.native_postgresql.expected.rb +51 -0
- data/test/schema.oracle_enhanced.expected.rb +51 -0
- data/test/schema_dumper_test.rb +117 -0
- data/test/test_helper.rb +30 -0
- data/test/view_model_test.rb +63 -0
- data/test/view_operations_test.rb +36 -0
- metadata +88 -57
data/test/test_helper.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
2
|
+
$:.unshift(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'test/unit'
|
6
|
+
require 'pp'
|
7
|
+
require 'flexmock/test_unit'
|
8
|
+
|
9
|
+
require 'active_record'
|
10
|
+
#$connection = (ENV['DB'] || 'native_mysql')
|
11
|
+
$connection = (ENV['DB'] || 'native_postgresql')
|
12
|
+
require "connection/#{$connection}/connection"
|
13
|
+
require 'rails_sql_views'
|
14
|
+
|
15
|
+
require 'models/person'
|
16
|
+
require 'models/person2'
|
17
|
+
require 'models/v_person'
|
18
|
+
|
19
|
+
class Test::Unit::TestCase
|
20
|
+
def create_people_view
|
21
|
+
ActiveRecord::Base.connection.create_view(:v_people,
|
22
|
+
'select id, first_name, last_name, ssn, address_id from people', :force => true) do |v|
|
23
|
+
v.column :id
|
24
|
+
v.column :f_name
|
25
|
+
v.column :l_name
|
26
|
+
v.column :social_security
|
27
|
+
v.column :address_id
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/test_helper"
|
2
|
+
|
3
|
+
require 'models/item'
|
4
|
+
require 'models/place'
|
5
|
+
|
6
|
+
class ViewModelTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
create_people_view
|
10
|
+
VPerson.send(:based_on, Person)
|
11
|
+
|
12
|
+
@address = Place.create!
|
13
|
+
@person = Person.create!(:first_name => 'Primus', :address => @address)
|
14
|
+
@items = [ @person.owned_items.create!, @person.owned_items.create! ]
|
15
|
+
@sharable_items = [ Item.create!, Item.create!, Item.create! ]
|
16
|
+
@person.shared_items << @sharable_items[0]
|
17
|
+
@person.shared_items << @sharable_items[2]
|
18
|
+
|
19
|
+
@vperson = VPerson.find(@person.id)
|
20
|
+
end
|
21
|
+
|
22
|
+
def cleanup
|
23
|
+
Item.delete_all
|
24
|
+
Person.delete_all
|
25
|
+
Place.delete_all
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_same_person
|
29
|
+
assert_equal @person.id, @vperson.id
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_cloned_belongs_to_association_exists
|
33
|
+
reflection = VPerson.reflect_on_association(:address)
|
34
|
+
assert_not_nil reflection
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_access_cloned_belongs_to_association
|
38
|
+
assert_equal @address, @vperson.address
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_cloned_has_many_association_exists
|
42
|
+
reflection = VPerson.reflect_on_association(:owned_items)
|
43
|
+
assert_not_nil reflection
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_access_cloned_has_many_association
|
47
|
+
items = @vperson.owned_items
|
48
|
+
assert_equal 2, items.size
|
49
|
+
assert_equal @items.sort_by(&:id), items.sort_by(&:id)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_cloned_habtm_association_exists
|
53
|
+
reflection = VPerson.reflect_on_association(:shared_items)
|
54
|
+
assert_not_nil reflection
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_access_cloned_habtm_association
|
58
|
+
items = @vperson.shared_items
|
59
|
+
assert_equal 2, items.size
|
60
|
+
expected_items = [ @sharable_items[0], @sharable_items[2] ]
|
61
|
+
assert_equal expected_items.sort_by(&:id), items.sort_by(&:id)
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/test_helper"
|
2
|
+
|
3
|
+
class ViewOperationsTest < Test::Unit::TestCase
|
4
|
+
def test_create_view
|
5
|
+
Person.create(:first_name => 'John', :last_name => 'Doe', :ssn => '123456789')
|
6
|
+
assert_nothing_raised do
|
7
|
+
ActiveRecord::Base.connection.create_view(:v_people,
|
8
|
+
'select first_name, last_name, ssn from people', :force => true) do |v|
|
9
|
+
v.column :f_name
|
10
|
+
v.column :l_name
|
11
|
+
v.column :social_security
|
12
|
+
end
|
13
|
+
end
|
14
|
+
p = Person.find(:first)
|
15
|
+
vp = VPerson.find(:first)
|
16
|
+
assert_equal p.first_name, vp.f_name
|
17
|
+
end
|
18
|
+
def test_drop_view
|
19
|
+
assert_nothing_raised do
|
20
|
+
ActiveRecord::Base.connection.create_view(:v_place,
|
21
|
+
'select address, city, cstate, country from places', :force => true) do |v|
|
22
|
+
v.column :v_address
|
23
|
+
v.column :v_city
|
24
|
+
v.column :v_state
|
25
|
+
v.column :v_country
|
26
|
+
end
|
27
|
+
ActiveRecord::Base.connection.drop_view(:v_place)
|
28
|
+
end
|
29
|
+
assert_raises(ActiveRecord::StatementInvalid) do
|
30
|
+
ActiveRecord::Base.connection.execute "SELECT * FROM v_place"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
def test_no_view_raises_error
|
34
|
+
assert_raises(RuntimeError) { ActiveRecord::Base.connection.view_select_statement('foo') }
|
35
|
+
end
|
36
|
+
end
|
metadata
CHANGED
@@ -1,82 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.2
|
3
|
-
specification_version: 1
|
4
2
|
name: rails_sql_views
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
-
|
11
|
-
|
12
|
-
homepage: http://activewarehouse.rubyforge.org/rails_sql_views
|
13
|
-
rubyforge_project: activewarehouse
|
14
|
-
description: Library which adds SQL Views to Rails.
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: false
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 8
|
8
|
+
- 0
|
9
|
+
version: 0.8.0
|
25
10
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
11
|
authors:
|
30
12
|
- Anthony Eden
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-08-25 00:00:00 -04:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: activerecord
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
32
|
+
description: Adds support for using SQL views within ActiveRecord
|
33
|
+
email: josh@technicalpickles.com
|
34
|
+
executables: []
|
35
|
+
|
36
|
+
extensions: []
|
37
|
+
|
38
|
+
extra_rdoc_files:
|
39
|
+
- LICENSE
|
40
|
+
- README
|
41
|
+
- TODO
|
31
42
|
files:
|
32
43
|
- CHANGELOG
|
33
44
|
- README
|
34
45
|
- Rakefile
|
35
|
-
- lib/
|
46
|
+
- lib/active_record/view.rb
|
36
47
|
- lib/core_ext/module.rb
|
37
|
-
- lib/rails_sql_views
|
38
|
-
- lib/rails_sql_views/connection_adapters
|
39
|
-
- lib/rails_sql_views/connection_adapters/abstract
|
48
|
+
- lib/rails_sql_views.rb
|
40
49
|
- lib/rails_sql_views/connection_adapters/abstract/schema_definitions.rb
|
41
50
|
- lib/rails_sql_views/connection_adapters/abstract/schema_statements.rb
|
42
51
|
- lib/rails_sql_views/connection_adapters/abstract_adapter.rb
|
43
52
|
- lib/rails_sql_views/connection_adapters/mysql_adapter.rb
|
44
53
|
- lib/rails_sql_views/connection_adapters/oci_adapter.rb
|
45
54
|
- lib/rails_sql_views/connection_adapters/oracle_adapter.rb
|
55
|
+
- lib/rails_sql_views/connection_adapters/oracleenhanced_adapter.rb
|
56
|
+
- lib/rails_sql_views/connection_adapters/oracleenhanced_adapter.rb.orig
|
46
57
|
- lib/rails_sql_views/connection_adapters/postgresql_adapter.rb
|
58
|
+
- lib/rails_sql_views/connection_adapters/postgresql_adapter.rb.orig
|
59
|
+
- lib/rails_sql_views/connection_adapters/sqlite_adapter.rb
|
47
60
|
- lib/rails_sql_views/connection_adapters/sqlserver_adapter.rb
|
61
|
+
- lib/rails_sql_views/loader.rb
|
48
62
|
- lib/rails_sql_views/schema_dumper.rb
|
49
63
|
- lib/rails_sql_views/version.rb
|
50
|
-
-
|
51
|
-
|
64
|
+
- LICENSE
|
65
|
+
- TODO
|
66
|
+
has_rdoc: true
|
67
|
+
homepage: http://activewarehouse.rubyforge.org/rails_sql_views
|
68
|
+
licenses: []
|
52
69
|
|
70
|
+
post_install_message:
|
53
71
|
rdoc_options:
|
54
|
-
- --
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
72
|
+
- --charset=UTF-8
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
segments:
|
80
|
+
- 0
|
81
|
+
version: "0"
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
segments:
|
87
|
+
- 0
|
88
|
+
version: "0"
|
62
89
|
requirements: []
|
63
90
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
91
|
+
rubyforge_project:
|
92
|
+
rubygems_version: 1.3.6
|
93
|
+
signing_key:
|
94
|
+
specification_version: 3
|
95
|
+
summary: Library which adds SQL Views to ActiveRecord.
|
96
|
+
test_files:
|
97
|
+
- test/adapter_test.rb
|
98
|
+
- test/connection/native_mysql/connection.rb
|
99
|
+
- test/connection/native_postgresql/connection.rb
|
100
|
+
- test/connection/oracle_enhanced/connection.rb
|
101
|
+
- test/models/item.rb
|
102
|
+
- test/models/person.rb
|
103
|
+
- test/models/person2.rb
|
104
|
+
- test/models/place.rb
|
105
|
+
- test/models/v_person.rb
|
106
|
+
- test/models/v_profile.rb
|
107
|
+
- test/schema.native_mysql.expected.rb
|
108
|
+
- test/schema.native_postgresql.expected.rb
|
109
|
+
- test/schema.oracle_enhanced.expected.rb
|
110
|
+
- test/schema_dumper_test.rb
|
111
|
+
- test/test_helper.rb
|
112
|
+
- test/view_model_test.rb
|
113
|
+
- test/view_operations_test.rb
|