GitHub Sale: sign up for any paid plan this week and pay nothing until January 1, 2009!  [ hide ]

public
Description: Ruby on Rails
Homepage: http://rubyonrails.org
Clone URL: git://github.com/rails/rails.git
Add ActiveRecord::Base.sti_name that checks 
ActiveRecord::Base#store_full_sti_class? and returns either the full or 
demodulized name. [rick] [#114 state:resolved]
technoweenie (author)
Sat May 31 17:13:11 -0700 2008
commit  72483c0d4c1e4ea794919974100acc2f255f6fd2
tree    1519e9e4dd95c3c0ac13e1d0bf8bc0e2b15fc5a9
parent  a6e79083273dfb1a62aa8ff02db07454c65729ff
...
 
 
1
2
3
...
1
2
3
4
5
0
@@ -1,3 +1,5 @@
0
+* Add ActiveRecord::Base.sti_name that checks ActiveRecord::Base#store_full_sti_class? and returns either the full or demodulized name. [rick]
0
+
0
 * Add first/last methods to associations/named_scope. Resolved #226. [Ryan Bates]
0
 
0
 *2.1.0 RC1 (May 11th, 2008)*
...
237
238
239
240
 
241
242
243
...
237
238
239
 
240
241
242
243
0
@@ -237,7 +237,7 @@ module ActiveRecord
0
         end
0
         
0
         def build_sti_condition
0
- "#{@reflection.through_reflection.quoted_table_name}.#{@reflection.through_reflection.klass.inheritance_column} = #{@reflection.klass.quote_value(@reflection.through_reflection.klass.name.demodulize)}"
0
+ "#{@reflection.through_reflection.quoted_table_name}.#{@reflection.through_reflection.klass.inheritance_column} = #{@reflection.klass.quote_value(@reflection.through_reflection.klass.sti_name)}"
0
         end
0
 
0
         alias_method :sql_conditions, :conditions
...
1293
1294
1295
 
 
 
 
1296
1297
1298
...
1452
1453
1454
1455
 
 
 
 
 
1456
1457
1458
...
1571
1572
1573
1574
1575
 
 
1576
1577
1578
...
2508
2509
2510
2511
 
2512
2513
2514
...
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
...
1456
1457
1458
 
1459
1460
1461
1462
1463
1464
1465
1466
...
1579
1580
1581
 
 
1582
1583
1584
1585
1586
...
2516
2517
2518
 
2519
2520
2521
2522
0
@@ -1293,6 +1293,10 @@ module ActiveRecord #:nodoc:
0
         super
0
       end
0
 
0
+ def sti_name
0
+ store_full_sti_class ? name : name.demodulize
0
+ end
0
+
0
       private
0
         def find_initial(options)
0
           options.update(:limit => 1)
0
@@ -1452,7 +1456,11 @@ module ActiveRecord #:nodoc:
0
         # Nest the type name in the same module as this class.
0
         # Bar is "MyApp::Business::Bar" relative to MyApp::Business::Foo
0
         def type_name_with_module(type_name)
0
- (/^::/ =~ type_name) ? type_name : "#{parent.name}::#{type_name}"
0
+ if store_full_sti_class
0
+ type_name
0
+ else
0
+ (/^::/ =~ type_name) ? type_name : "#{parent.name}::#{type_name}"
0
+ end
0
         end
0
 
0
         def construct_finder_sql(options)
0
@@ -1571,8 +1579,8 @@ module ActiveRecord #:nodoc:
0
 
0
         def type_condition
0
           quoted_inheritance_column = connection.quote_column_name(inheritance_column)
0
- type_condition = subclasses.inject("#{quoted_table_name}.#{quoted_inheritance_column} = '#{store_full_sti_class ? name : name.demodulize}' ") do |condition, subclass|
0
- condition << "OR #{quoted_table_name}.#{quoted_inheritance_column} = '#{store_full_sti_class ? subclass.name : subclass.name.demodulize}' "
0
+ type_condition = subclasses.inject("#{quoted_table_name}.#{quoted_inheritance_column} = '#{sti_name}' ") do |condition, subclass|
0
+ condition << "OR #{quoted_table_name}.#{quoted_inheritance_column} = '#{subclass.sti_name}' "
0
           end
0
 
0
           " (#{type_condition}) "
0
@@ -2508,7 +2516,7 @@ module ActiveRecord #:nodoc:
0
       # Message class in that example.
0
       def ensure_proper_type
0
         unless self.class.descends_from_active_record?
0
- write_attribute(self.class.inheritance_column, store_full_sti_class ? self.class.name : self.class.name.demodulize)
0
+ write_attribute(self.class.inheritance_column, self.class.sti_name)
0
         end
0
       end
0
 
...
5
6
7
8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
10
11
...
5
6
7
 
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
0
@@ -5,7 +5,23 @@ require 'models/subscriber'
0
 
0
 class InheritanceTest < ActiveRecord::TestCase
0
   fixtures :companies, :projects, :subscribers, :accounts
0
-
0
+
0
+ def test_class_with_store_full_sti_class_returns_full_name
0
+ old = ActiveRecord::Base.store_full_sti_class
0
+ ActiveRecord::Base.store_full_sti_class = true
0
+ assert_equal 'Namespaced::Company', Namespaced::Company.sti_name
0
+ ensure
0
+ ActiveRecord::Base.store_full_sti_class = old
0
+ end
0
+
0
+ def test_class_without_store_full_sti_class_returns_demodulized_name
0
+ old = ActiveRecord::Base.store_full_sti_class
0
+ ActiveRecord::Base.store_full_sti_class = false
0
+ assert_equal 'Company', Namespaced::Company.sti_name
0
+ ensure
0
+ ActiveRecord::Base.store_full_sti_class = old
0
+ end
0
+
0
   def test_should_store_demodulized_class_name_with_store_full_sti_class_option_disabled
0
     old = ActiveRecord::Base.store_full_sti_class
0
     ActiveRecord::Base.store_full_sti_class = false

Comments

    No one has commented yet.