sinatra-head 0.1.0 → 0.1.1
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 +6 -0
- data/VERSION +1 -1
- data/lib/sinatra/head.rb +9 -12
- data/lib/sinatra/head/tag_helpers.rb +9 -2
- data/sinatra-head.gemspec +74 -0
- data/spec/sinatra/javascripts_spec.rb +4 -9
- data/spec/sinatra/stylesheet_spec.rb +8 -3
- data/spec/sinatra/title_spec.rb +6 -9
- data/spec/support/dummy_app.rb +11 -0
- metadata +4 -5
- data/spec/title_spec.rb +0 -5
data/README.markdown
CHANGED
@@ -114,6 +114,12 @@ Like the _title_ setting, the _stylesheets_ setting begins life as an empty arra
|
|
114
114
|
stylesheets << 'specific.css'
|
115
115
|
end
|
116
116
|
|
117
|
+
If your stylesheet string contains a space, the second and any following words will be used for the _media_ attribute:
|
118
|
+
|
119
|
+
stylesheets << 'no_effects.css print braille'
|
120
|
+
# yields:
|
121
|
+
<link rel='stylesheet' href='/stylesheets/no_effects.css' media='print, braille' />
|
122
|
+
|
117
123
|
In your layout, you can call the `stylesheet_tag` helper for a single filename or URL you provide, or the `stylesheet_tags` helper which walks the array and creates a tag for each. (In FIFO or queue order, unlike _title._)
|
118
124
|
|
119
125
|
Currently nothing is done for nicer asset packaging, fingerprinting, compressing, etc. There's [Rack][10] [middleware][9] for some of it, and future iterations may include these features. If you'd really really like to see them, [create an issue][7] and ask for them.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/lib/sinatra/head.rb
CHANGED
@@ -6,18 +6,6 @@ require 'sinatra/head/tag_helpers'
|
|
6
6
|
module Sinatra
|
7
7
|
module Head
|
8
8
|
|
9
|
-
# # Exposes the 'title' setting so that it can be overwritten or appended to.
|
10
|
-
# # @see DataHelpers#title
|
11
|
-
# def title
|
12
|
-
# settings.title
|
13
|
-
# end
|
14
|
-
#
|
15
|
-
# # Exposes the 'stylesheets' setting so that it can be overwritten or appended to.
|
16
|
-
# # @see DataHelpers#stylesheets
|
17
|
-
# def stylesheets
|
18
|
-
# settings.stylesheets
|
19
|
-
# end
|
20
|
-
|
21
9
|
def self.registered(app)
|
22
10
|
app.helpers DataHelpers
|
23
11
|
app.helpers TagHelpers
|
@@ -35,5 +23,14 @@ module Sinatra
|
|
35
23
|
app.set :javascript_path, '/javascript'
|
36
24
|
end
|
37
25
|
end
|
26
|
+
|
27
|
+
def inherited(child)
|
28
|
+
super
|
29
|
+
# Copy our arrays, because otherwise changes on subclasses will go upwards to superclasses
|
30
|
+
child.set :title, title.clone
|
31
|
+
child.set :stylesheets, stylesheets.clone
|
32
|
+
child.set :javascripts, javascripts.clone
|
33
|
+
end
|
34
|
+
|
38
35
|
end
|
39
36
|
end
|
@@ -35,10 +35,17 @@ module Sinatra
|
|
35
35
|
|
36
36
|
# Spits out a <link rel='stylesheet'> element for the given stylesheet reference.
|
37
37
|
# Relative filenames will be expanded with the Sinatra assets path, if set.
|
38
|
+
# If the filename string contains multiple words (separated by spaces), all
|
39
|
+
# words after the first will be used for _media_ identifiers.
|
38
40
|
#
|
39
41
|
# @param [String] sheet
|
40
|
-
def stylesheet_tag(
|
41
|
-
|
42
|
+
def stylesheet_tag(reference)
|
43
|
+
sheet, *media = reference.split
|
44
|
+
if media.empty?
|
45
|
+
"<link rel='stylesheet' href='#{expand_stylesheet_path(sheet)}' />"
|
46
|
+
else
|
47
|
+
"<link rel='stylesheet' href='#{expand_stylesheet_path(sheet)}' media='#{media.join(', ')}' />"
|
48
|
+
end
|
42
49
|
end
|
43
50
|
|
44
51
|
# Spits out stylesheet tags for all declared stylesheets, one per line.
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{sinatra-head}
|
8
|
+
s.version = "0.1.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Stephen Eley"]
|
12
|
+
s.date = %q{2010-05-20}
|
13
|
+
s.description = %q{Sinatra::Head provides class methods and helpers for dynamically controlling the fields in your <HEAD> element that are usually preset in your layout: the page title, stylesheet and javascript assets, etc. Asset lists are inherited throughout superclasses, subclasses, and within action methods, and basic asset path management is supported.}
|
14
|
+
s.email = %q{sfeley@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.markdown",
|
17
|
+
"README.markdown"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE.markdown",
|
23
|
+
"README.markdown",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"lib/sinatra/head.rb",
|
27
|
+
"lib/sinatra/head/data_helpers.rb",
|
28
|
+
"lib/sinatra/head/tag_helpers.rb",
|
29
|
+
"sinatra-head.gemspec",
|
30
|
+
"spec/sinatra/head_spec.rb",
|
31
|
+
"spec/sinatra/javascripts_spec.rb",
|
32
|
+
"spec/sinatra/stylesheet_spec.rb",
|
33
|
+
"spec/sinatra/title_spec.rb",
|
34
|
+
"spec/spec.opts",
|
35
|
+
"spec/spec_helper.rb",
|
36
|
+
"spec/support/dummy_app.rb"
|
37
|
+
]
|
38
|
+
s.homepage = %q{http://github.com/SFEley/sinatra-head}
|
39
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
40
|
+
s.require_paths = ["lib"]
|
41
|
+
s.rubygems_version = %q{1.3.7}
|
42
|
+
s.summary = %q{A Sinatra extension that gets inside your <HEAD>.}
|
43
|
+
s.test_files = [
|
44
|
+
"spec/sinatra/head_spec.rb",
|
45
|
+
"spec/sinatra/javascripts_spec.rb",
|
46
|
+
"spec/sinatra/stylesheet_spec.rb",
|
47
|
+
"spec/sinatra/title_spec.rb",
|
48
|
+
"spec/spec_helper.rb",
|
49
|
+
"spec/support/dummy_app.rb"
|
50
|
+
]
|
51
|
+
|
52
|
+
if s.respond_to? :specification_version then
|
53
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
54
|
+
s.specification_version = 3
|
55
|
+
|
56
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
57
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
58
|
+
s.add_development_dependency(%q<yard>, [">= 0"])
|
59
|
+
s.add_development_dependency(%q<haml>, [">= 3"])
|
60
|
+
s.add_development_dependency(%q<capybara>, [">= 0.3.8"])
|
61
|
+
else
|
62
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
63
|
+
s.add_dependency(%q<yard>, [">= 0"])
|
64
|
+
s.add_dependency(%q<haml>, [">= 3"])
|
65
|
+
s.add_dependency(%q<capybara>, [">= 0.3.8"])
|
66
|
+
end
|
67
|
+
else
|
68
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
69
|
+
s.add_dependency(%q<yard>, [">= 0"])
|
70
|
+
s.add_dependency(%q<haml>, [">= 3"])
|
71
|
+
s.add_dependency(%q<capybara>, [">= 0.3.8"])
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
@@ -4,15 +4,6 @@ describe Sinatra::Head, "javascripts" do
|
|
4
4
|
include DummyFixture
|
5
5
|
|
6
6
|
|
7
|
-
class DummyFixture::DummyApp
|
8
|
-
javascripts << 'main.js'
|
9
|
-
end
|
10
|
-
|
11
|
-
class DummyFixture::DummyChild
|
12
|
-
javascripts << 'secondary.js'
|
13
|
-
set :javascript_path, '/things/javascript'
|
14
|
-
end
|
15
|
-
|
16
7
|
before(:each) do
|
17
8
|
app DummyFixture::DummyChild
|
18
9
|
@instance = app.new
|
@@ -31,6 +22,10 @@ describe Sinatra::Head, "javascripts" do
|
|
31
22
|
@instance.javascripts.should == ['main.js', 'secondary.js', 'specific.js']
|
32
23
|
end
|
33
24
|
|
25
|
+
it "leaves its superclass's value alone" do
|
26
|
+
instance = DummyFixture::DummyApp.new
|
27
|
+
instance.javascripts.should == ['main.js']
|
28
|
+
end
|
34
29
|
|
35
30
|
it "expands the assets path for relative filenames" do
|
36
31
|
@instance.expand_javascript_path(@instance.javascripts.first).should == '/things/javascript/main.js'
|
@@ -5,12 +5,9 @@ describe Sinatra::Head, "stylesheets" do
|
|
5
5
|
|
6
6
|
|
7
7
|
class DummyFixture::DummyApp
|
8
|
-
stylesheets << 'main.css'
|
9
8
|
end
|
10
9
|
|
11
10
|
class DummyFixture::DummyChild
|
12
|
-
stylesheets << 'secondary.css'
|
13
|
-
set :stylesheet_path, '/stuff/stylesheets'
|
14
11
|
end
|
15
12
|
|
16
13
|
before(:each) do
|
@@ -31,6 +28,10 @@ describe Sinatra::Head, "stylesheets" do
|
|
31
28
|
@instance.stylesheets.should == ['main.css', 'secondary.css', 'specific.css']
|
32
29
|
end
|
33
30
|
|
31
|
+
it "leaves its superclass's value alone" do
|
32
|
+
instance = DummyFixture::DummyApp.new
|
33
|
+
instance.stylesheets.should == ['main.css']
|
34
|
+
end
|
34
35
|
|
35
36
|
it "expands the assets path for relative filenames" do
|
36
37
|
@instance.expand_stylesheet_path(@instance.stylesheets.first).should == '/stuff/stylesheets/main.css'
|
@@ -44,6 +45,10 @@ describe Sinatra::Head, "stylesheets" do
|
|
44
45
|
it "knows how to make a tag" do
|
45
46
|
@instance.stylesheet_tag(@instance.stylesheets.first).should == "<link rel='stylesheet' href='/stuff/stylesheets/main.css' />"
|
46
47
|
end
|
48
|
+
|
49
|
+
it "can make a stylesheet tag just for a specific medium" do
|
50
|
+
@instance.stylesheet_tag('print.css print braille').should == "<link rel='stylesheet' href='/stuff/stylesheets/print.css' media='print, braille' />"
|
51
|
+
end
|
47
52
|
|
48
53
|
it "knows how to make all the tags" do
|
49
54
|
@instance.stylesheets << 'http://yahoo.com/yahoo_style.css'
|
data/spec/sinatra/title_spec.rb
CHANGED
@@ -3,15 +3,7 @@ require File.dirname(__FILE__) + '/../spec_helper'
|
|
3
3
|
describe Sinatra::Head, "titles" do
|
4
4
|
include DummyFixture
|
5
5
|
|
6
|
-
|
7
|
-
class DummyFixture::DummyApp
|
8
|
-
title << 'High Level'
|
9
|
-
end
|
10
|
-
|
11
|
-
class DummyFixture::DummyChild
|
12
|
-
title << 'Mid-Level'
|
13
|
-
end
|
14
|
-
|
6
|
+
|
15
7
|
before(:each) do
|
16
8
|
@instance = app.new
|
17
9
|
end
|
@@ -34,6 +26,11 @@ describe Sinatra::Head, "titles" do
|
|
34
26
|
@instance.title.should == ['Kaboom!']
|
35
27
|
end
|
36
28
|
|
29
|
+
it "leaves its superclass's value alone" do
|
30
|
+
instance = DummyFixture::DummyApp.new
|
31
|
+
instance.title.should == ['High Level']
|
32
|
+
end
|
33
|
+
|
37
34
|
it "returns itself as a string" do
|
38
35
|
@instance.title << 'Low Level'
|
39
36
|
@instance.title_string.should == 'Low Level | Mid-Level | High Level'
|
data/spec/support/dummy_app.rb
CHANGED
@@ -8,6 +8,9 @@ module DummyFixture
|
|
8
8
|
enable :inline_templates
|
9
9
|
|
10
10
|
register Sinatra::Head
|
11
|
+
title << 'High Level'
|
12
|
+
stylesheets << 'main.css'
|
13
|
+
javascripts << 'main.js'
|
11
14
|
|
12
15
|
get "/" do
|
13
16
|
haml :index
|
@@ -15,6 +18,14 @@ module DummyFixture
|
|
15
18
|
end
|
16
19
|
|
17
20
|
class DummyChild < DummyApp
|
21
|
+
title << 'Mid-Level'
|
22
|
+
|
23
|
+
stylesheets << 'secondary.css'
|
24
|
+
set :stylesheet_path, '/stuff/stylesheets'
|
25
|
+
|
26
|
+
javascripts << 'secondary.js'
|
27
|
+
set :javascript_path, '/things/javascript'
|
28
|
+
|
18
29
|
end
|
19
30
|
|
20
31
|
def app(klass=nil)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-head
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Stephen Eley
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- lib/sinatra/head.rb
|
98
98
|
- lib/sinatra/head/data_helpers.rb
|
99
99
|
- lib/sinatra/head/tag_helpers.rb
|
100
|
+
- sinatra-head.gemspec
|
100
101
|
- spec/sinatra/head_spec.rb
|
101
102
|
- spec/sinatra/javascripts_spec.rb
|
102
103
|
- spec/sinatra/stylesheet_spec.rb
|
@@ -104,7 +105,6 @@ files:
|
|
104
105
|
- spec/spec.opts
|
105
106
|
- spec/spec_helper.rb
|
106
107
|
- spec/support/dummy_app.rb
|
107
|
-
- spec/title_spec.rb
|
108
108
|
has_rdoc: true
|
109
109
|
homepage: http://github.com/SFEley/sinatra-head
|
110
110
|
licenses: []
|
@@ -146,4 +146,3 @@ test_files:
|
|
146
146
|
- spec/sinatra/title_spec.rb
|
147
147
|
- spec/spec_helper.rb
|
148
148
|
- spec/support/dummy_app.rb
|
149
|
-
- spec/title_spec.rb
|