drysql 0.2.0 → 0.2.1

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/lib/associations.rb CHANGED
@@ -21,9 +21,7 @@ module ActiveRecord
21
21
  logger.info("DRYSQL >> Cleared cached schema for: #{self}")
22
22
  end
23
23
 
24
- def is_associated_with(class_name_symbol)
25
- !(reflections.detect {|key, reflection| key.to_s.singularize == class_name_symbol.to_s.singularize}).nil?
26
- end
24
+
27
25
 
28
26
  private
29
27
 
@@ -31,7 +29,7 @@ module ActiveRecord
31
29
  def generate_belongs_to_associations
32
30
  foreign_keys = table_constraints.select {|constraint| constraint.foreign_key?}
33
31
  foreign_keys.each do |foreign_key|
34
- belongs_to_class_name = (class_name(foreign_key.referenced_table_name)).downcaseFirstLetter
32
+ belongs_to_class_name = association_class_name_from_table_name(class_name(foreign_key.referenced_table_name))
35
33
  self.send(:belongs_to, :"#{belongs_to_class_name}", :foreign_key=>foreign_key.column_name.to_a[0])
36
34
  logger.info("DRYSQL >> GENERATED ASSOCIATION: #{self.name} belongs_to :#{belongs_to_class_name}, :foreign_key=>#{foreign_key.column_name.to_a[0]}")
37
35
  end
@@ -42,11 +40,11 @@ module ActiveRecord
42
40
  def generate_has_many_associations
43
41
  foreign_constraints.each do |foreign_constraint|
44
42
  if foreign_constraint_column_is_unique?(foreign_constraint)
45
- has_one_class_name = (class_name(foreign_constraint.table_name)).downcaseFirstLetter
43
+ has_one_class_name = association_class_name_from_table_name(class_name(foreign_constraint.table_name))
46
44
  self.send(:has_one, :"#{has_one_class_name}", :foreign_key=>foreign_constraint.column_name.to_a[0])
47
45
  logger.info("DRYSQL >> GENERATED ASSOCIATION: #{self.name} has_one :#{has_one_class_name}, :foreign_key=>#{foreign_constraint.column_name.to_a[0]}")
48
46
  else
49
- has_many_class_name = (class_name(foreign_constraint.table_name)).downcaseFirstLetter.pluralize
47
+ has_many_class_name = association_class_name_from_table_name(class_name(foreign_constraint.table_name)).pluralize
50
48
  self.send(:has_many, :"#{has_many_class_name}", :foreign_key=>foreign_constraint.column_name.to_a[0])
51
49
  logger.info("DRYSQL >> GENERATED ASSOCIATION: #{self.name} has_many :#{has_many_class_name}, :foreign_key=>#{foreign_constraint.column_name.to_a[0]}")
52
50
  end
@@ -80,15 +78,25 @@ module ActiveRecord
80
78
  has_many_associations.each do |association|
81
79
  # FIXME the singularization is a hack. We should be able to figure the exact class name without relying
82
80
  # on naming conventions
83
- foreign_class = instance_eval(association[0].to_s.camelize.singularize)
81
+ foreign_class = instance_eval(association[0].to_s.camelize.singularize)
84
82
  eligible_foreign_keys = foreign_class.table_constraints.select {|c| c.foreign_key? && c.referenced_table_name.upcase != table_name.upcase}
85
- eligible_foreign_keys.select {|key| !self.is_associated_with(symbolized_class_name_from_table_name(key.referenced_table_name))}.each do |fk|
86
- has_many_class_name = pluralized_symbolized_class_name_from_table_name(fk.referenced_table_name)
87
- self.send(:has_many, has_many_class_name, :through=>association[0])
88
- logger.info("DRYSQL >> GENERATED ASSOCIATION: #{self.name} has_many #{has_many_class_name}, :through=>#{association[0]}")
83
+ eligible_foreign_keys.select {|key| !is_associated_with(association_class_name_from_table_name(key.referenced_table_name))}.each do |fk|
84
+ has_many_class_name = association_class_name_from_table_name(class_name(fk.referenced_table_name)).pluralize
85
+ self.send(:has_many, :"#{has_many_class_name}", :through=>association[0])
86
+ logger.info("DRYSQL >> GENERATED ASSOCIATION: #{self.name} has_many :#{has_many_class_name}, :through=>:#{association[0]}")
89
87
  end
90
88
  end
91
89
  end
90
+
91
+
92
+ def is_associated_with(class_name_symbol)
93
+ !(reflections.detect {|key, reflection| key.to_s.singularize == class_name_symbol.to_s.singularize}).nil?
94
+ end
95
+
96
+
97
+ def association_class_name_from_table_name(table_name)
98
+ Inflector.underscore(Inflector.demodulize(class_name(table_name)))
99
+ end
92
100
 
93
101
  end # end of class methods
94
102
 
data/lib/base.rb CHANGED
@@ -156,14 +156,6 @@ module ActiveRecord
156
156
  reflections.select {|key, reflection| reflection.macro == :has_many}
157
157
  end
158
158
 
159
- def symbolized_class_name_from_table_name(table_name)
160
- (class_name(table_name)).downcaseFirstLetter.to_sym
161
- end
162
-
163
- def pluralized_symbolized_class_name_from_table_name(table_name)
164
- (class_name(table_name)).downcaseFirstLetter.pluralize.to_sym
165
- end
166
-
167
159
  def construct_table_name_from_class_name(class_name)
168
160
  name = "#{table_name_prefix}#{undecorated_table_name(class_name)}#{table_name_suffix}"
169
161
  end
@@ -93,25 +93,28 @@ module ActiveRecord
93
93
  end
94
94
 
95
95
  def constraints(table_name, name = nil)#:nodoc:
96
- constraints = []
96
+ constraints = []
97
+ upcase_table_name = table_name.upcase
97
98
  sql = "select UC.constraint_name, UC.constraint_type, UC.table_name, COL.column_name, \
98
99
  REF.r_constraint_name as referenced_constraint_name, REF.constraint_name as foreign_constraint_name, \
99
100
  REF.delete_rule as foreign_delete_rule, COLREF.table_name as foreign_table_name, COLREF.column_name as foreign_column_name from \
100
101
  (select owner, constraint_name, constraint_type, table_name, r_owner, r_constraint_name \
101
- from all_constraints where table_name='#{table_name}') UC inner join \
102
- (select constraint_name, table_name, column_name from all_cons_columns where table_name='#{table_name}') COL on \
102
+ from all_constraints where table_name='#{upcase_table_name}') UC inner join \
103
+ (select constraint_name, table_name, column_name from all_cons_columns where table_name='#{upcase_table_name}') COL on \
103
104
  (COL.constraint_name = UC.constraint_name) left join all_constraints REF on \
104
105
  (UC.constraint_name=REF.constraint_name OR UC.constraint_name=REF.r_constraint_name) left join all_cons_columns COLREF on \
105
- (not COLREF.table_name='#{table_name}' AND (REF.constraint_name=COLREF.constraint_name OR REF.r_constraint_name=COLREF.constraint_name))"
106
+ (not COLREF.table_name='#{upcase_table_name}' AND (REF.constraint_name=COLREF.constraint_name OR REF.r_constraint_name=COLREF.constraint_name))"
106
107
 
107
108
  results = select_all(sql, name)
108
109
  constraint_name_hash = {}
109
110
  results.each do |row|
110
111
  # The author(s) of the Oracle adapter chose to selectively downcase column names for
111
- # "cleanliness" within our Rails code. I had to follow suit with constraint column names
112
+ # "cleanliness" within our Rails code. I had to follow suit with constraint column & table names
112
113
  # so that model objects could look up their data values using the generated column accessor methods
113
114
  column_name = oracle_downcase(row['column_name'])
114
115
  unless row['foreign_column_name'].nil? then row['foreign_column_name'] = oracle_downcase(row['foreign_column_name']) end
116
+ unless row['table_name'].nil? then row['table_name'] = oracle_downcase(row['table_name']) end
117
+ unless row['foreign_table_name'].nil? then row['foreign_table_name'] = oracle_downcase(row['foreign_table_name']) end
115
118
  constraint_name = row['constraint_name']
116
119
  foreign_constraint_name = row['foreign_constraint_name']
117
120
 
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: drysql
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.2.0
7
- date: 2007-01-29 00:00:00 -05:00
6
+ version: 0.2.1
7
+ date: 2007-02-08 00:00:00 -05:00
8
8
  summary: Dynamic, Reflective, Invisible Object-Relational Mapping for Ruby
9
9
  require_paths:
10
10
  - lib
@@ -28,18 +28,18 @@ cert_chain:
28
28
  authors:
29
29
  - Bryan Evans
30
30
  files:
31
- - lib/validations.rb
32
- - lib/dependencies.rb
33
31
  - lib/associations.rb
34
- - lib/drysql.rb
35
32
  - lib/base.rb
33
+ - lib/dependencies.rb
34
+ - lib/drysql.rb
35
+ - lib/validations.rb
36
36
  - lib/helpers/string.rb
37
- - lib/connection_adapters/postgresql_adapter.rb
37
+ - lib/connection_adapters/abstract_adapter.rb
38
+ - lib/connection_adapters/ibm_db2_adapter.rb
38
39
  - lib/connection_adapters/mysql_adapter.rb
39
40
  - lib/connection_adapters/oracle_adapter.rb
41
+ - lib/connection_adapters/postgresql_adapter.rb
40
42
  - lib/connection_adapters/sqlserver_adapter.rb
41
- - lib/connection_adapters/abstract_adapter.rb
42
- - lib/connection_adapters/ibm_db2_adapter.rb
43
43
  - lib/connection_adapters/abstract/schema_definitions.rb
44
44
  - README
45
45
  test_files: []