robdimarco_rails_sql_views 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/CHANGELOG +22 -0
  2. data/CONTRIB +8 -0
  3. data/LICENSE +7 -0
  4. data/README +51 -0
  5. data/Rakefile +41 -0
  6. data/TODO +2 -0
  7. data/init.rb +1 -0
  8. data/lib/active_record/view.rb +76 -0
  9. data/lib/core_ext/module.rb +13 -0
  10. data/lib/rails_sql_views.rb +51 -0
  11. data/lib/rails_sql_views/connection_adapters/abstract/schema_definitions.rb +63 -0
  12. data/lib/rails_sql_views/connection_adapters/abstract/schema_statements.rb +81 -0
  13. data/lib/rails_sql_views/connection_adapters/abstract_adapter.rb +41 -0
  14. data/lib/rails_sql_views/connection_adapters/mysql2_adapter.rb +62 -0
  15. data/lib/rails_sql_views/connection_adapters/mysql_adapter.rb +66 -0
  16. data/lib/rails_sql_views/connection_adapters/oci_adapter.rb +33 -0
  17. data/lib/rails_sql_views/connection_adapters/oracle_adapter.rb +33 -0
  18. data/lib/rails_sql_views/connection_adapters/oracleenhanced_adapter.rb +39 -0
  19. data/lib/rails_sql_views/connection_adapters/oracleenhanced_adapter.rb.orig +72 -0
  20. data/lib/rails_sql_views/connection_adapters/postgresql_adapter.rb +65 -0
  21. data/lib/rails_sql_views/connection_adapters/postgresql_adapter.rb.orig +69 -0
  22. data/lib/rails_sql_views/connection_adapters/sqlite_adapter.rb +66 -0
  23. data/lib/rails_sql_views/connection_adapters/sqlserver_adapter.rb +43 -0
  24. data/lib/rails_sql_views/loader.rb +20 -0
  25. data/lib/rails_sql_views/schema_dumper.rb +113 -0
  26. data/lib/rails_sql_views/version.rb +9 -0
  27. data/rails/init.rb +1 -0
  28. data/test/README +63 -0
  29. data/test/adapter_test.rb +82 -0
  30. data/test/connection.example.yml +12 -0
  31. data/test/connection/native_mysql/connection.rb +32 -0
  32. data/test/connection/native_mysql/schema.sql +33 -0
  33. data/test/connection/native_mysql2/connection.rb +32 -0
  34. data/test/connection/native_mysql2/schema.sql +33 -0
  35. data/test/connection/native_postgresql/connection.rb +31 -0
  36. data/test/connection/native_postgresql/schema.sql +33 -0
  37. data/test/connection/oracle_enhanced/connection.rb +29 -0
  38. data/test/connection/oracle_enhanced/procedures.sql +15 -0
  39. data/test/connection/oracle_enhanced/schema.sql +39 -0
  40. data/test/models/item.rb +4 -0
  41. data/test/models/person.rb +5 -0
  42. data/test/models/person2.rb +3 -0
  43. data/test/models/place.rb +2 -0
  44. data/test/models/v_person.rb +4 -0
  45. data/test/models/v_profile.rb +3 -0
  46. data/test/schema.native_mysql.expected.rb +57 -0
  47. data/test/schema.native_mysql2.expected.rb +58 -0
  48. data/test/schema.native_postgresql.expected.rb +51 -0
  49. data/test/schema.oracle_enhanced.expected.rb +51 -0
  50. data/test/schema_dumper_test.rb +130 -0
  51. data/test/test_helper.rb +30 -0
  52. data/test/view_model_test.rb +63 -0
  53. data/test/view_operations_test.rb +36 -0
  54. metadata +246 -0
@@ -0,0 +1,51 @@
1
+ # This file is auto-generated from the current state of the database. Instead of editing this file,
2
+ # please use the migrations feature of Active Record to incrementally modify your database, and
3
+ # then regenerate this schema definition.
4
+ #
5
+ # Note that this schema.rb definition is the authoritative source for your database schema. If you need
6
+ # to create the application database on another system, you should be using db:schema:load, not running
7
+ # all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations
8
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
9
+ #
10
+ # It's strongly recommended to check this file into your version control system.
11
+
12
+ ActiveRecord::Schema.define(:version => 0) do
13
+
14
+ create_table "items", :force => true do |t|
15
+ t.integer "person_id", :precision => 38, :scale => 0
16
+ end
17
+
18
+ create_table "items_people", :id => false, :force => true do |t|
19
+ t.integer "person_id", :precision => 38, :scale => 0
20
+ t.integer "item_id", :precision => 38, :scale => 0
21
+ end
22
+
23
+ create_table "people", :force => true do |t|
24
+ t.string "first_name"
25
+ t.string "last_name"
26
+ t.string "ssn", :limit => 64
27
+ t.integer "address_id", :precision => 38, :scale => 0
28
+ end
29
+
30
+ create_table "people2", :force => true do |t|
31
+ t.string "first_name"
32
+ t.string "last_name"
33
+ t.string "ssn", :limit => 64
34
+ end
35
+
36
+ create_table "places", :force => true do |t|
37
+ t.string "address", :limit => 2000
38
+ t.string "city"
39
+ t.string "cstate"
40
+ t.string "country", :limit => 2
41
+ end
42
+
43
+ create_view "v_people", "select id, first_name, last_name, ssn, address_id from people", :force => true do |v|
44
+ v.column :id
45
+ v.column :f_name
46
+ v.column :l_name
47
+ v.column :social_security
48
+ v.column :address_id
49
+ end
50
+
51
+ end
@@ -0,0 +1,130 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/test_helper')
2
+ require 'active_record/schema_dumper'
3
+
4
+ class SchemaDumperTest < Test::Unit::TestCase
5
+ def setup
6
+ teardown
7
+ end
8
+ def teardown
9
+ ['V_PEOPLE', 'V_PROFILE'].each do |view|
10
+ if ActiveRecord::Base.connection.adapter_name == 'OracleEnhanced'
11
+ ActiveRecord::Base.connection.execute("
12
+ DECLARE
13
+ CURSOR C1 is SELECT view_name FROM user_views where view_name = '#{view}';
14
+ BEGIN
15
+ FOR I IN C1 LOOP
16
+ EXECUTE IMMEDIATE 'DROP VIEW '||I.view_name||'';
17
+ END LOOP;
18
+ END;
19
+ ");
20
+ else
21
+ ActiveRecord::Base.connection.execute("drop view if exists #{view}")
22
+ end
23
+ end
24
+ end
25
+ def test_view
26
+ create_people_view
27
+
28
+ select_stmt = <<-HERE
29
+ select first_name, last_name, ssn from people
30
+ UNION
31
+ select first_name, last_name, ssn from people2
32
+ HERE
33
+
34
+ ActiveRecord::Base.connection.create_view(:v_profile, select_stmt, :force => true) do |v|
35
+ v.column :first_name
36
+ v.column :last_name
37
+ v.column :ssn
38
+ end
39
+
40
+ stream = StringIO.new
41
+ dumper = ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
42
+ stream.rewind
43
+ assert_equal File.open(File.dirname(__FILE__) + "/schema.#{$connection}.expected.rb", 'r').readlines, stream.readlines
44
+ end
45
+ def test_dump_and_load
46
+ create_people_view
47
+ assert_dump_and_load_succeed
48
+ end
49
+ def test_union
50
+ Person.create(:first_name => 'Joe', :last_name => 'User', :ssn => '123456789')
51
+ Person2.create(:first_name => 'Jane', :last_name => 'Doe', :ssn => '222334444')
52
+
53
+ select_stmt = <<-HERE
54
+ select first_name, last_name, ssn from people
55
+ UNION
56
+ select first_name, last_name, ssn from people2
57
+ HERE
58
+
59
+ ActiveRecord::Base.connection.create_view(:v_profile, select_stmt, :force => true) do |v|
60
+ v.column :first_name
61
+ v.column :last_name
62
+ v.column :ssn
63
+ end
64
+
65
+ assert_dump_and_load_succeed
66
+ end
67
+ def test_view_creation_order
68
+ ActiveRecord::SchemaDumper.view_creation_order << :v_people
69
+ create_people_view
70
+ assert_dump_and_load_succeed
71
+ ActiveRecord::SchemaDumper.view_creation_order.pop
72
+ end
73
+ def test_symbol_ignore
74
+ ActiveRecord::SchemaDumper.ignore_views << :v_people
75
+ create_people_view
76
+ assert_dump_and_load_succeed
77
+ ActiveRecord::SchemaDumper.ignore_views.pop
78
+ end
79
+ def test_regex_ignore
80
+ ActiveRecord::SchemaDumper.ignore_views << Regexp.new(/v_people/)
81
+ create_people_view
82
+ assert_dump_and_load_succeed
83
+ ActiveRecord::SchemaDumper.ignore_views.pop
84
+ end
85
+ def test_non_allowed_object_raises_error
86
+ create_people_view
87
+ ActiveRecord::SchemaDumper.ignore_views << 0
88
+ begin
89
+ schema_file = File.dirname(__FILE__) + "/schema.#{$connection}.out.rb"
90
+ File.open(schema_file, "w") do |file|
91
+ assert_raise(StandardError) do
92
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
93
+ end
94
+ end
95
+ ensure
96
+ ActiveRecord::SchemaDumper.ignore_views.pop
97
+ end
98
+ end
99
+
100
+ def test_logging_error
101
+ ActiveRecord::SchemaDumper.ignore_views << 0
102
+ old_logger = ActiveRecord::Base.logger
103
+
104
+ begin
105
+ mock_logger = flexmock('logger', :error => nil)
106
+ mock_logger.should_receive(:error)
107
+ ActiveRecord::Base.logger = mock_logger
108
+ schema_file = File.dirname(__FILE__) + "/schema.#{$connection}.out.rb"
109
+ File.open(schema_file, "w") do |file|
110
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
111
+ end
112
+ ensure
113
+ ActiveRecord::SchemaDumper.ignore_views.pop
114
+ ActiveRecord::Base.logger = old_logger
115
+ end
116
+ end
117
+
118
+ def assert_dump_and_load_succeed
119
+ schema_file = File.dirname(__FILE__) + "/schema.#{$connection}.out.rb"
120
+ assert_nothing_raised do
121
+ File.open(schema_file, "w") do |file|
122
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
123
+ end
124
+ end
125
+
126
+ assert_nothing_raised do
127
+ load(schema_file)
128
+ end
129
+ end
130
+ end
@@ -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_mysql2')
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.expand_path(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.expand_path(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 ADDED
@@ -0,0 +1,246 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: robdimarco_rails_sql_views
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.9.0
6
+ platform: ruby
7
+ authors:
8
+ - Anthony Eden
9
+ - Rob Di Marco
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-12-20 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ version_requirements: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ! '>='
19
+ - !ruby/object:Gem::Version
20
+ version: 3.0.7
21
+ none: false
22
+ prerelease: false
23
+ name: rails
24
+ requirement: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ! '>='
27
+ - !ruby/object:Gem::Version
28
+ version: 3.0.7
29
+ none: false
30
+ type: :runtime
31
+ - !ruby/object:Gem::Dependency
32
+ version_requirements: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ none: false
38
+ prerelease: false
39
+ name: rake
40
+ requirement: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ none: false
46
+ type: :development
47
+ - !ruby/object:Gem::Dependency
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ none: false
54
+ prerelease: false
55
+ name: flexmock
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ none: false
62
+ type: :development
63
+ - !ruby/object:Gem::Dependency
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ none: false
70
+ prerelease: false
71
+ name: test-unit
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ none: false
78
+ type: :development
79
+ - !ruby/object:Gem::Dependency
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ none: false
86
+ prerelease: false
87
+ name: mysql2
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ! '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ none: false
94
+ type: :development
95
+ - !ruby/object:Gem::Dependency
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ none: false
102
+ prerelease: false
103
+ name: pg
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ none: false
110
+ type: :development
111
+ - !ruby/object:Gem::Dependency
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ! '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ none: false
118
+ prerelease: false
119
+ name: activerecord
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ none: false
126
+ type: :development
127
+ description: Adds support for using SQL views within ActiveRecord. Allows for migration
128
+ support for views
129
+ email:
130
+ executables: []
131
+ extensions: []
132
+ extra_rdoc_files:
133
+ - LICENSE
134
+ - README
135
+ - TODO
136
+ files:
137
+ - rails/init.rb
138
+ - lib/active_record/view.rb
139
+ - lib/core_ext/module.rb
140
+ - lib/rails_sql_views/connection_adapters/abstract/schema_definitions.rb
141
+ - lib/rails_sql_views/connection_adapters/abstract/schema_statements.rb
142
+ - lib/rails_sql_views/connection_adapters/abstract_adapter.rb
143
+ - lib/rails_sql_views/connection_adapters/mysql2_adapter.rb
144
+ - lib/rails_sql_views/connection_adapters/mysql_adapter.rb
145
+ - lib/rails_sql_views/connection_adapters/oci_adapter.rb
146
+ - lib/rails_sql_views/connection_adapters/oracle_adapter.rb
147
+ - lib/rails_sql_views/connection_adapters/oracleenhanced_adapter.rb
148
+ - lib/rails_sql_views/connection_adapters/oracleenhanced_adapter.rb.orig
149
+ - lib/rails_sql_views/connection_adapters/postgresql_adapter.rb
150
+ - lib/rails_sql_views/connection_adapters/postgresql_adapter.rb.orig
151
+ - lib/rails_sql_views/connection_adapters/sqlite_adapter.rb
152
+ - lib/rails_sql_views/connection_adapters/sqlserver_adapter.rb
153
+ - lib/rails_sql_views/loader.rb
154
+ - lib/rails_sql_views/schema_dumper.rb
155
+ - lib/rails_sql_views/version.rb
156
+ - lib/rails_sql_views.rb
157
+ - LICENSE
158
+ - Rakefile
159
+ - README
160
+ - init.rb
161
+ - CHANGELOG
162
+ - CONTRIB
163
+ - TODO
164
+ - test/adapter_test.rb
165
+ - test/connection/native_mysql/connection.rb
166
+ - test/connection/native_mysql/schema.sql
167
+ - test/connection/native_mysql2/connection.rb
168
+ - test/connection/native_mysql2/schema.sql
169
+ - test/connection/native_postgresql/connection.rb
170
+ - test/connection/native_postgresql/schema.sql
171
+ - test/connection/oracle_enhanced/connection.rb
172
+ - test/connection/oracle_enhanced/procedures.sql
173
+ - test/connection/oracle_enhanced/schema.sql
174
+ - test/connection.example.yml
175
+ - test/models/item.rb
176
+ - test/models/person.rb
177
+ - test/models/person2.rb
178
+ - test/models/place.rb
179
+ - test/models/v_person.rb
180
+ - test/models/v_profile.rb
181
+ - test/README
182
+ - test/schema.native_mysql.expected.rb
183
+ - test/schema.native_mysql2.expected.rb
184
+ - test/schema.native_postgresql.expected.rb
185
+ - test/schema.oracle_enhanced.expected.rb
186
+ - test/schema_dumper_test.rb
187
+ - test/test_helper.rb
188
+ - test/view_model_test.rb
189
+ - test/view_operations_test.rb
190
+ homepage: http://github.com/robdimarco/rails_sql_views
191
+ licenses: []
192
+ post_install_message:
193
+ rdoc_options: []
194
+ require_paths:
195
+ - lib
196
+ required_ruby_version: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ! '>='
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ segments:
202
+ - 0
203
+ hash: 3381935535632702404
204
+ none: false
205
+ required_rubygems_version: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ! '>='
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ segments:
211
+ - 0
212
+ hash: 3381935535632702404
213
+ none: false
214
+ requirements: []
215
+ rubyforge_project:
216
+ rubygems_version: 1.8.24
217
+ signing_key:
218
+ specification_version: 3
219
+ summary: Library which adds SQL Views to ActiveRecord.
220
+ test_files:
221
+ - test/adapter_test.rb
222
+ - test/connection/native_mysql/connection.rb
223
+ - test/connection/native_mysql/schema.sql
224
+ - test/connection/native_mysql2/connection.rb
225
+ - test/connection/native_mysql2/schema.sql
226
+ - test/connection/native_postgresql/connection.rb
227
+ - test/connection/native_postgresql/schema.sql
228
+ - test/connection/oracle_enhanced/connection.rb
229
+ - test/connection/oracle_enhanced/procedures.sql
230
+ - test/connection/oracle_enhanced/schema.sql
231
+ - test/connection.example.yml
232
+ - test/models/item.rb
233
+ - test/models/person.rb
234
+ - test/models/person2.rb
235
+ - test/models/place.rb
236
+ - test/models/v_person.rb
237
+ - test/models/v_profile.rb
238
+ - test/README
239
+ - test/schema.native_mysql.expected.rb
240
+ - test/schema.native_mysql2.expected.rb
241
+ - test/schema.native_postgresql.expected.rb
242
+ - test/schema.oracle_enhanced.expected.rb
243
+ - test/schema_dumper_test.rb
244
+ - test/test_helper.rb
245
+ - test/view_model_test.rb
246
+ - test/view_operations_test.rb