legacy_data 0.1.8 → 0.1.9

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 (112) hide show
  1. data/Rakefile +37 -1
  2. data/VERSION +1 -1
  3. data/examples/blog_migration.rb +26 -0
  4. data/examples/create_j2ee_petstore.sql +91 -0
  5. data/examples/delete_j2ee_petstore.sql +14 -0
  6. data/examples/drupal_6_14.sql +809 -0
  7. data/examples/generated/blog_mysql/comment.rb +11 -0
  8. data/examples/generated/blog_mysql/factories.rb +9 -0
  9. data/examples/generated/blog_mysql/post.rb +11 -0
  10. data/examples/generated/blog_mysql/tag.rb +11 -0
  11. data/{spec/functional/expected → examples/generated/blog_sqlite3}/comment.rb +3 -4
  12. data/examples/generated/blog_sqlite3/factories.rb +12 -0
  13. data/{spec/functional/expected → examples/generated/blog_sqlite3}/post.rb +3 -3
  14. data/examples/generated/blog_sqlite3/tag.rb +11 -0
  15. data/examples/generated/drupal_mysql/access.rb +12 -0
  16. data/examples/generated/drupal_mysql/action.rb +11 -0
  17. data/examples/generated/drupal_mysql/actions_aid.rb +11 -0
  18. data/examples/generated/drupal_mysql/authmap.rb +13 -0
  19. data/examples/generated/drupal_mysql/batch.rb +12 -0
  20. data/examples/generated/drupal_mysql/block.rb +13 -0
  21. data/examples/generated/drupal_mysql/blocks_role.rb +12 -0
  22. data/examples/generated/drupal_mysql/box.rb +13 -0
  23. data/examples/generated/drupal_mysql/cache.rb +12 -0
  24. data/examples/generated/drupal_mysql/cache_block.rb +12 -0
  25. data/examples/generated/drupal_mysql/cache_filter.rb +12 -0
  26. data/examples/generated/drupal_mysql/cache_form.rb +12 -0
  27. data/examples/generated/drupal_mysql/cache_menu.rb +12 -0
  28. data/examples/generated/drupal_mysql/cache_page.rb +12 -0
  29. data/examples/generated/drupal_mysql/cache_update.rb +12 -0
  30. data/examples/generated/drupal_mysql/comment.rb +12 -0
  31. data/examples/generated/drupal_mysql/factories.rb +370 -0
  32. data/examples/generated/drupal_mysql/filter.rb +13 -0
  33. data/examples/generated/drupal_mysql/filter_format.rb +13 -0
  34. data/examples/generated/drupal_mysql/flood.rb +12 -0
  35. data/examples/generated/drupal_mysql/history.rb +12 -0
  36. data/examples/generated/drupal_mysql/menu_custom.rb +11 -0
  37. data/examples/generated/drupal_mysql/menu_link.rb +12 -0
  38. data/examples/generated/drupal_mysql/menu_router.rb +12 -0
  39. data/examples/generated/drupal_mysql/node.rb +13 -0
  40. data/examples/generated/drupal_mysql/node_access.rb +12 -0
  41. data/examples/generated/drupal_mysql/node_comment_statistic.rb +12 -0
  42. data/examples/generated/drupal_mysql/node_counter.rb +12 -0
  43. data/examples/generated/drupal_mysql/node_revision.rb +12 -0
  44. data/examples/generated/drupal_mysql/node_type.rb +12 -0
  45. data/examples/generated/drupal_mysql/permission.rb +12 -0
  46. data/examples/generated/drupal_mysql/role.rb +12 -0
  47. data/examples/generated/drupal_mysql/session.rb +12 -0
  48. data/examples/generated/drupal_mysql/system.rb +12 -0
  49. data/examples/generated/drupal_mysql/term_data.rb +12 -0
  50. data/examples/generated/drupal_mysql/term_hierarchy.rb +12 -0
  51. data/examples/generated/drupal_mysql/term_node.rb +12 -0
  52. data/examples/generated/drupal_mysql/term_relation.rb +13 -0
  53. data/examples/generated/drupal_mysql/term_synonym.rb +12 -0
  54. data/examples/generated/drupal_mysql/uploaded_files.rb +12 -0
  55. data/examples/generated/drupal_mysql/url_alias.rb +12 -0
  56. data/examples/generated/drupal_mysql/user.rb +14 -0
  57. data/examples/generated/drupal_mysql/users_role.rb +12 -0
  58. data/examples/generated/drupal_mysql/variable.rb +11 -0
  59. data/examples/generated/drupal_mysql/vocabulary.rb +12 -0
  60. data/examples/generated/drupal_mysql/vocabulary_node_type.rb +12 -0
  61. data/examples/generated/drupal_mysql/watchdog.rb +12 -0
  62. data/examples/generated/j2ee_petstore_mysql/address.rb +11 -0
  63. data/examples/generated/j2ee_petstore_mysql/category.rb +11 -0
  64. data/examples/generated/j2ee_petstore_mysql/factories.rb +57 -0
  65. data/examples/generated/j2ee_petstore_mysql/id_gen.rb +12 -0
  66. data/examples/generated/j2ee_petstore_mysql/item.rb +12 -0
  67. data/examples/generated/j2ee_petstore_mysql/product.rb +11 -0
  68. data/examples/generated/j2ee_petstore_mysql/seller_contact_info.rb +11 -0
  69. data/examples/generated/j2ee_petstore_mysql/tag.rb +13 -0
  70. data/examples/generated/j2ee_petstore_mysql/tag_item.rb +13 -0
  71. data/examples/generated/j2ee_petstore_mysql/ziplocation.rb +11 -0
  72. data/examples/generated/j2ee_petstore_oracle/address.rb +11 -0
  73. data/examples/generated/j2ee_petstore_oracle/category.rb +11 -0
  74. data/examples/generated/j2ee_petstore_oracle/factories.rb +52 -0
  75. data/examples/generated/j2ee_petstore_oracle/id_gen.rb +12 -0
  76. data/examples/generated/j2ee_petstore_oracle/item.rb +15 -0
  77. data/examples/generated/j2ee_petstore_oracle/product.rb +12 -0
  78. data/examples/generated/j2ee_petstore_oracle/sellercontactinfo.rb +11 -0
  79. data/examples/generated/j2ee_petstore_oracle/tag.rb +13 -0
  80. data/examples/generated/j2ee_petstore_oracle/ziplocation.rb +11 -0
  81. data/examples/generated/j2ee_petstore_sqlite3/address.rb +12 -0
  82. data/examples/generated/j2ee_petstore_sqlite3/category.rb +12 -0
  83. data/examples/generated/j2ee_petstore_sqlite3/factories.rb +57 -0
  84. data/examples/generated/j2ee_petstore_sqlite3/id_gen.rb +13 -0
  85. data/examples/generated/j2ee_petstore_sqlite3/item.rb +13 -0
  86. data/examples/generated/j2ee_petstore_sqlite3/product.rb +12 -0
  87. data/examples/generated/j2ee_petstore_sqlite3/seller_contact_info.rb +12 -0
  88. data/examples/generated/j2ee_petstore_sqlite3/tag.rb +13 -0
  89. data/examples/generated/j2ee_petstore_sqlite3/tag_item.rb +14 -0
  90. data/examples/generated/j2ee_petstore_sqlite3/ziplocation.rb +11 -0
  91. data/generators/models_from_tables/models_from_tables_generator.rb +5 -36
  92. data/generators/models_from_tables/templates/model.rb +5 -39
  93. data/legacy_data.gemspec +187 -11
  94. data/lib/active_record/connection_adapters/oracleenhanced_adapter.rb +85 -0
  95. data/lib/legacy_data.rb +5 -2
  96. data/lib/legacy_data/schema.rb +10 -7
  97. data/lib/legacy_data/table_class_name_mapper.rb +1 -1
  98. data/lib/legacy_data/table_definition.rb +120 -5
  99. data/spec/expected/post.rb +3 -3
  100. data/spec/functional/blog_adapterspec.rb +45 -0
  101. data/spec/functional/database.yml +45 -0
  102. data/spec/functional/drupal_adapterspec.rb +54 -0
  103. data/spec/functional/functional_spec_helper.rb +24 -0
  104. data/spec/functional/j2ee_petstore_adapterspec.rb +57 -0
  105. data/spec/legacy_data/schema_spec.rb +7 -3
  106. data/spec/legacy_data/table_definition_spec.rb +101 -10
  107. data/spec/models_from_tables_generator_spec.rb +19 -7
  108. data/spec/spec_helper.rb +6 -18
  109. metadata +193 -10
  110. data/examples/j2ee_petstore.sql +0 -512
  111. data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +0 -61
  112. data/spec/functional/models_from_tables_spec.rb +0 -27
@@ -0,0 +1,12 @@
1
+ class SellerContactInfo < ActiveRecord::Base
2
+ set_table_name :sellercontactinfo
3
+ set_primary_key :contactinfoid
4
+
5
+ # Relationships
6
+
7
+
8
+ # Constraints
9
+ validates_presence_of :lastname, :firstname, :email
10
+ validates_uniqueness_of :contactinfoid
11
+ end
12
+
@@ -0,0 +1,13 @@
1
+ class Tag < ActiveRecord::Base
2
+ set_table_name :tag
3
+ set_primary_key :tagid
4
+
5
+ # Relationships
6
+
7
+
8
+ # Constraints
9
+ validates_numericality_of :refcount
10
+ validates_presence_of :tag, :refcount
11
+ validates_uniqueness_of :tag
12
+ end
13
+
@@ -0,0 +1,14 @@
1
+ class TagItem < ActiveRecord::Base
2
+ set_table_name :tag_item
3
+
4
+
5
+ # Relationships
6
+
7
+
8
+ # Constraints
9
+
10
+ #validates_uniqueness_of_multiple_column_constraint :["tagid", "itemid"]
11
+ validates_numericality_of :tagid
12
+ validates_presence_of :tagid, :itemid
13
+ end
14
+
@@ -0,0 +1,11 @@
1
+ class Ziplocation < ActiveRecord::Base
2
+ set_table_name :ziplocation
3
+ set_primary_key :zipcode
4
+
5
+ # Relationships
6
+
7
+
8
+ # Constraints
9
+ validates_presence_of :city, :state
10
+ end
11
+
@@ -1,8 +1,4 @@
1
1
  require File.dirname(__FILE__) + '/../../lib/legacy_data'
2
- # require File.dirname(__FILE__) + '/../../lib/legacy_data/table_definition'
3
- # require File.dirname(__FILE__) + '/../../lib/legacy_data/schema'
4
- # require File.dirname(__FILE__) + '/../../lib/legacy_data/table_class_name_mapper'
5
- # require File.dirname(__FILE__) + '/../../lib/active_record/connection_adapters/oracle_enhanced_adapter'
6
2
 
7
3
  class ModelsFromTablesGenerator < Rails::Generator::Base
8
4
  def manifest
@@ -21,39 +17,10 @@ class ModelsFromTablesGenerator < Rails::Generator::Base
21
17
  m.class_collisions :class_path, analyzed_table[:class_name]
22
18
  m.template 'model.rb',
23
19
  File.join('app/models', "#{analyzed_table[:class_name].underscore}.rb"),
24
- :assigns => analyzed_table.to_hash
20
+ :assigns => {:definition => analyzed_table}
21
+
22
+ add_factory_girl_factory analyzed_table if options[:with_factories]
25
23
 
26
- add_factory_girl_factory analyzed_table.to_hash
27
-
28
- # # puts m.source_root
29
- # # factory_template = m.source_path('factory.rb')
30
- #
31
- # factory_template = File.dirname(__FILE__) + '/templates/factory.rb'
32
- # puts "factory_template #{factory_template}"
33
- # new_factory = m.send(:render_file, factory_template) do |file|
34
- # # vars = analyzed_table.to_hash
35
- # # b = binding
36
- # # vars.each { |k,v| eval "#{k} = vars[:#{k}] || vars['#{k}']", b }
37
- # # puts 'in block'
38
- # "in block"
39
- # # Render the source file with the temporary binding.
40
- # # ERB.new(file.read, nil, '-').result(b)
41
- # end
42
- # puts 'after new_factory'
43
- # puts " its... #{new_factory}"
44
- #
45
- # m.gsub_file 'spec/factories.rb', /\Z/ do |match|
46
- # # # # puts match
47
- # # # puts 'BEFORE'
48
- # # # # puts m.source_path('factory.rb')
49
- # # # # puts analyzed_table.to_hash.inspect
50
- # # # puts 'BEFORE'
51
- # puts 'before'
52
- # puts new_factory
53
- # puts "DONE"
54
- # "#{match}\n #{new_factory}\n"
55
- # # "#{match}\n ok \n"
56
- # end
57
24
  end
58
25
  end
59
26
  rescue => e
@@ -69,6 +36,8 @@ protected
69
36
  'Naming convention for tables in the database - will not be used when generating naming the models') { |value| options[:table_naming_convention] = value }
70
37
  opt.on('--skip-associated',
71
38
  'Do not follow foreign keys to model associated tables') { |value| options[:skip_associated] = true }
39
+ opt.on('--with-factories',
40
+ 'Add factory-girl factories for all created models') { |value| options[:with_factories] = true }
72
41
  end
73
42
 
74
43
 
@@ -1,45 +1,11 @@
1
- class <%= class_name -%> < ActiveRecord::Base
2
- set_table_name <%= table_name.to_sym.inspect %>
3
- <%= "set_primary_key #{primary_key.to_sym.inspect}" if primary_key %>
1
+ class <%= definition.class_name -%> < ActiveRecord::Base
2
+ <%= "set_table_name #{definition.table_name.downcase.to_sym.inspect}" if definition.unconventional_table_name? %>
3
+ <%= "set_primary_key #{definition.primary_key.to_sym.inspect}" if definition.unconventional_primary_key? %>
4
4
 
5
5
  # Relationships
6
- <%- [:has_many, :has_one, :belongs_to, :has_and_belongs_to_many].each do |relation_type|
7
- relations[relation_type].each do |table_name, options|
8
- class_for_table = LegacyData::TableClassNameMapper.class_name_for(table_name)
9
- is_singular_association = [:has_one, :belongs_to].include?(relation_type)
10
- association_name = class_for_table.underscore
11
- association_name = association_name.pluralize unless is_singular_association
12
- needs_class_name = (ActiveRecord::Base.class_name(association_name.pluralize) != class_for_table)
13
- -%> <%= relation_type %> <%= association_name.to_sym.inspect %>, <%=options.keys.map {|key| "#{key.to_sym.inspect} => #{options[key].to_sym.inspect}"}.join(', ')%><%= ", :class_name=>'#{class_for_table}'" if needs_class_name %>
14
- <%- end unless relations[relation_type].nil?
15
- end
16
- -%>
6
+ <%= definition.relationships_to_s %>
17
7
 
18
8
  # Constraints
19
- <%= "validates_uniqueness_of #{constraints[:unique ].map {|cols| cols.downcase.to_sym.inspect}.join(', ')}" unless constraints[:unique].blank? %>
20
- <%- constraints[:multi_column_unique].each do |cols|
21
- -%> #validates_uniqueness_of_multiple_column_constraint :<%= cols.inspect %>
22
- <%- end -%>
23
- <%= "validates_presence_of #{constraints[:presence_of].map {|cols| cols.downcase.to_sym.inspect}.join(', ')}" unless constraints[:presence_of].blank? %>
24
- <%- constraints[:inclusion_of].each do |col, possible_values|
25
- -%> def self.possible_values_for_<%= col %>
26
- [ <%= possible_values %> ]
27
- end
28
- validates_inclusion_of <%= col.to_sym.inspect %>, :in => possible_values_for_<%= col %>, :message => "is not one of (#{possible_values_for_<%= col %>.join(', ')})"
29
- <%- end if constraints[:inclusion_of] -%>
30
- <%- [:allow_nil, :do_not_allow_nil].each do |nullable|
31
- unless constraints[:numericality_of][nullable].blank?
32
- -%> <%= "validates_numericality_of #{constraints[:numericality_of][nullable].map {|cols| cols.downcase.to_sym.inspect}.join(', ')}" %><%= ", {:allow_nil=>true}" if nullable == :allow_nil %>
33
- <%- end
34
- end unless constraints[:numericality_of].blank? -%>
35
- <%- constraints[:custom].each do |name, sql_rule|
36
- -%> validate <%= "validate_#{name}".to_sym.inspect %>
37
- def <%= "validate_#{name}" %>
38
- # TODO: validate this SQL constraint
39
- <<-SQL
40
- <%= sql_rule %>
41
- SQL
42
- end
43
- <%- end if constraints[:custom] -%>
9
+ <%= definition.constraints_to_s %>
44
10
  end
45
11
 
data/legacy_data.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{legacy_data}
8
- s.version = "0.1.8"
8
+ s.version = "0.1.9"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Alex Rothenberg"]
12
- s.date = %q{2009-10-14}
12
+ s.date = %q{2009-10-21}
13
13
  s.description = %q{Create ActiveRecord models from an existing database}
14
14
  s.email = %q{alex@alexrothenberg.com}
15
15
  s.extra_rdoc_files = [
@@ -23,22 +23,110 @@ Gem::Specification.new do |s|
23
23
  "README.rdoc",
24
24
  "Rakefile",
25
25
  "VERSION",
26
- "examples/j2ee_petstore.sql",
26
+ "examples/blog_migration.rb",
27
+ "examples/create_j2ee_petstore.sql",
28
+ "examples/delete_j2ee_petstore.sql",
29
+ "examples/drupal_6_14.sql",
30
+ "examples/generated/blog_mysql/comment.rb",
31
+ "examples/generated/blog_mysql/factories.rb",
32
+ "examples/generated/blog_mysql/post.rb",
33
+ "examples/generated/blog_mysql/tag.rb",
34
+ "examples/generated/blog_sqlite3/comment.rb",
35
+ "examples/generated/blog_sqlite3/factories.rb",
36
+ "examples/generated/blog_sqlite3/post.rb",
37
+ "examples/generated/blog_sqlite3/tag.rb",
38
+ "examples/generated/drupal_mysql/access.rb",
39
+ "examples/generated/drupal_mysql/action.rb",
40
+ "examples/generated/drupal_mysql/actions_aid.rb",
41
+ "examples/generated/drupal_mysql/authmap.rb",
42
+ "examples/generated/drupal_mysql/batch.rb",
43
+ "examples/generated/drupal_mysql/block.rb",
44
+ "examples/generated/drupal_mysql/blocks_role.rb",
45
+ "examples/generated/drupal_mysql/box.rb",
46
+ "examples/generated/drupal_mysql/cache.rb",
47
+ "examples/generated/drupal_mysql/cache_block.rb",
48
+ "examples/generated/drupal_mysql/cache_filter.rb",
49
+ "examples/generated/drupal_mysql/cache_form.rb",
50
+ "examples/generated/drupal_mysql/cache_menu.rb",
51
+ "examples/generated/drupal_mysql/cache_page.rb",
52
+ "examples/generated/drupal_mysql/cache_update.rb",
53
+ "examples/generated/drupal_mysql/comment.rb",
54
+ "examples/generated/drupal_mysql/factories.rb",
55
+ "examples/generated/drupal_mysql/filter.rb",
56
+ "examples/generated/drupal_mysql/filter_format.rb",
57
+ "examples/generated/drupal_mysql/flood.rb",
58
+ "examples/generated/drupal_mysql/history.rb",
59
+ "examples/generated/drupal_mysql/menu_custom.rb",
60
+ "examples/generated/drupal_mysql/menu_link.rb",
61
+ "examples/generated/drupal_mysql/menu_router.rb",
62
+ "examples/generated/drupal_mysql/node.rb",
63
+ "examples/generated/drupal_mysql/node_access.rb",
64
+ "examples/generated/drupal_mysql/node_comment_statistic.rb",
65
+ "examples/generated/drupal_mysql/node_counter.rb",
66
+ "examples/generated/drupal_mysql/node_revision.rb",
67
+ "examples/generated/drupal_mysql/node_type.rb",
68
+ "examples/generated/drupal_mysql/permission.rb",
69
+ "examples/generated/drupal_mysql/role.rb",
70
+ "examples/generated/drupal_mysql/session.rb",
71
+ "examples/generated/drupal_mysql/system.rb",
72
+ "examples/generated/drupal_mysql/term_data.rb",
73
+ "examples/generated/drupal_mysql/term_hierarchy.rb",
74
+ "examples/generated/drupal_mysql/term_node.rb",
75
+ "examples/generated/drupal_mysql/term_relation.rb",
76
+ "examples/generated/drupal_mysql/term_synonym.rb",
77
+ "examples/generated/drupal_mysql/uploaded_files.rb",
78
+ "examples/generated/drupal_mysql/url_alias.rb",
79
+ "examples/generated/drupal_mysql/user.rb",
80
+ "examples/generated/drupal_mysql/users_role.rb",
81
+ "examples/generated/drupal_mysql/variable.rb",
82
+ "examples/generated/drupal_mysql/vocabulary.rb",
83
+ "examples/generated/drupal_mysql/vocabulary_node_type.rb",
84
+ "examples/generated/drupal_mysql/watchdog.rb",
85
+ "examples/generated/j2ee_petstore_mysql/address.rb",
86
+ "examples/generated/j2ee_petstore_mysql/category.rb",
87
+ "examples/generated/j2ee_petstore_mysql/factories.rb",
88
+ "examples/generated/j2ee_petstore_mysql/id_gen.rb",
89
+ "examples/generated/j2ee_petstore_mysql/item.rb",
90
+ "examples/generated/j2ee_petstore_mysql/product.rb",
91
+ "examples/generated/j2ee_petstore_mysql/seller_contact_info.rb",
92
+ "examples/generated/j2ee_petstore_mysql/tag.rb",
93
+ "examples/generated/j2ee_petstore_mysql/tag_item.rb",
94
+ "examples/generated/j2ee_petstore_mysql/ziplocation.rb",
95
+ "examples/generated/j2ee_petstore_oracle/address.rb",
96
+ "examples/generated/j2ee_petstore_oracle/category.rb",
97
+ "examples/generated/j2ee_petstore_oracle/factories.rb",
98
+ "examples/generated/j2ee_petstore_oracle/id_gen.rb",
99
+ "examples/generated/j2ee_petstore_oracle/item.rb",
100
+ "examples/generated/j2ee_petstore_oracle/product.rb",
101
+ "examples/generated/j2ee_petstore_oracle/sellercontactinfo.rb",
102
+ "examples/generated/j2ee_petstore_oracle/tag.rb",
103
+ "examples/generated/j2ee_petstore_oracle/ziplocation.rb",
104
+ "examples/generated/j2ee_petstore_sqlite3/address.rb",
105
+ "examples/generated/j2ee_petstore_sqlite3/category.rb",
106
+ "examples/generated/j2ee_petstore_sqlite3/factories.rb",
107
+ "examples/generated/j2ee_petstore_sqlite3/id_gen.rb",
108
+ "examples/generated/j2ee_petstore_sqlite3/item.rb",
109
+ "examples/generated/j2ee_petstore_sqlite3/product.rb",
110
+ "examples/generated/j2ee_petstore_sqlite3/seller_contact_info.rb",
111
+ "examples/generated/j2ee_petstore_sqlite3/tag.rb",
112
+ "examples/generated/j2ee_petstore_sqlite3/tag_item.rb",
113
+ "examples/generated/j2ee_petstore_sqlite3/ziplocation.rb",
27
114
  "generators/models_from_tables/USAGE",
28
115
  "generators/models_from_tables/models_from_tables_generator.rb",
29
116
  "generators/models_from_tables/templates/model.rb",
30
117
  "legacy_data.gemspec",
31
- "lib/active_record/connection_adapters/oracle_enhanced_adapter.rb",
118
+ "lib/active_record/connection_adapters/oracleenhanced_adapter.rb",
32
119
  "lib/legacy_data.rb",
33
120
  "lib/legacy_data/schema.rb",
34
121
  "lib/legacy_data/table_class_name_mapper.rb",
35
122
  "lib/legacy_data/table_definition.rb",
36
123
  "spec/expected/factories.rb",
37
124
  "spec/expected/post.rb",
38
- "spec/functional/expected/comment.rb",
39
- "spec/functional/expected/post.rb",
125
+ "spec/functional/blog_adapterspec.rb",
126
+ "spec/functional/database.yml",
127
+ "spec/functional/drupal_adapterspec.rb",
40
128
  "spec/functional/functional_spec_helper.rb",
41
- "spec/functional/models_from_tables_spec.rb",
129
+ "spec/functional/j2ee_petstore_adapterspec.rb",
42
130
  "spec/legacy_data/schema_spec.rb",
43
131
  "spec/legacy_data/table_class_name_mapper_spec.rb",
44
132
  "spec/legacy_data/table_definition_spec.rb",
@@ -54,15 +142,100 @@ Gem::Specification.new do |s|
54
142
  s.test_files = [
55
143
  "spec/expected/factories.rb",
56
144
  "spec/expected/post.rb",
57
- "spec/functional/expected/comment.rb",
58
- "spec/functional/expected/post.rb",
145
+ "spec/functional/blog_adapterspec.rb",
146
+ "spec/functional/drupal_adapterspec.rb",
59
147
  "spec/functional/functional_spec_helper.rb",
60
- "spec/functional/models_from_tables_spec.rb",
148
+ "spec/functional/j2ee_petstore_adapterspec.rb",
61
149
  "spec/legacy_data/schema_spec.rb",
62
150
  "spec/legacy_data/table_class_name_mapper_spec.rb",
63
151
  "spec/legacy_data/table_definition_spec.rb",
64
152
  "spec/models_from_tables_generator_spec.rb",
65
- "spec/spec_helper.rb"
153
+ "spec/spec_helper.rb",
154
+ "examples/blog_migration.rb",
155
+ "examples/generated/blog_mysql/comment.rb",
156
+ "examples/generated/blog_mysql/factories.rb",
157
+ "examples/generated/blog_mysql/post.rb",
158
+ "examples/generated/blog_mysql/tag.rb",
159
+ "examples/generated/blog_sqlite3/comment.rb",
160
+ "examples/generated/blog_sqlite3/factories.rb",
161
+ "examples/generated/blog_sqlite3/post.rb",
162
+ "examples/generated/blog_sqlite3/tag.rb",
163
+ "examples/generated/drupal_mysql/access.rb",
164
+ "examples/generated/drupal_mysql/action.rb",
165
+ "examples/generated/drupal_mysql/actions_aid.rb",
166
+ "examples/generated/drupal_mysql/authmap.rb",
167
+ "examples/generated/drupal_mysql/batch.rb",
168
+ "examples/generated/drupal_mysql/block.rb",
169
+ "examples/generated/drupal_mysql/blocks_role.rb",
170
+ "examples/generated/drupal_mysql/box.rb",
171
+ "examples/generated/drupal_mysql/cache.rb",
172
+ "examples/generated/drupal_mysql/cache_block.rb",
173
+ "examples/generated/drupal_mysql/cache_filter.rb",
174
+ "examples/generated/drupal_mysql/cache_form.rb",
175
+ "examples/generated/drupal_mysql/cache_menu.rb",
176
+ "examples/generated/drupal_mysql/cache_page.rb",
177
+ "examples/generated/drupal_mysql/cache_update.rb",
178
+ "examples/generated/drupal_mysql/comment.rb",
179
+ "examples/generated/drupal_mysql/factories.rb",
180
+ "examples/generated/drupal_mysql/filter.rb",
181
+ "examples/generated/drupal_mysql/filter_format.rb",
182
+ "examples/generated/drupal_mysql/flood.rb",
183
+ "examples/generated/drupal_mysql/history.rb",
184
+ "examples/generated/drupal_mysql/menu_custom.rb",
185
+ "examples/generated/drupal_mysql/menu_link.rb",
186
+ "examples/generated/drupal_mysql/menu_router.rb",
187
+ "examples/generated/drupal_mysql/node.rb",
188
+ "examples/generated/drupal_mysql/node_access.rb",
189
+ "examples/generated/drupal_mysql/node_comment_statistic.rb",
190
+ "examples/generated/drupal_mysql/node_counter.rb",
191
+ "examples/generated/drupal_mysql/node_revision.rb",
192
+ "examples/generated/drupal_mysql/node_type.rb",
193
+ "examples/generated/drupal_mysql/permission.rb",
194
+ "examples/generated/drupal_mysql/role.rb",
195
+ "examples/generated/drupal_mysql/session.rb",
196
+ "examples/generated/drupal_mysql/system.rb",
197
+ "examples/generated/drupal_mysql/term_data.rb",
198
+ "examples/generated/drupal_mysql/term_hierarchy.rb",
199
+ "examples/generated/drupal_mysql/term_node.rb",
200
+ "examples/generated/drupal_mysql/term_relation.rb",
201
+ "examples/generated/drupal_mysql/term_synonym.rb",
202
+ "examples/generated/drupal_mysql/uploaded_files.rb",
203
+ "examples/generated/drupal_mysql/url_alias.rb",
204
+ "examples/generated/drupal_mysql/user.rb",
205
+ "examples/generated/drupal_mysql/users_role.rb",
206
+ "examples/generated/drupal_mysql/variable.rb",
207
+ "examples/generated/drupal_mysql/vocabulary.rb",
208
+ "examples/generated/drupal_mysql/vocabulary_node_type.rb",
209
+ "examples/generated/drupal_mysql/watchdog.rb",
210
+ "examples/generated/j2ee_petstore_mysql/address.rb",
211
+ "examples/generated/j2ee_petstore_mysql/category.rb",
212
+ "examples/generated/j2ee_petstore_mysql/factories.rb",
213
+ "examples/generated/j2ee_petstore_mysql/id_gen.rb",
214
+ "examples/generated/j2ee_petstore_mysql/item.rb",
215
+ "examples/generated/j2ee_petstore_mysql/product.rb",
216
+ "examples/generated/j2ee_petstore_mysql/seller_contact_info.rb",
217
+ "examples/generated/j2ee_petstore_mysql/tag.rb",
218
+ "examples/generated/j2ee_petstore_mysql/tag_item.rb",
219
+ "examples/generated/j2ee_petstore_mysql/ziplocation.rb",
220
+ "examples/generated/j2ee_petstore_oracle/address.rb",
221
+ "examples/generated/j2ee_petstore_oracle/category.rb",
222
+ "examples/generated/j2ee_petstore_oracle/factories.rb",
223
+ "examples/generated/j2ee_petstore_oracle/id_gen.rb",
224
+ "examples/generated/j2ee_petstore_oracle/item.rb",
225
+ "examples/generated/j2ee_petstore_oracle/product.rb",
226
+ "examples/generated/j2ee_petstore_oracle/sellercontactinfo.rb",
227
+ "examples/generated/j2ee_petstore_oracle/tag.rb",
228
+ "examples/generated/j2ee_petstore_oracle/ziplocation.rb",
229
+ "examples/generated/j2ee_petstore_sqlite3/address.rb",
230
+ "examples/generated/j2ee_petstore_sqlite3/category.rb",
231
+ "examples/generated/j2ee_petstore_sqlite3/factories.rb",
232
+ "examples/generated/j2ee_petstore_sqlite3/id_gen.rb",
233
+ "examples/generated/j2ee_petstore_sqlite3/item.rb",
234
+ "examples/generated/j2ee_petstore_sqlite3/product.rb",
235
+ "examples/generated/j2ee_petstore_sqlite3/seller_contact_info.rb",
236
+ "examples/generated/j2ee_petstore_sqlite3/tag.rb",
237
+ "examples/generated/j2ee_petstore_sqlite3/tag_item.rb",
238
+ "examples/generated/j2ee_petstore_sqlite3/ziplocation.rb"
66
239
  ]
67
240
 
68
241
  if s.respond_to? :specification_version then
@@ -72,12 +245,15 @@ Gem::Specification.new do |s|
72
245
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
73
246
  s.add_development_dependency(%q<rspec>, [">= 0"])
74
247
  s.add_runtime_dependency(%q<activerecord>, [">= 0"])
248
+ s.add_runtime_dependency(%q<matthuhiggins-foreigner>, [">= 0.2.1"])
75
249
  else
76
250
  s.add_dependency(%q<rspec>, [">= 0"])
77
251
  s.add_dependency(%q<activerecord>, [">= 0"])
252
+ s.add_dependency(%q<matthuhiggins-foreigner>, [">= 0.2.1"])
78
253
  end
79
254
  else
80
255
  s.add_dependency(%q<rspec>, [">= 0"])
81
256
  s.add_dependency(%q<activerecord>, [">= 0"])
257
+ s.add_dependency(%q<matthuhiggins-foreigner>, [">= 0.2.1"])
82
258
  end
83
259
  end
@@ -0,0 +1,85 @@
1
+ require 'foreigner/connection_adapters/sql_2003'
2
+
3
+ module Foreigner
4
+ module ConnectionAdapters
5
+ module OracleEnhancedAdapter
6
+ include Foreigner::ConnectionAdapters::Sql2003
7
+
8
+ def foreign_keys(table_name)
9
+ (owner, table_name) = @connection.describe(table_name)
10
+
11
+ # RSI: changed select from all_constraints to user_constraints - much faster in large data dictionaries
12
+ fks = select_rows(<<-SQL, 'Foreign Keys')
13
+ select parent_c.table_name to_table, cc.column_name column_name, c.r_constraint_name name, c.delete_rule
14
+ from user_constraints c, user_constraints parent_c, user_cons_columns cc
15
+ where c.owner = '#{owner}'
16
+ and c.table_name = '#{table_name}'
17
+ and c.r_constraint_name = parent_c.constraint_name
18
+ and c.constraint_type = 'R'
19
+ and cc.owner = c.owner
20
+ and cc.constraint_name = c.constraint_name
21
+ SQL
22
+
23
+ fks.map do |row|
24
+ options = {:column => row[1], :name => row[2]}
25
+ if row[3] == 'CASCADE'
26
+ options[:dependent] = :delete
27
+ elsif $1 == 'SET NULL'
28
+ options[:dependent] = :nullify
29
+ end
30
+ ForeignKeyDefinition.new(table_name, row[0], options)
31
+ end
32
+ end
33
+
34
+ def foreign_keys_of(table_name)
35
+ (owner, table_name) = @connection.describe(table_name)
36
+
37
+ # RSI: changed select from all_constraints to user_constraints - much faster in large data dictionaries
38
+ fks = select_rows(<<-SQL, 'Remote Foriegn Keys')
39
+ select c.table_name, cc.column_name, c.delete_rule
40
+ from user_constraints c, user_constraints parent_c, user_cons_columns cc
41
+ where c.owner = '#{owner}'
42
+ and parent_c.table_name = '#{table_name}'
43
+ and c.r_constraint_name = parent_c.constraint_name
44
+ and c.constraint_type = 'R'
45
+ and cc.owner = c.owner
46
+ and cc.constraint_name = c.constraint_name
47
+ SQL
48
+ fks.map do |row|
49
+ dependent = case row[2]
50
+ when 'CASCADE'
51
+ :destroy
52
+ when 'SET NULL'
53
+ :nullify
54
+ end
55
+ options = {:to_table => row[0].downcase, :foreign_key =>row[1].downcase.to_sym }
56
+ options[:dependent] = dependent unless dependent.nil?
57
+ options
58
+ end
59
+ end
60
+
61
+ def constraints(table_name)
62
+ (owner, table_name) = @connection.describe(table_name)
63
+
64
+ # RSI: changed select from all_constraints to user_constraints - much faster in large data dictionaries
65
+ fks = select_rows(<<-SQL, 'User Contraints')
66
+ select c.constraint_name, c.search_condition
67
+ from user_constraints c
68
+ where c.owner = '#{owner}'
69
+ and c.table_name = '#{table_name}'
70
+ and c.constraint_type = 'C'
71
+ and c.generated = 'USER NAME'
72
+ and c.status = 'ENABLED'
73
+ SQL
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+ module ActiveRecord
80
+ module ConnectionAdapters
81
+ OracleEnhancedAdapter.class_eval do
82
+ include Foreigner::ConnectionAdapters::OracleEnhancedAdapter
83
+ end
84
+ end
85
+ end