wbzyl-sinatra-static-assets 0.0.9 → 0.0.10
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/README.markdown +65 -30
- data/VERSION.yml +1 -1
- data/examples/summer/summer.rb +5 -0
- data/examples/summer/views/index.erb +3 -0
- data/examples/summer/views/topr.erb +5 -0
- data/lib/sinatra/static_assets.rb +5 -18
- metadata +2 -1
data/README.markdown
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
|
3
3
|
Gem *sinatra-static-assets* implements the following helpers methods:
|
4
4
|
|
5
|
+
* `image_tag`
|
5
6
|
* `stylesheet_link_tag`
|
6
7
|
* `javascript_script_tag`
|
7
|
-
* `image_tag`
|
8
8
|
* `link_tag`
|
9
9
|
|
10
|
-
To install it, run
|
10
|
+
To install it, run:
|
11
11
|
|
12
12
|
sudo gem install wbzyl-sinatra-static-assets -s http://gems.github.com
|
13
13
|
|
14
|
-
All methods are simple wrappers around the `url_for` method
|
15
|
-
from the [sinatra-url-for](http://github.com/emk/sinatra-url-for/).
|
14
|
+
All these methods are simple wrappers around the `url_for` method
|
15
|
+
from the [sinatra-url-for](http://github.com/emk/sinatra-url-for/) gem.
|
16
16
|
|
17
17
|
## When will you need it?
|
18
18
|
|
@@ -21,15 +21,21 @@ Whenever you use the
|
|
21
21
|
or use `Rack::URLMap` to dispatch an application to
|
22
22
|
sub URI.
|
23
23
|
|
24
|
-
Suppose that we already have a virtual host `hitch.local`
|
25
|
-
and two Sinatra
|
24
|
+
Example: Suppose that we already have a virtual host `hitch.local`
|
25
|
+
and two Sinatra applications that live in
|
26
26
|
`/home/me/www/summer` and `/home/me/www/winter`
|
27
27
|
directories, respectively.
|
28
|
-
We want our Sinatra applications to be accessible from
|
29
|
-
|
28
|
+
We want our Sinatra applications to be accessible from
|
29
|
+
the following sub URI:
|
30
|
+
|
31
|
+
http://hitch.local/summer
|
32
|
+
|
33
|
+
and
|
34
|
+
|
35
|
+
http://hitch.local/winter
|
30
36
|
|
31
37
|
To configure Apache2 and Passenger to serve our applications
|
32
|
-
we create a new configuration file with the content:
|
38
|
+
we need to create a new configuration file with the following content:
|
33
39
|
|
34
40
|
<VirtualHost *:80>
|
35
41
|
ServerName hitch.local
|
@@ -39,52 +45,55 @@ we create a new configuration file with the content:
|
|
39
45
|
RackBaseURI /winter
|
40
46
|
</VirtualHost>
|
41
47
|
|
42
|
-
and link the applications directories in `/srv/www/hitch.local`:
|
48
|
+
and a link to the applications directories in `/srv/www/hitch.local`:
|
43
49
|
|
44
50
|
ln -s /home/me/www/summer/public /srv/www/hitch.local/summer
|
45
51
|
ln -s /home/me/www/winter/public /srv/www/hitch.local/winter
|
46
52
|
|
47
|
-
After restarting
|
48
|
-
|
53
|
+
After restarting an Apache2 server and visiting, for example, the first
|
54
|
+
application at `http://hitch.local/summer` we see that links to
|
49
55
|
images, stylesheets and javascripts are broken.
|
50
56
|
|
51
|
-
The hitch here is that in Sinatra
|
57
|
+
The hitch here is that in Sinatra applications we usually refer to
|
52
58
|
images/stylesheets/javascripts with absolute URI:
|
53
59
|
|
54
60
|
/images/tatry1.jpg /stylesheets/app.css /javascripts/app.js
|
55
61
|
|
56
62
|
That setup **works** whenever we are running applications locally.
|
57
|
-
The absolute URI above tells browser to
|
63
|
+
The absolute URI above tells a browser to request images
|
58
64
|
(stylesheets and javascripts) from:
|
59
65
|
|
60
66
|
http://localhost:4567/images/tatry1.jpg
|
61
67
|
|
62
|
-
which in turn
|
68
|
+
which in turn, tells a server to send a file:
|
63
69
|
|
64
70
|
/home/me/www/summer/public/images/tatry1.jpg
|
65
71
|
|
66
|
-
|
67
|
-
|
72
|
+
The `public` directory is the default directory where static files
|
73
|
+
should be served from.
|
74
|
+
So, the `/images/tatry1.jpg` picture will be there and will be served
|
75
|
+
unless we had changed that default directory.
|
68
76
|
|
69
|
-
But these absolute URIs do not work
|
70
|
-
the *summer* application is dispatched to sub URI.
|
71
|
-
|
77
|
+
But these absolute URIs do not work when, for example,
|
78
|
+
the *summer* application is dispatched to `/summer` sub URI.
|
79
|
+
As a result the images are at:
|
72
80
|
|
73
81
|
http://hitch.local/summer/images/tatry1.jpg
|
74
82
|
|
75
|
-
but we request
|
83
|
+
but we request them from:
|
76
84
|
|
77
85
|
http://hitch.local/images/tatry1.jpg
|
78
86
|
|
79
|
-
And this **does not work**
|
87
|
+
And this **does not work** because there is no application
|
80
88
|
dispatched to *images* sub URI.
|
81
89
|
|
82
|
-
The recommended way to
|
83
|
-
|
84
|
-
|
90
|
+
The recommended way to deal with an absolute URI
|
91
|
+
is to use a helper method that automatically converts
|
92
|
+
`/images/tatry1.jpg` to `/summer/images/tatry1.jpg`
|
93
|
+
for application dispatched to `/summer` sub URI.
|
85
94
|
|
86
|
-
In the above example you
|
87
|
-
and replace it with
|
95
|
+
In the above example you can simply remove the `<img>`
|
96
|
+
HTML tag and replace it with a Ruby inline code like this:
|
88
97
|
|
89
98
|
<%= image_tag("/images/tatry1.jpg", :alt => "Błyszcz, 2159 m") %>
|
90
99
|
|
@@ -93,15 +102,41 @@ deployments](http://www.modrails.com/documentation/Users%20guide%20Apache.html#s
|
|
93
102
|
|
94
103
|
## Usage examples
|
95
104
|
|
96
|
-
|
105
|
+
In HTML `<link>` and `<img>` tags have no end tag.
|
106
|
+
In XHTML, on the contrary, these tags must be properly closed.
|
107
|
+
|
108
|
+
We can choose the appropriate behaviour with *closed* option:
|
109
|
+
|
110
|
+
image_tag "/images/tatry1.jpg", :alt => "Błyszcz, 2159 m", :closed => true
|
111
|
+
|
112
|
+
The default value of *closed* option is `false`.
|
113
|
+
|
114
|
+
stylesheet_link_tag "/stylesheets/screen.css", "/stylesheets/summer.css", :media => "projection"
|
115
|
+
javascript_script_tag "/javascripts/jquery.js", "/javascripts/summer.js", :charset => "iso-8859-2"
|
116
|
+
link_to "Tatry Mountains Rescue Team", "/topr"
|
117
|
+
|
118
|
+
In order to use include the following in a Sinatra application:
|
119
|
+
|
120
|
+
gem 'wbzyl-sinatra-static-assets'
|
121
|
+
require 'sinatra/static_assets'
|
122
|
+
|
123
|
+
Or, if subclassing `Sinatra::Base`, include helpers manually:
|
97
124
|
|
98
|
-
require 'rubygems'
|
99
125
|
gem 'wbzyl-sinatra-static-assets'
|
100
126
|
require 'sinatra/static_assets'
|
127
|
+
|
128
|
+
class Summer < Sinatra::Base
|
129
|
+
helpers Sinatra::StaticAssets
|
130
|
+
# ...
|
131
|
+
end
|
101
132
|
|
102
133
|
|
103
134
|
## Miscellaneous stuff
|
104
135
|
|
105
|
-
|
136
|
+
1. The `examples` directory contains *summer* and *winter* applications.
|
137
|
+
|
138
|
+
2. In order to create a virual host add the following to */etc/hosts/*:
|
106
139
|
|
107
140
|
127.0.0.1 localhost.localdomain localhost hitch.local
|
141
|
+
|
142
|
+
3. TODO: write tests
|
data/VERSION.yml
CHANGED
data/examples/summer/summer.rb
CHANGED
@@ -6,34 +6,21 @@ require 'sinatra/url_for'
|
|
6
6
|
|
7
7
|
module Sinatra
|
8
8
|
module StaticAssets
|
9
|
+
# In HTML <link> and <img> tags have no end tag.
|
10
|
+
# In XHTML, on the contrary, these tags must be properly closed.
|
9
11
|
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
# option: doctype => html -> closed == false
|
13
|
-
# option: doctype => xhtml -> closed == true
|
14
|
-
#
|
15
|
-
# In HTML the <img> tag has no end tag:
|
16
|
-
#
|
17
|
-
# image_tag "/images/foo.png", :alt => "Foo itself"
|
18
|
-
#
|
19
|
-
# In XHTML the <img /> tag must be properly closed:
|
12
|
+
# We can choose the appropriate behaviour with +closed+ option:
|
20
13
|
#
|
21
14
|
# image_tag "/images/foo.png", :alt => "Foo itself", :closed => true
|
22
15
|
#
|
16
|
+
# The default value of +closed+ option is +false+.
|
17
|
+
#
|
23
18
|
def image_tag(source, options = {})
|
24
19
|
closed = options.delete(:closed)
|
25
20
|
options[:src] = url_for(source)
|
26
21
|
tag("img", options, closed)
|
27
22
|
end
|
28
23
|
|
29
|
-
# In HTML the <link> tag has no end tag:
|
30
|
-
#
|
31
|
-
# stylesheet_link_tag "/stylesheets/screen.css", "/stylesheets/print.css"
|
32
|
-
#
|
33
|
-
# In XHTML the <link> tag must be properly closed:
|
34
|
-
#
|
35
|
-
# stylesheet_link_tag "/stylesheets/screen.css", :closed => true
|
36
|
-
#
|
37
24
|
def stylesheet_link_tag(*sources)
|
38
25
|
list, options = extract_options(sources)
|
39
26
|
closed = options.delete(:closed)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wbzyl-sinatra-static-assets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wlodek Bzyl
|
@@ -92,6 +92,7 @@ files:
|
|
92
92
|
- examples/summer/tmp/always_restart.txt
|
93
93
|
- examples/summer/views/index.erb
|
94
94
|
- examples/summer/views/layout.erb
|
95
|
+
- examples/summer/views/topr.erb
|
95
96
|
- examples/winter/app2.rb
|
96
97
|
- examples/winter/config.ru
|
97
98
|
- examples/winter/public/images/tatry2.jpg
|