public
Fork of rails/rails
Description: Ruby on Rails
Homepage: http://rubyonrails.org
Clone URL: git://github.com/ezmobius/rails.git
Search Repo:
Merge git://github.com/rails/rails
ezmobius (author)
Fri May 16 14:38:19 -0700 2008
commit  9271041be6fa595b06d366cad84bec835527d001
tree    006fcb13c429dfc0d3cfc0625adb7a3c8cebfa71
parent  d0728d0fd346f2282f7817c2119026cca6e83324 parent  345f030c5b6c0a28ddde56c80a1112b00d345c79
...
11
12
13
14
 
15
16
17
18
 
 
19
20
21
...
48
49
50
51
 
52
53
54
...
57
58
59
60
 
61
62
63
64
65
66
67
68
69
70
71
72
73
...
71
72
73
74
75
 
76
77
 
78
79
80
 
 
81
82
83
 
84
85
86
87
 
88
89
90
91
92
93
 
94
95
96
97
 
98
99
100
101
102
103
104
 
105
106
107
108
109
 
110
111
112
113
114
115
 
116
117
118
...
133
134
135
136
 
137
138
139
140
141
...
155
156
157
158
 
159
160
161
162
 
163
164
165
166
167
168
 
169
170
171
...
191
192
193
194
 
195
196
197
...
209
210
211
212
 
213
214
215
216
...
226
227
228
229
 
230
231
232
 
233
234
235
236
...
249
250
251
252
253
254
255
256
257
 
 
 
 
 
 
258
259
260
261
 
262
263
264
265
...
270
271
272
273
 
274
275
276
 
277
278
279
...
282
283
284
285
 
286
287
288
289
290
291
292
293
294
295
296
297
298
299
...
291
292
293
294
 
295
296
297
298
299
 
300
301
302
 
303
304
305
306
 
307
308
309
310
 
311
312
313
 
314
315
316
 
317
318
319
320
 
321
322
323
 
324
325
326
327
 
328
329
330
331
 
332
333
334
 
335
336
337
...
347
348
349
350
 
351
352
353
...
425
426
427
428
 
429
430
431
...
511
512
513
514
 
515
516
517
...
597
598
599
600
 
601
602
603
...
612
613
614
615
 
616
617
618
...
11
12
13
 
14
15
16
 
 
17
18
19
20
21
...
48
49
50
 
51
52
53
54
...
57
58
59
 
60
61
62
63
64
65
66
67
68
69
70
71
72
73
...
71
72
73
 
74
75
76
 
77
78
 
 
79
80
81
82
 
83
84
85
86
 
87
88
89
90
91
92
 
93
94
95
96
 
97
98
99
100
101
102
103
 
104
105
106
107
108
 
109
110
111
112
113
114
 
115
116
117
118
...
133
134
135
 
136
137
138
139
140
141
...
155
156
157
 
158
159
160
161
 
162
163
164
165
166
167
 
168
169
170
171
...
191
192
193
 
194
195
196
197
...
209
210
211
 
212
213
214
215
216
...
226
227
228
 
229
230
231
 
232
233
234
235
236
...
249
250
251
 
 
 
 
 
 
252
253
254
255
256
257
258
259
260
 
261
262
263
264
265
...
270
271
272
 
273
274
275
 
276
277
278
279
...
282
283
284
 
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
...
291
292
293
 
294
295
296
297
298
 
299
300
301
 
302
303
304
305
 
306
307
308
309
 
310
311
312
 
313
314
315
 
316
317
318
319
 
320
321
322
 
323
324
325
326
 
327
328
329
330
 
331
332
333
 
334
335
336
337
...
347
348
349
 
350
351
352
353
...
425
426
427
 
428
429
430
431
...
511
512
513
 
514
515
516
517
...
597
598
599
 
600
601
602
603
...
612
613
614
 
615
616
617
618
0
@@ -11,11 +11,11 @@
0
   # = Mailer Models
0
   #
0
   # To use ActionMailer, you need to create a mailer model.
0
- #
0
+ #
0
   # $ script/generate mailer Notifier
0
   #
0
- # The generated model inherits from ActionMailer::Base. Emails are defined by creating methods within the model which are then
0
- # used to set variables to be used in the mail template, to change options on the mail, or
0
+ # The generated model inherits from ActionMailer::Base. Emails are defined by creating methods within the model which are then
0
+ # used to set variables to be used in the mail template, to change options on the mail, or
0
   # to add attachments.
0
   #
0
   # Examples:
0
@@ -48,7 +48,7 @@
0
   # named after each key in the hash containing the value that that key points to.
0
   #
0
   # So, for example, <tt>body :account => recipient</tt> would result
0
- # in an instance variable <tt>@account</tt> with the value of <tt>recipient</tt> being accessible in the
0
+ # in an instance variable <tt>@account</tt> with the value of <tt>recipient</tt> being accessible in the
0
   # view.
0
   #
0
   #
0
@@ -57,7 +57,7 @@
0
   # Like ActionController, each mailer class has a corresponding view directory
0
   # in which each method of the class looks for a template with its name.
0
   # To define a template to be used with a mailing, create an <tt>.erb</tt> file with the same name as the method
0
- # in your mailer model. For example, in the mailer defined above, the template at
0
+ # in your mailer model. For example, in the mailer defined above, the template at
0
   # <tt>app/views/notifier/signup_notification.erb</tt> would be used to generate the email.
0
   #
0
   # Variables defined in the model are accessible as instance variables in the view.
0
0
0
0
0
0
0
0
0
0
0
@@ -71,48 +71,48 @@
0
   #
0
   # You got a new note!
0
   # <%= truncate(note.body, 25) %>
0
- #
0
   #
0
+ #
0
   # = Generating URLs
0
- #
0
+ #
0
   # URLs can be generated in mailer views using <tt>url_for</tt> or named routes.
0
- # Unlike controllers from Action Pack, the mailer instance doesn't have any context about the incoming request,
0
- # so you'll need to provide all of the details needed to generate a URL.
0
+ # Unlike controllers from Action Pack, the mailer instance doesn't have any context about the incoming request,
0
+ # so you'll need to provide all of the details needed to generate a URL.
0
   #
0
   # When using <tt>url_for</tt> you'll need to provide the <tt>:host</tt>, <tt>:controller</tt>, and <tt>:action</tt>:
0
- #
0
+ #
0
   # <%= url_for(:host => "example.com", :controller => "welcome", :action => "greeting") %>
0
   #
0
   # When using named routes you only need to supply the <tt>:host</tt>:
0
- #
0
+ #
0
   # <%= users_url(:host => "example.com") %>
0
   #
0
   # You will want to avoid using the <tt>name_of_route_path</tt> form of named routes because it doesn't make sense to
0
   # generate relative URLs in email messages.
0
   #
0
- # It is also possible to set a default host that will be used in all mailers by setting the <tt>:host</tt> option in
0
+ # It is also possible to set a default host that will be used in all mailers by setting the <tt>:host</tt> option in
0
   # the <tt>ActionMailer::Base.default_url_options</tt> hash as follows:
0
   #
0
   # ActionMailer::Base.default_url_options[:host] = "example.com"
0
- #
0
+ #
0
   # This can also be set as a configuration option in <tt>config/environment.rb</tt>:
0
   #
0
   # config.action_mailer.default_url_options = { :host => "example.com" }
0
   #
0
   # If you do decide to set a default <tt>:host</tt> for your mailers you will want to use the
0
   # <tt>:only_path => false</tt> option when using <tt>url_for</tt>. This will ensure that absolute URLs are generated because
0
- # the <tt>url_for</tt> view helper will, by default, generate relative URLs when a <tt>:host</tt> option isn't
0
+ # the <tt>url_for</tt> view helper will, by default, generate relative URLs when a <tt>:host</tt> option isn't
0
   # explicitly provided.
0
   #
0
   # = Sending mail
0
   #
0
- # Once a mailer action and template are defined, you can deliver your message or create it and save it
0
+ # Once a mailer action and template are defined, you can deliver your message or create it and save it
0
   # for delivery later:
0
   #
0
   # Notifier.deliver_signup_notification(david) # sends the email
0
   # mail = Notifier.create_signup_notification(david) # => a tmail object
0
   # Notifier.deliver(mail)
0
- #
0
+ #
0
   # You never instantiate your mailer class. Rather, your delivery instance
0
   # methods are automatically wrapped in class methods that start with the word
0
   # <tt>deliver_</tt> followed by the name of the mailer method that you would
0
@@ -133,7 +133,7 @@
0
   # from "system@example.com"
0
   # content_type "text/html" # Here's where the magic happens
0
   # end
0
- # end
0
+ # end
0
   #
0
   #
0
   # = Multipart email
0
0
0
@@ -155,17 +155,17 @@
0
   # end
0
   # end
0
   # end
0
- #
0
+ #
0
   # Multipart messages can also be used implicitly because ActionMailer will automatically
0
   # detect and use multipart templates, where each template is named after the name of the action, followed
0
   # by the content type. Each such detected template will be added as separate part to the message.
0
- #
0
+ #
0
   # For example, if the following templates existed:
0
   # * signup_notification.text.plain.erb
0
   # * signup_notification.text.html.erb
0
   # * signup_notification.text.xml.builder
0
   # * signup_notification.text.x-yaml.erb
0
- #
0
+ #
0
   # Each would be rendered and added as a separate part to the message,
0
   # with the corresponding content type. The same body hash is passed to
0
   # each template.
0
@@ -191,7 +191,7 @@
0
   # a.body = generate_your_pdf_here()
0
   # end
0
   # end
0
- # end
0
+ # end
0
   #
0
   #
0
   # = Configuration options
0
@@ -209,7 +209,7 @@
0
   # * <tt>:domain</tt> - If you need to specify a HELO domain, you can do it here.
0
   # * <tt>:user_name</tt> - If your mail server requires authentication, set the username in this setting.
0
   # * <tt>:password</tt> - If your mail server requires authentication, set the password in this setting.
0
- # * <tt>:authentication</tt> - If your mail server requires authentication, you need to specify the authentication type here.
0
+ # * <tt>:authentication</tt> - If your mail server requires authentication, you need to specify the authentication type here.
0
   # This is a symbol and one of <tt>:plain</tt>, <tt>:login</tt>, <tt>:cram_md5</tt>
0
   #
0
   # * <tt>sendmail_settings</tt> - Allows you to override options for the <tt>:sendmail</tt> delivery method
0
0
@@ -226,10 +226,10 @@
0
   # * <tt>deliveries</tt> - Keeps an array of all the emails sent out through the Action Mailer with <tt>delivery_method :test</tt>. Most useful
0
   # for unit and functional testing.
0
   #
0
- # * <tt>default_charset</tt> - The default charset used for the body and to encode the subject. Defaults to UTF-8. You can also
0
+ # * <tt>default_charset</tt> - The default charset used for the body and to encode the subject. Defaults to UTF-8. You can also
0
   # pick a different charset from inside a method with <tt>@charset</tt>.
0
   # * <tt>default_content_type</tt> - The default content type used for the main part of the message. Defaults to "text/plain". You
0
- # can also pick a different content type from inside a method with <tt>@content_type</tt>.
0
+ # can also pick a different content type from inside a method with <tt>@content_type</tt>.
0
   # * <tt>default_mime_version</tt> - The default mime version used for the message. Defaults to "1.0". You
0
   # can also pick a different value from inside a method with <tt>@mime_version</tt>.
0
   # * <tt>default_implicit_parts_order</tt> - When a message is built implicitly (i.e. multiple parts are assembled from templates
0
0
@@ -249,16 +249,16 @@
0
     cattr_accessor :template_extensions
0
     @@template_extensions = ['erb', 'builder', 'rhtml', 'rxml']
0
 
0
- @@smtp_settings = {
0
- :address => "localhost",
0
- :port => 25,
0
- :domain => 'localhost.localdomain',
0
- :user_name => nil,
0
- :password => nil,
0
+ @@smtp_settings = {
0
+ :address => "localhost",
0
+ :port => 25,
0
+ :domain => 'localhost.localdomain',
0
+ :user_name => nil,
0
+ :password => nil,
0
       :authentication => nil
0
     }
0
     cattr_accessor :smtp_settings
0
-
0
+
0
     @@sendmail_settings = {
0
       :location => '/usr/sbin/sendmail',
0
       :arguments => '-i -t'
0
0
@@ -270,10 +270,10 @@
0
 
0
     superclass_delegating_accessor :delivery_method
0
     self.delivery_method = :smtp
0
-
0
+
0
     @@perform_deliveries = true
0
     cattr_accessor :perform_deliveries
0
-
0
+
0
     @@deliveries = []
0
     cattr_accessor :deliveries
0
 
0
@@ -282,7 +282,7 @@
0
 
0
     @@default_content_type = "text/plain"
0
     cattr_accessor :default_content_type
0
-
0
+
0
     @@default_mime_version = "1.0"
0
     cattr_accessor :default_mime_version
0
 
0
0
0
0
0
0
0
0
0
0
0
0
@@ -291,47 +291,47 @@
0
 
0
     # Specify the BCC addresses for the message
0
     adv_attr_accessor :bcc
0
-
0
+
0
     # Define the body of the message. This is either a Hash (in which case it
0
     # specifies the variables to pass to the template when it is rendered),
0
     # or a string, in which case it specifies the actual text of the message.
0
     adv_attr_accessor :body
0
-
0
+
0
     # Specify the CC addresses for the message.
0
     adv_attr_accessor :cc
0
-
0
+
0
     # Specify the charset to use for the message. This defaults to the
0
     # +default_charset+ specified for ActionMailer::Base.
0
     adv_attr_accessor :charset
0
-
0
+
0
     # Specify the content type for the message. This defaults to <tt>text/plain</tt>
0
     # in most cases, but can be automatically set in some situations.
0
     adv_attr_accessor :content_type
0
-
0
+
0
     # Specify the from address for the message.
0
     adv_attr_accessor :from
0
-
0
+
0
     # Specify additional headers to be added to the message.
0
     adv_attr_accessor :headers
0
-
0
+
0
     # Specify the order in which parts should be sorted, based on content-type.
0
     # This defaults to the value for the +default_implicit_parts_order+.
0
     adv_attr_accessor :implicit_parts_order
0
-
0
+
0
     # Defaults to "1.0", but may be explicitly given if needed.
0
     adv_attr_accessor :mime_version
0
-
0
+
0
     # The recipient addresses for the message, either as a string (for a single
0
     # address) or an array (for multiple addresses).
0
     adv_attr_accessor :recipients
0
-
0
+
0
     # The date on which the message was sent. If not set (the default), the
0
     # header will be set by the delivery agent.
0
     adv_attr_accessor :sent_on
0
-
0
+
0
     # Specify the subject of the message.
0
     adv_attr_accessor :subject
0
-
0
+
0
     # Specify the template name to use for current message. This is the "base"
0
     # template name, without the extension or directory, and may be used to
0
     # have multiple mailer methods share the same template.
0
@@ -347,7 +347,7 @@
0
         self.class.mailer_name
0
       end
0
     end
0
-
0
+
0
     def mailer_name=(value)
0
       self.class.mailer_name = value
0
     end
0
@@ -425,7 +425,7 @@
0
     # remain uninitialized (useful when you only need to invoke the "receive"
0
     # method, for instance).
0
     def initialize(method_name=nil, *parameters) #:nodoc:
0
- create!(method_name, *parameters) if method_name
0
+ create!(method_name, *parameters) if method_name
0
     end
0
 
0
     # Initialize the mailer via the given +method_name+. The body will be
0
@@ -511,7 +511,7 @@
0
         @content_type ||= @@default_content_type.dup
0
         @implicit_parts_order ||= @@default_implicit_parts_order.dup
0
         @template ||= method_name
0
- @mailer_name ||= Inflector.underscore(self.class.name)
0
+ @mailer_name ||= self.class.name.underscore
0
         @parts ||= []
0
         @headers ||= {}
0
         @body ||= {}
0
@@ -597,7 +597,7 @@
0
             part = (TMail::Mail === p ? p : p.to_mail(self))
0
             m.parts << part
0
           end
0
-
0
+
0
           if real_content_type =~ /multipart/
0
             ctype_attrs.delete "charset"
0
             m.set_content_type(real_content_type, nil, ctype_attrs)
0
@@ -612,7 +612,7 @@
0
         mail.ready_to_send
0
         sender = mail['return-path'] || mail.from
0
 
0
- Net::SMTP.start(smtp_settings[:address], smtp_settings[:port], smtp_settings[:domain],
0
+ Net::SMTP.start(smtp_settings[:address], smtp_settings[:port], smtp_settings[:domain],
0
             smtp_settings[:user_name], smtp_settings[:password], smtp_settings[:authentication]) do |smtp|
0
           smtp.sendmail(mail.encoded, sender, destinations)
0
         end
...
259
260
261
262
 
263
264
265
266
267
 
268
269
270
...
328
329
330
331
 
332
333
334
...
336
337
338
339
 
340
341
342
...
436
437
438
439
 
440
441
442
443
...
447
448
449
450
 
451
452
 
453
454
455
...
460
461
462
463
 
464
465
466
...
507
508
509
 
510
511
512
513
...
646
647
648
649
 
650
651
652
653
654
 
655
656
657
...
665
666
667
668
 
669
670
671
672
...
877
878
879
880
 
881
882
883
 
884
885
886
887
...
898
899
900
901
 
902
903
904
905
906
 
907
908
909
...
1027
1028
1029
1030
 
1031
1032
1033
1034
1035
...
1038
1039
1040
1041
 
1042
1043
1044
1045
1046
1047
1048
1049
 
 
 
 
 
 
1050
1051
 
1052
1053
1054
...
1122
1123
1124
1125
 
1126
1127
1128
...
259
260
261
 
262
263
264
265
266
 
267
268
269
270
...
328
329
330
 
331
332
333
334
...
336
337
338
 
339
340
341
342
...
436
437
438
 
439
440
441
442
443
...
447
448
449
 
450
451
 
452
453
454
455
...
460
461
462
 
463
464
465
466
...
507
508
509
510
511
512
513
514
...
647
648
649
 
650
651
652
653
654
 
655
656
657
658
...
666
667
668
 
669
670
671
672
673
...
878
879
880
 
881
882
883
 
884
885
886
887
888
...
899
900
901
 
902
903
904
905
906
 
907
908
909
910
...
1028
1029
1030
 
1031
1032
1033
1034
1035
1036
...
1039
1040
1041
 
1042
1043
1044
 
 
 
 
 
 
1045
1046
1047
1048
1049
1050
1051
 
1052
1053
1054
1055
...
1123
1124
1125
 
1126
1127
1128
1129
0
@@ -259,12 +259,12 @@
0
     DEFAULT_RENDER_STATUS_CODE = "200 OK"
0
 
0
     include StatusCodes
0
-
0
+
0
     # Controller specific instance variables which will not be accessible inside views.
0
     @@protected_view_variables = %w(@assigns @performed_redirect @performed_render @variables_added @request_origin @url @parent_controller
0
                                     @action_name @before_filter_chain_aborted @action_cache_path @_session @_cookies @_headers @_params
0
                                     @_flash @_response)
0
-
0
+
0
     # Prepends all the URL-generating helpers from AssetHelper. This makes it possible to easily move javascripts, stylesheets,
0
     # and images to a dedicated asset server away from the main web server. Example:
0
     # ActionController::Base.asset_host = "http://assets.example.com"
0
@@ -328,7 +328,7 @@
0
     # Controls the default charset for all renders.
0
     @@default_charset = "utf-8"
0
     cattr_accessor :default_charset
0
-
0
+
0
     # The logger is used for generating information on the action run-time (including benchmarking) if available.
0
     # Can be set to nil for no logging. Compatible with both Ruby's own Logger and Log4r loggers.
0
     cattr_accessor :logger
0
@@ -336,7 +336,7 @@
0
     # Controls the resource action separator
0
     @@resource_action_separator = "/"
0
     cattr_accessor :resource_action_separator
0
-
0
+
0
     # Allow to override path names for default resources' actions
0
     @@resources_path_names = { :new => 'new', :edit => 'edit' }
0
     cattr_accessor :resources_path_names
0
@@ -436,7 +436,7 @@
0
       end
0
 
0
       # Adds a view_path to the front of the view_paths array.
0
- # If the current class has no view paths, copy them from
0
+ # If the current class has no view paths, copy them from
0
       # the superclass. This change will be visible for all future requests.
0
       #
0
       # ArticleController.prepend_view_path("views/default")
0
0
@@ -447,9 +447,9 @@
0
         view_paths.unshift(*path)
0
         ActionView::TemplateFinder.process_view_paths(path)
0
       end
0
-
0
+
0
       # Adds a view_path to the end of the view_paths array.
0
- # If the current class has no view paths, copy them from
0
+ # If the current class has no view paths, copy them from
0
       # the superclass. This change will be visible for all future requests.
0
       #
0
       # ArticleController.append_view_path("views/default")
0
@@ -460,7 +460,7 @@
0
         view_paths.push(*path)
0
         ActionView::TemplateFinder.process_view_paths(path)
0
       end
0
-
0
+
0
       # Replace sensitive parameter data from the request log.
0
       # Filters parameters that have any of the arguments as a substring.
0
       # Looks in all subhashes of the param hash for keys to filter.
0
@@ -507,6 +507,7 @@
0
 
0
           filtered_parameters
0
         end
0
+ protected :filter_parameters
0
       end
0
 
0
       # Don't render layouts for templates with the given extensions.
0
0
@@ -646,12 +647,12 @@
0
       end
0
 
0
       self.view_paths = []
0
-
0
+
0
       # View load paths for controller.
0
       def view_paths
0
         @template.finder.view_paths
0
       end
0
-
0
+
0
       def view_paths=(value)
0
         @template.finder.view_paths = value # Mutex needed
0
       end
0
@@ -665,7 +666,7 @@
0
       def prepend_view_path(path)
0
         @template.finder.prepend_view_path(path) # Mutex needed
0
       end
0
-
0
+
0
       # Adds a view_path to the end of the view_paths array.
0
       # This change affects the current request only.
0
       #
0
0
@@ -877,10 +878,10 @@
0
           elsif action_name = options[:action]
0
             template = default_template_name(action_name.to_s)
0
             if options[:layout] && !template_exempt_from_layout?(template)
0
- render_with_a_layout(:file => template, :status => options[:status], :use_full_path => true, :layout => true)
0
+ render_with_a_layout(:file => template, :status => options[:status], :use_full_path => true, :layout => true)
0
             else
0
               render_with_no_layout(:file => template, :status => options[:status], :use_full_path => true)
0
- end
0
+ end
0
 
0
           elsif xml = options[:xml]
0
             response.content_type ||= Mime::XML
0
0
@@ -898,12 +899,12 @@
0
 
0
             if collection = options[:collection]
0
               render_for_text(
0
- @template.send!(:render_partial_collection, partial, collection,
0
+ @template.send!(:render_partial_collection, partial, collection,
0
                 options[:spacer_template], options[:locals]), options[:status]
0
               )
0
             else
0
               render_for_text(
0
- @template.send!(:render_partial, partial,
0
+ @template.send!(:render_partial, partial,
0
                 ActionView::Base::ObjectWrapper.new(options[:object]), options[:locals]), options[:status]
0
               )
0
             end
0
@@ -1027,7 +1028,7 @@
0
       # redirect_to articles_url
0
       # redirect_to :back
0
       #
0
- # The redirection happens as a "302 Moved" header unless otherwise specified.
0
+ # The redirection happens as a "302 Moved" header unless otherwise specified.
0
       #
0
       # Examples:
0
       # redirect_to post_url(@post), :status=>:found
0
0
0
@@ -1038,17 +1039,17 @@
0
       # When using <tt>redirect_to :back</tt>, if there is no referrer,
0
       # RedirectBackError will be raised. You may specify some fallback
0
       # behavior for this case by rescuing RedirectBackError.
0
- def redirect_to(options = {}, response_status = {}) #:doc:
0
+ def redirect_to(options = {}, response_status = {}) #:doc:
0
         raise ActionControllerError.new("Cannot redirect to nil!") if options.nil?
0
 
0
- if options.is_a?(Hash) && options[:status]
0
- status = options.delete(:status)
0
- elsif response_status[:status]
0
- status = response_status[:status]
0
- else
0
- status = 302
0
+ if options.is_a?(Hash) && options[:status]
0
+ status = options.delete(:status)
0
+ elsif response_status[:status]
0
+ status = response_status[:status]
0
+ else
0
+ status = 302
0
         end
0
-
0
+
0
         case options
0
           when %r{^\w+://.*}
0
             raise DoubleRenderError if performed?
0
@@ -1122,7 +1123,7 @@
0
           response.body = text.is_a?(Proc) ? text : text.to_s
0
         end
0
       end
0
-
0
+
0
       def initialize_template_class(response)
0
         response.template = ActionView::Base.new(self.class.view_paths, {}, self)
0
         response.template.extend self.class.master_helper_module