rerails 2.3.5.3 → 3.0.0
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/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
|