merb_helpers 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +58 -36
- data/lib/merb_helpers/core_ext.rb +31 -0
- data/lib/merb_helpers/date_time_helpers.rb +23 -63
- data/lib/merb_helpers/form_helpers.rb +37 -14
- data/lib/merb_helpers/ordinalize.rb +32 -1
- data/lib/merb_helpers/tag_helpers.rb +2 -2
- data/lib/merb_helpers/time_dsl.rb +1 -0
- data/lib/merb_helpers.rb +16 -19
- metadata +10 -8
data/Rakefile
CHANGED
@@ -1,61 +1,72 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake/gempackagetask'
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "rake/rdoctask"
|
4
|
+
require "extlib"
|
5
|
+
require 'merb-core/tasks/merb_rake_helper'
|
6
|
+
require "spec/rake/spectask"
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
##############################################################################
|
9
|
+
# Package && release
|
10
|
+
##############################################################################
|
11
|
+
RUBY_FORGE_PROJECT = "merb"
|
12
|
+
PROJECT_URL = "http://merbivore.com"
|
13
|
+
PROJECT_SUMMARY = "Helper support for merb (similar to the Rails form helpers)"
|
14
|
+
PROJECT_DESCRIPTION = PROJECT_SUMMARY
|
13
15
|
|
14
|
-
|
16
|
+
GEM_AUTHOR = "Yehuda Katz"
|
17
|
+
GEM_EMAIL = "ykatz@engineyard.com"
|
15
18
|
|
16
|
-
|
19
|
+
GEM_NAME = "merb_helpers"
|
20
|
+
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
|
21
|
+
GEM_VERSION = (Merb::MORE_VERSION rescue "0.9.4") + PKG_BUILD
|
22
|
+
|
23
|
+
RELEASE_NAME = "REL #{GEM_VERSION}"
|
24
|
+
|
25
|
+
require "extlib/tasks/release"
|
17
26
|
|
18
27
|
spec = Gem::Specification.new do |s|
|
19
|
-
s.
|
20
|
-
s.
|
28
|
+
s.rubyforge_project = RUBY_FORGE_PROJECT
|
29
|
+
s.name = GEM_NAME
|
30
|
+
s.version = GEM_VERSION
|
21
31
|
s.platform = Gem::Platform::RUBY
|
22
32
|
s.has_rdoc = true
|
23
33
|
s.extra_rdoc_files = ["README", "LICENSE", 'TODO']
|
24
|
-
s.summary =
|
25
|
-
s.description =
|
26
|
-
s.author =
|
27
|
-
s.email =
|
28
|
-
s.homepage =
|
29
|
-
s.add_dependency(
|
34
|
+
s.summary = PROJECT_SUMMARY
|
35
|
+
s.description = PROJECT_DESCRIPTION
|
36
|
+
s.author = GEM_AUTHOR
|
37
|
+
s.email = GEM_EMAIL
|
38
|
+
s.homepage = PROJECT_URL
|
39
|
+
s.add_dependency('merb-core', '>= 0.9.4')
|
30
40
|
s.require_path = 'lib'
|
31
|
-
s.autorequire = PLUGIN
|
32
41
|
s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,specs}/**/*")
|
33
42
|
end
|
34
43
|
|
35
|
-
|
36
44
|
Rake::GemPackageTask.new(spec) do |pkg|
|
37
45
|
pkg.gem_spec = spec
|
38
46
|
end
|
39
47
|
|
40
|
-
|
48
|
+
##############################################################################
|
49
|
+
# Installation
|
50
|
+
##############################################################################
|
51
|
+
desc "Install the gem"
|
41
52
|
task :install => [:package] do
|
42
|
-
sh %{#{
|
53
|
+
sh %{#{sudo} gem install #{install_home} pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources}
|
43
54
|
end
|
44
55
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
rdoc.title = 'Merb Helper Docs'
|
51
|
-
rdoc.rdoc_dir = 'doc/rdoc'
|
52
|
-
rdoc.options << '--line-numbers' << '--inline-source'
|
56
|
+
namespace :jruby do
|
57
|
+
desc "Run :package and install the resulting .gem with jruby"
|
58
|
+
task :install => :package do
|
59
|
+
sh %{#{sudo} jruby -S gem install #{install_home} pkg/#{GEM_NAME}-#{GEM_VERSION}.gem --no-rdoc --no-ri}
|
60
|
+
end
|
53
61
|
end
|
54
62
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
63
|
+
##############################################################################
|
64
|
+
# Specs
|
65
|
+
##############################################################################
|
66
|
+
desc "Run all specs"
|
67
|
+
Spec::Rake::SpecTask.new("specs") do |t|
|
68
|
+
t.spec_opts = ["--format", "specdoc", "--colour"]
|
69
|
+
t.spec_files = Dir["spec/**/*_spec.rb"].sort
|
59
70
|
end
|
60
71
|
|
61
72
|
desc "Run all specs and generate an rcov report"
|
@@ -67,4 +78,15 @@ Spec::Rake::SpecTask.new('rcov') do |t|
|
|
67
78
|
t.rcov_opts = ['--exclude', 'gems', '--exclude', 'spec']
|
68
79
|
end
|
69
80
|
|
70
|
-
|
81
|
+
##############################################################################
|
82
|
+
# Documentation
|
83
|
+
##############################################################################
|
84
|
+
Rake::RDocTask.new do |rdoc|
|
85
|
+
files = ['README', 'LICENSE',
|
86
|
+
'lib/**/*.rb']
|
87
|
+
rdoc.rdoc_files.add(files)
|
88
|
+
rdoc.main = 'README'
|
89
|
+
rdoc.title = 'Merb Helper Docs'
|
90
|
+
rdoc.rdoc_dir = 'doc/rdoc'
|
91
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
92
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class Date
|
2
|
+
include OrdinalizedFormatting
|
3
|
+
|
4
|
+
# Converts a Date instance to a Time, where the time is set to the beginning of the day.
|
5
|
+
# The timezone can be either :local or :utc (default :utc).
|
6
|
+
#
|
7
|
+
# ==== Examples:
|
8
|
+
# date = Date.new(2007, 11, 10)
|
9
|
+
# date.to_s # => 2007-11-10
|
10
|
+
#
|
11
|
+
# date.to_time # => Sat Nov 10 00:00:00 UTC 2007
|
12
|
+
# date.to_time(:utc) # => Sat Nov 10 00:00:00 UTC 2007
|
13
|
+
# date.to_time(:local) # => Sat Nov 10 00:00:00 -0800 2007
|
14
|
+
#
|
15
|
+
def to_time(form = :utc)
|
16
|
+
::Time.send("#{form}", year, month, day)
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_date; self; end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Time
|
23
|
+
include OrdinalizedFormatting
|
24
|
+
|
25
|
+
# Ruby 1.8-cvs and 1.9 define private Time#to_date
|
26
|
+
%w(to_date to_datetime).each do |method|
|
27
|
+
public method if private_instance_methods.include?(method)
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_time; self; end
|
31
|
+
end
|
@@ -1,52 +1,3 @@
|
|
1
|
-
|
2
|
-
# Everything above here has pretty much been implemented in the assistance gem...
|
3
|
-
|
4
|
-
# Time.now.to_ordinalized_s :long
|
5
|
-
# => "February 28th, 2006 21:10"
|
6
|
-
module OrdinalizedFormatting
|
7
|
-
|
8
|
-
def self.extended(obj)
|
9
|
-
include Merb::Helpers::DateAndTime
|
10
|
-
end
|
11
|
-
|
12
|
-
def to_ordinalized_s(format = :default)
|
13
|
-
format = Merb::Helpers::DateAndTime.date_formats[format]
|
14
|
-
return self.to_s if format.nil?
|
15
|
-
strftime_ordinalized(format)
|
16
|
-
end
|
17
|
-
|
18
|
-
def strftime_ordinalized(fmt)
|
19
|
-
strftime(fmt.gsub(/(^|[^-])%d/, '\1_%d_')).gsub(/_(\d+)_/) { |s| s.to_i.ordinalize }
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
class Date
|
24
|
-
include OrdinalizedFormatting
|
25
|
-
# Converts a Date instance to a Time, where the time is set to the beginning of the day.
|
26
|
-
# The timezone can be either :local or :utc (default :utc).
|
27
|
-
#
|
28
|
-
# ==== Examples:
|
29
|
-
# date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007
|
30
|
-
#
|
31
|
-
# date.to_time # => Sat Nov 10 00:00:00 0800 2007
|
32
|
-
# date.to_time(:local) # => Sat Nov 10 00:00:00 0800 2007
|
33
|
-
#
|
34
|
-
# date.to_time(:utc) # => Sat Nov 10 00:00:00 UTC 2007
|
35
|
-
def to_time(form = :utc)
|
36
|
-
::Time.send("#{form}_time", year, month, day)
|
37
|
-
end
|
38
|
-
def to_date; self; end
|
39
|
-
end
|
40
|
-
|
41
|
-
class Time
|
42
|
-
include OrdinalizedFormatting
|
43
|
-
# Ruby 1.8-cvs and 1.9 define private Time#to_date
|
44
|
-
%w(to_date to_datetime).each do |method|
|
45
|
-
public method if private_instance_methods.include?(method)
|
46
|
-
end
|
47
|
-
def to_time; self; end
|
48
|
-
end
|
49
|
-
|
50
1
|
module Merb
|
51
2
|
module Helpers
|
52
3
|
# Provides a number of methods for displaying and dealing with dates and times
|
@@ -78,11 +29,17 @@ module Merb
|
|
78
29
|
@@time_class
|
79
30
|
end
|
80
31
|
|
81
|
-
|
82
|
-
|
32
|
+
# ==== Parameters
|
33
|
+
# format<Symbol>:: time format to use
|
34
|
+
# locale<String, Symbol>:: An optional value which can be used by localization plugins
|
35
|
+
#
|
36
|
+
# ==== Returns
|
37
|
+
# String:: a string used to format time using #strftime
|
38
|
+
def self.time_output(format, locale=nil)
|
39
|
+
@@time_output[format]
|
83
40
|
end
|
84
41
|
|
85
|
-
def date_formats
|
42
|
+
def self.date_formats
|
86
43
|
@@date_formats
|
87
44
|
end
|
88
45
|
|
@@ -90,27 +47,28 @@ module Merb
|
|
90
47
|
#
|
91
48
|
# ==== Parameters
|
92
49
|
# time<~to_date>:: The Date or Time to test
|
50
|
+
# locale<String, Symbol>:: An optional value which can be used by localization plugins
|
93
51
|
#
|
94
52
|
# ==== Returns
|
95
|
-
# String::
|
53
|
+
# String:: Relative date
|
96
54
|
#
|
97
55
|
# ==== Examples
|
98
56
|
# relative_date(Time.now.utc) => "today"
|
99
57
|
# relative_date(5.days.ago) => "March 5th"
|
100
58
|
# relative_date(1.year.ago) => "March 10th, 2007"
|
101
|
-
def relative_date(time)
|
59
|
+
def relative_date(time, locale=nil)
|
102
60
|
date = time.to_date
|
103
61
|
today = DateAndTime.time_class.now.to_date
|
104
62
|
if date == today
|
105
|
-
DateAndTime.time_output
|
63
|
+
DateAndTime.time_output(:today, locale)
|
106
64
|
elsif date == (today - 1)
|
107
|
-
DateAndTime.time_output
|
65
|
+
DateAndTime.time_output(:yesterday, locale)
|
108
66
|
elsif date == (today + 1)
|
109
|
-
DateAndTime.time_output
|
67
|
+
DateAndTime.time_output(:tomorrow, locale)
|
110
68
|
else
|
111
|
-
fmt = DateAndTime.time_output
|
112
|
-
fmt << DateAndTime.time_output
|
113
|
-
time.strftime_ordinalized(fmt)
|
69
|
+
fmt = DateAndTime.time_output(:initial_format, locale).dup
|
70
|
+
fmt << DateAndTime.time_output(:year_format, locale) unless date.year == today.year
|
71
|
+
time.strftime_ordinalized(fmt, locale)
|
114
72
|
end
|
115
73
|
end
|
116
74
|
|
@@ -188,6 +146,7 @@ module Merb
|
|
188
146
|
# from_time<~to_time>:: The Date or Time to start from
|
189
147
|
# to_time<~to_time>:: The Date or Time to go to, Defaults to Time.now.utc
|
190
148
|
# include_seconds<Boolean>:: Count the seconds initially, Defaults to false
|
149
|
+
# locale<String, Symbol>:: An optional value which can be used by localization plugins
|
191
150
|
#
|
192
151
|
# ==== Returns
|
193
152
|
# String:: The time distance
|
@@ -199,7 +158,7 @@ module Merb
|
|
199
158
|
# time_lost_in_words(Time.now) # => less than a minute
|
200
159
|
# time_lost_in_words(Time.now, Time.now, true) # => less than 5 seconds
|
201
160
|
#
|
202
|
-
def time_lost_in_words(from_time, to_time = Time.now.utc, include_seconds = false)
|
161
|
+
def time_lost_in_words(from_time, to_time = Time.now.utc, include_seconds = false, locale=nil)
|
203
162
|
from_time = from_time.to_time if from_time.respond_to?(:to_time)
|
204
163
|
to_time = to_time.to_time if to_time.respond_to?(:to_time)
|
205
164
|
distance_in_minutes = (((to_time - from_time).abs)/60).round
|
@@ -230,13 +189,14 @@ module Merb
|
|
230
189
|
end
|
231
190
|
alias :time_ago_in_words :time_lost_in_words
|
232
191
|
|
233
|
-
def prettier_time(time, ampm=true)
|
192
|
+
def prettier_time(time, ampm=true, locale=nil)
|
234
193
|
time.strftime("%I:%M#{" %p" if ampm}").sub(/^0/, '')
|
235
194
|
end
|
236
195
|
end
|
237
196
|
end
|
238
197
|
end
|
239
198
|
|
240
|
-
class Merb::Controller
|
199
|
+
class Merb::Controller
|
241
200
|
include Merb::Helpers::DateAndTime
|
242
201
|
end
|
202
|
+
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "#{File.dirname(__FILE__)}/tag_helpers"
|
2
2
|
|
3
|
-
module Merb
|
3
|
+
module Merb
|
4
4
|
|
5
5
|
# Merb helpers include several helpers used for simplifying view creation.
|
6
6
|
# The available helpers currently include form tag helpers for both resource based and generic HTML form tag creation
|
@@ -46,7 +46,7 @@ module Merb #:nodoc:
|
|
46
46
|
# Provides a HTML formatted display of resource errors in an unordered list with a h2 form submission error
|
47
47
|
# ==== Options
|
48
48
|
# +build_li+:: Block for generating a list item for an error. It receives an instance of the error.
|
49
|
-
# +html_class+:: Set for custom error div class default is <tt>
|
49
|
+
# +html_class+:: Set for custom error div class default is <tt>submission_failed<tt>
|
50
50
|
#
|
51
51
|
# ==== Examples
|
52
52
|
# <%= error_messages_for :person %>
|
@@ -71,7 +71,7 @@ module Merb #:nodoc:
|
|
71
71
|
yield(obj.errors)
|
72
72
|
else
|
73
73
|
error_plurality = (error_count == 1 ? 'problem' : 'problems')
|
74
|
-
"<h2>Form
|
74
|
+
"<h2>Form submission failed because of #{error_count} #{error_plurality}</h2>"
|
75
75
|
end
|
76
76
|
|
77
77
|
markup = %Q{
|
@@ -88,7 +88,7 @@ module Merb #:nodoc:
|
|
88
88
|
}
|
89
89
|
end
|
90
90
|
|
91
|
-
def obj_from_ivar_or_sym(obj)
|
91
|
+
def obj_from_ivar_or_sym(obj)
|
92
92
|
obj.is_a?(Symbol) ? instance_variable_get("@#{obj}") : obj
|
93
93
|
end
|
94
94
|
|
@@ -164,19 +164,19 @@ module Merb #:nodoc:
|
|
164
164
|
@_obj, @_block, @_object_name = old_obj, old_block, old_object_name
|
165
165
|
end
|
166
166
|
|
167
|
-
def control_name(col)
|
167
|
+
def control_name(col)
|
168
168
|
"#{@_object_name}[#{col}]"
|
169
169
|
end
|
170
170
|
|
171
|
-
def control_id(col)
|
171
|
+
def control_id(col)
|
172
172
|
"#{@_object_name}_#{col}"
|
173
173
|
end
|
174
174
|
|
175
|
-
def control_value(col)
|
175
|
+
def control_value(col)
|
176
176
|
escape_xml(@_obj.send(col))
|
177
177
|
end
|
178
178
|
|
179
|
-
def control_name_value(col, attrs)
|
179
|
+
def control_name_value(col, attrs)
|
180
180
|
{:name => control_name(col), :value => control_value(col)}.merge(attrs)
|
181
181
|
end
|
182
182
|
|
@@ -212,7 +212,7 @@ module Merb #:nodoc:
|
|
212
212
|
def password_control(col, attrs = {})
|
213
213
|
attrs.merge!(:name => control_name(col), :id => control_id(col))
|
214
214
|
errorify_field(attrs, col)
|
215
|
-
password_field(
|
215
|
+
password_field({:name => control_name(col)}.merge(attrs))
|
216
216
|
end
|
217
217
|
|
218
218
|
# Provides a generic HTML password input tag.
|
@@ -221,7 +221,6 @@ module Merb #:nodoc:
|
|
221
221
|
# <%= password_field :name => :password, :label => "Password" %>
|
222
222
|
# # => <label for="password">Password</label><input type="password" name="password" id="password"/>
|
223
223
|
def password_field(attrs = {})
|
224
|
-
attrs.delete(:value)
|
225
224
|
attrs.merge!(:type => 'password')
|
226
225
|
attrs.add_html_class!("password")
|
227
226
|
optional_label(attrs) { self_closing_tag("input", attrs) }
|
@@ -229,7 +228,7 @@ module Merb #:nodoc:
|
|
229
228
|
|
230
229
|
# translate column values from the db to boolean
|
231
230
|
# nil, false, 0 and '0' are false. All others are true
|
232
|
-
def col_val_to_bool(val)
|
231
|
+
def col_val_to_bool(val)
|
233
232
|
!(val == "0" || val == 0 || !val)
|
234
233
|
end
|
235
234
|
private :col_val_to_bool
|
@@ -305,6 +304,20 @@ module Merb #:nodoc:
|
|
305
304
|
self_closing_tag("input", attrs)
|
306
305
|
end
|
307
306
|
|
307
|
+
# Provides a HTML radio input tag based on a resource attribute.
|
308
|
+
#
|
309
|
+
# ==== Example
|
310
|
+
# <% form_for :person, :action => url(:people) do %>
|
311
|
+
# <%= radio_control :first_name %>
|
312
|
+
# <% end %>
|
313
|
+
def radio_control(col, attrs = {})
|
314
|
+
errorify_field(attrs, col)
|
315
|
+
attrs.merge!(:id => control_id(col))
|
316
|
+
val = @_obj.send(col)
|
317
|
+
attrs.merge!(:checked => "checked") if val.to_s == attrs[:value]
|
318
|
+
optional_label(attrs) { radio_field(control_name_value(col, attrs)) }
|
319
|
+
end
|
320
|
+
|
308
321
|
# Provides a radio group based on a resource attribute.
|
309
322
|
# This is generally used within a resource block such as +form_for+.
|
310
323
|
#
|
@@ -334,8 +347,10 @@ module Merb #:nodoc:
|
|
334
347
|
# ==== Example
|
335
348
|
# <%= radio_field :name => "radio_options", :value => "1", :label => "One" %>
|
336
349
|
# <%= radio_field :name => "radio_options", :value => "2", :label => "Two" %>
|
350
|
+
# <%= radio_field :name => "radio_options", :value => "3", :label => "Three", :checked => true %>
|
337
351
|
def radio_field(attrs = {})
|
338
352
|
attrs.merge!(:type => "radio")
|
353
|
+
attrs.delete(:checked) unless attrs[:checked]
|
339
354
|
attrs.add_html_class!("radio")
|
340
355
|
optional_label(attrs){self_closing_tag("input", attrs)}
|
341
356
|
end
|
@@ -559,6 +574,7 @@ module Merb #:nodoc:
|
|
559
574
|
# Generates a delete button inside of a form.
|
560
575
|
#
|
561
576
|
# <%= delete_button :news_post, @news_post, 'Remove' %>
|
577
|
+
# <%= delete_button('/posts/24/comments/10') %>
|
562
578
|
#
|
563
579
|
# The HTML generated for this would be:
|
564
580
|
#
|
@@ -566,10 +582,17 @@ module Merb #:nodoc:
|
|
566
582
|
# <input type="hidden" value="delete" name="_method"/>
|
567
583
|
# <button type="submit">Remove</button>
|
568
584
|
# </form>
|
569
|
-
|
585
|
+
#
|
586
|
+
# <form method="post" action="/posts/24/comments/10">
|
587
|
+
# <input type="hidden" value="delete" name="_method"/>
|
588
|
+
# <button type="submit">Remove</button>
|
589
|
+
# </form>
|
590
|
+
def delete_button(symbol_or_string, obj = nil, contents = 'Delete', form_attrs = {}, button_attrs = {})
|
591
|
+
obj ||= instance_variable_get("@#{symbol_or_string}") if symbol_or_string.kind_of?(Symbol)
|
592
|
+
|
570
593
|
button_attrs[:type] = :submit
|
571
594
|
|
572
|
-
form_attrs.merge! :action => url(
|
595
|
+
form_attrs.merge! :action => symbol_or_string.kind_of?(Symbol) ? url(symbol_or_string, obj) : symbol_or_string, :method => :delete
|
573
596
|
|
574
597
|
fake_form_method = set_form_method(form_attrs, obj)
|
575
598
|
|
@@ -627,6 +650,6 @@ module Merb #:nodoc:
|
|
627
650
|
end
|
628
651
|
end
|
629
652
|
|
630
|
-
class Merb::Controller
|
653
|
+
class Merb::Controller
|
631
654
|
include Merb::Helpers::Form
|
632
655
|
end
|
@@ -20,4 +20,35 @@ module Ordinalize
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
|
+
Integer.send :include, Ordinalize
|
25
|
+
|
26
|
+
# Time.now.to_ordinalized_s :long
|
27
|
+
# => "February 28th, 2006 21:10"
|
28
|
+
module OrdinalizedFormatting
|
29
|
+
|
30
|
+
def self.extended(obj)
|
31
|
+
include Merb::Helpers::DateAndTime
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_ordinalized_s(format = :default)
|
35
|
+
format = Merb::Helpers::DateAndTime.date_formats[format]
|
36
|
+
return self.to_s if format.nil?
|
37
|
+
strftime_ordinalized(format)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Gives you a relative date in an attractive format
|
41
|
+
#
|
42
|
+
# ==== Parameters
|
43
|
+
# format<String>:: strftime string used to formatt a time/date object
|
44
|
+
# locale<String, Symbol>:: An optional value which can be used by localization plugins
|
45
|
+
#
|
46
|
+
# ==== Returns
|
47
|
+
# String:: Ordinalized time/date object
|
48
|
+
#
|
49
|
+
# ==== Examples
|
50
|
+
# 5.days.ago.strftime_ordinalized('%b %d, %Y') # =>
|
51
|
+
def strftime_ordinalized(fmt, format=nil)
|
52
|
+
strftime(fmt.gsub(/(^|[^-])%d/, '\1_%d_')).gsub(/_(\d+)_/) { |s| s.to_i.ordinalize }
|
53
|
+
end
|
54
|
+
end
|
@@ -26,7 +26,7 @@ module Merb
|
|
26
26
|
# # <div class="class">content</div>
|
27
27
|
#
|
28
28
|
def tag(name, contents = nil, attrs = {}, &block)
|
29
|
-
attrs = contents if contents.is_a?(Hash)
|
29
|
+
attrs, contents = contents, nil if contents.is_a?(Hash)
|
30
30
|
contents = capture(&block) if block_given?
|
31
31
|
open_tag(name, attrs) + contents.to_s + close_tag(name)
|
32
32
|
end
|
@@ -56,6 +56,6 @@ module Merb
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
class Merb::Controller
|
59
|
+
class Merb::Controller
|
60
60
|
include Merb::Helpers::Tag
|
61
61
|
end
|
data/lib/merb_helpers.rb
CHANGED
@@ -1,42 +1,39 @@
|
|
1
1
|
module Merb
|
2
2
|
|
3
3
|
module Helpers
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
def self.load_helpers(helpers = HELPERS_FILES)
|
8
|
-
helpers.each {|h| Kernel.load(File.join(HELPERS_DIR, "#{h}.rb") )} # using load here allows specs to work
|
9
|
-
end
|
4
|
+
|
5
|
+
@@helpers_dir = File.dirname(__FILE__) / 'merb_helpers'
|
6
|
+
@@helpers_files = Dir["#{@@helpers_dir}/*_helpers.rb"].collect {|h| h.match(/\/(\w+)\.rb/)[1]}
|
10
7
|
|
11
8
|
def self.load
|
12
|
-
require
|
13
|
-
require
|
14
|
-
|
15
|
-
# config[:load]
|
16
|
-
# if defined then load the modules passed along
|
17
|
-
# otherwise load everything
|
9
|
+
require @@helpers_dir + '/time_dsl'
|
10
|
+
require @@helpers_dir + '/ordinalize'
|
11
|
+
require @@helpers_dir + '/core_ext'
|
18
12
|
|
19
13
|
if Merb::Plugins.config[:merb_helpers]
|
20
14
|
config = Merb::Plugins.config[:merb_helpers]
|
21
|
-
raise "With and Without options
|
22
|
-
|
15
|
+
raise "With and Without options have been deprecated" if config[:with] || config[:without]
|
16
|
+
|
17
|
+
if config[:include] && !config[:include].empty?
|
23
18
|
load_helpers(config[:include])
|
24
|
-
elsif config[:exclude]
|
25
|
-
load_helpers(HELPERS_FILES.reject {|h| config[:exclude].include? h})
|
26
19
|
else
|
27
20
|
# This is in case someone defines an entry in the config,
|
28
21
|
# but doesn't put in a with or without option
|
29
22
|
load_helpers
|
30
23
|
end
|
24
|
+
|
31
25
|
else
|
32
26
|
load_helpers
|
33
27
|
end
|
34
28
|
end
|
35
29
|
|
30
|
+
# Load only specific helpers instead of loading all the helpers
|
31
|
+
def self.load_helpers(helpers = @@helpers_files)
|
32
|
+
helpers.each {|helper| Kernel.load(File.join(@@helpers_dir, "#{helper}.rb") )} # using load here allows specs to work
|
33
|
+
end
|
34
|
+
|
36
35
|
end
|
37
36
|
|
38
37
|
end
|
39
38
|
|
40
|
-
Merb::
|
41
|
-
Merb::Helpers.load
|
42
|
-
end
|
39
|
+
Merb::Helpers.load
|
metadata
CHANGED
@@ -1,28 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: merb_helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yehuda Katz
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-08-03 00:00:00 +03:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: merb-core
|
17
|
+
type: :runtime
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|
20
21
|
- - ">="
|
21
22
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.9.
|
23
|
+
version: 0.9.4
|
23
24
|
version:
|
24
25
|
description: Helper support for merb (similar to the Rails form helpers)
|
25
|
-
email:
|
26
|
+
email: ykatz@engineyard.com
|
26
27
|
executables: []
|
27
28
|
|
28
29
|
extensions: []
|
@@ -37,6 +38,7 @@ files:
|
|
37
38
|
- Rakefile
|
38
39
|
- TODO
|
39
40
|
- lib/merb_helpers
|
41
|
+
- lib/merb_helpers/core_ext.rb
|
40
42
|
- lib/merb_helpers/date_time_helpers.rb
|
41
43
|
- lib/merb_helpers/form_helpers.rb
|
42
44
|
- lib/merb_helpers/ordinalize.rb
|
@@ -44,7 +46,7 @@ files:
|
|
44
46
|
- lib/merb_helpers/time_dsl.rb
|
45
47
|
- lib/merb_helpers.rb
|
46
48
|
has_rdoc: true
|
47
|
-
homepage: http://
|
49
|
+
homepage: http://merbivore.com
|
48
50
|
post_install_message:
|
49
51
|
rdoc_options: []
|
50
52
|
|
@@ -64,8 +66,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
66
|
version:
|
65
67
|
requirements: []
|
66
68
|
|
67
|
-
rubyforge_project:
|
68
|
-
rubygems_version: 1.0
|
69
|
+
rubyforge_project: merb
|
70
|
+
rubygems_version: 1.2.0
|
69
71
|
signing_key:
|
70
72
|
specification_version: 2
|
71
73
|
summary: Helper support for merb (similar to the Rails form helpers)
|