thorero-helpers 0.5.0.11 → 0.9.4
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/LICENSE +1 -1
- data/README +15 -3
- data/Rakefile +18 -13
- data/TODO +5 -0
- data/lib/merb_helpers.rb +39 -0
- data/lib/merb_helpers/core_ext.rb +31 -0
- data/lib/merb_helpers/date_time_helpers.rb +202 -0
- data/lib/merb_helpers/form_helpers.rb +655 -0
- data/lib/merb_helpers/ordinalize.rb +54 -0
- data/lib/merb_helpers/tag_helpers.rb +61 -0
- data/lib/merb_helpers/time_dsl.rb +59 -0
- metadata +13 -8
- data/lib/merb-laszlo.rb +0 -38
- data/lib/merb-laszlo/controllers.rb +0 -53
- data/lib/merb-laszlo/helpers.rb +0 -45
- data/lib/merb-laszlo/merbtasks.rb +0 -6
@@ -0,0 +1,54 @@
|
|
1
|
+
module Ordinalize
|
2
|
+
# Ordinalize turns a number into an ordinal string used to denote the
|
3
|
+
# position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
|
4
|
+
#
|
5
|
+
# Examples
|
6
|
+
# 1.ordinalize # => "1st"
|
7
|
+
# 2.ordinalize # => "2nd"
|
8
|
+
# 1002.ordinalize # => "1002nd"
|
9
|
+
# 1003.ordinalize # => "1003rd"
|
10
|
+
def ordinalize
|
11
|
+
if (11..13).include?(self % 100)
|
12
|
+
"#{self}th"
|
13
|
+
else
|
14
|
+
case self % 10
|
15
|
+
when 1; "#{self}st"
|
16
|
+
when 2; "#{self}nd"
|
17
|
+
when 3; "#{self}rd"
|
18
|
+
else "#{self}th"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
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
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Merb
|
2
|
+
module Helpers
|
3
|
+
module Tag
|
4
|
+
# Creates a generic HTML tag. You can invoke it a variety of ways.
|
5
|
+
#
|
6
|
+
# tag :div
|
7
|
+
# # <div></div>
|
8
|
+
#
|
9
|
+
# tag :div, 'content'
|
10
|
+
# # <div>content</div>
|
11
|
+
#
|
12
|
+
# tag :div, :class => 'class'
|
13
|
+
# # <div class="class"></div>
|
14
|
+
#
|
15
|
+
# tag :div, 'content', :class => 'class'
|
16
|
+
# # <div class="class">content</div>
|
17
|
+
#
|
18
|
+
# tag :div do
|
19
|
+
# 'content'
|
20
|
+
# end
|
21
|
+
# # <div>content</div>
|
22
|
+
#
|
23
|
+
# tag :div, :class => 'class' do
|
24
|
+
# 'content'
|
25
|
+
# end
|
26
|
+
# # <div class="class">content</div>
|
27
|
+
#
|
28
|
+
def tag(name, contents = nil, attrs = {}, &block)
|
29
|
+
attrs, contents = contents, nil if contents.is_a?(Hash)
|
30
|
+
contents = capture(&block) if block_given?
|
31
|
+
open_tag(name, attrs) + contents.to_s + close_tag(name)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Creates the opening tag with attributes for the provided +name+
|
35
|
+
# attrs is a hash where all members will be mapped to key="value"
|
36
|
+
#
|
37
|
+
# Note: This tag will need to be closed
|
38
|
+
def open_tag(name, attrs = nil)
|
39
|
+
"<#{name}#{' ' + attrs.to_html_attributes if attrs && !attrs.empty?}>"
|
40
|
+
end
|
41
|
+
|
42
|
+
# Creates a closing tag
|
43
|
+
def close_tag(name)
|
44
|
+
"</#{name}>"
|
45
|
+
end
|
46
|
+
|
47
|
+
# Creates a self closing tag. Like <br/> or <img src="..."/>
|
48
|
+
#
|
49
|
+
# +name+ : the name of the tag to create
|
50
|
+
# +attrs+ : a hash where all members will be mapped to key="value"
|
51
|
+
def self_closing_tag(name, attrs = nil)
|
52
|
+
"<#{name}#{' ' + attrs.to_html_attributes if attrs && !attrs.empty?}/>"
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
class Merb::Controller
|
60
|
+
include Merb::Helpers::Tag
|
61
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# Provides a a simple way of calling time units and to see the elapsed time between 2 moments
|
2
|
+
# ==== Examples
|
3
|
+
# 142.minutes => returns a value in seconds
|
4
|
+
# 7.days => returns a value in seconds
|
5
|
+
# 1.week => returns a value in seconds
|
6
|
+
# 2.weeks.ago => returns a date
|
7
|
+
# 1.year.since(time) => returns a date
|
8
|
+
# 5.months.since(2.weeks.from_now) => returns a date
|
9
|
+
module TimeDSL
|
10
|
+
|
11
|
+
def second
|
12
|
+
self * 1
|
13
|
+
end
|
14
|
+
alias_method :seconds, :second
|
15
|
+
|
16
|
+
def minute
|
17
|
+
self * 60
|
18
|
+
end
|
19
|
+
alias_method :minutes, :minute
|
20
|
+
|
21
|
+
def hour
|
22
|
+
self * 3600
|
23
|
+
end
|
24
|
+
alias_method :hours, :hour
|
25
|
+
|
26
|
+
def day
|
27
|
+
self * 86400
|
28
|
+
end
|
29
|
+
alias_method :days, :day
|
30
|
+
|
31
|
+
def week
|
32
|
+
self * 604800
|
33
|
+
end
|
34
|
+
alias_method :weeks, :week
|
35
|
+
|
36
|
+
def month
|
37
|
+
self * 2592000
|
38
|
+
end
|
39
|
+
alias_method :months, :month
|
40
|
+
|
41
|
+
def year
|
42
|
+
self * 31471200
|
43
|
+
end
|
44
|
+
alias_method :years, :year
|
45
|
+
|
46
|
+
# Reads best without arguments: 10.minutes.ago
|
47
|
+
def ago(time = ::Time.now)
|
48
|
+
time - self
|
49
|
+
end
|
50
|
+
alias :until :ago
|
51
|
+
|
52
|
+
# Reads best with argument: 10.minutes.since(time)
|
53
|
+
def since(time = ::Time.now)
|
54
|
+
time + self
|
55
|
+
end
|
56
|
+
alias :from_now :since
|
57
|
+
end
|
58
|
+
|
59
|
+
Numeric.send :include, TimeDSL
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thorero-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yehuda Katz
|
@@ -22,7 +22,7 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 0.9.4
|
24
24
|
version:
|
25
|
-
description:
|
25
|
+
description: Helper support for merb (similar to the Rails form helpers)
|
26
26
|
email: ykatz@engineyard.com
|
27
27
|
executables: []
|
28
28
|
|
@@ -31,15 +31,20 @@ extensions: []
|
|
31
31
|
extra_rdoc_files:
|
32
32
|
- README
|
33
33
|
- LICENSE
|
34
|
+
- TODO
|
34
35
|
files:
|
35
36
|
- LICENSE
|
36
37
|
- README
|
37
38
|
- Rakefile
|
38
|
-
-
|
39
|
-
- lib/
|
40
|
-
- lib/
|
41
|
-
- lib/
|
42
|
-
- lib/
|
39
|
+
- TODO
|
40
|
+
- lib/merb_helpers
|
41
|
+
- lib/merb_helpers/core_ext.rb
|
42
|
+
- lib/merb_helpers/date_time_helpers.rb
|
43
|
+
- lib/merb_helpers/form_helpers.rb
|
44
|
+
- lib/merb_helpers/ordinalize.rb
|
45
|
+
- lib/merb_helpers/tag_helpers.rb
|
46
|
+
- lib/merb_helpers/time_dsl.rb
|
47
|
+
- lib/merb_helpers.rb
|
43
48
|
has_rdoc: true
|
44
49
|
homepage: http://merbivore.com
|
45
50
|
post_install_message:
|
@@ -65,6 +70,6 @@ rubyforge_project: thorero
|
|
65
70
|
rubygems_version: 1.2.0
|
66
71
|
signing_key:
|
67
72
|
specification_version: 2
|
68
|
-
summary:
|
73
|
+
summary: Helper support for merb (similar to the Rails form helpers)
|
69
74
|
test_files: []
|
70
75
|
|
data/lib/merb-laszlo.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
require "digest/md5"
|
2
|
-
require "fileutils"
|
3
|
-
require "curb"
|
4
|
-
require "zip/zip"
|
5
|
-
srand(Time.now.to_i)
|
6
|
-
|
7
|
-
class Laszlo
|
8
|
-
def self.file_name
|
9
|
-
Digest::MD5.hexdigest(rand(Time.now.to_i).to_s)
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.app_name
|
13
|
-
File.basename(File.expand_path(Merb.root))
|
14
|
-
end
|
15
|
-
|
16
|
-
cattr_accessor :url
|
17
|
-
end
|
18
|
-
|
19
|
-
require "haml"
|
20
|
-
|
21
|
-
module Haml
|
22
|
-
module Filters
|
23
|
-
module Cdata
|
24
|
-
include Haml::Filters::Base
|
25
|
-
|
26
|
-
def render(text)
|
27
|
-
"<![CDATA[#{("\n" + text).rstrip.gsub("\n", "\n ")}\n]]>"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
Merb::Config[:haml] ||= {}
|
34
|
-
Merb::Config[:haml][:filters] ||= {}
|
35
|
-
Merb::Config[:haml][:filters].merge!("cdata" => Haml::Filters::Cdata)
|
36
|
-
|
37
|
-
require "merb-laszlo/controllers"
|
38
|
-
require "merb-laszlo/helpers"
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require "pathname"
|
2
|
-
module Merb
|
3
|
-
class Controller
|
4
|
-
|
5
|
-
def laszlo(str)
|
6
|
-
@lz_resources ||= []
|
7
|
-
|
8
|
-
root, template_location = self.class._template_roots.last
|
9
|
-
resource_dir = root / send(template_location, "resources")[0...-1]
|
10
|
-
Merb.logger.info! "Resource dir: #{resource_dir}"
|
11
|
-
|
12
|
-
zip_filename = "#{Laszlo.file_name}.zip"
|
13
|
-
FileUtils.mkdir_p(Merb.root / "tmp")
|
14
|
-
Zip::ZipFile.open(Merb.root / "tmp" / zip_filename, Zip::ZipFile::CREATE) do |zipfile|
|
15
|
-
zipfile.get_output_stream("#{action_name}.lzx") do |f|
|
16
|
-
f.puts str
|
17
|
-
end
|
18
|
-
@lz_resources.each do |resource|
|
19
|
-
filepath = resource.split("/")
|
20
|
-
dir = filepath[1...-1].join("/").gsub(/^#{Merb.root}/, "")
|
21
|
-
filename = filepath[-1]
|
22
|
-
zipfile.mkdir(dir) unless zipfile.find_entry(dir) || dir.empty?
|
23
|
-
Merb.logger.info! "Looking for #{resource_dir / resource}"
|
24
|
-
if File.file?(resource_dir / resource)
|
25
|
-
zipfile.add(resource, resource_dir / resource)
|
26
|
-
elsif File.file?(root / resource)
|
27
|
-
zipfile.add(resource, root / resource)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
c = Curl::Easy.new
|
32
|
-
|
33
|
-
c.url = "#{Laszlo.url}/file_upload.jsp"
|
34
|
-
c.multipart_form_post = true
|
35
|
-
|
36
|
-
file = Curl::PostField.file("myFile", Merb.root / "tmp" / zip_filename, zip_filename)
|
37
|
-
file.content_type = "application/zip"
|
38
|
-
|
39
|
-
c.http_post(
|
40
|
-
file,
|
41
|
-
Curl::PostField.content("uid", "#{Laszlo.app_name}__#{controller_name}"))
|
42
|
-
|
43
|
-
File.delete(Merb.root / "tmp" / zip_filename)
|
44
|
-
|
45
|
-
if c.response_code == 200
|
46
|
-
redirect("#{Laszlo.url}/my-apps/#{Laszlo.app_name}__#{controller_name}/#{action_name}.lzx")
|
47
|
-
else
|
48
|
-
raise NotAcceptable
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
data/lib/merb-laszlo/helpers.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
module Merb
|
2
|
-
module GlobalHelpers
|
3
|
-
|
4
|
-
def lz(name, *args, &blk)
|
5
|
-
send("lz_#{name}", *args, &blk)
|
6
|
-
end
|
7
|
-
|
8
|
-
def lz_reload_button
|
9
|
-
contents = "Reload" +
|
10
|
-
tag(:handler, %{LzBrowser.loadJS("window.location = \\\"#{request.full_uri}\\\"")}, :name => "onclick") +
|
11
|
-
tag(:handler, %{this.bringToFront()}, :name => "oninit")
|
12
|
-
|
13
|
-
tag(:button, contents, :valign => "bottom", :align => "right")
|
14
|
-
end
|
15
|
-
|
16
|
-
def lz_class(name, extends = nil, opts = {}, &blk)
|
17
|
-
opts.merge!(:name => name)
|
18
|
-
opts.merge!(:extends => extends) if extends
|
19
|
-
tag(:class, nil, opts, &blk)
|
20
|
-
end
|
21
|
-
|
22
|
-
def lz_text(text, opts = {})
|
23
|
-
self_closing_tag(:text, {:text => text}.merge(opts))
|
24
|
-
end
|
25
|
-
|
26
|
-
def lz_window(width, height, opts = {}, &blk)
|
27
|
-
opts = {:resizable => true, :width => width, :height => height}.merge!(opts)
|
28
|
-
tag(:window, nil, opts, &blk)
|
29
|
-
end
|
30
|
-
|
31
|
-
def lz_resource(name, src, opts = {})
|
32
|
-
@lz_resources ||= []
|
33
|
-
@lz_resources << src
|
34
|
-
opts.merge!(:name => name, :src => src)
|
35
|
-
self_closing_tag(:resource, opts)
|
36
|
-
end
|
37
|
-
|
38
|
-
def lz_on(name, options = {}, *args, &blk)
|
39
|
-
options.merge!(:name => "on#{name}")
|
40
|
-
options.merge!(:args => args.map {|x| x.to_s}.join(", ")) unless args.empty?
|
41
|
-
tag(:handler, capture(&blk), options)
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
45
|
-
end
|