bootstrap-shoehorn 1.0.0

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.
Files changed (58) hide show
  1. data/.gitignore +9 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +4 -0
  5. data/README.md +336 -0
  6. data/Rakefile +32 -0
  7. data/lib/shoehorn.rb +15 -0
  8. data/lib/shoehorn/components.rb +17 -0
  9. data/lib/shoehorn/components/alert.rb +69 -0
  10. data/lib/shoehorn/components/badge.rb +38 -0
  11. data/lib/shoehorn/components/base.rb +18 -0
  12. data/lib/shoehorn/components/button.rb +72 -0
  13. data/lib/shoehorn/components/dropdown.rb +55 -0
  14. data/lib/shoehorn/components/form.rb +14 -0
  15. data/lib/shoehorn/components/form/input_field.rb +53 -0
  16. data/lib/shoehorn/components/form/label.rb +8 -0
  17. data/lib/shoehorn/components/form_builder.rb +13 -0
  18. data/lib/shoehorn/components/icon.rb +40 -0
  19. data/lib/shoehorn/components/label.rb +39 -0
  20. data/lib/shoehorn/components/modal.rb +62 -0
  21. data/lib/shoehorn/components/navigation.rb +47 -0
  22. data/lib/shoehorn/components/progress_bar.rb +51 -0
  23. data/lib/shoehorn/engine.rb +19 -0
  24. data/lib/shoehorn/helper_collection.rb +58 -0
  25. data/lib/shoehorn/helper_collection_set.rb +18 -0
  26. data/lib/shoehorn/helpers.rb +14 -0
  27. data/lib/shoehorn/helpers/alert_helpers.rb +37 -0
  28. data/lib/shoehorn/helpers/badge_helpers.rb +38 -0
  29. data/lib/shoehorn/helpers/button_helpers.rb +122 -0
  30. data/lib/shoehorn/helpers/form_helpers.rb +11 -0
  31. data/lib/shoehorn/helpers/icon_helpers.rb +34 -0
  32. data/lib/shoehorn/helpers/label_helpers.rb +37 -0
  33. data/lib/shoehorn/helpers/modal_helpers.rb +43 -0
  34. data/lib/shoehorn/helpers/navigation_helpers.rb +32 -0
  35. data/lib/shoehorn/helpers/progress_bar_helpers.rb +25 -0
  36. data/lib/shoehorn/plugins.rb +6 -0
  37. data/lib/shoehorn/plugins/simple_navigation/renderer/bootstrap_topbar_list.rb +72 -0
  38. data/lib/shoehorn/version.rb +3 -0
  39. data/log/development.log +0 -0
  40. data/shoehorn.gemspec +33 -0
  41. data/spec/helpers/alert_helpers_spec.rb +138 -0
  42. data/spec/helpers/button_helpers_spec.rb +102 -0
  43. data/spec/helpers/form_helpers_spec.rb +136 -0
  44. data/spec/helpers/inline_label_helpers_spec.rb +50 -0
  45. data/spec/helpers/modal_helpers_spec.rb +60 -0
  46. data/spec/helpers/navigation_helpers_spec.rb +61 -0
  47. data/spec/helpers/progress_bar_helpers_spec.rb +34 -0
  48. data/spec/integration/action_view_spec.rb +23 -0
  49. data/spec/integration/readme_spec.rb +14 -0
  50. data/spec/plugins/bootstrap_topbar_list_spec.rb +11 -0
  51. data/spec/spec_helper.rb +11 -0
  52. data/spec/support/bootstrap_button_macros.rb +8 -0
  53. data/spec/support/bootstrap_form_macros.rb +8 -0
  54. data/spec/support/bootstrap_modal_macros.rb +8 -0
  55. data/spec/support/bootstrap_navigation_macros.rb +8 -0
  56. data/spec/support/bootstrap_spec_helper.rb +50 -0
  57. data/spec/support/test_environment.rb +23 -0
  58. metadata +265 -0
@@ -0,0 +1,136 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Twitter::Bootstrap::Markup::Rails::Helpers::FormHelpers do
5
+ include BootstrapSpecHelper
6
+ include BootstrapFormMacros
7
+
8
+ describe "#bootstrap_form_for" do
9
+ it "should create a form tag" do
10
+ block = Proc.new {}
11
+ concat bootstrap_form_for 'an_object', :url => 'a_url', &block
12
+ output_buffer.should have_tag('form')
13
+ end
14
+
15
+ context "text_field" do
16
+ it "should wrap a text input within the magical div tags" do
17
+ build_bootstrap_form do |f|
18
+ f.text_field 'method'
19
+ end
20
+
21
+ output_buffer.should have_tag('div.control-group div.controls input[type=text]')
22
+ end
23
+
24
+ it "should add a label tag if :label is true" do
25
+ build_bootstrap_form do |f|
26
+ f.text_field 'method', :label => true
27
+ end
28
+
29
+ output_buffer.should have_tag('div.control-group') do |div|
30
+ div.should have_tag('label.control-label')
31
+ div.should have_tag('div.controls') do |div|
32
+ div.should have_tag('input')
33
+ end
34
+ end
35
+ end
36
+
37
+ it "should add a label tag with custom text if :label_text is specified" do
38
+ build_bootstrap_form do |f|
39
+ f.text_field 'method', :label_text => 'a custom label'
40
+ end
41
+
42
+ output_buffer.should have_tag('div.control-group') do |div|
43
+ div.should have_tag('label.control-label', :text => 'a custom label')
44
+ div.should have_tag('div.controls') do |div|
45
+ div.should have_tag('input')
46
+ end
47
+ end
48
+ end
49
+
50
+ context "add_on" do
51
+ it "should wrap the input in div.input-prepend if :add_on hash is specified" do
52
+ build_bootstrap_form do |f|
53
+ f.text_field 'method', :add_on => {}
54
+ end
55
+
56
+ output_buffer.should have_tag('div.control-group') do |div|
57
+ div.should have_tag('div.controls') do |div|
58
+ div.should have_tag('div.input-prepend') do |div|
59
+ div.should have_tag('input')
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ it "should wrap the input in div.input-append if :position is :append" do
66
+ build_bootstrap_form do |f|
67
+ f.text_field 'method', :add_on => {:position => :append}
68
+ end
69
+
70
+ output_buffer.should have_tag('div.control-group') do |div|
71
+ div.should have_tag('div.controls') do |div|
72
+ div.should have_tag('div.input-append') do |div|
73
+ div.should have_tag('input')
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+ it "should add a span with text if :text is specified" do
80
+ build_bootstrap_form do |f|
81
+ f.text_field 'method', :add_on => {:text => 'a text'}
82
+ end
83
+
84
+ output_buffer.should have_tag('div.control-group') do |div|
85
+ div.should have_tag('div.controls') do |div|
86
+ div.should have_tag('div.input-prepend') do |div|
87
+ div.should have_tag('input')
88
+ div.should have_tag('span', :class => 'add-on', :text => 'a text')
89
+ end
90
+ end
91
+ end
92
+ end
93
+
94
+ it "should add a span with icon if :icon is specified" do
95
+ build_bootstrap_form do |f|
96
+ f.text_field 'method', :add_on => {:icon => 'icon-envelope'}
97
+ end
98
+
99
+ output_buffer.should have_tag('div.control-group') do |div|
100
+ div.should have_tag('div.controls') do |div|
101
+ div.should have_tag('div.input-prepend') do |div|
102
+ div.should have_tag('input')
103
+ div.should have_tag('span', :class => 'add-on') do |span|
104
+ span.should have_tag('i', :class => 'icon-envelope')
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+
111
+ it "should add a help-block with custom text if :html_text is specified" do
112
+ build_bootstrap_form do |f|
113
+ f.text_field 'method', :help_text => 'You need help!'
114
+ end
115
+
116
+ output_buffer.should have_tag('div.control-group') do |div|
117
+ div.should have_tag('div.controls') do |div|
118
+ div.should have_tag('p', :class => 'help-block', :text => 'You need help!')
119
+ end
120
+ end
121
+ end
122
+
123
+ end
124
+ end
125
+
126
+ context "password_field" do
127
+ it "should wrap a text input within the magical div tags" do
128
+ build_bootstrap_form do |f|
129
+ f.password_field 'method'
130
+ end
131
+
132
+ output_buffer.should have_tag('div.control-group div.controls input[type=password]')
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twitter::Bootstrap::Markup::Rails::Helpers::InlineLabelHelpers do
4
+ include BootstrapSpecHelper
5
+
6
+ describe "#inline_label_tag" do
7
+ before do
8
+ @output_buffer = ''
9
+ end
10
+
11
+ it "has label class" do
12
+ concat bootstrap_inline_label_tag("Hi There")
13
+ output_buffer.should have_tag("span.label")
14
+ end
15
+
16
+ it "has a message" do
17
+ concat bootstrap_inline_label_tag("Hi There")
18
+ output_buffer.should have_tag("span", "Hi There")
19
+ end
20
+
21
+ it "should add html_options to the resulting SPAN tag when specified" do
22
+ concat bootstrap_inline_label_tag("Testing", :html_options => {:"data-test" => "42"})
23
+ output_buffer.should have_tag("span[data-test='42']")
24
+ end
25
+ end
26
+
27
+ %w(success warning important notice).each do |type|
28
+ describe "#inline_label_#{type}_tag" do
29
+ before do
30
+ @output_buffer = ''
31
+ end
32
+
33
+ it "has label class" do
34
+ concat send("bootstrap_inline_label_#{type}_tag", "Message")
35
+ output_buffer.should have_tag("span.label")
36
+ end
37
+
38
+ it "has #{type} class" do
39
+ concat send("bootstrap_inline_label_#{type}_tag", "Message")
40
+ output_buffer.should have_tag("span.#{type}")
41
+ end
42
+
43
+ it "has a message" do
44
+ concat send("bootstrap_inline_label_#{type}_tag", "Message")
45
+ output_buffer.should have_tag('span', /Message/)
46
+ end
47
+ end
48
+ end
49
+ end
50
+
@@ -0,0 +1,60 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Twitter::Bootstrap::Markup::Rails::Helpers::ModalHelpers do
5
+ include BootstrapSpecHelper
6
+ include BootstrapModalMacros
7
+
8
+ describe "#bootstrap_modal" do
9
+ before do
10
+ @output_buffer = ''
11
+ build_bootstrap_modal(:dom_id => "an_id", :fade => true, :header_title => "a title") do |modal|
12
+ modal.body do |body|
13
+ body.content_tag :div, "the body"
14
+ end
15
+ modal.footer do |footer|
16
+ footer.content_tag :div, "the footer"
17
+ end
18
+ end
19
+ end
20
+
21
+ it "should create a modal popup with header, body and footer" do
22
+ output_buffer.should have_tag('div.modal') do |div|
23
+ div.should have_tag('div.modal-header')
24
+ div.should have_tag('div.modal-body')
25
+ div.should have_tag('div.modal-footer')
26
+ end
27
+ end
28
+
29
+ it "should create a modal popup with the given DOM ID" do
30
+ output_buffer.should have_tag('div.modal#an_id')
31
+ end
32
+
33
+ it "should create a modal popup with the CSS class set if fade was passed" do
34
+ output_buffer.should have_tag('div.modal.fade#an_id')
35
+ end
36
+
37
+ it "should create a modal popup with the given header title" do
38
+ output_buffer.should have_tag('div.modal#an_id') do |div|
39
+ div.should have_tag("h3", :text => "a title")
40
+ end
41
+ end
42
+
43
+ it "should create a modal popup with the given body content placed" do
44
+ output_buffer.should have_tag('div.modal#an_id') do |div|
45
+ div.should have_tag("div.modal-body") do |body|
46
+ body.should have_tag("div", :text => "the body")
47
+ end
48
+ end
49
+ end
50
+
51
+ it "should create a modal popup with the given footer content placed" do
52
+ output_buffer.should have_tag('div.modal#an_id') do |div|
53
+ div.should have_tag("div.modal-footer") do |body|
54
+ body.should have_tag("div", :text => "the footer")
55
+ end
56
+ end
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,61 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Twitter::Bootstrap::Markup::Rails::Helpers::NavigationHelpers do
5
+ include BootstrapSpecHelper
6
+ include BootstrapNavigationMacros
7
+
8
+ describe "#bootstrap_navigation" do
9
+ before do
10
+ @output_buffer = ''
11
+ end
12
+
13
+ it "should create a basic navigation list of type tabs" do
14
+ build_bootstrap_navigation do |nav|
15
+ nav.link_to "Nav1", "/link1", :active_nav => true
16
+ nav.link_to "Nav2", "/link2"
17
+ end
18
+
19
+ output_buffer.should have_tag('ul.nav.nav-tabs') do |ul|
20
+ ul.should have_tag('li[@class="active"] a[@href="/link1"]')
21
+ ul.should have_tag('li a[@href="/link1"]')
22
+ end
23
+ end
24
+
25
+ it "should create a basic navigation list of type pills" do
26
+ build_bootstrap_navigation(:type => "pills") do |nav|
27
+ nav.link_to "Nav1", "/link1"
28
+ nav.link_to "Nav2", "/link2", :active_nav => true
29
+ end
30
+
31
+ output_buffer.should have_tag('ul.nav.nav-pills') do |ul|
32
+ ul.should have_tag('li a[@href="/link1"]')
33
+ ul.should have_tag('li[class="active"] a[@href="/link2"]')
34
+ end
35
+ end
36
+
37
+ it "should create a vertical navigation list of type tabs when called with a list of links" do
38
+ build_bootstrap_navigation(:type => "tabs", :stacked => true) do |nav|
39
+ nav.link_to "Nav1", "/link1", :active_nav => true
40
+ nav.link_to "Nav2", "/link2"
41
+ end
42
+
43
+ output_buffer.should have_tag('ul.nav.nav-tabs.nav-stacked') do |ul|
44
+ ul.should have_tag('li[@class="active"] a[@href="/link1"]')
45
+ ul.should have_tag('li a[@href="/link1"]')
46
+ end
47
+ end
48
+
49
+ it "should create a vertical navigation list of type pills when called with a list of links" do
50
+ build_bootstrap_navigation(:type => "pills", :stacked => true) do |nav|
51
+ nav.link_to "Nav1", "/link1"
52
+ nav.link_to "Nav2", "/link2", :active_nav => true
53
+ end
54
+
55
+ output_buffer.should have_tag('ul.nav.nav-pills.nav-stacked') do |ul|
56
+ ul.should have_tag('li a[@href="/link1"]')
57
+ ul.should have_tag('li[@class="active"] a[@href="/link2"]')
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twitter::Bootstrap::Markup::Rails::Helpers::ProgressBarHelpers do
4
+ include BootstrapSpecHelper
5
+
6
+ before do
7
+ @output_buffer = ''
8
+ end
9
+
10
+ it 'should create a bar with the progress class' do
11
+ concat bootstrap_progress_bar_tag(40)
12
+ output_buffer.should have_tag("div.progress div.bar")
13
+ end
14
+
15
+ it 'should have the correct width' do
16
+ concat bootstrap_progress_bar_tag(40)
17
+ output_buffer.should have_tag(:div, :style => 'width: 40%;')
18
+ end
19
+
20
+ it 'stores sets the type of the progress bar' do
21
+ concat bootstrap_progress_bar_tag(40, :type => :striped)
22
+ output_buffer.should have_tag("div.progress.progress-striped")
23
+ end
24
+
25
+ it 'stores sets the types of the progress bar' do
26
+ concat bootstrap_progress_bar_tag(40, :type => [:striped, :warning])
27
+ output_buffer.should have_tag("div.progress.progress-striped.progress-warning")
28
+ end
29
+
30
+ it 'stores sets the active flag of the progress bar' do
31
+ concat bootstrap_progress_bar_tag(40, :active => true)
32
+ output_buffer.should have_tag("div.progress.active")
33
+ end
34
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActionView::Base do
4
+ before do
5
+ @view = ActionView::Base
6
+ end
7
+
8
+ it "includes alert helpers" do
9
+ @view.ancestors.should include(Twitter::Bootstrap::Markup::Rails::Helpers::AlertHelpers)
10
+ end
11
+
12
+ it "includes inline label helpers" do
13
+ @view.ancestors.should include(Twitter::Bootstrap::Markup::Rails::Helpers::InlineLabelHelpers)
14
+ end
15
+
16
+ it "includes inline form helpers" do
17
+ @view.ancestors.should include(Twitter::Bootstrap::Markup::Rails::Helpers::FormHelpers)
18
+ end
19
+
20
+ it "includes inline navigation helpers" do
21
+ @view.ancestors.should include(Twitter::Bootstrap::Markup::Rails::Helpers::NavigationHelpers)
22
+ end
23
+ end
@@ -0,0 +1,14 @@
1
+ describe "README.md" do
2
+ let(:version) {
3
+ require File.expand_path("../../../lib/shoehorn/version",
4
+ __FILE__)
5
+ Twitter::Bootstrap::Markup::Rails::VERSION
6
+ }
7
+
8
+ subject { File.read(File.expand_path("../../../README.md", __FILE__)) }
9
+
10
+ it "contains correct version number in gem declaration" do
11
+ subject.should include("gem 'shoehorn', '#{version}'")
12
+ end
13
+ end
14
+
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+ require 'simple_navigation'
3
+ require "shoehorn/plugins/simple_navigation/renderer/bootstrap_topbar_list"
4
+
5
+ describe SimpleNavigation::Renderer::BootstrapTopbarList do
6
+ it "registers the renderer" do
7
+ SimpleNavigation.registered_renderers.should include({
8
+ :bootstrap_topbar_list => SimpleNavigation::Renderer::BootstrapTopbarList
9
+ })
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+
3
+ if RUBY_VERSION =~ /^1\.9/
4
+ require 'simplecov'
5
+ ENV["COVERAGE"] && SimpleCov.start
6
+ end
7
+
8
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/shoehorn'))
9
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/shoehorn/engine'))
10
+
11
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].sort.each {|f| require f}
@@ -0,0 +1,8 @@
1
+ module BootstrapButtonMacros
2
+ def build_bootstrap_button_dropdown(options = {}, &block)
3
+ dropdown = bootstrap_button_dropdown(options) do |d|
4
+ block.call d
5
+ end
6
+ concat dropdown
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module BootstrapFormMacros
2
+ def build_bootstrap_form(&block)
3
+ form_builder = bootstrap_form_for 'object', :url => 'url' do |f|
4
+ block.call f
5
+ end
6
+ concat form_builder
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module BootstrapModalMacros
2
+ def build_bootstrap_modal(options = {}, &block)
3
+ nav = bootstrap_modal(options) do |d|
4
+ block.call d
5
+ end
6
+ concat nav
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module BootstrapNavigationMacros
2
+ def build_bootstrap_navigation(options = {}, &block)
3
+ nav = bootstrap_navigation(options) do |d|
4
+ block.call d
5
+ end
6
+ concat nav
7
+ end
8
+ end