georgedrummond_sinatra_helpers 0.0.7 → 0.0.8
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.
@@ -1,5 +1,6 @@
|
|
1
1
|
require "georgedrummond_sinatra_helpers/version"
|
2
2
|
require "digest/md5"
|
3
|
+
require "uri"
|
3
4
|
|
4
5
|
module GeorgeDrummond
|
5
6
|
module Sinatra
|
@@ -8,17 +9,24 @@ module GeorgeDrummond
|
|
8
9
|
#
|
9
10
|
# ==== Examples
|
10
11
|
#
|
11
|
-
# With only an email address provided
|
12
|
+
# With only an email address provided:
|
12
13
|
#
|
13
14
|
# mail_to("georgedrummond@gmail.com")
|
14
15
|
# # => <a href="mailto:georgedrummond@gmail.com" class="mailto">georgedrummond@gmail.com</a>
|
15
16
|
#
|
16
|
-
# With an optional text field provided
|
17
|
+
# With an optional text field provided:
|
17
18
|
#
|
18
19
|
# mail_to("georgedrummond@gmail.com", "George Drummond")
|
19
20
|
# # => <a href="mailto:georgedrummond@gmail.com" class="mailto">George Drummond</a>
|
20
|
-
|
21
|
-
|
21
|
+
#
|
22
|
+
# With an options hash:
|
23
|
+
#
|
24
|
+
# mail_to("georgedrummond@gmail.com", "George Drummond", :class => :email, :title => "How do you do")
|
25
|
+
# # => <a href="mailto:georgedrummond@gmail.com" class="email" title="How do you do">George Drummond</a>
|
26
|
+
#
|
27
|
+
def mail_to(email, text=email, opts={})
|
28
|
+
options = {:class => :mailto}.merge(opts)
|
29
|
+
link_to text, "mailto:#{email}", options, false
|
22
30
|
end
|
23
31
|
|
24
32
|
# Creates the gravatar (www.gravatar.com) html from the email address and arguments provided.
|
@@ -26,93 +34,170 @@ module GeorgeDrummond
|
|
26
34
|
#
|
27
35
|
# ==== Examples
|
28
36
|
#
|
29
|
-
# With no size specified
|
37
|
+
# With no size specified:
|
30
38
|
#
|
31
39
|
# gravatar_image("georgedrummond@gmail.com")
|
32
40
|
# # => <img src="http://www.gravatar.com/avatar/d278a12b969a495ab16fdd942e748fe5?s=50" class="gravatar" />
|
33
41
|
#
|
34
|
-
# With a size specified
|
42
|
+
# With a size specified:
|
35
43
|
#
|
36
44
|
# gravatar_image("georgedrummond@gmail.com", 150)
|
37
45
|
# # => <img src="http://www.gravatar.com/avatar/d278a12b969a495ab16fdd942e748fe5?s=150" class="gravatar" />
|
38
|
-
|
46
|
+
#
|
47
|
+
# With options:
|
48
|
+
#
|
49
|
+
# gravatar_image("georgedrummond@gmail.com", 150, :class => :icon)
|
50
|
+
# # => <img src="http://www.gravatar.com/avatar/d278a12b969a495ab16fdd942e748fe5?s=150" class="icon" />
|
51
|
+
#
|
52
|
+
def gravatar_image(email, size=50, opts={})
|
39
53
|
hash = Digest::MD5.hexdigest(email)
|
40
|
-
|
54
|
+
url = "http://www.gravatar.com/avatar/#{hash}?s=#{size}"
|
55
|
+
image_tag url, {:class => :gravatar}.merge(opts)
|
41
56
|
end
|
42
57
|
|
43
58
|
# Creates html tags for stylesheets from the arguements provided. Dont include the <tt>.css</tt> extension as this
|
44
59
|
# will be automatically appended. You can specify one or multiple css files at once. Place your css files in
|
45
|
-
# the <tt>public/css</tt> folder of your app.
|
60
|
+
# the <tt>public/css</tt> folder of your app. URLs will link to external files
|
46
61
|
#
|
47
62
|
# ==== Examples
|
48
63
|
#
|
49
|
-
# With only one CSS file
|
64
|
+
# With only one CSS file:
|
50
65
|
#
|
51
66
|
# stylesheet_link_tag :app
|
52
67
|
# # => <link href="/css/app.css" type="text/css" rel="stylesheet" />
|
53
68
|
#
|
54
|
-
# With an array of CSS files we want to show
|
69
|
+
# With an array of CSS files we want to show:
|
55
70
|
#
|
56
71
|
# stylesheet_link_tag :app, :header # =>
|
57
72
|
# <link href="/css/app.css" type="text/css" rel="stylesheet" />
|
58
73
|
# <link href="/css/header.css" type="text/css" rel="stylesheet" />
|
74
|
+
#
|
75
|
+
# With an external stylesheet:
|
76
|
+
#
|
77
|
+
# stylesheet_link_tag :app, "http://accountsapp.com/styles/common.css"
|
78
|
+
# <link href="/css/app.css" type="text/css" rel="stylesheet" />
|
79
|
+
# <link href="http://accountsapp.com/styles/common.css" type="text/css" rel="stylesheet" />
|
80
|
+
#
|
59
81
|
def stylesheet_link_tag(*sources)
|
60
82
|
html = []
|
61
83
|
sources.each do |stylesheet|
|
62
|
-
|
63
|
-
|
84
|
+
if is_uri?(stylesheet)
|
85
|
+
path = stylesheet
|
86
|
+
else
|
87
|
+
path = url("/css/#{stylesheet}.css")
|
88
|
+
end
|
89
|
+
html << "<link href=\"#{path}\" type=\"text/css\" rel=\"stylesheet\" />"
|
64
90
|
end
|
65
91
|
return html.join("\n")
|
66
92
|
end
|
67
93
|
|
68
94
|
# Creates html tags for javascript includes from the arguments provided. Dont include the <tt>.js</tt> extension as this
|
69
95
|
# will be automatically appended. You can specify one or multiple javascript files at once. Place your javascript files in
|
70
|
-
# the <tt>public/js</tt> folder of your app.
|
96
|
+
# the <tt>public/js</tt> folder of your app. URLs will link to external files
|
71
97
|
#
|
72
98
|
# ==== Examples
|
73
99
|
#
|
74
100
|
# With only one javascript file
|
75
101
|
#
|
76
|
-
#
|
77
|
-
#
|
102
|
+
# javascript_include_tag :app
|
103
|
+
# # => <script type="text/javascript" src="/js/app.js"></script>
|
104
|
+
#
|
105
|
+
# With an array of javascript files we want to show:
|
106
|
+
#
|
107
|
+
# javascript_include_tag :jquery, :app # =>
|
108
|
+
# <script type="text/javascript" src="/js/jquery.js"></script>
|
109
|
+
# <script type="text/javascript" src="/js/app.js"></script>
|
78
110
|
#
|
79
|
-
# With an
|
111
|
+
# With an external stylesheet:
|
80
112
|
#
|
81
|
-
#
|
82
|
-
#
|
83
|
-
#
|
113
|
+
# javascript_include_tag :jquery, "http://accountsapp.com/js/app.js"
|
114
|
+
# <script type="text/javascript" src="/js/jquery.js"></script>
|
115
|
+
# <script type="text/javascript" src="http://accountsapp.com/js/app.js"></script>
|
116
|
+
#
|
84
117
|
def javascript_include_tag(*sources)
|
85
118
|
html = []
|
86
119
|
sources.each do |javascript|
|
87
|
-
|
88
|
-
|
120
|
+
if is_uri?(javascript)
|
121
|
+
path = javascript
|
122
|
+
else
|
123
|
+
path = url("/js/#{javascript}.js")
|
124
|
+
end
|
125
|
+
html << "<script type=\"text/javascript\" src=\"#{path}\"></script>"
|
89
126
|
end
|
90
127
|
return html.join("\n")
|
91
128
|
end
|
92
129
|
|
93
|
-
# Creates a html image tag given a file name. File should be located in <tt>public/images</tt>.
|
94
|
-
# files for now however I may add this at a later date if it is needed.
|
130
|
+
# Creates a html image tag given a file name. File should be located in <tt>public/images</tt>.
|
95
131
|
#
|
96
132
|
# ==== Examples
|
97
133
|
#
|
98
|
-
#
|
99
|
-
#
|
100
|
-
|
101
|
-
|
102
|
-
|
134
|
+
# With a local image:
|
135
|
+
#
|
136
|
+
# image_tag "home.png"
|
137
|
+
# # => <img src="/images/home.png" />
|
138
|
+
#
|
139
|
+
# With options:
|
140
|
+
#
|
141
|
+
# image_tag "home.png", :title => "home", :class => :icon
|
142
|
+
# # => <img src="/images/home.png" title="home" class="icon" />
|
143
|
+
#
|
144
|
+
# With a remote image:
|
145
|
+
#
|
146
|
+
# image_tag "http://accountsapp.com/logo.png", :title => "Online Accounting Software"
|
147
|
+
# # => <img src="http://accountsapp.com/logo.png" title="Online Accounting Software" />
|
148
|
+
#
|
149
|
+
def image_tag(image, opts={})
|
150
|
+
if is_uri?(image)
|
151
|
+
path = image
|
152
|
+
else
|
153
|
+
path = url("/images/#{image}")
|
154
|
+
end
|
155
|
+
return "<img src=\"#{path}\"#{parse_options(opts)} />"
|
103
156
|
end
|
104
157
|
|
105
|
-
# Creates a html link tag given a page <tt>title</tt> and resource <tt>path</tt>.
|
106
|
-
# however does not accept any other options.
|
158
|
+
# Creates a html link tag given a page <tt>title</tt> and resource <tt>path</tt>.
|
107
159
|
#
|
108
160
|
# ==== Examples
|
109
161
|
#
|
110
|
-
#
|
111
|
-
#
|
112
|
-
|
113
|
-
|
162
|
+
# With an internal link
|
163
|
+
#
|
164
|
+
# link_to "Home", "/home"
|
165
|
+
# # => <a href="/home">Home</a>
|
166
|
+
#
|
167
|
+
# With options:
|
168
|
+
#
|
169
|
+
# link_to "Home", "/home", :title => "Home Page"
|
170
|
+
# # => <a href="/home" title="Home Page">Home</a>
|
171
|
+
#
|
172
|
+
# For an external URL:
|
173
|
+
#
|
174
|
+
# link_to "AccountsApp", "http://accountsapp.com", :title => "Online Invoicing Software"
|
175
|
+
# # => <a href="http://accountsapp.com" title="Online Invoicing Software">AccountsApp</a>
|
176
|
+
#
|
177
|
+
def link_to(title, path, opts={}, base=true)
|
178
|
+
unless is_uri?(path) || base == false
|
179
|
+
path = url(path)
|
180
|
+
end
|
181
|
+
|
182
|
+
return "<a href=\"#{path}\"#{parse_options(opts)}>#{title}</a>"
|
114
183
|
end
|
115
|
-
|
184
|
+
|
185
|
+
private
|
186
|
+
def parse_options(opts)
|
187
|
+
unless opts.empty?
|
188
|
+
html = [""]
|
189
|
+
opts.each do |key, value|
|
190
|
+
final_value = value.is_a?(Array) ? value.join(" ") : value
|
191
|
+
html << "#{key}=\"#{final_value}\""
|
192
|
+
#return attrs.join
|
193
|
+
end
|
194
|
+
return html.join(" ")
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def is_uri?(path)
|
199
|
+
URI.parse(path).class == URI::HTTP
|
200
|
+
end
|
116
201
|
end
|
117
202
|
end
|
118
203
|
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'georgedrummond_sinatra_helpers.rb')
|
2
|
+
|
3
|
+
include GeorgeDrummond::Sinatra::Helpers
|
4
|
+
|
5
|
+
def url(url)
|
6
|
+
return File.join("/path", url)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe GeorgeDrummond::Sinatra::Helpers do
|
10
|
+
|
11
|
+
describe "mail_to" do
|
12
|
+
it "with only an email address provided" do
|
13
|
+
mail_to("georgedrummond@gmail.com").should == "<a href=\"mailto:georgedrummond@gmail.com\" class=\"mailto\">georgedrummond@gmail.com</a>"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "with an optional text field provided" do
|
17
|
+
mail_to("georgedrummond@gmail.com", "George Drummond").should == "<a href=\"mailto:georgedrummond@gmail.com\" class=\"mailto\">George Drummond</a>"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "wth an options hash" do
|
21
|
+
mail_to("georgedrummond@gmail.com", "George Drummond", :class => :email, :title => "How do you do").should == "<a href=\"mailto:georgedrummond@gmail.com\" class=\"email\" title=\"How do you do\">George Drummond</a>"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "gravatar_image" do
|
26
|
+
it "with no size specified" do
|
27
|
+
gravatar_image("georgedrummond@gmail.com").should == "<img src=\"http://www.gravatar.com/avatar/d278a12b969a495ab16fdd942e748fe5?s=50\" class=\"gravatar\" />"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "with a size specified" do
|
31
|
+
gravatar_image("georgedrummond@gmail.com", 150).should == "<img src=\"http://www.gravatar.com/avatar/d278a12b969a495ab16fdd942e748fe5?s=150\" class=\"gravatar\" />"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "with options" do
|
35
|
+
gravatar_image("georgedrummond@gmail.com", 150, :class => :icon).should == "<img src=\"http://www.gravatar.com/avatar/d278a12b969a495ab16fdd942e748fe5?s=150\" class=\"icon\" />"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
describe "link_to" do
|
41
|
+
it "with an internal link" do
|
42
|
+
link_to("Home", "/home").should == '<a href="/path/home">Home</a>'
|
43
|
+
end
|
44
|
+
|
45
|
+
it "with options" do
|
46
|
+
link_to("Home", "/home", :title => "Home Page").should == '<a href="/path/home" title="Home Page">Home</a>'
|
47
|
+
end
|
48
|
+
|
49
|
+
it "for an external URL" do
|
50
|
+
link_to("AccountsApp", "http://accountsapp.com", :title => "Online Invoicing Software").should == '<a href="http://accountsapp.com" title="Online Invoicing Software">AccountsApp</a>'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "image_tag" do
|
55
|
+
it "with a local image" do
|
56
|
+
image_tag("home.png").should == '<img src="/path/images/home.png" />'
|
57
|
+
end
|
58
|
+
|
59
|
+
it "with options" do
|
60
|
+
image_tag("home.png", :title => "home", :class => :icon).should == '<img src="/path/images/home.png" title="home" class="icon" />'
|
61
|
+
end
|
62
|
+
|
63
|
+
it "with an external image" do
|
64
|
+
image_tag("http://accountsapp.com/logo.png", :title => "Online Accounting Software").should == '<img src="http://accountsapp.com/logo.png" title="Online Accounting Software" />'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "stylesheet_link_tag" do
|
69
|
+
it "with a single stylesheet" do
|
70
|
+
stylesheet_link_tag(:app).should == "<link href=\"/path/css/app.css\" type=\"text/css\" rel=\"stylesheet\" />"
|
71
|
+
end
|
72
|
+
|
73
|
+
it "with an array of stylesheets" do
|
74
|
+
stylesheet_link_tag(:app, :header).should == "<link href=\"/path/css/app.css\" type=\"text/css\" rel=\"stylesheet\" />\n<link href=\"/path/css/header.css\" type=\"text/css\" rel=\"stylesheet\" />"
|
75
|
+
end
|
76
|
+
|
77
|
+
it "with an external stylesheet" do
|
78
|
+
stylesheet_link_tag(:app, "http://accountsapp.com/styles/common.css").should == "<link href=\"/path/css/app.css\" type=\"text/css\" rel=\"stylesheet\" />\n<link href=\"http://accountsapp.com/styles/common.css\" type=\"text/css\" rel=\"stylesheet\" />"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "javascript_include_tag" do
|
83
|
+
it "with a single js file" do
|
84
|
+
javascript_include_tag(:app).should == "<script type=\"text/javascript\" src=\"/path/js/app.js\"></script>"
|
85
|
+
end
|
86
|
+
|
87
|
+
it "with an array of js files" do
|
88
|
+
javascript_include_tag(:jquery, :app).should == "<script type=\"text/javascript\" src=\"/path/js/jquery.js\"></script>\n<script type=\"text/javascript\" src=\"/path/js/app.js\"></script>"
|
89
|
+
end
|
90
|
+
it "with an external js file" do
|
91
|
+
javascript_include_tag(:jquery, "http://accountsapp.com/js/app.js").should == "<script type=\"text/javascript\" src=\"/path/js/jquery.js\"></script>\n<script type=\"text/javascript\" src=\"http://accountsapp.com/js/app.js\"></script>"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: georgedrummond_sinatra_helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-10-
|
12
|
+
date: 2011-10-30 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: This is a collection of common helper methods that I use within my Sinatra
|
15
15
|
apps. They have a rails like feel and they mainly fill in for helpers you would
|
@@ -31,6 +31,7 @@ files:
|
|
31
31
|
- georgedrummond_sinatra_helpers.gemspec
|
32
32
|
- lib/georgedrummond_sinatra_helpers.rb
|
33
33
|
- lib/georgedrummond_sinatra_helpers/version.rb
|
34
|
+
- spec/sinatra_helpers_spec.rb
|
34
35
|
homepage: https://github.com/georgedrummond/georgedrummond_sinatra_helpers
|
35
36
|
licenses: []
|
36
37
|
post_install_message:
|
@@ -64,4 +65,5 @@ summary: This is a collection of common helper methods that I use within my Sina
|
|
64
65
|
apps. They have a rails like feel and they mainly fill in for helpers you would
|
65
66
|
find in Rails. They do not behave exactly like their rails counterparts so please
|
66
67
|
be careful to read the RDOC.
|
67
|
-
test_files:
|
68
|
+
test_files:
|
69
|
+
- spec/sinatra_helpers_spec.rb
|