drysql 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/base.rb +12 -0
  2. data/lib/dependencies.rb +12 -5
  3. metadata +2 -2
data/lib/base.rb CHANGED
@@ -89,6 +89,14 @@ module ActiveRecord
89
89
  def associations
90
90
  @associations ? @associations : {}
91
91
  end
92
+
93
+ def table_exists?(table_name=nil)
94
+ if connection.respond_to?(:tables)
95
+ connection.tables.include? construct_table_name_from_class_name(table_name)
96
+ else
97
+ false
98
+ end
99
+ end
92
100
 
93
101
 
94
102
  private
@@ -113,6 +121,10 @@ module ActiveRecord
113
121
  def pluralized_symbolized_class_name_from_table_name(table_name)
114
122
  (class_name(table_name)).downcaseFirstLetter.pluralize.to_sym
115
123
  end
124
+
125
+ def construct_table_name_from_class_name(class_name)
126
+ name = "#{table_name_prefix}#{undecorated_table_name(class_name)}#{table_name_suffix}"
127
+ end
116
128
 
117
129
  end #end class << self (Class Methods)
118
130
 
data/lib/dependencies.rb CHANGED
@@ -3,20 +3,27 @@ class Module #:nodoc:
3
3
  alias :base_const_missing :const_missing
4
4
 
5
5
  # If a non-existant class is specified, define it as a subclass of ActiveRecord::Base here
6
- #
7
6
  # This idea was inspired by the Magic Models project: http://magicmodels.rubyforge.org/
8
7
  #
9
- # I believe the on-demand generation and simple ActiveRecord::Base subclassing
10
- # to be a better implementation for my needs
8
+ # I added the modifications of on-demand generation and simple ActiveRecord::Base subclassing
9
+ #
10
+ # If a table can be found that matches the class_id, the class is defined in memory.
11
+ # If no matching table can be found, a NameError is thrown
11
12
  def const_missing(class_id)
12
13
  begin
13
14
  base_const_missing(class_id)
14
15
  rescue NameError
15
16
  class_def = <<-end_class_def
16
- class #{class_id} < ActiveRecord::Base
17
+ class #{class_id} < ActiveRecord::Base
17
18
  end
18
19
  end_class_def
19
- eval(class_def, TOPLEVEL_BINDING)
20
+ if ActiveRecord::Base.table_exists?(class_id)
21
+ eval(class_def, TOPLEVEL_BINDING)
22
+ ActiveRecord::Base.logger.info("GENERATED CLASS: #{class_id} < ActiveRecord::Base")
23
+ else
24
+ ActiveRecord::Base.logger.error("No matching table could be found for class: #{class_id}")
25
+ raise NameError
26
+ end
20
27
  end
21
28
  const_get(class_id)
22
29
  end
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.1.0
7
- date: 2006-10-30 00:00:00 -05:00
6
+ version: 0.1.1
7
+ date: 2006-11-06 00:00:00 -05:00
8
8
  summary: Extends ActiveRecord to provide automatic identification of keys, and automatic generation of associations and validations
9
9
  require_paths:
10
10
  - lib