rerails 2.3.5.3 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +7 -0
- data/README.rdoc +9 -34
- data/lib/reactive_record/first_last_limits.rb +88 -52
- data/lib/rerails.rb +0 -1
- metadata +26 -15
- data/lib/reaction_view.rb +0 -2
- data/lib/reaction_view/block_labels.rb +0 -66
- data/lib/reaction_view/html5_forms.rb +0 -163
data/CHANGELOG.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -5,31 +5,6 @@ Reinforcing the Rails with assorted patches.
|
|
5
5
|
|
6
6
|
== Features
|
7
7
|
|
8
|
-
=== ReactionView
|
9
|
-
|
10
|
-
* Label tag helpers accept blocks
|
11
|
-
({Rails Lighthouse ticket}[https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/3645-let-label-helpers-accept-blocks]).
|
12
|
-
|
13
|
-
<% label_tag do %>
|
14
|
-
<%= check_box_tag "tos" %> Accept <%= link_to "Terms", "/tos" %>.
|
15
|
-
<% end %>
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
* HTML5 form helpers
|
20
|
-
({Rails Lighthouse ticket}[https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/3646-html5-form-field-helpers-email_field_tag-etc]).
|
21
|
-
|
22
|
-
<% form_tag "user_search" do %>
|
23
|
-
<%= search_field_tag "q", nil, :autosave => true %>
|
24
|
-
<% end %>
|
25
|
-
|
26
|
-
<% form_for @user do |f| %>
|
27
|
-
<%= f.email_field :email %>
|
28
|
-
<%= f.url_field :homepage %>
|
29
|
-
<%= f.phone_field :phone %>
|
30
|
-
<% end %>
|
31
|
-
|
32
|
-
|
33
8
|
=== ReactiveRecord
|
34
9
|
|
35
10
|
* <tt>Array#first</tt> and <tt>Array#last</tt> functionality and
|
@@ -43,32 +18,32 @@ Reinforcing the Rails with assorted patches.
|
|
43
18
|
|
44
19
|
== Install
|
45
20
|
|
21
|
+
These instructions are for the master branch, to be used with edge Rails. For
|
22
|
+
Rails 2.3, try: http://github.com/stephencelis/rerails/tree/2-3-stable
|
23
|
+
|
46
24
|
As a gem:
|
47
25
|
|
48
|
-
#
|
49
|
-
|
26
|
+
# Gemfile
|
27
|
+
gem "rerails", "3.0.0"
|
50
28
|
|
51
|
-
%
|
29
|
+
% bundle
|
52
30
|
|
53
31
|
|
54
32
|
As a plugin:
|
55
33
|
|
56
|
-
% script/plugin install git://github.com/stephencelis/rerails.git
|
57
|
-
-r 'branch 2-3-stable'
|
34
|
+
% script/plugin install git://github.com/stephencelis/rerails.git
|
58
35
|
|
59
36
|
|
60
37
|
== Development
|
61
38
|
|
62
39
|
Setup (to run tests):
|
63
40
|
|
64
|
-
%
|
65
|
-
% gem bundle
|
66
|
-
% bin/rake
|
41
|
+
% bundle && rake
|
67
42
|
|
68
43
|
|
69
44
|
== License
|
70
45
|
|
71
|
-
Released under the same license as Ruby on Rails (
|
46
|
+
Released under the same license as Ruby on Rails (the MIT License).
|
72
47
|
|
73
48
|
(c) 2009-2010 Stephen Celis, stephen@stephencelis.com.
|
74
49
|
|
@@ -1,70 +1,96 @@
|
|
1
1
|
module ActiveRecord #:nodoc:
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
# ==== Examples
|
10
|
-
#
|
11
|
-
# Post.first
|
12
|
-
# # => #<Post id: 1, posted: false>
|
13
|
-
# Post.first(2, :conditions => { :posted => true })
|
14
|
-
# # => [#<Post id: 2, posted: true>, #<Post id: 3, posted: true>]
|
15
|
-
def first(*args)
|
16
|
-
options, limit = args.extract_options!, args.shift
|
17
|
-
find(:first, *(args << options.merge(:limit => limit || options[:limit])))
|
2
|
+
module FinderMethods #:nodoc:
|
3
|
+
def first(*args)
|
4
|
+
options = args.extract_options!
|
5
|
+
if options.any?
|
6
|
+
apply_finder_options(options).first(*args)
|
7
|
+
else
|
8
|
+
find_first(*args)
|
18
9
|
end
|
10
|
+
end
|
19
11
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
#
|
27
|
-
# Post.last
|
28
|
-
# # => #<Post id: 50, posted: false>
|
29
|
-
# Post.last(2, :conditions => { :posted => true })
|
30
|
-
# # => [#<Post id: 48, posted: true>, #<Post id: 49, posted: true>]
|
31
|
-
def last(*args)
|
32
|
-
options, limit = args.extract_options!, args.shift
|
33
|
-
find(:last, *(args << options.merge(:limit => limit || options[:limit])))
|
12
|
+
def last(*args)
|
13
|
+
options = args.extract_options!
|
14
|
+
if options.any?
|
15
|
+
apply_finder_options(options).last(*args)
|
16
|
+
else
|
17
|
+
find_last(*args)
|
34
18
|
end
|
19
|
+
end
|
35
20
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
21
|
+
private
|
22
|
+
def find_first(n = nil)
|
23
|
+
if loaded?
|
24
|
+
@records.first(n)
|
25
|
+
elsif n.nil?
|
26
|
+
@first ||= limit(1).to_a[0]
|
27
|
+
else
|
28
|
+
limit(n).to_a
|
40
29
|
end
|
30
|
+
end
|
41
31
|
|
42
|
-
|
43
|
-
|
44
|
-
|
32
|
+
def find_last(n = nil)
|
33
|
+
if loaded?
|
34
|
+
@records.first(n)
|
35
|
+
elsif n.nil?
|
36
|
+
@last ||= reverse_order.limit(1).to_a[0]
|
37
|
+
else
|
38
|
+
reverse_order.limit(n).to_a.reverse
|
45
39
|
end
|
46
|
-
|
47
|
-
end
|
40
|
+
end
|
48
41
|
end
|
49
42
|
|
50
43
|
module Associations #:nodoc:
|
51
44
|
class AssociationCollection < AssociationProxy
|
52
|
-
|
45
|
+
def find(*args)
|
46
|
+
options = args.extract_options!
|
47
|
+
|
48
|
+
# If using a custom finder_sql, scan the entire collection.
|
49
|
+
if @reflection.options[:finder_sql]
|
50
|
+
expects_array = args.first.kind_of?(Array)
|
51
|
+
ids = args.flatten.compact.uniq.map { |arg| arg.to_i }
|
52
|
+
|
53
|
+
if ids.size == 1
|
54
|
+
id = ids.first
|
55
|
+
record = load_target.detect { |r| id == r.id }
|
56
|
+
expects_array ? [ record ] : record
|
57
|
+
else
|
58
|
+
load_target.select { |r| ids.include?(r.id) }
|
59
|
+
end
|
60
|
+
else
|
61
|
+
merge_options_from_reflection!(options)
|
62
|
+
construct_find_options!(options)
|
63
|
+
|
64
|
+
find_scope = construct_scope[:find].slice(:conditions, :order)
|
65
|
+
|
66
|
+
with_scope(:find => find_scope) do
|
67
|
+
relation = @reflection.klass.send(:construct_finder_arel, options, @reflection.klass.send(:current_scoped_methods))
|
68
|
+
|
69
|
+
case args.first
|
70
|
+
when :first, :last
|
71
|
+
relation.send(*args)
|
72
|
+
when :all
|
73
|
+
records = relation.all
|
74
|
+
@reflection.options[:uniq] ? uniq(records) : records
|
75
|
+
else
|
76
|
+
relation.find(*args)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
53
82
|
def first(*args)
|
54
83
|
if fetch_first_or_last_using_find?(args)
|
55
|
-
|
56
|
-
find(:first, *(args << options.merge(:limit => limit || options[:limit])))
|
84
|
+
find(:first, *args)
|
57
85
|
else
|
58
86
|
load_target unless loaded?
|
59
87
|
@target.first(*args)
|
60
88
|
end
|
61
89
|
end
|
62
90
|
|
63
|
-
# Fetches the last n records (default: 1) using SQL if possible.
|
64
91
|
def last(*args)
|
65
92
|
if fetch_first_or_last_using_find?(args)
|
66
|
-
|
67
|
-
find(:last, *(args << options.merge(:limit => limit || options[:limit])))
|
93
|
+
find(:last, *args)
|
68
94
|
else
|
69
95
|
load_target unless loaded?
|
70
96
|
@target.last(*args)
|
@@ -73,7 +99,7 @@ module ActiveRecord #:nodoc:
|
|
73
99
|
|
74
100
|
private
|
75
101
|
def fetch_first_or_last_using_find?(args)
|
76
|
-
!(loaded? || @owner.new_record? || @reflection.options[:finder_sql]) ||
|
102
|
+
args.first.kind_of?(Hash) || !(loaded? || @owner.new_record? || @reflection.options[:finder_sql]) ||
|
77
103
|
@target.any? { |record| record.new_record? }
|
78
104
|
end
|
79
105
|
end
|
@@ -82,18 +108,28 @@ module ActiveRecord #:nodoc:
|
|
82
108
|
module NamedScope #:nodoc:
|
83
109
|
class Scope
|
84
110
|
def first(*args)
|
85
|
-
if
|
86
|
-
|
111
|
+
if loaded? && !args.first.kind_of?(Hash)
|
112
|
+
to_a.first(*args)
|
87
113
|
else
|
88
|
-
|
114
|
+
options = args.extract_options!
|
115
|
+
if options.any?
|
116
|
+
apply_finder_options(options).first(*args)
|
117
|
+
else
|
118
|
+
super
|
119
|
+
end
|
89
120
|
end
|
90
121
|
end
|
91
122
|
|
92
123
|
def last(*args)
|
93
|
-
if
|
94
|
-
|
124
|
+
if loaded? && !args.first.kind_of?(Hash)
|
125
|
+
to_a.last(*args)
|
95
126
|
else
|
96
|
-
|
127
|
+
options = args.extract_options!
|
128
|
+
if options.any?
|
129
|
+
apply_finder_options(options).last(*args)
|
130
|
+
else
|
131
|
+
super
|
132
|
+
end
|
97
133
|
end
|
98
134
|
end
|
99
135
|
end
|
data/lib/rerails.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rerails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 3
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
version: 3.0.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Stephen Celis
|
@@ -9,20 +14,25 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-
|
17
|
+
date: 2010-09-30 00:00:00 -05:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: rails
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
20
25
|
requirements:
|
21
|
-
- -
|
26
|
+
- - ~>
|
22
27
|
- !ruby/object:Gem::Version
|
23
|
-
|
24
|
-
|
25
|
-
|
28
|
+
segments:
|
29
|
+
- 3
|
30
|
+
- 0
|
31
|
+
- 0
|
32
|
+
version: 3.0.0
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
description: Assorted patches for Rails.
|
26
36
|
email: stephen@stephencelis.com
|
27
37
|
executables: []
|
28
38
|
|
@@ -34,9 +44,6 @@ extra_rdoc_files:
|
|
34
44
|
files:
|
35
45
|
- CHANGELOG.rdoc
|
36
46
|
- README.rdoc
|
37
|
-
- lib/reaction_view/block_labels.rb
|
38
|
-
- lib/reaction_view/html5_forms.rb
|
39
|
-
- lib/reaction_view.rb
|
40
47
|
- lib/reactive_record/first_last_limits.rb
|
41
48
|
- lib/reactive_record.rb
|
42
49
|
- lib/rerails.rb
|
@@ -51,21 +58,25 @@ rdoc_options:
|
|
51
58
|
require_paths:
|
52
59
|
- lib
|
53
60
|
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
54
62
|
requirements:
|
55
63
|
- - ">="
|
56
64
|
- !ruby/object:Gem::Version
|
65
|
+
segments:
|
66
|
+
- 0
|
57
67
|
version: "0"
|
58
|
-
version:
|
59
68
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
60
70
|
requirements:
|
61
71
|
- - ">="
|
62
72
|
- !ruby/object:Gem::Version
|
73
|
+
segments:
|
74
|
+
- 0
|
63
75
|
version: "0"
|
64
|
-
version:
|
65
76
|
requirements: []
|
66
77
|
|
67
78
|
rubyforge_project:
|
68
|
-
rubygems_version: 1.3.
|
79
|
+
rubygems_version: 1.3.7
|
69
80
|
signing_key:
|
70
81
|
specification_version: 3
|
71
82
|
summary: Reinforcing the Rails
|
data/lib/reaction_view.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
module ActionView #:nodoc:
|
2
|
-
module Helpers #:nodoc:
|
3
|
-
module FormTagHelper
|
4
|
-
# Creates a label tag. Accepts a block.
|
5
|
-
#
|
6
|
-
# ==== Options
|
7
|
-
# * Creates standard HTML attributes for the tag.
|
8
|
-
#
|
9
|
-
# ==== Examples
|
10
|
-
# label_tag 'name'
|
11
|
-
# # => <label for="name">Name</label>
|
12
|
-
#
|
13
|
-
# label_tag 'name', 'Your name'
|
14
|
-
# # => <label for="name">Your Name</label>
|
15
|
-
#
|
16
|
-
# label_tag 'name', nil, :class => 'small_label'
|
17
|
-
# # => <label for="name" class="small_label">Name</label>
|
18
|
-
#
|
19
|
-
# label_tag do
|
20
|
-
# '<input type="checkbox" /> Accept <a>TOS</a>'
|
21
|
-
# end
|
22
|
-
# # => <label><input type="checkbox" /> Accept <a>TOS</a></label>
|
23
|
-
def label_tag_with_block(*args, &block)
|
24
|
-
if block_given?
|
25
|
-
options = args.extract_options!
|
26
|
-
options["for"] = name = args.shift
|
27
|
-
text = capture(&block)
|
28
|
-
concat label_tag_without_block(name, text, options)
|
29
|
-
else
|
30
|
-
label_tag_without_block(*args, &block)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
alias_method_chain :label_tag, :block
|
35
|
-
end
|
36
|
-
|
37
|
-
module FormHelper #:nodoc:
|
38
|
-
def label_with_block(object_name, *args, &block)
|
39
|
-
if block_given?
|
40
|
-
options = args.extract_options!
|
41
|
-
method = args.shift
|
42
|
-
text = capture(&block)
|
43
|
-
concat label_without_block(object_name, method, text, options)
|
44
|
-
else
|
45
|
-
label_without_block(object_name, *args, &block)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
alias_method_chain :label, :block
|
50
|
-
end
|
51
|
-
|
52
|
-
class FormBuilder #:nodoc:
|
53
|
-
def label_with_block(method, *args, &block)
|
54
|
-
if block_given?
|
55
|
-
options = args.extract_options!
|
56
|
-
text = @template.capture(&block)
|
57
|
-
@template.concat label_without_block(method, text, options)
|
58
|
-
else
|
59
|
-
label_without_block(method, *args)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
alias_method_chain :label, :block
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
@@ -1,163 +0,0 @@
|
|
1
|
-
module ActionView #:nodoc:
|
2
|
-
module Helpers #:nodoc:
|
3
|
-
module FormTagHelper
|
4
|
-
# Creates a search field.
|
5
|
-
#
|
6
|
-
# ==== Options
|
7
|
-
# * <tt>:autosave</tt> - If set to true, will generate a domain-based
|
8
|
-
# namespace (e.g., for blog.rubyonrails.com, "com.rubyonrails.blog").
|
9
|
-
# Also accepts string values.
|
10
|
-
# * <tt>:results</tt> - The number of previous searches displayed in the
|
11
|
-
# drop-down. Default: 10, with <tt>:autosave</tt>.
|
12
|
-
# * Otherwise accepts the same options as text_field_tag.
|
13
|
-
#
|
14
|
-
# ==== Examples
|
15
|
-
# search_field_tag 'query'
|
16
|
-
# # => <input id="query" name="query" type="search" />
|
17
|
-
#
|
18
|
-
# search_field_tag 'query', nil, :autosave => true
|
19
|
-
# # => <input id="query" name="query" type="search" autosave="tld.yourdomain" results="10">
|
20
|
-
#
|
21
|
-
# search_field_tag 'site_search', nil, :autosave => 'com.rubyonrails', :results => 5
|
22
|
-
# # => <input id="site_search" name="site_search" type="search" autosave="com.rubyonrails" results="5">
|
23
|
-
def search_field_tag(name, value = nil, options = {})
|
24
|
-
options = options.stringify_keys
|
25
|
-
|
26
|
-
if options["autosave"]
|
27
|
-
if options["autosave"] == true
|
28
|
-
options["autosave"] = request.host.split(".").reverse.join(".")
|
29
|
-
end
|
30
|
-
options["results"] ||= 10
|
31
|
-
end
|
32
|
-
|
33
|
-
if options["onsearch"]
|
34
|
-
options["incremental"] = true unless options.has_key?("incremental")
|
35
|
-
end
|
36
|
-
|
37
|
-
text_field_tag(name, value, options.update("type" => "search"))
|
38
|
-
end
|
39
|
-
|
40
|
-
# Creates a text field of type "tel".
|
41
|
-
#
|
42
|
-
# ==== Options
|
43
|
-
# * Accepts the same options as text_field_tag.
|
44
|
-
def telephone_field_tag(name, value = nil, options = {})
|
45
|
-
text_field_tag(name, value, options.stringify_keys.update("type" => "tel"))
|
46
|
-
end
|
47
|
-
alias phone_field_tag telephone_field_tag
|
48
|
-
|
49
|
-
# Creates a text field of type "url".
|
50
|
-
#
|
51
|
-
# ==== Options
|
52
|
-
# * Accepts the same options as text_field_tag.
|
53
|
-
def url_field_tag(name, value = nil, options = {})
|
54
|
-
text_field_tag(name, value, options.stringify_keys.update("type" => "url"))
|
55
|
-
end
|
56
|
-
|
57
|
-
# Creates a text field of type "email".
|
58
|
-
#
|
59
|
-
# ==== Options
|
60
|
-
# * Accepts the same options as text_field_tag.
|
61
|
-
def email_field_tag(name, value = nil, options = {})
|
62
|
-
text_field_tag(name, value, options.stringify_keys.update("type" => "email"))
|
63
|
-
end
|
64
|
-
|
65
|
-
# Creates a number field.
|
66
|
-
#
|
67
|
-
# ==== Options
|
68
|
-
# * <tt>:min</tt> - The minimum acceptable value.
|
69
|
-
# * <tt>:max</tt> - The maximum acceptable value.
|
70
|
-
# * <tt>:in</tt> - A range specifying the <tt>:min</tt> and
|
71
|
-
# <tt>:max</tt> values.
|
72
|
-
# * <tt>:step</tt> - The acceptable value granularity.
|
73
|
-
# * Otherwise accepts the same options as text_field_tag.
|
74
|
-
#
|
75
|
-
# ==== Examples
|
76
|
-
# number_field_tag 'quantity', nil, :in => 1...10
|
77
|
-
# => <input id="quantity" name="quantity" min="1" max="9" />
|
78
|
-
def number_field_tag(name, value = nil, options = {})
|
79
|
-
options = options.stringify_keys
|
80
|
-
options["type"] ||= "number"
|
81
|
-
if range = options.delete("in") || options.delete("within")
|
82
|
-
options.update("min" => range.min, "max" => range.max)
|
83
|
-
end
|
84
|
-
text_field_tag(name, value, options)
|
85
|
-
end
|
86
|
-
|
87
|
-
# Creates a range form element.
|
88
|
-
#
|
89
|
-
# ==== Options
|
90
|
-
# * Accepts the same options as number_field_tag.
|
91
|
-
def range_field_tag(name, value = nil, options = {})
|
92
|
-
number_field_tag(name, value, options.stringify_keys.update("type" => "range"))
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
module FormHelper #:nodoc:
|
97
|
-
def search_field(object_name, method, options = {})
|
98
|
-
options = options.stringify_keys
|
99
|
-
|
100
|
-
if options["autosave"]
|
101
|
-
if options["autosave"] == true
|
102
|
-
options["autosave"] = request.host.split(".").reverse.join(".")
|
103
|
-
end
|
104
|
-
options["results"] ||= 10
|
105
|
-
end
|
106
|
-
|
107
|
-
if options["onsearch"]
|
108
|
-
options["incremental"] = true unless options.has_key?("incremental")
|
109
|
-
end
|
110
|
-
|
111
|
-
InstanceTag.new(object_name, method, self, options.delete(:object)).to_input_field_tag("search", options)
|
112
|
-
end
|
113
|
-
|
114
|
-
def telephone_field(object_name, method, options = {})
|
115
|
-
InstanceTag.new(object_name, method, self, options.delete(:object)).to_input_field_tag("tel", options)
|
116
|
-
end
|
117
|
-
alias phone_field telephone_field
|
118
|
-
|
119
|
-
def url_field(object_name, method, options = {})
|
120
|
-
InstanceTag.new(object_name, method, self, options.delete(:object)).to_input_field_tag("url", options)
|
121
|
-
end
|
122
|
-
|
123
|
-
def email_field(object_name, method, options = {})
|
124
|
-
InstanceTag.new(object_name, method, self, options.delete(:object)).to_input_field_tag("email", options)
|
125
|
-
end
|
126
|
-
|
127
|
-
def number_field(object_name, method, options = {})
|
128
|
-
options = options.stringify_keys
|
129
|
-
options["type"] ||= "number"
|
130
|
-
if range = options.delete("in") || options.delete("within")
|
131
|
-
options.update("min" => range.min, "max" => range.max)
|
132
|
-
end
|
133
|
-
InstanceTag.new(object_name, method, self, options.delete(:object)).to_input_field_tag("number", options)
|
134
|
-
end
|
135
|
-
|
136
|
-
def range_field(object_name, method, options = {})
|
137
|
-
options = options.stringify_keys
|
138
|
-
options["type"] ||= "range"
|
139
|
-
if range = options.delete("in") || options.delete("within")
|
140
|
-
options.update("min" => range.min, "max" => range.max)
|
141
|
-
end
|
142
|
-
InstanceTag.new(object_name, method, self, options.delete(:object)).to_input_field_tag("range", options)
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
class FormBuilder #:nodoc:
|
147
|
-
%w(search_field telephone_field url_field email_field number_field range_field).each do |selector|
|
148
|
-
src = <<-end_src
|
149
|
-
def #{selector}(method, options = {})
|
150
|
-
@template.send(
|
151
|
-
#{selector.inspect},
|
152
|
-
@object_name,
|
153
|
-
method,
|
154
|
-
objectify_options(options))
|
155
|
-
end
|
156
|
-
end_src
|
157
|
-
class_eval src, __FILE__, __LINE__
|
158
|
-
end
|
159
|
-
|
160
|
-
alias phone_field telephone_field
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|