rails-bootstrap-helpers 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +15 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +158 -0
  4. data/Rakefile +38 -0
  5. data/lib/rails-bootstrap-helpers.rb +20 -0
  6. data/lib/rails-bootstrap-helpers/core_ext/abstract.rb +72 -0
  7. data/lib/rails-bootstrap-helpers/helpers/alert_helper.rb +45 -0
  8. data/lib/rails-bootstrap-helpers/helpers/base_helper.rb +32 -0
  9. data/lib/rails-bootstrap-helpers/helpers/button_helper.rb +55 -0
  10. data/lib/rails-bootstrap-helpers/helpers/form_tag_helper.rb +22 -0
  11. data/lib/rails-bootstrap-helpers/helpers/label_helper.rb +35 -0
  12. data/lib/rails-bootstrap-helpers/helpers/options_helper.rb +32 -0
  13. data/lib/rails-bootstrap-helpers/rails/engine.rb +15 -0
  14. data/lib/rails-bootstrap-helpers/renderers/abstract_button_renderer.rb +86 -0
  15. data/lib/rails-bootstrap-helpers/renderers/button_renderer.rb +43 -0
  16. data/lib/rails-bootstrap-helpers/renderers/renderer.rb +14 -0
  17. data/lib/rails-bootstrap-helpers/version.rb +3 -0
  18. data/lib/tasks/bootstrap-rails-helpers_tasks.rake +4 -0
  19. data/spec/dummy/README.rdoc +261 -0
  20. data/spec/dummy/Rakefile +7 -0
  21. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  22. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  23. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  24. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  25. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  26. data/spec/dummy/config.ru +4 -0
  27. data/spec/dummy/config/application.rb +59 -0
  28. data/spec/dummy/config/boot.rb +10 -0
  29. data/spec/dummy/config/database.yml +25 -0
  30. data/spec/dummy/config/environment.rb +5 -0
  31. data/spec/dummy/config/environments/development.rb +37 -0
  32. data/spec/dummy/config/environments/production.rb +67 -0
  33. data/spec/dummy/config/environments/test.rb +37 -0
  34. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  35. data/spec/dummy/config/initializers/inflections.rb +15 -0
  36. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  37. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  38. data/spec/dummy/config/initializers/session_store.rb +8 -0
  39. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  40. data/spec/dummy/config/locales/en.yml +5 -0
  41. data/spec/dummy/config/routes.rb +58 -0
  42. data/spec/dummy/db/test.sqlite3 +0 -0
  43. data/spec/dummy/log/test.log +47 -0
  44. data/spec/dummy/public/404.html +26 -0
  45. data/spec/dummy/public/422.html +26 -0
  46. data/spec/dummy/public/500.html +25 -0
  47. data/spec/dummy/public/favicon.ico +0 -0
  48. data/spec/dummy/script/rails +6 -0
  49. data/spec/helpers/alert_helper_spec.rb +24 -0
  50. data/spec/helpers/base_helper_spec.rb +18 -0
  51. data/spec/helpers/button_helper_spec.rb +94 -0
  52. data/spec/helpers/form_tag_helper_spec.rb +43 -0
  53. data/spec/helpers/label_helper_spec.rb +23 -0
  54. data/spec/helpers/options_helper_spec.rb +47 -0
  55. data/spec/spec_helper.rb +20 -0
  56. data/spec/support/matchers/helpers/alert_helper/render_bs_alert.rb +116 -0
  57. data/spec/support/matchers/helpers/base_helper/render_icon.rb +55 -0
  58. data/spec/support/matchers/helpers/button_helper/render_bs_button_to.rb +135 -0
  59. data/spec/support/matchers/helpers/button_helper/render_inline_button_to.rb +79 -0
  60. data/spec/support/matchers/helpers/form_tag_helper/render_bs_button_tag.rb +136 -0
  61. data/spec/support/matchers/helpers/label_helper/render_bs_label.rb +114 -0
  62. metadata +287 -0
File without changes
@@ -0,0 +1,47 @@
1
+ Connecting to database specified by database.yml
2
+ Connecting to database specified by database.yml
3
+ Connecting to database specified by database.yml
4
+ Connecting to database specified by database.yml
5
+ Connecting to database specified by database.yml
6
+ Connecting to database specified by database.yml
7
+  (0.3ms) begin transaction
8
+  (0.1ms) rollback transaction
9
+  (0.1ms) begin transaction
10
+  (0.0ms) rollback transaction
11
+  (0.0ms) begin transaction
12
+  (0.0ms) rollback transaction
13
+  (0.0ms) begin transaction
14
+  (0.0ms) rollback transaction
15
+  (0.0ms) begin transaction
16
+  (0.0ms) rollback transaction
17
+  (0.1ms) begin transaction
18
+  (0.0ms) rollback transaction
19
+ Connecting to database specified by database.yml
20
+ Connecting to database specified by database.yml
21
+ Connecting to database specified by database.yml
22
+ Connecting to database specified by database.yml
23
+ Connecting to database specified by database.yml
24
+ Connecting to database specified by database.yml
25
+ Connecting to database specified by database.yml
26
+ Connecting to database specified by database.yml
27
+ Connecting to database specified by database.yml
28
+ Connecting to database specified by database.yml
29
+ Connecting to database specified by database.yml
30
+ Connecting to database specified by database.yml
31
+ Connecting to database specified by database.yml
32
+ Connecting to database specified by database.yml
33
+ Connecting to database specified by database.yml
34
+ Connecting to database specified by database.yml
35
+ Connecting to database specified by database.yml
36
+ Connecting to database specified by database.yml
37
+ Connecting to database specified by database.yml
38
+ Connecting to database specified by database.yml
39
+ Connecting to database specified by database.yml
40
+ Connecting to database specified by database.yml
41
+ Connecting to database specified by database.yml
42
+ Connecting to database specified by database.yml
43
+ Connecting to database specified by database.yml
44
+ Connecting to database specified by database.yml
45
+ Connecting to database specified by database.yml
46
+ Connecting to database specified by database.yml
47
+ Connecting to database specified by database.yml
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ </div>
24
+ </body>
25
+ </html>
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,24 @@
1
+ require "spec_helper"
2
+
3
+ describe RailsBootstrapHelpers::Helpers::AlertHelper do
4
+ describe "bs_alert" do
5
+ it { should render_bs_alert("foo") }
6
+
7
+ context "with type" do
8
+ it { should render_bs_alert("foo").with_type(:error) }
9
+ it { should render_bs_alert("foo").with_type(:success) }
10
+ it { should render_bs_alert("foo").with_type(:info) }
11
+ it { should render_bs_alert("foo").with_type(:warning) }
12
+ it { should render_bs_alert("foo").with_type(:default) }
13
+ it { should render_bs_alert("foo").with_type(:notice).as_class(:success) }
14
+
15
+ context "custom" do
16
+ it { should render_bs_alert("foo").with_type(:bar) }
17
+ end
18
+ end
19
+
20
+ context "as block" do
21
+ it { should render_bs_alert("foo").as_block(true) }
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ require "spec_helper"
2
+
3
+ describe RailsBootstrapHelpers::Helpers::BaseHelper do
4
+ describe "icon" do
5
+ it { should render_icon(:edit) }
6
+ it { should render_icon("remove") }
7
+
8
+ context "with invert icon" do
9
+ it { should render_icon(:edit).inverted(true) }
10
+ it { should render_icon("remove").inverted(true) }
11
+ end
12
+
13
+ context "custom icons" do
14
+ it { should render_icon(:foo) }
15
+ it { should render_icon("bar") }
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,94 @@
1
+ require "spec_helper"
2
+
3
+ describe RailsBootstrapHelpers::Helpers::ButtonHelper do
4
+ describe "bs_button_to" do
5
+ context "with url" do
6
+ it { should render_bs_button_to("foo").to("bar") }
7
+ end
8
+
9
+ context "with style" do
10
+ it { should render_bs_button_to("foo") }
11
+ it { should render_bs_button_to("foo").with_style(:default) }
12
+ it { should render_bs_button_to("foo").with_style(:primary) }
13
+ it { should render_bs_button_to("foo").with_style(:info) }
14
+ it { should render_bs_button_to("foo").with_style(:success) }
15
+ it { should render_bs_button_to("foo").with_style(:warning) }
16
+ it { should render_bs_button_to("foo").with_style(:danger) }
17
+ it { should render_bs_button_to("foo").with_style(:inverse) }
18
+ it { should render_bs_button_to("foo").with_style(:link) }
19
+ end
20
+
21
+ context "with size" do
22
+ it { should render_bs_button_to("foo").with_size(:default) }
23
+ it { should render_bs_button_to("foo").with_size(:large) }
24
+ it { should render_bs_button_to("foo").with_size(:small) }
25
+ it { should render_bs_button_to("foo").with_size(:mini) }
26
+ end
27
+
28
+ context "with icon" do
29
+ it { should render_bs_button_to("foo").with_icon(:ok) }
30
+ it { should render_bs_button_to("foo").with_icon(:edit) }
31
+ it { should render_bs_button_to("foo").with_icon(:none) }
32
+ end
33
+
34
+ context "with inverted icon" do
35
+ it { should render_bs_button_to("foo").with_icon(:ok).with_icon_inverted(true) }
36
+ it { should render_bs_button_to("foo").with_icon(:edit).with_icon_inverted(true) }
37
+ end
38
+
39
+ context "with icon position" do
40
+ it { should render_bs_button_to("foo").with_icon_position(:default) }
41
+ it { should render_bs_button_to("foo").with_icon_position(:left) }
42
+ it { should render_bs_button_to("foo").with_icon_position(:right) }
43
+ end
44
+ end
45
+
46
+ describe "bs_inline_button_to" do
47
+ it { should render_inline_button_to("foo", "edit") }
48
+
49
+ context "with size" do
50
+ it { should render_inline_button_to("foo", "edit").with_size(:large) }
51
+ it { should render_inline_button_to("foo", "edit").with_size(:small) }
52
+ it { should render_inline_button_to("foo", "edit").with_size(:mini) }
53
+ end
54
+ end
55
+
56
+ describe "bs_popover_button" do
57
+ let(:attributes) do
58
+ {
59
+ href: '#',
60
+ class: "btn",
61
+ :"data-content" => "bar",
62
+ :"data-placement" => "bottom",
63
+ :"data-toggle" => "popover"
64
+ }
65
+ end
66
+
67
+ let(:html_attributes) do
68
+ attributes.map{ |k, v| "#{k}=\"#{v}\"" }.join(" ")
69
+ end
70
+
71
+ it "should render a button with a popover" do
72
+ html = "<a #{html_attributes}>foo</a>"
73
+
74
+ helper.bs_popover_button("foo", "bar").should == html
75
+ end
76
+
77
+ context "render popover using block" do
78
+ it "should render a button with a popover" do
79
+ html = "<a #{html_attributes}>foo</a>"
80
+
81
+ helper.bs_popover_button("foo") { "bar" }.should == html
82
+ end
83
+ end
84
+
85
+ context "with custom placement" do
86
+ it "should render a button with a popover" do
87
+ attributes[:"data-placement"] = "top"
88
+ html = "<a #{html_attributes}>foo</a>"
89
+
90
+ helper.bs_popover_button("foo", "bar", placement: "top").should == html
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,43 @@
1
+ require "spec_helper"
2
+
3
+ describe RailsBootstrapHelpers::Helpers::FormTagHelper do
4
+ describe "bs_button_tag" do
5
+ it { should render_bs_button_tag("foo", :submit) }
6
+ it { should render_bs_button_tag("bar", :reset) }
7
+
8
+ context "with style" do
9
+ it { should render_bs_button_tag("foo", :submit).with_style(:default) }
10
+ it { should render_bs_button_tag("foo", :submit).with_style(:primary) }
11
+ it { should render_bs_button_tag("foo", :submit).with_style(:info) }
12
+ it { should render_bs_button_tag("foo", :submit).with_style(:success) }
13
+ it { should render_bs_button_tag("foo", :submit).with_style(:warning) }
14
+ it { should render_bs_button_tag("foo", :submit).with_style(:danger) }
15
+ it { should render_bs_button_tag("foo", :submit).with_style(:inverse) }
16
+ it { should render_bs_button_tag("foo", :submit).with_style(:link) }
17
+ end
18
+
19
+ context "with size" do
20
+ it { should render_bs_button_tag("foo", :submit).with_size(:default) }
21
+ it { should render_bs_button_tag("foo", :submit).with_size(:large) }
22
+ it { should render_bs_button_tag("foo", :submit).with_size(:small) }
23
+ it { should render_bs_button_tag("foo", :submit).with_size(:mini) }
24
+ end
25
+
26
+ context "with icon" do
27
+ it { should render_bs_button_tag("foo", :submit).with_icon(:ok) }
28
+ it { should render_bs_button_tag("foo", :submit).with_icon(:edit) }
29
+ it { should render_bs_button_tag("foo", :submit).with_icon(:none) }
30
+ end
31
+
32
+ context "with inverted icon" do
33
+ it { should render_bs_button_tag("foo", :submit).with_icon(:ok).with_icon_inverted(true) }
34
+ it { should render_bs_button_tag("foo", :submit).with_icon(:edit).with_icon_inverted(true) }
35
+ end
36
+
37
+ context "with icon position" do
38
+ it { should render_bs_button_tag("foo", :submit).with_icon_position(:default) }
39
+ it { should render_bs_button_tag("foo", :submit).with_icon_position(:left) }
40
+ it { should render_bs_button_tag("foo", :submit).with_icon_position(:right) }
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,23 @@
1
+ require "spec_helper"
2
+
3
+ describe RailsBootstrapHelpers::Helpers::LabelHelper do
4
+ describe "bs_label" do
5
+ it { should render_bs_label("foo") }
6
+ it { should render_bs_label("foo").with_style(:success) }
7
+ it { should render_bs_label("foo").with_style(:warning) }
8
+ it { should render_bs_label("foo").with_style(:important) }
9
+ it { should render_bs_label("foo").with_style(:info) }
10
+ it { should render_bs_label("foo").with_style(:inverse) }
11
+
12
+ context "custom statuses" do
13
+ it { should render_bs_label("foo").with_style(:active).as_class("success") }
14
+ it { should render_bs_label("foo").with_style(:inactive).as_class("default") }
15
+ it { should render_bs_label("foo").with_style(:error).as_class("important") }
16
+ end
17
+
18
+ context "with tooltip" do
19
+ it { should render_bs_label("foo").with_tooltip("bar") }
20
+ it { should render_bs_label("foo").with_tooltip("bar").with_tooltip_position(:left) }
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,47 @@
1
+ require "spec_helper"
2
+
3
+ describe RailsBootstrapHelpers::Helpers::OptionsHelper do
4
+ describe "bs_options" do
5
+ context "recognized options" do
6
+ it "should not override unrecognized options" do
7
+ expected = { :"data-toggle" => "bar", title: "text" }
8
+ options = expected.merge tooltip: "foo"
9
+ helper.bs_options(options).should == expected
10
+ end
11
+
12
+ context "tooltip" do
13
+ let(:options) do
14
+ { tooltip: "foo" }
15
+ end
16
+
17
+ let(:expected) do
18
+ { :"data-toggle" => "tooltip", title: "foo" }
19
+ end
20
+
21
+ it "should handle the :tooltip option" do
22
+ helper.bs_options(options).should == expected
23
+ end
24
+
25
+ it "should handle the :tooltip_position option" do
26
+ options[:tooltip_position] = "left"
27
+ expected[:"data-placement"] = "left"
28
+ helper.bs_options(options).should == expected
29
+ end
30
+
31
+ it "should not handle :tooltip_position if :tooltip is not specified" do
32
+ options.delete(:tooltip)
33
+ options[:tooltip_position] = "left"
34
+ expected[:"data-placement"] = "left"
35
+ helper.bs_options(options).should_not == expected
36
+ end
37
+ end
38
+ end
39
+
40
+ context "unrecognized options" do
41
+ it "should leave unrecognized options intact" do
42
+ options = { a: 3, href: "foo", :"data-placement" => "left", title: "foo" }
43
+ helper.bs_options(options).should == options
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,20 @@
1
+ require "rubygems"
2
+ require "spork"
3
+
4
+ Spork.prefork do
5
+ ENV["RAILS_ENV"] ||= 'test'
6
+ require File.expand_path("../dummy/config/environment", __FILE__)
7
+
8
+ require "rspec/rails"
9
+ require "rspec/autorun"
10
+
11
+ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
12
+
13
+ RSpec.configure do |config|
14
+ config.order = "random"
15
+ end
16
+ end
17
+
18
+ Spork.each_run do
19
+ require "rails-bootstrap-helpers"
20
+ end
@@ -0,0 +1,116 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ RSpec::Matchers.define :render_bs_alert do |text|
4
+ def options
5
+ @options ||= { }
6
+ end
7
+
8
+ def text
9
+ @text
10
+ end
11
+
12
+ def cls
13
+ cls = "alert"
14
+
15
+ if type?
16
+ type = options[:type].to_s
17
+
18
+ if type == "notice"
19
+ type = "success"
20
+ end
21
+
22
+ unless type == "warning" || type == "default"
23
+ cls << " alert-#{type}"
24
+ end
25
+ end
26
+
27
+ if block?
28
+ cls << " alert-block"
29
+ end
30
+
31
+ cls
32
+ end
33
+
34
+ def expected
35
+ @render_alert_expected ||= begin
36
+ text = self.text
37
+
38
+ if dismiss_button?
39
+ text = text + '<button type="button" class="close" data-dismiss="alert">×</button>'
40
+ end
41
+
42
+ "<div class=\"#{cls}\">#{text}</div>"
43
+ end
44
+ end
45
+
46
+ def got
47
+ @got ||= helper.bs_alert(text, options)
48
+ end
49
+
50
+ def failure_message (is_not)
51
+ ex = is_not ? "expected not" : "expected"
52
+ "#{ex}: #{expected}\n got: #{got}"
53
+ end
54
+
55
+ def html_class
56
+ @html_class ||= class? ? options[:class].to_s : options[:status].to_s
57
+ end
58
+
59
+ def type?
60
+ @type_set
61
+ end
62
+
63
+ def block?
64
+ @block_set
65
+ end
66
+
67
+ def dismiss_button?
68
+ @dismiss_button_set
69
+ end
70
+
71
+ def class?
72
+ @class_set
73
+ end
74
+
75
+ chain :with_type do |type|
76
+ options[:type] = type
77
+ @type_set = true
78
+ end
79
+
80
+ chain :with_dismiss_button do |dismiss_button|
81
+ options[:dismiss_button] = dismiss_button
82
+ @dismiss_button_set = true
83
+ end
84
+
85
+ chain :as_block do |block|
86
+ options[:block] = block
87
+ @block_set = true
88
+ end
89
+
90
+ chain :as_class do |cls|
91
+ options[:class] = cls
92
+ @class_set = true
93
+ end
94
+
95
+ match do
96
+ @text = text
97
+ expected == got
98
+ end
99
+
100
+ failure_message_for_should do
101
+ failure_message(false)
102
+ end
103
+
104
+ failure_message_for_should_not do
105
+ failure_message(true)
106
+ end
107
+
108
+ description do
109
+ desc = "render an alert '#{text}'"
110
+ desc << " as block" if block?
111
+ desc << " with dismiss button" if dismiss_button?
112
+ desc << " with the type: #{options[:type]}" if type?
113
+ desc << " as the class #{html_class}" if class?
114
+ desc
115
+ end
116
+ end