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