sinatra_more 0.1.5 → 0.1.6

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.rdoc CHANGED
@@ -152,7 +152,7 @@ A form_tag might look like:
152
152
  = text_field_tag :username, :value => params[:username]
153
153
  %p
154
154
  = label_tag :password, :class => 'first'
155
- = text_field_tag :password, :value => params[:password]
155
+ = password_field_tag :password, :value => params[:password]
156
156
  - field_set_tag(:class => 'buttons') do
157
157
  = submit_tag "Login"
158
158
 
@@ -280,10 +280,10 @@ provided to make interacting with warden dead simple.
280
280
 
281
281
  == Acknowledgements
282
282
 
283
- * Thanks to keldredd for the sinatra_helpers code that helped me to create erb capture and concat methods.
284
- * Thanks to sbfaulkner for the sinatra-helpers code that I looked while starting this library.
283
+ * Thanks to keldredd for the sinatra_helpers code that helped me to create erb capture and concat methods.
284
+ * Thanks to sbfaulkner for the sinatra-helpers code that I looked while starting this library.
285
285
 
286
- == Contributers
286
+ == Contributors
287
287
 
288
288
  * Nathan Esquenazi - Project creator and code maintainer
289
289
  * Arthur Chiu - Forming the idea and various code contributions
data/TODO CHANGED
@@ -1,9 +1,13 @@
1
1
  = UNFINISHED
2
2
 
3
3
  * Become total warden solution (basically just require warden gem installed, do everything else)
4
+ * Look into removing overlapping methods and simply leverage sinatra_warden
5
+ * Take advantage of shared strategies: http://github.com/hassox/warden_strategies/tree/master/lib/
4
6
  * Make warden password strategy support a callback which explains what to do with username, password
5
7
  * WardenPlugin.authenticate_callback { |username, password| User.authenticate(username, password) }
6
8
  * Remove dependency on activesupport! and enumerate dependencies in rakefile
9
+ * Add support for missing formhelpers/fields (check_box, radio_button, ...)
10
+ * Add support for forms with method => put, delete using hidden field
7
11
  * Look into creating sinatra generators using rubigen (http://github.com/drnic/rubigen)
8
12
  * http://github.com/quirkey/sinatra-gen
9
13
  * Look into adding any missing helpers from:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.1.6
@@ -3,7 +3,8 @@ module SinatraMore
3
3
  # Constructs a form for object using given or default form_builder
4
4
  # form_for @user, '/register', :id => 'register' do |f| ... end
5
5
  def form_for(object, url, settings={}, &block)
6
- configured_builder = settings[:builder] || self.options.default_builder || 'StandardFormBuilder'
6
+ default_builder = self.respond_to?(:options) && self.options.default_builder
7
+ configured_builder = settings[:builder] || default_builder || 'StandardFormBuilder'
7
8
  configured_builder = configured_builder.constantize if configured_builder.is_a?(String)
8
9
  settings.reverse_merge!(:method => 'post', :action => url)
9
10
  settings[:enctype] = "multipart/form-data" if settings.delete(:multipart)
@@ -35,12 +36,10 @@ module SinatraMore
35
36
  return "" if record.blank? or record.errors.none?
36
37
  options.reverse_merge!(:header_message => "The #{record.class.to_s.downcase} could not be saved!")
37
38
  error_messages = record.errors.full_messages
38
- content_block_tag(:div, :class => 'field-errors', :concat => false) do
39
- html = content_tag(:p, options.delete(:header_message))
40
- html << content_block_tag(:ul, :class => 'field-errors', :concat => false) do
41
- error_messages.collect { |er| content_tag(:li, er) }.join("\n")
42
- end
43
- end
39
+ error_items = error_messages.collect { |er| content_tag(:li, er) }.join("\n")
40
+ error_html = content_tag(:p, options.delete(:header_message))
41
+ error_html << content_block_tag(:ul, error_items, :class => 'errors-list')
42
+ content_block_tag(:div, error_html, :class => 'field-errors')
44
43
  end
45
44
 
46
45
  # Constructs a label tag from the given options
@@ -87,7 +86,7 @@ module SinatraMore
87
86
 
88
87
  # Constructs a submit button from the given options
89
88
  # submit_tag "Create", :class => 'success'
90
- def submit_tag(caption, options={})
89
+ def submit_tag(caption="Submit", options={})
91
90
  options.reverse_merge!(:value => caption)
92
91
  input_tag(:submit, options)
93
92
  end
@@ -16,8 +16,10 @@ module SinatraMore
16
16
  def concat_content(text="")
17
17
  if self.respond_to?(:is_haml?) && is_haml?
18
18
  haml_concat(text)
19
- else
20
- @_out_buf << text
19
+ elsif @_out_buf
20
+ erb_concat(text)
21
+ else # theres no place to concat
22
+ text
21
23
  end
22
24
  end
23
25
 
@@ -29,6 +31,7 @@ module SinatraMore
29
31
  end
30
32
 
31
33
  protected
34
+
32
35
 
33
36
  # Used to capture the html from a block of erb code
34
37
  # capture_erb(&block) => '...html...'
@@ -36,6 +39,12 @@ module SinatraMore
36
39
  erb_with_output_buffer { block.call(*args) }
37
40
  end
38
41
 
42
+ # Concats directly to an erb template
43
+ # erb_concat("Direct to buffer")
44
+ def erb_concat(text)
45
+ @_out_buf << text unless @_out_buf.nil?
46
+ end
47
+
39
48
  # Used to determine if a block is called from ERB.
40
49
  # NOTE: This doesn't actually work yet because the variable __in_erb_template
41
50
  # hasn't been defined in ERB. We need to find a way to fix this.
@@ -25,7 +25,6 @@ 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 }
29
28
  html_attrs = options.collect { |a, v| v.blank? ? nil : "#{a}=\"#{v}\"" }.compact.join(" ")
30
29
  base_tag = (html_attrs.present? ? "<#{name} #{html_attrs}" : "<#{name}")
31
30
  base_tag << (content ? ">#{content}</#{name}>" : " />")
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.1.5"
8
+ s.version = "0.1.6"
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-26}
12
+ s.date = %q{2009-10-27}
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 = [
@@ -43,6 +43,8 @@ Gem::Specification.new do |s|
43
43
  "test/fixtures/markup_app/views/capture_concat.haml",
44
44
  "test/fixtures/markup_app/views/content_tag.erb",
45
45
  "test/fixtures/markup_app/views/content_tag.haml",
46
+ "test/fixtures/markup_app/views/form_tag.erb",
47
+ "test/fixtures/markup_app/views/form_tag.haml",
46
48
  "test/fixtures/markup_app/views/link_to.erb",
47
49
  "test/fixtures/markup_app/views/link_to.haml",
48
50
  "test/fixtures/render_app/app.rb",
@@ -9,7 +9,12 @@ class MarkupDemo < Sinatra::Base
9
9
  configure do
10
10
  set :root, File.dirname(__FILE__)
11
11
  end
12
-
12
+
13
+ get '/:engine/form_tag' do
14
+ @user = User.new
15
+ show(params[:engine], 'form_tag')
16
+ end
17
+
13
18
  get '/:engine/:file' do
14
19
  show(params[:engine], params[:file].to_sym)
15
20
  end
@@ -20,22 +25,22 @@ class MarkupDemo < Sinatra::Base
20
25
  def show(kind, template)
21
26
  eval("#{kind.to_s} #{template.to_sym.inspect}")
22
27
  end
23
-
28
+
24
29
  def captured_content(&block)
25
30
  content_html = capture_html(&block)
26
31
  "<p>#{content_html}</p>"
27
32
  end
28
-
33
+
29
34
  def concat_in_p(content_html)
30
35
  concat_content "<p>#{content_html}</p>"
31
36
  end
32
-
37
+
33
38
  def ruby_not_template_block
34
39
  determine_block_is_template('ruby') do
35
40
  content_tag(:span, "This not a template block")
36
41
  end
37
42
  end
38
-
43
+
39
44
  def determine_block_is_template(name, &block)
40
45
  if block_given?
41
46
  concat_content "<p class='is_template'>The #{name} block passed in is a template</p>" if block_is_template?(block)
@@ -44,4 +49,20 @@ class MarkupDemo < Sinatra::Base
44
49
  end
45
50
  end
46
51
  end
52
+
53
+ class User
54
+ def errors
55
+ Errors.new
56
+ end
57
+ end
58
+
59
+ class Errors < Array
60
+ def initialize
61
+ self << [:fake, :second, :third]
62
+ end
63
+
64
+ def full_messages
65
+ ["This is a fake error", "This is a second fake error", "This is a third fake error"]
66
+ end
67
+ end
47
68
  end
@@ -0,0 +1,35 @@
1
+ <% form_tag '/simple', :class => 'simple-form' do %>
2
+ <%= error_messages_for(nil) %>
3
+ <% field_set_tag do %>
4
+ <%= label_tag :username %>
5
+ <%= text_field_tag :username %>
6
+ <%= label_tag :password %>
7
+ <%= password_field_tag :password %>
8
+ <%= submit_tag %>
9
+ <% end %>
10
+ <% end %>
11
+
12
+ <% form_tag '/advanced', :id => 'advanced', :class => 'advanced-form', :method => 'get' do %>
13
+ <%= error_messages_for @user, :header_message => "There are problems with saving user!" %>
14
+ <% field_set_tag "Advanced", :class => 'advanced-field-set' do %>
15
+ <p>
16
+ <%= label_tag :username, :class => 'first', :caption => "Nickname" %>
17
+ <%= text_field_tag :username, :value => params[:username], :id => 'the_username' %>
18
+ </p>
19
+ <p>
20
+ <%= label_tag :password, :class => 'first' %>
21
+ <%= password_field_tag :password, :value => params[:password] %>
22
+ </p>
23
+ <p>
24
+ <%= label_tag :about, :class => 'about', :caption => "About Me" %>
25
+ <%= text_area_tag :about, :class => 'large' %>
26
+ </p>
27
+ <p>
28
+ <%= label_tag :photo, :class => 'photo' %>
29
+ <%= file_field_tag :photo, :class => 'upload' %>
30
+ </p>
31
+ <% end %>
32
+ <% field_set_tag(:class => 'buttons') do %>
33
+ <%= submit_tag "Login" %>
34
+ <% end %>
35
+ <% end %>
@@ -0,0 +1,26 @@
1
+ - form_tag '/simple', :class => 'simple-form' do
2
+ = error_messages_for nil
3
+ - field_set_tag do
4
+ = label_tag :username
5
+ = text_field_tag :username
6
+ = label_tag :password
7
+ = password_field_tag :password
8
+ = submit_tag
9
+
10
+ - form_tag '/advanced', :id => 'advanced', :class => 'advanced-form', :method => 'get' do
11
+ = error_messages_for @user, :header_message => "There are problems with saving user!"
12
+ - field_set_tag "Advanced", :class => 'advanced-field-set' do
13
+ %p
14
+ = label_tag :username, :class => 'first', :caption => "Nickname"
15
+ = text_field_tag :username, :value => params[:username], :id => 'the_username'
16
+ %p
17
+ = label_tag :password, :class => 'first'
18
+ = password_field_tag :password, :value => params[:password]
19
+ %p
20
+ = label_tag :about, :class => 'about', :caption => "About Me"
21
+ = text_area_tag :about, :class => 'large'
22
+ %p
23
+ = label_tag :photo, :class => 'photo'
24
+ = file_field_tag :photo, :class => 'upload'
25
+ - field_set_tag(:class => 'buttons') do
26
+ = submit_tag "Login"
data/test/helper.rb CHANGED
@@ -19,12 +19,21 @@ class Test::Unit::TestCase
19
19
  Webrat.configure do |config|
20
20
  config.mode = :rack
21
21
  end
22
-
22
+
23
23
  def stop_time_for_test
24
24
  time = Time.now
25
25
  Time.stubs(:now).returns(time)
26
26
  return time
27
27
  end
28
+
29
+ # assert_has_tag(:h1, :content => "yellow") { "<h1>yellow</h1>" }
30
+ # In this case, block is the html to evaluate
31
+ def assert_has_tag(name, attributes = {}, &block)
32
+ html = block && block.call
33
+ matcher = HaveSelector.new(name, attributes)
34
+ raise "Please specify a block!" if html.blank?
35
+ assert matcher.matches?(html), matcher.failure_message
36
+ end
28
37
  end
29
38
 
30
39
  module Webrat
@@ -14,28 +14,25 @@ class TestAssetTagHelpers < Test::Unit::TestCase
14
14
 
15
15
  context 'for #flash_tag method' do
16
16
  should "display flash with no given attributes" do
17
- assert_equal '<div class="flash">Demo notice</div>', flash_tag(:notice)
17
+ assert_has_tag('div.flash', :content => "Demo notice") { flash_tag(:notice) }
18
18
  end
19
19
  should "display flash with given attributes" do
20
- flash_expected = '<div class="notice" id="notice-area">Demo notice</div>'
21
- assert_equal flash_expected, flash_tag(:notice, :class => 'notice', :id => 'notice-area')
20
+ actual_html = flash_tag(:notice, :class => 'notice', :id => 'notice-area')
21
+ assert_has_tag('div.notice#notice-area', :content => "Demo notice") { actual_html }
22
22
  end
23
23
  end
24
24
 
25
25
  context 'for #link_to method' do
26
26
  should "display link element with no given attributes" do
27
- assert_equal '<a href="/register">Sign up</a>', link_to('Sign up', '/register')
27
+ assert_has_tag('a', :content => "Sign up", :href => '/register') { link_to('Sign up', '/register') }
28
28
  end
29
29
  should "display link element with given attributes" do
30
- link_expected = '<a class="first" href="/register" id="linky">Sign up</a>'
31
- assert_equal link_expected, link_to('Sign up', '/register', :class => 'first', :id => 'linky')
30
+ actual_html = link_to('Sign up', '/register', :class => 'first', :id => 'linky')
31
+ assert_has_tag('a#linky.first', :content => "Sign up", :href => '/register') { actual_html }
32
32
  end
33
33
  should "display link element with ruby block" do
34
- link_expected = '<a class="first" href="/register" id="binky">Sign up</a>'
35
- actual_link = link_to('/register', :class => 'first', :id => 'binky') do
36
- "Sign up"
37
- end
38
- assert_equal link_expected, actual_link
34
+ actual_link = link_to('/register', :class => 'first', :id => 'binky') { "Sign up" }
35
+ assert_has_tag('a#binky.first', :content => "Sign up", :href => '/register') { actual_link }
39
36
  end
40
37
  should "display link block element in haml" do
41
38
  visit '/haml/link_to'
@@ -52,43 +49,45 @@ class TestAssetTagHelpers < Test::Unit::TestCase
52
49
 
53
50
  context 'for #image_tag method' do
54
51
  should "display image tag absolute link with no options" do
55
- assert_equal '<img src="/absolute/pic.gif" />', image_tag('/absolute/pic.gif')
52
+ assert_has_tag('img', :src => "/absolute/pic.gif") { image_tag('/absolute/pic.gif') }
56
53
  end
57
54
  should "display image tag relative link with options" do
58
- assert_equal '<img class="photo" src="/images/relative/pic.gif" />', image_tag('relative/pic.gif', :class => 'photo')
55
+ assert_has_tag('img.photo', :src => "/images/relative/pic.gif") { image_tag('relative/pic.gif', :class => 'photo') }
59
56
  end
60
- should "display image tag relative link with incorrect space" do
61
- assert_equal '<img class="photo" src="/images/relative/pic.gif" />', image_tag(' relative/ pic.gif ', :class => 'photo')
57
+ should "display image tag relative link with incorrect spacing" do
58
+ assert_has_tag('img.photo', :src => "/images/relative/pic.gif") { image_tag(' relative/ pic.gif ', :class => 'photo') }
62
59
  end
63
60
  end
64
61
 
65
62
  context 'for #stylesheet_link_tag method' do
66
63
  should "display stylesheet link item" do
67
64
  time = stop_time_for_test
68
- expected_style = %Q[<link href="/stylesheets/style.css?#{time.to_i}" media="screen" rel="stylesheet" type="text/css" />]
69
- assert_equal expected_style, stylesheet_link_tag('style')
65
+ expected_options = { :media => "screen", :rel => "stylesheet", :type => "text/css" }
66
+ assert_has_tag('link', expected_options.merge(:href => "/stylesheets/style.css?#{time.to_i}")) { stylesheet_link_tag('style') }
70
67
  end
71
68
  should "display stylesheet link items" do
72
69
  time = stop_time_for_test
73
- expected_style = %Q[<link href="/stylesheets/style.css?#{time.to_i}" media="screen" rel="stylesheet" type="text/css" />\n]
74
- expected_style << %Q[<link href="/stylesheets/layout.css?#{time.to_i}" media="screen" rel="stylesheet" type="text/css" />\n]
75
- expected_style << %Q[<link href="http://google.com/style.css" media="screen" rel="stylesheet" type="text/css" />]
76
- assert_equal expected_style, stylesheet_link_tag('style', 'layout.css', 'http://google.com/style.css')
70
+ actual_html = stylesheet_link_tag('style', 'layout.css', 'http://google.com/style.css')
71
+ assert_has_tag('link', :media => "screen", :rel => "stylesheet", :type => "text/css", :count => 3) { actual_html }
72
+ assert_has_tag('link', :href => "/stylesheets/style.css?#{time.to_i}") { actual_html }
73
+ assert_has_tag('link', :href => "/stylesheets/layout.css?#{time.to_i}") { actual_html }
74
+ assert_has_tag('link', :href => "http://google.com/style.css") { actual_html }
77
75
  end
78
76
  end
79
77
 
80
78
  context 'for #javascript_include_tag method' do
81
79
  should "display javascript item" do
82
80
  time = stop_time_for_test
83
- expected_include = %Q[<script src="/javascripts/application.js?#{time.to_i}" type="text/javascript"></script>]
84
- assert_equal expected_include, javascript_include_tag('application')
81
+ actual_html = javascript_include_tag('application')
82
+ assert_has_tag('script', :src => "/javascripts/application.js?#{time.to_i}", :type => "text/javascript") { actual_html }
85
83
  end
86
84
  should "display javascript items" do
87
85
  time = stop_time_for_test
88
- expected_include = %Q[<script src="/javascripts/application.js?#{time.to_i}" type="text/javascript"></script>\n]
89
- expected_include << %Q[<script src="/javascripts/base.js?#{time.to_i}" type="text/javascript"></script>\n]
90
- expected_include << %Q[<script src="http://google.com/lib.js" type="text/javascript"></script>]
91
- assert_equal expected_include, javascript_include_tag('application', 'base.js', 'http://google.com/lib.js')
86
+ actual_html = javascript_include_tag('application', 'base.js', 'http://google.com/lib.js')
87
+ assert_has_tag('script', :type => "text/javascript", :count => 3) { actual_html }
88
+ assert_has_tag('script', :src => "/javascripts/application.js?#{time.to_i}") { actual_html }
89
+ assert_has_tag('script', :src => "/javascripts/base.js?#{time.to_i}") { actual_html }
90
+ assert_has_tag('script', :src => "http://google.com/lib.js") { actual_html }
92
91
  end
93
92
  end
94
93
  end
@@ -2,9 +2,69 @@ require 'helper'
2
2
  require 'fixtures/markup_app/app'
3
3
 
4
4
  class TestFormBuilder < Test::Unit::TestCase
5
+ include SinatraMore::FormHelpers
6
+
5
7
  def app
6
8
  MarkupDemo.tap { |app| app.set :environment, :test }
7
9
  end
8
10
 
9
- # TODO Test the form builder methods
11
+ context 'for #form_for method' do
12
+ should "display correct form html" do
13
+ user = stub()
14
+ actual_html = form_for(user, '/register', :id => 'register') { "Demo" }
15
+ assert_has_tag('form', :action => '/register', :id => 'register', :content => "Demo") { actual_html }
16
+ end
17
+ end
18
+
19
+ # ===========================
20
+ # AbstractFormBuilder
21
+ # ===========================
22
+
23
+ context 'for #error_messages method' do
24
+
25
+ end
26
+
27
+ context 'for #text_field method' do
28
+
29
+ end
30
+
31
+ context 'for #text_area method' do
32
+
33
+ end
34
+
35
+ context 'for #password_field method' do
36
+
37
+ end
38
+
39
+ context 'for #file_field method' do
40
+
41
+ end
42
+
43
+ context 'for #submit method' do
44
+
45
+ end
46
+
47
+ # ===========================
48
+ # StandardFormBuilder
49
+ # ===========================
50
+
51
+ context 'for #text_field_block method' do
52
+
53
+ end
54
+
55
+ context 'for #text_area_block method' do
56
+
57
+ end
58
+
59
+ context 'for #password_field_block method' do
60
+
61
+ end
62
+
63
+ context 'for #file_field_block method' do
64
+
65
+ end
66
+
67
+ context 'for #submit_block method' do
68
+
69
+ end
10
70
  end
@@ -2,9 +2,216 @@ require 'helper'
2
2
  require 'fixtures/markup_app/app'
3
3
 
4
4
  class TestFormHelpers < Test::Unit::TestCase
5
+ include SinatraMore::FormHelpers
6
+
5
7
  def app
6
8
  MarkupDemo.tap { |app| app.set :environment, :test }
7
9
  end
8
10
 
9
- # Test the form helper methods
11
+ context 'for #form_tag method' do
12
+ should "display correct forms in ruby" do
13
+ actual_html = form_tag('/register', :class => 'test', :action => "hello") { "Demo" }
14
+ assert_has_tag(:form, :class => "test") { actual_html }
15
+ end
16
+
17
+ should "display correct inputs in ruby for form_tag" do
18
+ actual_html = form_tag('/register', :class => 'test', :action => "hello") { text_field_tag(:username) }
19
+ assert_has_tag('form input', :type => 'text', :name => "username") { actual_html }
20
+ end
21
+
22
+ should "display correct forms in erb" do
23
+ visit '/erb/form_tag'
24
+ assert_have_selector 'form.simple-form', :action => '/simple'
25
+ assert_have_selector 'form.advanced-form', :action => '/advanced', :id => 'advanced', :method => 'get'
26
+ end
27
+
28
+ should "display correct forms in haml" do
29
+ visit '/haml/form_tag'
30
+ assert_have_selector 'form.simple-form', :action => '/simple'
31
+ assert_have_selector 'form.advanced-form', :action => '/advanced', :id => 'advanced', :method => 'get'
32
+ end
33
+ end
34
+
35
+ context 'for #field_set_tag method' do
36
+ should "display correct field_sets in ruby" do
37
+ actual_html = field_set_tag("Basic", :class => 'basic') { "Demo" }
38
+ assert_has_tag(:fieldset, :class => 'basic') { actual_html }
39
+ assert_has_tag('fieldset legend', :content => "Basic") { actual_html }
40
+ end
41
+
42
+ should "display correct field_sets in erb" do
43
+ visit '/erb/form_tag'
44
+ assert_have_selector 'form.simple-form fieldset', :count => 1
45
+ assert_have_no_selector 'form.simple-form fieldset legend'
46
+ assert_have_selector 'form.advanced-form fieldset', :count => 1, :class => 'advanced-field-set'
47
+ assert_have_selector 'form.advanced-form fieldset legend', :content => "Advanced"
48
+ end
49
+
50
+ should "display correct field_sets in haml" do
51
+ visit '/haml/form_tag'
52
+ assert_have_selector 'form.simple-form fieldset', :count => 1
53
+ assert_have_no_selector 'form.simple-form fieldset legend'
54
+ assert_have_selector 'form.advanced-form fieldset', :count => 1, :class => 'advanced-field-set'
55
+ assert_have_selector 'form.advanced-form fieldset legend', :content => "Advanced"
56
+ end
57
+ end
58
+
59
+ context 'for #error_messages_for method' do
60
+ should "display correct error messages list in ruby" do
61
+ user = stub(:class => "User", :errors => stub(:full_messages => ["1", "2"], :none? => false), :blank? => false)
62
+ actual_html = error_messages_for(user)
63
+ assert_has_tag('div.field-errors') { actual_html }
64
+ assert_has_tag('div.field-errors p', :content => "The user could not be saved") { actual_html }
65
+ assert_has_tag('div.field-errors ul.errors-list') { actual_html }
66
+ assert_has_tag('div.field-errors ul.errors-list li', :count => 2) { actual_html }
67
+ end
68
+
69
+ should "display correct error messages list in erb" do
70
+ visit '/erb/form_tag'
71
+ assert_have_no_selector 'form.simple-form .field-errors'
72
+ assert_have_selector 'form.advanced-form .field-errors'
73
+ assert_have_selector 'form.advanced-form .field-errors p', :content => "There are problems with saving user!"
74
+ assert_have_selector 'form.advanced-form .field-errors ul.errors-list'
75
+ assert_have_selector 'form.advanced-form .field-errors ul.errors-list li', :count => 3
76
+ assert_have_selector 'form.advanced-form .field-errors ul.errors-list li', :content => "This is a second fake error"
77
+ end
78
+
79
+ should "display correct error messages list in haml" do
80
+ visit '/haml/form_tag'
81
+ assert_have_no_selector 'form.simple-form .field-errors'
82
+ assert_have_selector 'form.advanced-form .field-errors'
83
+ assert_have_selector 'form.advanced-form .field-errors p', :content => "There are problems with saving user!"
84
+ assert_have_selector 'form.advanced-form .field-errors ul.errors-list'
85
+ assert_have_selector 'form.advanced-form .field-errors ul.errors-list li', :count => 3
86
+ assert_have_selector 'form.advanced-form .field-errors ul.errors-list li', :content => "This is a second fake error"
87
+ end
88
+ end
89
+
90
+ context 'for #label_tag method' do
91
+ should "display label tag in ruby" do
92
+ actual_html = label_tag(:username, :class => 'long-label', :caption => "Nickname")
93
+ assert_has_tag(:label, :for => 'username', :class => 'long-label', :content => "Nickname: ") { actual_html }
94
+ end
95
+
96
+ should "display label tag in erb for simple form" do
97
+ visit '/erb/form_tag'
98
+ assert_have_selector 'form.simple-form label', :count => 2
99
+ assert_have_selector 'form.simple-form label', :content => "Username", :for => 'username'
100
+ assert_have_selector 'form.simple-form label', :content => "Password", :for => 'password'
101
+ end
102
+ should "display label tag in erb for advanced form" do
103
+ visit '/erb/form_tag'
104
+ assert_have_selector 'form.advanced-form label', :count => 4
105
+ assert_have_selector 'form.advanced-form label.first', :content => "Nickname", :for => 'username'
106
+ assert_have_selector 'form.advanced-form label.first', :content => "Password", :for => 'password'
107
+ assert_have_selector 'form.advanced-form label.about', :content => "About Me", :for => 'about'
108
+ assert_have_selector 'form.advanced-form label.photo', :content => "Photo" , :for => 'photo'
109
+ end
110
+
111
+ should "display label tag in haml for simple form" do
112
+ visit '/haml/form_tag'
113
+ assert_have_selector 'form.simple-form label', :count => 2
114
+ assert_have_selector 'form.simple-form label', :content => "Username", :for => 'username'
115
+ assert_have_selector 'form.simple-form label', :content => "Password", :for => 'password'
116
+ end
117
+ should "display label tag in haml for advanced form" do
118
+ visit '/haml/form_tag'
119
+ assert_have_selector 'form.advanced-form label', :count => 4
120
+ assert_have_selector 'form.advanced-form label.first', :content => "Nickname", :for => 'username'
121
+ assert_have_selector 'form.advanced-form label.first', :content => "Password", :for => 'password'
122
+ assert_have_selector 'form.advanced-form label.about', :content => "About Me", :for => 'about'
123
+ assert_have_selector 'form.advanced-form label.photo', :content => "Photo" , :for => 'photo'
124
+ end
125
+ end
126
+
127
+ context 'for #text_field_tag method' do
128
+ should "display text field in ruby" do
129
+ actual_html = text_field_tag(:username, :class => 'long')
130
+ assert_has_tag(:input, :type => 'text', :class => "long", :name => 'username') { actual_html }
131
+ end
132
+
133
+ should "display text field in erb" do
134
+ visit '/erb/form_tag'
135
+ assert_have_selector 'form.simple-form input[type=text]', :count => 1, :name => 'username'
136
+ assert_have_selector 'form.advanced-form fieldset input[type=text]', :count => 1, :name => 'username', :id => 'the_username'
137
+ end
138
+
139
+ should "display text field in haml" do
140
+ visit '/haml/form_tag'
141
+ assert_have_selector 'form.simple-form input[type=text]', :count => 1, :name => 'username'
142
+ assert_have_selector 'form.advanced-form fieldset input[type=text]', :count => 1, :name => 'username', :id => 'the_username'
143
+ end
144
+ end
145
+
146
+ context 'for #text_area_tag method' do
147
+ should "display text area in ruby" do
148
+ actual_html = text_area_tag(:about, :class => 'long')
149
+ assert_has_tag(:textarea, :class => "long", :name => 'about') { actual_html }
150
+ end
151
+
152
+ should "display text area in erb" do
153
+ visit '/erb/form_tag'
154
+ assert_have_selector 'form.advanced-form textarea', :count => 1, :name => 'about', :class => 'large'
155
+ end
156
+
157
+ should "display text area in haml" do
158
+ visit '/haml/form_tag'
159
+ assert_have_selector 'form.advanced-form textarea', :count => 1, :name => 'about', :class => 'large'
160
+ end
161
+ end
162
+
163
+ context 'for #password_field_tag method' do
164
+ should "display password field in ruby" do
165
+ actual_html = password_field_tag(:password, :class => 'long')
166
+ assert_has_tag(:input, :type => 'password', :class => "long", :name => 'password') { actual_html }
167
+ end
168
+
169
+ should "display password field in erb" do
170
+ visit '/erb/form_tag'
171
+ assert_have_selector 'form.simple-form input[type=password]', :count => 1, :name => 'password'
172
+ assert_have_selector 'form.advanced-form input[type=password]', :count => 1, :name => 'password'
173
+ end
174
+
175
+ should "display password field in haml" do
176
+ visit '/haml/form_tag'
177
+ assert_have_selector 'form.simple-form input[type=password]', :count => 1, :name => 'password'
178
+ assert_have_selector 'form.advanced-form input[type=password]', :count => 1, :name => 'password'
179
+ end
180
+ end
181
+
182
+ context 'for #file_field_tag method' do
183
+ should "display file field in ruby" do
184
+ actual_html = file_field_tag(:photo, :class => 'photo')
185
+ assert_has_tag(:input, :type => 'file', :class => "photo", :name => 'photo') { actual_html }
186
+ end
187
+
188
+ should "display file field in erb" do
189
+ visit '/erb/form_tag'
190
+ assert_have_selector 'form.advanced-form input[type=file]', :count => 1, :name => 'photo', :class => 'upload'
191
+ end
192
+
193
+ should "display file field in haml" do
194
+ visit '/haml/form_tag'
195
+ assert_have_selector 'form.advanced-form input[type=file]', :count => 1, :name => 'photo', :class => 'upload'
196
+ end
197
+ end
198
+
199
+ context 'for #submit_tag method' do
200
+ should "display submit tag in ruby" do
201
+ actual_html = submit_tag("Update", :class => 'success')
202
+ assert_has_tag(:input, :type => 'submit', :class => "success", :value => 'Update') { actual_html }
203
+ end
204
+
205
+ should "display submit tag in erb" do
206
+ visit '/erb/form_tag'
207
+ assert_have_selector 'form.simple-form input[type=submit]', :count => 1, :value => "Submit"
208
+ assert_have_selector 'form.advanced-form input[type=submit]', :count => 1, :value => "Login"
209
+ end
210
+
211
+ should "display submit tag in haml" do
212
+ visit '/haml/form_tag'
213
+ assert_have_selector 'form.simple-form input[type=submit]', :count => 1, :value => "Submit"
214
+ assert_have_selector 'form.advanced-form input[type=submit]', :count => 1, :value => "Login"
215
+ end
216
+ end
10
217
  end
@@ -8,25 +8,29 @@ class TestTagHelpers < Test::Unit::TestCase
8
8
 
9
9
  context 'for #tag method' do
10
10
  should("support tags with no content no attributes") do
11
- assert_equal '<br />', tag(:br)
11
+ assert_has_tag(:br) { tag(:br) }
12
12
  end
13
13
  should("support tags with no content with attributes") do
14
- assert_equal '<br class="yellow" style="clear:both" />', tag(:br, :style => 'clear:both', :class => 'yellow')
14
+ actual_html = tag(:br, :style => 'clear:both', :class => 'yellow')
15
+ assert_has_tag(:br, :class => 'yellow', :style=>'clear:both') { actual_html }
15
16
  end
16
17
  should "support tags with content no attributes" do
17
- assert_equal '<p>Demo String</p>', tag(:p, :content => "Demo String")
18
+ assert_has_tag(:p, :content => "Demo String") { tag(:p, :content => "Demo String") }
18
19
  end
19
20
  should "support tags with content and attributes" do
20
- assert_equal '<p class="large" id="intro">Demo</p>', tag(:p, :content => "Demo", :class => 'large', :id => 'intro')
21
+ actual_html = tag(:p, :content => "Demo", :class => 'large', :id => 'intro')
22
+ assert_has_tag('p#intro.large', :content => "Demo") { actual_html }
21
23
  end
22
24
  end
23
25
 
24
26
  context 'for #content_tag method' do
25
27
  should "support tags with content as parameter" do
26
- assert_equal '<p class="large" id="intro">Demo</p>', content_tag(:p, "Demo", :class => 'large', :id => 'intro')
28
+ actual_html = content_tag(:p, "Demo", :class => 'large', :id => 'thing')
29
+ assert_has_tag('p.large#thing', :content => "Demo") { actual_html }
27
30
  end
28
31
  should "support tags with content as block" do
29
- assert_equal '<p class="large" id="intro">Demo</p>', content_tag(:p, :class => 'large', :id => 'intro') { "Demo" }
32
+ actual_html = content_tag(:p, :class => 'large', :id => 'star') { "Demo" }
33
+ assert_has_tag('p.large#star', :content => "Demo") { actual_html }
30
34
  end
31
35
  should "support tags with erb" do
32
36
  visit '/erb/content_tag'
@@ -47,10 +51,11 @@ class TestTagHelpers < Test::Unit::TestCase
47
51
 
48
52
  context 'for #input_tag method' do
49
53
  should "support field with type" do
50
- assert_equal '<input type="text" />', input_tag(:text)
54
+ assert_has_tag('input[type=text]') { input_tag(:text) }
51
55
  end
52
56
  should "support field with type and options" do
53
- assert_equal '<input class="first" id="texter" type="text" />', input_tag(:text, :class => "first", :id => 'texter')
57
+ actual_html = input_tag(:text, :class => "first", :id => 'texter')
58
+ assert_has_tag('input.first#texter[type=text]') { actual_html }
54
59
  end
55
60
  end
56
61
 
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.1.5
4
+ version: 0.1.6
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-26 00:00:00 -07:00
12
+ date: 2009-10-27 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -128,6 +128,8 @@ files:
128
128
  - test/fixtures/markup_app/views/capture_concat.haml
129
129
  - test/fixtures/markup_app/views/content_tag.erb
130
130
  - test/fixtures/markup_app/views/content_tag.haml
131
+ - test/fixtures/markup_app/views/form_tag.erb
132
+ - test/fixtures/markup_app/views/form_tag.haml
131
133
  - test/fixtures/markup_app/views/link_to.erb
132
134
  - test/fixtures/markup_app/views/link_to.haml
133
135
  - test/fixtures/render_app/app.rb