sinatra_more 0.0.14 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +5 -1
- data/TODO +4 -4
- data/VERSION +1 -1
- data/lib/sinatra_more/markup_plugin/asset_tag_helpers.rb +34 -13
- data/lib/sinatra_more/markup_plugin/output_helpers.rb +4 -1
- data/lib/sinatra_more/markup_plugin/tag_helpers.rb +2 -1
- data/lib/sinatra_more/render_plugin/render_helpers.rb +4 -2
- data/lib/sinatra_more/warden_plugin/warden_helpers.rb +1 -1
- data/lib/sinatra_more/warden_plugin.rb +2 -0
- data/sinatra_more.gemspec +31 -5
- data/test/fixtures/markup_app/app.rb +47 -0
- data/test/fixtures/markup_app/views/capture_concat.erb +14 -0
- data/test/fixtures/markup_app/views/capture_concat.haml +13 -0
- data/test/fixtures/markup_app/views/content_tag.erb +11 -0
- data/test/fixtures/markup_app/views/content_tag.haml +9 -0
- data/test/fixtures/markup_app/views/link_to.erb +5 -0
- data/test/fixtures/markup_app/views/link_to.haml +4 -0
- data/test/fixtures/render_app/app.rb +36 -3
- data/test/fixtures/render_app/views/{bar → erb}/test.erb +0 -0
- data/test/fixtures/render_app/views/{foo → haml}/test.haml +0 -0
- data/test/fixtures/render_app/views/template/_user.haml +1 -0
- data/test/fixtures/render_app/views/template/haml_template.haml +1 -0
- data/test/fixtures/render_app/views/template/some_template.haml +2 -0
- data/test/fixtures/warden_app/app.rb +30 -1
- data/test/fixtures/warden_app/views/dashboard.haml +6 -0
- data/test/helper.rb +16 -2
- data/test/markup_plugin/test_asset_tag_helpers.rb +89 -0
- data/test/markup_plugin/test_form_builder.rb +5 -0
- data/test/markup_plugin/test_form_helpers.rb +5 -0
- data/test/markup_plugin/test_format_helpers.rb +41 -0
- data/test/markup_plugin/test_output_helpers.rb +44 -0
- data/test/markup_plugin/test_tag_helpers.rb +52 -0
- data/test/test_markup_plugin.rb +15 -0
- data/test/test_render_plugin.rb +39 -3
- data/test/test_warden_plugin.rb +87 -0
- metadata +30 -4
data/README.rdoc
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
== Introduction
|
4
4
|
|
5
|
-
|
5
|
+
Note: This library is experimental and may not work 100% yet. This will be removed once more testing has been done.
|
6
6
|
|
7
7
|
This will be a plugin which expand sinatra's capabilities in many ways.
|
8
8
|
Note that certain template specific helpers are known to work with haml, erb, and erubis
|
@@ -273,6 +273,10 @@ Thanks to keldredd for the sinatra-helpers code that helped me to create erb cap
|
|
273
273
|
* Nathan Esquenazi - Project creator and code maintainer
|
274
274
|
* Arthur Chiu - Forming the idea and various code contributions
|
275
275
|
|
276
|
+
== Known Issues
|
277
|
+
|
278
|
+
* tag helper methods accepting blocks work quite unreliably in erb. Work must be done to improve this.
|
279
|
+
|
276
280
|
== Note on Patches/Pull Requests
|
277
281
|
|
278
282
|
* Fork the project.
|
data/TODO
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
= UNFINISHED
|
2
2
|
|
3
|
-
* fix content_block_tag to eliminate need for concat option
|
4
|
-
* image_tag should start in images_path (or /images)
|
5
|
-
* I have got to add tests, basically create dummy sinatra applications and use Webrat
|
6
3
|
* Become total warden solution (basically just require warden gem installed, do everything else)
|
7
4
|
* Make warden password strategy support a callback which explains what to do with username, password
|
8
5
|
* WardenPlugin.authenticate_callback { |username, password| User.authenticate(username, password) }
|
@@ -11,4 +8,7 @@
|
|
11
8
|
= COMPLETED
|
12
9
|
|
13
10
|
* Pull from sinatra-helpers and make erb templates work (and credit keldredd)
|
14
|
-
- http://github.com/kelredd/sinatra-helpers/tree/master/lib/sinatra_helpers/erb/
|
11
|
+
- http://github.com/kelredd/sinatra-helpers/tree/master/lib/sinatra_helpers/erb/
|
12
|
+
* fix content_block_tag to eliminate need for concat option
|
13
|
+
* image_tag should start in images_path (or /images)
|
14
|
+
* I have got to add tests, basically create dummy sinatra applications and use Webrat
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module SinatraMore
|
2
2
|
module AssetTagHelpers
|
3
|
-
|
3
|
+
|
4
4
|
# Creates a div to display the flash of given type if it exists
|
5
5
|
# flash_tag(:notice, :class => 'flash', :id => 'flash-notice')
|
6
6
|
def flash_tag(kind, options={})
|
@@ -9,7 +9,7 @@ module SinatraMore
|
|
9
9
|
options.reverse_merge!(:class => 'flash')
|
10
10
|
content_tag(:div, flash_text, options)
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
# Creates a link element with given name, url and options
|
14
14
|
# link_to 'click me', '/dashboard', :class => 'linky'
|
15
15
|
# link_to('/dashboard', :class => 'blocky') do ... end
|
@@ -19,7 +19,8 @@ module SinatraMore
|
|
19
19
|
url, options = (args[0] || 'javascript:void(0);'), (args[1] || {})
|
20
20
|
options.reverse_merge!(:href => url)
|
21
21
|
link_content = capture_html(&block)
|
22
|
-
|
22
|
+
result_link = content_tag(:a, link_content, options)
|
23
|
+
block_is_template?(block) ? concat_content(result_link) : result_link
|
23
24
|
else
|
24
25
|
name, url, options = args.first, (args[1] || 'javascript:void(0);'), (args[2] || {})
|
25
26
|
options.reverse_merge!(:href => url)
|
@@ -30,7 +31,7 @@ module SinatraMore
|
|
30
31
|
# Creates an image element with given url and options
|
31
32
|
# image_tag('icons/avatar.png')
|
32
33
|
def image_tag(url, options={})
|
33
|
-
options.reverse_merge!(:src => url)
|
34
|
+
options.reverse_merge!(:src => image_path(url))
|
34
35
|
tag(:img, options)
|
35
36
|
end
|
36
37
|
|
@@ -41,24 +42,44 @@ module SinatraMore
|
|
41
42
|
sources.collect { |sheet| stylesheet_tag(sheet, options) }.join("\n")
|
42
43
|
end
|
43
44
|
|
44
|
-
# stylesheet_tag('style', :media => 'screen')
|
45
|
-
def stylesheet_tag(source, options={})
|
46
|
-
rel_path = "/stylesheets/#{source}.css?#{Time.now.to_i}"
|
47
|
-
options = options.dup.reverse_merge!(:href => rel_path, :media => 'screen', :rel => 'stylesheet', :type => 'text/css')
|
48
|
-
tag(:link, options)
|
49
|
-
end
|
50
|
-
|
51
45
|
# javascript_include_tag 'application', 'special'
|
52
46
|
def javascript_include_tag(*sources)
|
53
47
|
options = sources.extract_options!.symbolize_keys
|
54
48
|
sources.collect { |script| javascript_tag(script, options) }.join("\n")
|
55
49
|
end
|
56
50
|
|
51
|
+
protected
|
52
|
+
|
53
|
+
# stylesheet_tag('style', :media => 'screen')
|
54
|
+
def stylesheet_tag(source, options={})
|
55
|
+
options = options.dup.reverse_merge!(:href => stylesheet_path(source), :media => 'screen', :rel => 'stylesheet', :type => 'text/css')
|
56
|
+
tag(:link, options)
|
57
|
+
end
|
58
|
+
|
57
59
|
# javascript_tag 'application', :src => '/javascripts/base/application.js'
|
58
60
|
def javascript_tag(source, options={})
|
59
|
-
|
60
|
-
options = options.dup.reverse_merge!(:content => "", :src => rel_path, :type => 'text/javascript')
|
61
|
+
options = options.dup.reverse_merge!(:src => javascript_path(source), :type => 'text/javascript', :content => "")
|
61
62
|
tag(:script, options)
|
62
63
|
end
|
64
|
+
|
65
|
+
# Returns the path to the image, either relative or absolute
|
66
|
+
def image_path(src)
|
67
|
+
src.gsub!(/\s/, '')
|
68
|
+
src =~ %r{^\s*/} ? src : File.join('/images', src)
|
69
|
+
end
|
70
|
+
|
71
|
+
def javascript_path(source)
|
72
|
+
return source if source =~ /^http/
|
73
|
+
result_path = "/javascripts/#{File.basename(source, '.js')}.js"
|
74
|
+
stamp = File.exist?(result_path) ? File.mtime(result_path) : Time.now.to_i
|
75
|
+
"#{result_path}?#{stamp}"
|
76
|
+
end
|
77
|
+
|
78
|
+
def stylesheet_path(source)
|
79
|
+
return source if source =~ /^http/
|
80
|
+
result_path = "/stylesheets/#{File.basename(source, '.css')}.css"
|
81
|
+
stamp = File.exist?(result_path) ? File.mtime(result_path) : Time.now.to_i
|
82
|
+
"#{result_path}?#{stamp}"
|
83
|
+
end
|
63
84
|
end
|
64
85
|
end
|
@@ -6,7 +6,8 @@ module SinatraMore
|
|
6
6
|
if self.respond_to?(:is_haml?) && is_haml?
|
7
7
|
block_is_haml?(block) ? capture_haml(*args, &block) : block.call
|
8
8
|
else
|
9
|
-
capture_erb(*args, &block)
|
9
|
+
result_text = capture_erb(*args, &block)
|
10
|
+
result_text.present? ? result_text : block.call
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
@@ -26,6 +27,8 @@ module SinatraMore
|
|
26
27
|
def block_is_template?(block)
|
27
28
|
block && (block_is_erb?(block) || (self.respond_to?(:block_is_haml?) && block_is_haml?(block)))
|
28
29
|
end
|
30
|
+
|
31
|
+
protected
|
29
32
|
|
30
33
|
# Used to capture the html from a block of erb code
|
31
34
|
# capture_erb(&block) => '...html...'
|
@@ -10,7 +10,7 @@ module SinatraMore
|
|
10
10
|
# Creates an html tag with given name, content and options
|
11
11
|
# content_tag(:p, "hello", :class => 'light')
|
12
12
|
# content_tag(:p, :class => 'dark') do ... end
|
13
|
-
# parameters: content_tag(name, content=nil, options={})
|
13
|
+
# parameters: content_tag(name, content=nil, options={}, &block)
|
14
14
|
def content_tag(*args, &block)
|
15
15
|
name = args.first
|
16
16
|
options = args.extract_options!
|
@@ -25,6 +25,7 @@ module SinatraMore
|
|
25
25
|
# tag(:p, :content => "hello", :class => 'large')
|
26
26
|
def tag(name, options={})
|
27
27
|
content = options.delete(:content)
|
28
|
+
options = options.sort { |a, b| a.to_s <=> b.to_s }
|
28
29
|
html_attrs = options.collect { |a, v| v.blank? ? nil : "#{a}=\"#{v}\"" }.compact.join(" ")
|
29
30
|
base_tag = (html_attrs.present? ? "<#{name} #{html_attrs}" : "<#{name}")
|
30
31
|
base_tag << (content ? ">#{content}</#{name}>" : " />")
|
@@ -27,14 +27,16 @@ module SinatraMore
|
|
27
27
|
options = args.extract_options!
|
28
28
|
options.merge!(:layout => false)
|
29
29
|
path = template.to_s.split(File::SEPARATOR)
|
30
|
-
|
30
|
+
object_name = path[-1].to_sym
|
31
31
|
path[-1] = "_#{path[-1]}"
|
32
32
|
template_path = File.join(path)
|
33
33
|
if collection = options.delete(:collection)
|
34
34
|
collection.inject([]) do |buffer, member|
|
35
|
-
collection_options = options.merge(:layout => false, :locals => {
|
35
|
+
collection_options = options.merge(:layout => false, :locals => { object_name => member })
|
36
36
|
buffer << render_template(template_path, collection_options)
|
37
37
|
end.join("\n")
|
38
|
+
elsif object_record = options.delete(:object)
|
39
|
+
render_template(template_path, options.merge(:locals => { object_name => object_record }))
|
38
40
|
else
|
39
41
|
render_template(template_path, options)
|
40
42
|
end
|
@@ -47,7 +47,7 @@ module SinatraMore
|
|
47
47
|
# Forces a user to return to a fail path unless they are authorized
|
48
48
|
# Used to require a user be authenticated before routing to an action
|
49
49
|
def must_be_authorized!(failure_path=nil)
|
50
|
-
|
50
|
+
redirect(failure_path ? failure_path : '/') unless authenticated?
|
51
51
|
end
|
52
52
|
|
53
53
|
# Returns the raw warden authentication handler
|
@@ -1,3 +1,4 @@
|
|
1
|
+
load File.dirname(__FILE__) + '/markup_plugin/output_helpers.rb'
|
1
2
|
Dir[File.dirname(__FILE__) + '/warden_plugin/**/*.rb'].each {|file| load file }
|
2
3
|
|
3
4
|
module SinatraMore
|
@@ -7,6 +8,7 @@ module SinatraMore
|
|
7
8
|
manager.default_strategies :password
|
8
9
|
manager.failure_app = app
|
9
10
|
end
|
11
|
+
app.helpers SinatraMore::OutputHelpers
|
10
12
|
app.helpers SinatraMore::WardenHelpers
|
11
13
|
|
12
14
|
# TODO Improve serializing methods
|
data/sinatra_more.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sinatra_more}
|
8
|
-
s.version = "0.0
|
8
|
+
s.version = "0.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Nathan Esquenazi"]
|
12
|
-
s.date = %q{2009-10-
|
12
|
+
s.date = %q{2009-10-26}
|
13
13
|
s.description = %q{Expands sinatra with standard helpers and tools to allow for complex applications}
|
14
14
|
s.email = %q{nesquena@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -38,11 +38,29 @@ Gem::Specification.new do |s|
|
|
38
38
|
"lib/sinatra_more/warden_plugin.rb",
|
39
39
|
"lib/sinatra_more/warden_plugin/warden_helpers.rb",
|
40
40
|
"sinatra_more.gemspec",
|
41
|
+
"test/fixtures/markup_app/app.rb",
|
42
|
+
"test/fixtures/markup_app/views/capture_concat.erb",
|
43
|
+
"test/fixtures/markup_app/views/capture_concat.haml",
|
44
|
+
"test/fixtures/markup_app/views/content_tag.erb",
|
45
|
+
"test/fixtures/markup_app/views/content_tag.haml",
|
46
|
+
"test/fixtures/markup_app/views/link_to.erb",
|
47
|
+
"test/fixtures/markup_app/views/link_to.haml",
|
41
48
|
"test/fixtures/render_app/app.rb",
|
42
|
-
"test/fixtures/render_app/views/
|
43
|
-
"test/fixtures/render_app/views/
|
49
|
+
"test/fixtures/render_app/views/erb/test.erb",
|
50
|
+
"test/fixtures/render_app/views/haml/test.haml",
|
51
|
+
"test/fixtures/render_app/views/template/_user.haml",
|
52
|
+
"test/fixtures/render_app/views/template/haml_template.haml",
|
53
|
+
"test/fixtures/render_app/views/template/some_template.haml",
|
44
54
|
"test/fixtures/warden_app/app.rb",
|
55
|
+
"test/fixtures/warden_app/views/dashboard.haml",
|
45
56
|
"test/helper.rb",
|
57
|
+
"test/markup_plugin/test_asset_tag_helpers.rb",
|
58
|
+
"test/markup_plugin/test_form_builder.rb",
|
59
|
+
"test/markup_plugin/test_form_helpers.rb",
|
60
|
+
"test/markup_plugin/test_format_helpers.rb",
|
61
|
+
"test/markup_plugin/test_output_helpers.rb",
|
62
|
+
"test/markup_plugin/test_tag_helpers.rb",
|
63
|
+
"test/test_markup_plugin.rb",
|
46
64
|
"test/test_render_plugin.rb",
|
47
65
|
"test/test_warden_plugin.rb"
|
48
66
|
]
|
@@ -52,9 +70,17 @@ Gem::Specification.new do |s|
|
|
52
70
|
s.rubygems_version = %q{1.3.5}
|
53
71
|
s.summary = %q{Expands sinatra to allow for complex applications}
|
54
72
|
s.test_files = [
|
55
|
-
"test/fixtures/
|
73
|
+
"test/fixtures/markup_app/app.rb",
|
74
|
+
"test/fixtures/render_app/app.rb",
|
56
75
|
"test/fixtures/warden_app/app.rb",
|
57
76
|
"test/helper.rb",
|
77
|
+
"test/markup_plugin/test_asset_tag_helpers.rb",
|
78
|
+
"test/markup_plugin/test_form_builder.rb",
|
79
|
+
"test/markup_plugin/test_form_helpers.rb",
|
80
|
+
"test/markup_plugin/test_format_helpers.rb",
|
81
|
+
"test/markup_plugin/test_output_helpers.rb",
|
82
|
+
"test/markup_plugin/test_tag_helpers.rb",
|
83
|
+
"test/test_markup_plugin.rb",
|
58
84
|
"test/test_render_plugin.rb",
|
59
85
|
"test/test_warden_plugin.rb"
|
60
86
|
]
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
require 'active_support'
|
3
|
+
require 'sinatra_more'
|
4
|
+
require 'haml'
|
5
|
+
|
6
|
+
class MarkupDemo < Sinatra::Base
|
7
|
+
register SinatraMore::MarkupPlugin
|
8
|
+
|
9
|
+
configure do
|
10
|
+
set :root, File.dirname(__FILE__)
|
11
|
+
end
|
12
|
+
|
13
|
+
get '/:engine/:file' do
|
14
|
+
show(params[:engine], params[:file].to_sym)
|
15
|
+
end
|
16
|
+
|
17
|
+
helpers do
|
18
|
+
# show :erb, :index
|
19
|
+
# show :haml, :index
|
20
|
+
def show(kind, template)
|
21
|
+
eval("#{kind.to_s} #{template.to_sym.inspect}")
|
22
|
+
end
|
23
|
+
|
24
|
+
def captured_content(&block)
|
25
|
+
content_html = capture_html(&block)
|
26
|
+
"<p>#{content_html}</p>"
|
27
|
+
end
|
28
|
+
|
29
|
+
def concat_in_p(content_html)
|
30
|
+
concat_content "<p>#{content_html}</p>"
|
31
|
+
end
|
32
|
+
|
33
|
+
def ruby_not_template_block
|
34
|
+
determine_block_is_template('ruby') do
|
35
|
+
content_tag(:span, "This not a template block")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def determine_block_is_template(name, &block)
|
40
|
+
if block_given?
|
41
|
+
concat_content "<p class='is_template'>The #{name} block passed in is a template</p>" if block_is_template?(block)
|
42
|
+
else
|
43
|
+
concat_content "<p class='is_template'>The #{name} block passed in is a template</p>" if block_is_template?(block)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<% @content = captured_content do %>
|
2
|
+
<span>Captured Line 1</span>
|
3
|
+
<span>Captured Line 2</span>
|
4
|
+
<% end %>
|
5
|
+
<%= @content %>
|
6
|
+
|
7
|
+
<% concat_in_p('Concat Line 3') %>
|
8
|
+
|
9
|
+
<% determine_block_is_template('haml') do %>
|
10
|
+
<span>This is erb</span>
|
11
|
+
<span>This is erb</span>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<% ruby_not_template_block %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<%= content_tag :p, "Test 1", :class => 'test', :id => "test1" %>
|
2
|
+
|
3
|
+
<%= content_tag :p, "Test 2" %>
|
4
|
+
|
5
|
+
<% content_tag(:p, :class => 'test', :id => 'test3') do %>
|
6
|
+
<span>Test 3</span>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<% content_tag(:p) do %>
|
10
|
+
<span>Test 4</span>
|
11
|
+
<% end %>
|
@@ -2,6 +2,11 @@ require 'sinatra/base'
|
|
2
2
|
require 'sinatra_more'
|
3
3
|
require 'haml'
|
4
4
|
|
5
|
+
class RenderUser
|
6
|
+
attr_accessor :name
|
7
|
+
def initialize(name); @name = name; end
|
8
|
+
end
|
9
|
+
|
5
10
|
class RenderDemo < Sinatra::Base
|
6
11
|
register SinatraMore::RenderPlugin
|
7
12
|
|
@@ -9,13 +14,41 @@ class RenderDemo < Sinatra::Base
|
|
9
14
|
set :root, File.dirname(__FILE__)
|
10
15
|
end
|
11
16
|
|
17
|
+
# haml_template
|
12
18
|
get '/render_haml' do
|
13
19
|
@template = 'haml'
|
14
|
-
haml_template '
|
20
|
+
haml_template 'haml/test'
|
15
21
|
end
|
16
22
|
|
23
|
+
# erb_template
|
17
24
|
get '/render_erb' do
|
18
25
|
@template = 'erb'
|
19
|
-
erb_template '
|
26
|
+
erb_template 'erb/test'
|
20
27
|
end
|
21
|
-
|
28
|
+
|
29
|
+
# render_template with explicit engine
|
30
|
+
get '/render_template/:engine' do
|
31
|
+
@template = params[:engine]
|
32
|
+
render_template "template/#{@template}_template", :template_engine => @template
|
33
|
+
end
|
34
|
+
|
35
|
+
# render_template without explicit engine
|
36
|
+
get '/render_template' do
|
37
|
+
render_template "template/some_template"
|
38
|
+
end
|
39
|
+
|
40
|
+
# partial with object
|
41
|
+
get '/partial/object' do
|
42
|
+
partial 'template/user', :object => RenderUser.new('John')
|
43
|
+
end
|
44
|
+
|
45
|
+
# partial with collection
|
46
|
+
get '/partial/collection' do
|
47
|
+
partial 'template/user', :collection => [RenderUser.new('John'), RenderUser.new('Billy')]
|
48
|
+
end
|
49
|
+
|
50
|
+
# partial with locals
|
51
|
+
get '/partial/locals' do
|
52
|
+
partial 'template/user', :locals => { :user => RenderUser.new('John') }
|
53
|
+
end
|
54
|
+
end
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
%h1 User name is #{user.name}
|
@@ -0,0 +1 @@
|
|
1
|
+
%h1 This is a #{@template} template sent from render_template!
|
@@ -30,11 +30,40 @@ class WardenDemo < Sinatra::Base
|
|
30
30
|
set :root, File.dirname(__FILE__)
|
31
31
|
end
|
32
32
|
|
33
|
+
get '/login' do
|
34
|
+
"<h1>Please login!</h1>"
|
35
|
+
end
|
36
|
+
|
33
37
|
post '/login' do
|
34
38
|
authenticate_user!
|
35
39
|
end
|
36
40
|
|
41
|
+
get '/logout' do
|
42
|
+
logout_user!
|
43
|
+
end
|
44
|
+
|
45
|
+
get '/logged_in' do
|
46
|
+
"<h1>logged_in? #{logged_in?}</h1>"
|
47
|
+
end
|
48
|
+
|
49
|
+
get '/authenticated' do
|
50
|
+
haml :dashboard
|
51
|
+
end
|
52
|
+
|
53
|
+
get '/unregistered' do
|
54
|
+
haml :dashboard
|
55
|
+
end
|
56
|
+
|
57
|
+
get '/must_be_authorized' do
|
58
|
+
must_be_authorized!('/login')
|
59
|
+
"<h1>Valid Authorized Page</h1>"
|
60
|
+
end
|
61
|
+
|
37
62
|
get '/current_user' do
|
38
|
-
|
63
|
+
if current_user
|
64
|
+
"<h1>#{current_user.name}</h1>"
|
65
|
+
else
|
66
|
+
"<h2>Not logged in</h2>"
|
67
|
+
end
|
39
68
|
end
|
40
69
|
end
|
data/test/helper.rb
CHANGED
@@ -12,9 +12,23 @@ require 'sinatra_more'
|
|
12
12
|
class Test::Unit::TestCase
|
13
13
|
include Rack::Test::Methods
|
14
14
|
include Webrat::Methods
|
15
|
-
include Webrat::Matchers
|
16
|
-
|
15
|
+
include Webrat::Matchers
|
16
|
+
|
17
17
|
Webrat.configure do |config|
|
18
18
|
config.mode = :rack
|
19
19
|
end
|
20
|
+
|
21
|
+
def stop_time_for_test
|
22
|
+
time = Time.now
|
23
|
+
Time.stubs(:now).returns(time)
|
24
|
+
return time
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module Webrat
|
29
|
+
module Logging
|
30
|
+
def logger # :nodoc:
|
31
|
+
@logger = nil
|
32
|
+
end
|
33
|
+
end
|
20
34
|
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'test_markup_plugin' unless defined?(TestMarkupPlugin)
|
2
|
+
|
3
|
+
class TestAssetTagHelpers < TestMarkupPlugin
|
4
|
+
include SinatraMore::AssetTagHelpers
|
5
|
+
|
6
|
+
def flash
|
7
|
+
{ :notice => "Demo notice" }
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'for #flash_tag method' do
|
11
|
+
should "display flash with no given attributes" do
|
12
|
+
assert_equal '<div class="flash">Demo notice</div>', flash_tag(:notice)
|
13
|
+
end
|
14
|
+
should "display flash with given attributes" do
|
15
|
+
flash_expected = '<div class="notice" id="notice-area">Demo notice</div>'
|
16
|
+
assert_equal flash_expected, flash_tag(:notice, :class => 'notice', :id => 'notice-area')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'for #link_to method' do
|
21
|
+
should "display link element with no given attributes" do
|
22
|
+
assert_equal '<a href="/register">Sign up</a>', link_to('Sign up', '/register')
|
23
|
+
end
|
24
|
+
should "display link element with given attributes" do
|
25
|
+
link_expected = '<a class="first" href="/register" id="linky">Sign up</a>'
|
26
|
+
assert_equal link_expected, link_to('Sign up', '/register', :class => 'first', :id => 'linky')
|
27
|
+
end
|
28
|
+
should "display link element with ruby block" do
|
29
|
+
link_expected = '<a class="first" href="/register" id="binky">Sign up</a>'
|
30
|
+
actual_link = link_to('/register', :class => 'first', :id => 'binky') do
|
31
|
+
"Sign up"
|
32
|
+
end
|
33
|
+
assert_equal link_expected, actual_link
|
34
|
+
end
|
35
|
+
should "display link block element in haml" do
|
36
|
+
visit '/haml/link_to'
|
37
|
+
assert_have_selector :a, :content => "Test 1 No Block", :href => '/test1', :class => 'test', :id => 'test1'
|
38
|
+
assert_have_selector :a, :content => "Test 2 With Block", :href => '/test2', :class => 'test', :id => 'test2'
|
39
|
+
end
|
40
|
+
should "display link block element in erb" do
|
41
|
+
visit '/erb/link_to'
|
42
|
+
assert_have_selector :a, :content => "Test 1 No Block", :href => '/test1', :class => 'test', :id => 'test1'
|
43
|
+
#TODO fix this selector below in erb
|
44
|
+
# assert_have_selector :a, :content => "Test 2 With Block", :href => '/test2', :class => 'test', :id => 'test2'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'for #image_tag method' do
|
49
|
+
should "display image tag absolute link with no options" do
|
50
|
+
assert_equal '<img src="/absolute/pic.gif" />', image_tag('/absolute/pic.gif')
|
51
|
+
end
|
52
|
+
should "display image tag relative link with options" do
|
53
|
+
assert_equal '<img class="photo" src="/images/relative/pic.gif" />', image_tag('relative/pic.gif', :class => 'photo')
|
54
|
+
end
|
55
|
+
should "display image tag relative link with incorrect space" do
|
56
|
+
assert_equal '<img class="photo" src="/images/relative/pic.gif" />', image_tag(' relative/ pic.gif ', :class => 'photo')
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'for #stylesheet_link_tag method' do
|
61
|
+
should "display stylesheet link item" do
|
62
|
+
time = stop_time_for_test
|
63
|
+
expected_style = %Q[<link href="/stylesheets/style.css?#{time.to_i}" media="screen" rel="stylesheet" type="text/css" />]
|
64
|
+
assert_equal expected_style, stylesheet_link_tag('style')
|
65
|
+
end
|
66
|
+
should "display stylesheet link items" do
|
67
|
+
time = stop_time_for_test
|
68
|
+
expected_style = %Q[<link href="/stylesheets/style.css?#{time.to_i}" media="screen" rel="stylesheet" type="text/css" />\n]
|
69
|
+
expected_style << %Q[<link href="/stylesheets/layout.css?#{time.to_i}" media="screen" rel="stylesheet" type="text/css" />\n]
|
70
|
+
expected_style << %Q[<link href="http://google.com/style.css" media="screen" rel="stylesheet" type="text/css" />]
|
71
|
+
assert_equal expected_style, stylesheet_link_tag('style', 'layout.css', 'http://google.com/style.css')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'for #javascript_include_tag method' do
|
76
|
+
should "display javascript item" do
|
77
|
+
time = stop_time_for_test
|
78
|
+
expected_include = %Q[<script src="/javascripts/application.js?#{time.to_i}" type="text/javascript"></script>]
|
79
|
+
assert_equal expected_include, javascript_include_tag('application')
|
80
|
+
end
|
81
|
+
should "display javascript items" do
|
82
|
+
time = stop_time_for_test
|
83
|
+
expected_include = %Q[<script src="/javascripts/application.js?#{time.to_i}" type="text/javascript"></script>\n]
|
84
|
+
expected_include << %Q[<script src="/javascripts/base.js?#{time.to_i}" type="text/javascript"></script>\n]
|
85
|
+
expected_include << %Q[<script src="http://google.com/lib.js" type="text/javascript"></script>]
|
86
|
+
assert_equal expected_include, javascript_include_tag('application', 'base.js', 'http://google.com/lib.js')
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'test_markup_plugin' unless defined?(TestMarkupPlugin)
|
2
|
+
|
3
|
+
class TestFormatHelpers < TestMarkupPlugin
|
4
|
+
include SinatraMore::FormatHelpers
|
5
|
+
|
6
|
+
context 'for #relative_time_ago method' do
|
7
|
+
should "display today" do
|
8
|
+
assert_equal 'today', relative_time_ago(Time.now)
|
9
|
+
end
|
10
|
+
should "display yesterday" do
|
11
|
+
assert_equal 'yesterday', relative_time_ago(1.day.ago)
|
12
|
+
end
|
13
|
+
should "display tomorrow" do
|
14
|
+
assert_equal 'tomorrow', relative_time_ago(1.day.from_now)
|
15
|
+
end
|
16
|
+
should "return future number of days" do
|
17
|
+
assert_equal 'in 4 days', relative_time_ago(4.days.from_now)
|
18
|
+
end
|
19
|
+
should "return past days ago" do
|
20
|
+
assert_equal '4 days ago', relative_time_ago(4.days.ago)
|
21
|
+
end
|
22
|
+
should "return formatted archived date" do
|
23
|
+
assert_equal 100.days.ago.strftime('%A, %B %e'), relative_time_ago(100.days.ago)
|
24
|
+
end
|
25
|
+
should "return formatted archived year date" do
|
26
|
+
assert_equal 500.days.ago.strftime('%A, %B %e, %Y'), relative_time_ago(500.days.ago)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'for #escape_javascript method' do
|
31
|
+
should "escape double quotes" do
|
32
|
+
assert_equal "\"hello\"", escape_javascript('"hello"')
|
33
|
+
end
|
34
|
+
should "escape single quotes" do
|
35
|
+
assert_equal "\"hello\"", escape_javascript("'hello'")
|
36
|
+
end
|
37
|
+
should "escape html tags and breaks" do
|
38
|
+
assert_equal "\"\\n<p>hello<\\/p>\\n\"", escape_javascript("\n\r<p>hello</p>\r\n")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'test_markup_plugin' unless defined?(TestMarkupPlugin)
|
2
|
+
|
3
|
+
class TestOutputHelpers < TestMarkupPlugin
|
4
|
+
context 'for #capture_html method' do
|
5
|
+
should "work for erb templates" do
|
6
|
+
visit '/erb/capture_concat'
|
7
|
+
assert_have_selector 'p span', :content => "Captured Line 1"
|
8
|
+
assert_have_selector 'p span', :content => "Captured Line 2"
|
9
|
+
end
|
10
|
+
|
11
|
+
should "work for haml templates" do
|
12
|
+
visit '/haml/capture_concat'
|
13
|
+
assert_have_selector 'p span', :content => "Captured Line 1"
|
14
|
+
assert_have_selector 'p span', :content => "Captured Line 2"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'for #concat_content method' do
|
19
|
+
should "work for erb templates" do
|
20
|
+
visit '/erb/capture_concat'
|
21
|
+
assert_have_selector 'p', :content => "Concat Line 3", :count => 1
|
22
|
+
end
|
23
|
+
|
24
|
+
should "work for haml templates" do
|
25
|
+
visit '/haml/capture_concat'
|
26
|
+
assert_have_selector 'p', :content => "Concat Line 3", :count => 1
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'for #block_is_template?' do
|
31
|
+
should "work for erb templates" do
|
32
|
+
visit '/erb/capture_concat'
|
33
|
+
# TODO Get ERB template detection working
|
34
|
+
# assert_have_selector 'p', :content => "The erb block passed in is a template", :class => 'is_template'
|
35
|
+
assert_have_no_selector 'p', :content => "The ruby block passed in is a template", :class => 'is_template'
|
36
|
+
end
|
37
|
+
|
38
|
+
should "work for haml templates" do
|
39
|
+
visit '/haml/capture_concat'
|
40
|
+
assert_have_selector 'p', :content => "The haml block passed in is a template", :class => 'is_template'
|
41
|
+
assert_have_no_selector 'p', :content => "The ruby block passed in is a template", :class => 'is_template'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'test_markup_plugin' unless defined?(TestMarkupPlugin)
|
2
|
+
|
3
|
+
class TestTagHelpers < TestMarkupPlugin
|
4
|
+
context 'for #tag method' do
|
5
|
+
should("support tags with no content no attributes") do
|
6
|
+
assert_equal '<br />', tag(:br)
|
7
|
+
end
|
8
|
+
should("support tags with no content with attributes") do
|
9
|
+
assert_equal '<br class="yellow" style="clear:both" />', tag(:br, :style => 'clear:both', :class => 'yellow')
|
10
|
+
end
|
11
|
+
should "support tags with content no attributes" do
|
12
|
+
assert_equal '<p>Demo String</p>', tag(:p, :content => "Demo String")
|
13
|
+
end
|
14
|
+
should "support tags with content and attributes" do
|
15
|
+
assert_equal '<p class="large" id="intro">Demo</p>', tag(:p, :content => "Demo", :class => 'large', :id => 'intro')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'for #content_tag method' do
|
20
|
+
should "support tags with content as parameter" do
|
21
|
+
assert_equal '<p class="large" id="intro">Demo</p>', content_tag(:p, "Demo", :class => 'large', :id => 'intro')
|
22
|
+
end
|
23
|
+
should "support tags with content as block" do
|
24
|
+
assert_equal '<p class="large" id="intro">Demo</p>', content_tag(:p, :class => 'large', :id => 'intro') { "Demo" }
|
25
|
+
end
|
26
|
+
should "support tags with erb" do
|
27
|
+
visit '/erb/content_tag'
|
28
|
+
assert_have_selector :p, :content => "Test 1", :class => 'test', :id => 'test1'
|
29
|
+
assert_have_selector :p, :content => "Test 2"
|
30
|
+
# TODO get these to work in erb
|
31
|
+
# assert_have_selector :p, :content => "Test 3"
|
32
|
+
# assert_have_selector :p, :content => "Test 4"
|
33
|
+
end
|
34
|
+
should "support tags with haml" do
|
35
|
+
visit '/haml/content_tag'
|
36
|
+
assert_have_selector :p, :content => "Test 1", :class => 'test', :id => 'test1'
|
37
|
+
assert_have_selector :p, :content => "Test 2"
|
38
|
+
assert_have_selector :p, :content => "Test 3", :class => 'test', :id => 'test3'
|
39
|
+
assert_have_selector :p, :content => "Test 4"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'for #input_tag method' do
|
44
|
+
should "support field with type" do
|
45
|
+
assert_equal '<input type="text" />', input_tag(:text)
|
46
|
+
end
|
47
|
+
should "support field with type and options" do
|
48
|
+
assert_equal '<input class="first" id="texter" type="text" />', input_tag(:text, :class => "first", :id => 'texter')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'fixtures/markup_app/app'
|
3
|
+
|
4
|
+
class TestMarkupPlugin < Test::Unit::TestCase
|
5
|
+
include SinatraMore::OutputHelpers
|
6
|
+
include SinatraMore::TagHelpers
|
7
|
+
|
8
|
+
def app
|
9
|
+
MarkupDemo.tap { |app| app.set :environment, :test }
|
10
|
+
end
|
11
|
+
|
12
|
+
should "work properly by adding tag methods" do
|
13
|
+
assert self.respond_to?(:tag)
|
14
|
+
end
|
15
|
+
end
|
data/test/test_render_plugin.rb
CHANGED
@@ -5,19 +5,55 @@ class TestRenderPlugin < Test::Unit::TestCase
|
|
5
5
|
def app
|
6
6
|
RenderDemo.tap { |app| app.set :environment, :test }
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
context 'for #haml_template method' do
|
10
10
|
setup { visit '/render_haml' }
|
11
11
|
should('render template properly') do
|
12
12
|
assert_have_selector "h1", :content => "This is a haml template!"
|
13
13
|
end
|
14
14
|
end
|
15
|
-
|
16
|
-
|
15
|
+
|
16
|
+
context 'for #erb_template method' do
|
17
17
|
setup { visit '/render_erb' }
|
18
18
|
should('render template properly') do
|
19
19
|
assert_have_selector "h1", :content => "This is a erb template!"
|
20
20
|
end
|
21
21
|
end
|
22
|
+
|
23
|
+
context 'for #render_template method with explicit engine' do
|
24
|
+
setup { visit '/render_template/haml' }
|
25
|
+
should('render template properly') do
|
26
|
+
assert_have_selector "h1", :content => "This is a haml template sent from render_template!"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'for #render_template method without explicit engine' do
|
31
|
+
setup { visit '/render_template' }
|
32
|
+
should('render template properly') do
|
33
|
+
assert_have_selector "h1", :content => "This is a haml template which was detected!"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'for #partial method and object' do
|
38
|
+
setup { visit '/partial/object' }
|
39
|
+
should "render partial html with object" do
|
40
|
+
assert_have_selector "h1", :content => "User name is John"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'for #partial method and collection' do
|
45
|
+
setup { visit '/partial/collection' }
|
46
|
+
should "render partial html with collection" do
|
47
|
+
assert_have_selector "h1", :content => "User name is John"
|
48
|
+
assert_have_selector "h1", :content => "User name is Billy"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'for #partial method and locals' do
|
53
|
+
setup { visit '/partial/locals' }
|
54
|
+
should "render partial html with locals" do
|
55
|
+
assert_have_selector "h1", :content => "User name is John"
|
56
|
+
end
|
57
|
+
end
|
22
58
|
|
23
59
|
end
|
data/test/test_warden_plugin.rb
CHANGED
@@ -15,4 +15,91 @@ class TestWardenPlugin < Test::Unit::TestCase
|
|
15
15
|
assert_have_selector :h1, :content => "John"
|
16
16
|
end
|
17
17
|
end
|
18
|
+
|
19
|
+
context 'for logout_user! helper' do
|
20
|
+
setup do
|
21
|
+
visit '/login', :post, :username => 'john21', :password => 'secret'
|
22
|
+
visit '/logout'
|
23
|
+
visit '/current_user'
|
24
|
+
end
|
25
|
+
should "return name of logged_in user" do
|
26
|
+
assert_have_selector :h2, :content => "Not logged in"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'for logged_in? helper when logged in' do
|
31
|
+
setup do
|
32
|
+
visit '/login', :post, :username => 'john21', :password => 'secret'
|
33
|
+
visit '/logged_in'
|
34
|
+
end
|
35
|
+
should "be logged in" do
|
36
|
+
assert_have_selector :h1, :content => 'logged_in? true'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'for logged_in? helper when logged out' do
|
41
|
+
setup do
|
42
|
+
visit '/logged_in'
|
43
|
+
end
|
44
|
+
should "not be logged in" do
|
45
|
+
assert_have_selector :h1, :content => 'logged_in? false'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'for authenticated? helper when logged in' do
|
50
|
+
setup do
|
51
|
+
visit '/login', :post, :username => 'john21', :password => 'secret'
|
52
|
+
visit '/authenticated'
|
53
|
+
end
|
54
|
+
should "reveal authorized content" do
|
55
|
+
assert_have_selector :p, :content => "Dashboard, You are logged in!"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'for authenticated? helper when logged out' do
|
60
|
+
setup do
|
61
|
+
visit '/authenticated'
|
62
|
+
end
|
63
|
+
should "hide authorized content" do
|
64
|
+
assert_have_no_selector :p, :content => "Dashboard, You are logged in!"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'for unregistered? helper when logged in' do
|
69
|
+
setup do
|
70
|
+
visit '/login', :post, :username => 'john21', :password => 'secret'
|
71
|
+
visit '/unregistered'
|
72
|
+
end
|
73
|
+
should "hide unregistered content" do
|
74
|
+
assert_have_no_selector :p, :content => "Dashboard, You are unregistered!"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'for unregistered? helper when logged out' do
|
79
|
+
setup do
|
80
|
+
visit '/unregistered'
|
81
|
+
end
|
82
|
+
should "reveal unregistered content" do
|
83
|
+
assert_have_selector :p, :content => "Dashboard, You are unregistered!"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'for must_be_authorized! helper with valid login' do
|
88
|
+
setup do
|
89
|
+
visit '/login', :post, :username => 'john21', :password => 'secret'
|
90
|
+
visit '/must_be_authorized'
|
91
|
+
end
|
92
|
+
should "be able to view page" do
|
93
|
+
assert_have_selector :h1, :content => "Valid Authorized Page"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'for must_be_authorized! helper when not logged in' do
|
98
|
+
setup do
|
99
|
+
visit '/must_be_authorized'
|
100
|
+
end
|
101
|
+
should "be forced to login" do
|
102
|
+
assert_have_selector :h1, :content => "Please login!"
|
103
|
+
end
|
104
|
+
end
|
18
105
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra_more
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Esquenazi
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10-
|
12
|
+
date: 2009-10-26 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -53,11 +53,29 @@ files:
|
|
53
53
|
- lib/sinatra_more/warden_plugin.rb
|
54
54
|
- lib/sinatra_more/warden_plugin/warden_helpers.rb
|
55
55
|
- sinatra_more.gemspec
|
56
|
+
- test/fixtures/markup_app/app.rb
|
57
|
+
- test/fixtures/markup_app/views/capture_concat.erb
|
58
|
+
- test/fixtures/markup_app/views/capture_concat.haml
|
59
|
+
- test/fixtures/markup_app/views/content_tag.erb
|
60
|
+
- test/fixtures/markup_app/views/content_tag.haml
|
61
|
+
- test/fixtures/markup_app/views/link_to.erb
|
62
|
+
- test/fixtures/markup_app/views/link_to.haml
|
56
63
|
- test/fixtures/render_app/app.rb
|
57
|
-
- test/fixtures/render_app/views/
|
58
|
-
- test/fixtures/render_app/views/
|
64
|
+
- test/fixtures/render_app/views/erb/test.erb
|
65
|
+
- test/fixtures/render_app/views/haml/test.haml
|
66
|
+
- test/fixtures/render_app/views/template/_user.haml
|
67
|
+
- test/fixtures/render_app/views/template/haml_template.haml
|
68
|
+
- test/fixtures/render_app/views/template/some_template.haml
|
59
69
|
- test/fixtures/warden_app/app.rb
|
70
|
+
- test/fixtures/warden_app/views/dashboard.haml
|
60
71
|
- test/helper.rb
|
72
|
+
- test/markup_plugin/test_asset_tag_helpers.rb
|
73
|
+
- test/markup_plugin/test_form_builder.rb
|
74
|
+
- test/markup_plugin/test_form_helpers.rb
|
75
|
+
- test/markup_plugin/test_format_helpers.rb
|
76
|
+
- test/markup_plugin/test_output_helpers.rb
|
77
|
+
- test/markup_plugin/test_tag_helpers.rb
|
78
|
+
- test/test_markup_plugin.rb
|
61
79
|
- test/test_render_plugin.rb
|
62
80
|
- test/test_warden_plugin.rb
|
63
81
|
has_rdoc: true
|
@@ -89,8 +107,16 @@ signing_key:
|
|
89
107
|
specification_version: 3
|
90
108
|
summary: Expands sinatra to allow for complex applications
|
91
109
|
test_files:
|
110
|
+
- test/fixtures/markup_app/app.rb
|
92
111
|
- test/fixtures/render_app/app.rb
|
93
112
|
- test/fixtures/warden_app/app.rb
|
94
113
|
- test/helper.rb
|
114
|
+
- test/markup_plugin/test_asset_tag_helpers.rb
|
115
|
+
- test/markup_plugin/test_form_builder.rb
|
116
|
+
- test/markup_plugin/test_form_helpers.rb
|
117
|
+
- test/markup_plugin/test_format_helpers.rb
|
118
|
+
- test/markup_plugin/test_output_helpers.rb
|
119
|
+
- test/markup_plugin/test_tag_helpers.rb
|
120
|
+
- test/test_markup_plugin.rb
|
95
121
|
- test/test_render_plugin.rb
|
96
122
|
- test/test_warden_plugin.rb
|