booties 0.1.0 → 0.2.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 (123) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +172 -0
  3. data/Rakefile +5 -4
  4. data/app/controllers/booties/application_controller.rb +4 -1
  5. data/app/helpers/booties/application_helper.rb +3 -26
  6. data/app/helpers/booties/badge_helper.rb +6 -3
  7. data/app/helpers/booties/breadcrumb_helper.rb +29 -0
  8. data/app/helpers/booties/button_helper.rb +10 -8
  9. data/app/helpers/booties/dropdown_helper.rb +71 -0
  10. data/app/helpers/booties/flag_helper.rb +7 -4
  11. data/app/helpers/booties/modal_helper.rb +4 -1
  12. data/app/helpers/booties/panel_helper.rb +3 -1
  13. data/app/helpers/booties/popover_helper.rb +28 -19
  14. data/app/helpers/booties/tooltip_helper.rb +12 -8
  15. data/config/routes.rb +2 -0
  16. data/lib/booties.rb +3 -1
  17. data/lib/booties/engine.rb +7 -1
  18. data/lib/booties/modal.rb +13 -12
  19. data/lib/booties/panel.rb +21 -18
  20. data/lib/booties/utils.rb +8 -10
  21. data/lib/booties/version.rb +3 -1
  22. data/lib/tasks/booties_tasks.rake +2 -0
  23. data/test/dummy/Rakefile +1 -1
  24. data/test/dummy/app/assets/javascripts/application.js +0 -13
  25. data/test/dummy/app/assets/stylesheets/application.css +0 -15
  26. data/test/dummy/app/channels/application_cable/channel.rb +4 -0
  27. data/test/dummy/app/channels/application_cable/connection.rb +4 -0
  28. data/test/dummy/app/controllers/application_controller.rb +0 -4
  29. data/test/dummy/app/controllers/samples_controller.rb +28 -0
  30. data/test/dummy/app/jobs/application_job.rb +2 -0
  31. data/test/dummy/app/views/layouts/application.html.erb +9 -11
  32. data/test/dummy/app/views/samples/badges.html.erb +2 -0
  33. data/test/dummy/app/views/{home → samples}/breadcrumbs.html.erb +2 -1
  34. data/test/dummy/app/views/samples/buttons.html.erb +2 -0
  35. data/test/dummy/app/views/samples/dropdowns.html.erb +6 -0
  36. data/test/dummy/app/views/samples/flags.html.erb +2 -0
  37. data/test/dummy/app/views/samples/modals.html.erb +12 -0
  38. data/test/dummy/app/views/samples/panels.html.erb +14 -0
  39. data/test/dummy/app/views/samples/popovers.html.erb +9 -0
  40. data/test/dummy/app/views/samples/tooltips.html.erb +3 -0
  41. data/test/dummy/bin/bundle +1 -1
  42. data/test/dummy/bin/rails +1 -1
  43. data/test/dummy/bin/setup +17 -13
  44. data/test/dummy/bin/update +28 -0
  45. data/test/dummy/config.ru +2 -1
  46. data/test/dummy/config/application.rb +13 -12
  47. data/test/dummy/config/boot.rb +2 -2
  48. data/test/dummy/config/environment.rb +1 -1
  49. data/test/dummy/config/environments/development.rb +24 -16
  50. data/test/dummy/config/environments/production.rb +23 -28
  51. data/test/dummy/config/environments/test.rb +5 -11
  52. data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
  53. data/test/dummy/config/initializers/content_security_policy.rb +25 -0
  54. data/test/dummy/config/initializers/cookies_serializer.rb +2 -0
  55. data/test/dummy/config/initializers/wrap_parameters.rb +6 -1
  56. data/test/dummy/config/locales/en.yml +10 -0
  57. data/test/dummy/config/puma.rb +34 -0
  58. data/test/dummy/config/routes.rb +16 -8
  59. data/test/dummy/config/spring.rb +6 -0
  60. data/test/dummy/log/test.log +11202 -19551
  61. data/test/dummy/public/404.html +6 -6
  62. data/test/dummy/public/422.html +6 -6
  63. data/test/dummy/public/500.html +6 -6
  64. data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  65. data/test/dummy/public/apple-touch-icon.png +0 -0
  66. data/test/dummy/tmp/cache/assets/sprockets/v3.0/33/33EUCQBNqL6TOaGyMFn9wz2v39pHMJ4LOUUFUteIHHM.cache +1 -0
  67. data/test/dummy/tmp/cache/assets/sprockets/v3.0/3N/3NnKgR2TsTI1qCXKZpts0uJzp2dRJcoYp3nnFU6YE4o.cache +2 -0
  68. data/test/dummy/tmp/cache/assets/sprockets/v3.0/7Q/7Q2gtOOyCVPFrfYz4KjmXJsM_m8Yra4MjgsQmfVGxZY.cache +1 -0
  69. data/test/dummy/tmp/cache/assets/sprockets/v3.0/8c/8cROjTzeZZQaOFNLPKGuMtXO7EHxNfiEa72qt65UoF4.cache +1 -0
  70. data/test/dummy/tmp/cache/assets/sprockets/v3.0/F6/F6RhC2MbCvVanNZZe44hqlJNKAdIrH4NUzRxj5N2_EQ.cache +1 -0
  71. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Fc/FcMeZRcfG4LrhIhl3xrAg3EhSZInU4efHmUrjIs4keE.cache +0 -0
  72. data/test/dummy/tmp/cache/assets/sprockets/v3.0/H3/H3dfPRbxbWIB6dQXrQ6xA9nDJqy4dOq1ujslocGVY9U.cache +1 -0
  73. data/test/dummy/tmp/cache/assets/sprockets/v3.0/LK/LKisVDbQmzgRQKdFoNH5tRbTr72CrlM_2q7MZczv2Pg.cache +1 -0
  74. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Mj/MjwYGG9GkHD1fwwH2bg66EBYl3zCA_mqeDF9otey4-U.cache +3 -0
  75. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Pc/Pce9HMZhc6XmsNfLUN84Enw7mySJ7ZYzys9mXmCVXqA.cache +0 -0
  76. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Po/PoftKmjB8lzW06EMKeru1CsqVtULc0MsiTysT2JNqvU.cache +0 -0
  77. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Su/SuILTE3Es0N_r-36Ddu2E6h49WcwH_-RsZyG4SPwKFQ.cache +0 -0
  78. data/test/dummy/tmp/cache/assets/sprockets/v3.0/cJ/cJG59MHf0x4qJKYES0pa0nLpOFpFF7YwrrvIVKIixyA.cache +0 -0
  79. data/test/dummy/tmp/cache/assets/sprockets/v3.0/fw/fwPYklzExHPpgeuv53ew_8OIpJVRyaHj2Jtj2JP9j5A.cache +0 -0
  80. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jc/jc_TR7ZZTSFDDRKdgc-KnZskUESr2rLOqcYZej83LvU.cache +0 -0
  81. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rV/rVy4-idUuK0Va9FLw3G8pYeZFwJAwmvs_bQcbq6_Cd0.cache +1 -0
  82. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rY/rYyeRvy3oIuNfWeDhoriNlAlVjN4Wg4A3_9_OTDFin4.cache +1 -0
  83. data/test/dummy/tmp/cache/assets/sprockets/v3.0/tY/tYFbDrMNElXwgmisit50aNXJvRU2zlIFk5g-EJ1CQTc.cache +0 -0
  84. data/test/helpers/booties/badge_helper_test.rb +7 -5
  85. data/test/helpers/booties/breadcrumb_helper_test.rb +13 -0
  86. data/test/helpers/booties/button_helper_test.rb +14 -12
  87. data/test/helpers/booties/dropdown_helper_test.rb +43 -0
  88. data/test/helpers/booties/flag_helper_test.rb +7 -5
  89. data/test/helpers/booties/modal_helper_test.rb +9 -7
  90. data/test/helpers/booties/panel_helper_test.rb +4 -2
  91. data/test/helpers/booties/popover_helper_test.rb +33 -42
  92. data/test/helpers/booties/tooltip_helper_test.rb +19 -40
  93. data/test/integration/samples_test.rb +103 -0
  94. data/test/lib/booties/modal_test.rb +193 -0
  95. data/test/{booties → lib/booties}/panel_test.rb +40 -22
  96. data/test/lib/booties/utils_test.rb +41 -0
  97. data/test/stub_view.rb +14 -7
  98. data/test/test_helper.rb +10 -11
  99. metadata +124 -98
  100. data/app/assets/javascripts/booties/application.js +0 -13
  101. data/app/assets/stylesheets/booties/application.css +0 -15
  102. data/test/booties/modal_test.rb +0 -170
  103. data/test/booties/utils_test.rb +0 -26
  104. data/test/dummy/README.rdoc +0 -28
  105. data/test/dummy/app/assets/javascripts/home.js +0 -2
  106. data/test/dummy/app/assets/stylesheets/home.css +0 -4
  107. data/test/dummy/app/controllers/home_controller.rb +0 -25
  108. data/test/dummy/app/helpers/home_helper.rb +0 -2
  109. data/test/dummy/app/views/home/badge.html.erb +0 -3
  110. data/test/dummy/app/views/home/button.html.erb +0 -2
  111. data/test/dummy/app/views/home/flag.html.erb +0 -5
  112. data/test/dummy/app/views/home/modal.html.erb +0 -16
  113. data/test/dummy/app/views/home/panel.html.erb +0 -25
  114. data/test/dummy/app/views/home/popover.html.erb +0 -7
  115. data/test/dummy/app/views/home/tooltip.html.erb +0 -7
  116. data/test/dummy/config/initializers/assets.rb +0 -11
  117. data/test/dummy/config/initializers/session_store.rb +0 -3
  118. data/test/dummy/config/locales/booties.yml +0 -4
  119. data/test/dummy/config/secrets.yml +0 -22
  120. data/test/dummy/log/development.log +0 -420
  121. data/test/dummy/test/controllers/home_controller_test.rb +0 -108
  122. data/test/helpers/booties/application_helper_test.rb +0 -11
  123. data/test/integration/navigation_test.rb +0 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 26c9342f582bef04df2c91615687875cb6b1cc8e
4
- data.tar.gz: ce82e3caf2e664fa0a2c3b0c70323948ad547e25
2
+ SHA256:
3
+ metadata.gz: 5301ae79aa1fa1d914f905c50fb2e378ec891bef1376c4254b64a5cb67e7b541
4
+ data.tar.gz: dcd9a510e73b48ce9f2eff4278108542be15519f40be8be87f77f1d869cd89d9
5
5
  SHA512:
6
- metadata.gz: 695beda958a1627ba5bab7cf35c8305fce7990895931c6fc13ada1cf050af21043be34ab7a2f055f7ec88cefc99f7b8c75d63bdf27df59441dd01306258b7891
7
- data.tar.gz: b223bdd46a3ce55f2a40b5b80e85aa46401f4e440756e24565518a1bb21220da81feb198ed95904dfa84201d7fae48b7fdbff2a63e58a2d89ea828bb983aa5d1
6
+ metadata.gz: 1fdffebb63f6b3f80eb4fe7cc221af4373c3834f3e37d9e387f1a79703ebea4613eb0ae66555bcb65cdfaccf8b4dc152a78fb7b12129802842846386fb3bf078
7
+ data.tar.gz: 16e301945dde99932e76659185ca81093d6c16a48779aad1400f6476386b4e69f6d1a83436103ce1281a8743112aaf6a71eae5db3f0f4761d585dfcda564489c
@@ -0,0 +1,172 @@
1
+ # [![Gem Version](https://badge.fury.io/rb/booties.svg)](http://badge.fury.io/rb/booties) [![Build Status](https://travis-ci.org/jparker/booties.svg?branch=master)](https://travis-ci.org/jparker/booties)
2
+
3
+ # Booties
4
+
5
+ Booties provides a variety of helpers for using
6
+ [Twitter Bootstrap](http://getbootstrap.com/) within a Rails application.
7
+
8
+ NB: This is the Rails 5 development branch. There will likely be no visible
9
+ change in syntax or behavior, but some of the tests had to be rewritten.
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ ```ruby
16
+ gem 'booties'
17
+ ```
18
+
19
+ And then execute:
20
+ ```bash
21
+ $ bundle
22
+ ```
23
+
24
+ You also need to make sure you include Bootstrap in your application. The way
25
+ you accomplish this is left up to you, but one easy way to do this is to
26
+ include the [bootstrap-sass](https://github.com/twbs/bootstrap-sass) gem.
27
+
28
+ ## Helpers
29
+
30
+ Booties provides helpers for a variety of Bootstrap components. Below is an
31
+ overview of the available helpers. Examples of how to use them can be found in
32
+ <tt>test/dummy/app/views/samples</tt>.
33
+
34
+ ### Badges
35
+
36
+ Booties::BadgeHelper#badge provides Bootstrap
37
+ [Badges](http://getbootstrap.com/components/#badges).
38
+
39
+ ```erb
40
+ <%= badge '42' %>
41
+ ```
42
+
43
+ ### Breadcrumbs
44
+
45
+ Booties::ApplicationHelper#breadcrumbs facilitates adding
46
+ [Breadcrumbs](http://getbootstrap.com/components/#breadcrumbs) to your pages.
47
+ The breadcrumb content is saved as `:breadcrumbs` and can be rendered with
48
+ `yield :breadcrumbs`.
49
+
50
+ ```erb
51
+ <%= breadcrumbs do %>
52
+ <li><%= link_to 'Books', :books %></li>
53
+ <li><%= link_to truncate(@book.title), [:edit, @book] %></li>
54
+ <li class="active">Edit</li>
55
+ <% end %>
56
+ ```
57
+
58
+ ### Buttons
59
+
60
+ Booties::ButtonHelper#btn_link_to renders links configured to be displayed as
61
+ Bootstrap [Buttons](http://getbootstrap.com/css/#buttons).
62
+
63
+ ```erb
64
+ <%= btn_link_to 'New', [:new, :widget] %>
65
+ <%= btn_link_to sign_out_path, class: 'btn-xs', context: :danger, method: :delete do %>
66
+ Sign out
67
+ <% end %>
68
+ ```
69
+
70
+ ### Labels
71
+
72
+ Booties::FlagHelper#flag provides Bootstrap
73
+ [Labels](http://getbootstrap.com/components/#labels).
74
+
75
+ ```erb
76
+ <%= flag 'PENDING' %>
77
+ <%= flag 'OPEN', context: :primary %>
78
+ <%= flag 'CLOSED', context: :danger %>
79
+ ```
80
+
81
+ ### Modals
82
+
83
+ Booties::ModalHelper#modal and Booties::Modal provide Bootstrap
84
+ [Modals](http://getbootstrap.com/javascript/#modals).
85
+
86
+ ```erb
87
+ <%= modal 'foo' do |m| %>
88
+ <%= m.header do %>
89
+ Nesciunt qui iste vel a.
90
+ <% end %>
91
+ <%= m.body do %>
92
+ <p>
93
+ Autem atque perferendis veritatis. Molestiae aliquid nam reiciendis
94
+ recusandae facere. Aut non nemo dicta.
95
+ </p>
96
+ <% end %>
97
+ <%= m.footer do %>
98
+ <%= m.dismiss class: 'btn btn-default' do %>
99
+ Dismiss
100
+ <% end %>
101
+ <%= link_to @widget, class: 'btn btn-danger', method: :delete do %>
102
+ Really Delete
103
+ <% end %>
104
+ <% end %>
105
+ <% end %>
106
+ ```
107
+ ### Panel
108
+
109
+ Booties::PanelHelper#panel and Booties::Modal provide Bootstrap
110
+ [Panels](http://getbootstrap.com/components/#panels).
111
+
112
+ ```erb
113
+ <%= panel do |p| %>
114
+ <%= p.heading do %>
115
+ <%= p.title 'Consequatur quibusdam quia vel et sed in.' %>
116
+ <% end %>
117
+ <%= p.body do %>
118
+ <p>
119
+ Est fuga iste reiciendis laudantium dicta. Perspiciatis vero ut autem
120
+ quod vel modi. Ea error omnis aliquam aut est.
121
+ </p>
122
+ <% end %>
123
+ <%= p.footer do %>
124
+ Voluptatibus rerum et est quo dicta perspiciatis.
125
+ <% end %>
126
+ <% end %>
127
+ ```
128
+
129
+ ### Tooltips
130
+
131
+ Booties::TooltipHelper#tooltip provides Bootstrap
132
+ [Tooltips](http://getbootstrap.com/javascript/#tooltips).
133
+
134
+ ```erb
135
+ <%= tooltip title: 'This is a tooltip', placement: :bottom do %>
136
+ This has a tooltip.
137
+ <% end %>
138
+ ```
139
+
140
+ Tooltip behavior is opt-in. The helper will render the necessary tag, but you
141
+ must activate them yourself. One way of doing this is to run the following
142
+ Javascript snippet:
143
+
144
+ ```javascript
145
+ $(function() {
146
+ $('[data-toggle="tooltip"]').tooltip();
147
+ }
148
+ ```
149
+
150
+ ### Popovers
151
+
152
+ Booties::PopoverHelper#popover provides Bootstrap
153
+ [Popovers](http://getbootstrap.com/javascript/#popovers).
154
+
155
+ ```erb
156
+ <%= popover content: 'Lorem ipsum dolor sit amet.', class: 'btn btn-default' do %>
157
+ Button text
158
+ <% end %>
159
+ ```
160
+
161
+ Popover behavior is opt-in. The helper will render the necessary tag, but you
162
+ must activate them yourself. One way of doing this is to run the following
163
+ Javascript snippet:
164
+
165
+ ```javascript
166
+ $(function() {
167
+ $('[data-toggle="popover"]').popover();
168
+ }
169
+ ```
170
+
171
+ ## License
172
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  begin
2
4
  require 'bundler/setup'
3
5
  rescue LoadError
@@ -10,13 +12,13 @@ RDoc::Task.new(:rdoc) do |rdoc|
10
12
  rdoc.rdoc_dir = 'rdoc'
11
13
  rdoc.title = 'Booties'
12
14
  rdoc.options << '--line-numbers'
13
- rdoc.rdoc_files.include('README.rdoc')
15
+ rdoc.rdoc_files.include('README.md')
14
16
  rdoc.rdoc_files.include('lib/**/*.rb')
15
17
  end
16
18
 
17
- # load 'rails/tasks/statistics.rake'
19
+ load 'rails/tasks/statistics.rake'
18
20
 
19
- Bundler::GemHelper.install_tasks
21
+ require 'bundler/gem_tasks'
20
22
 
21
23
  require 'rake/testtask'
22
24
 
@@ -27,5 +29,4 @@ Rake::TestTask.new(:test) do |t|
27
29
  t.verbose = false
28
30
  end
29
31
 
30
-
31
32
  task default: :test
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Booties
2
- class ApplicationController < ActionController::Base
4
+ class ApplicationController < ActionController::Base # :nodoc:
5
+ protect_from_forgery with: :exception
3
6
  end
4
7
  end
@@ -1,29 +1,6 @@
1
- module Booties
2
- module ApplicationHelper
3
- include Utils
4
-
5
- ##
6
- # Renders an ol tag with the "breadcrumb" class and fills it with the
7
- # content of the block.
8
- #
9
- # Example:
10
- #
11
- # <% breadcrumbs do %>
12
- # <li>Foo</li>
13
- # <li class="active">Bar</li>
14
- # <% end %>
15
- # <%= yield :breadcrumb %>
16
- #
17
- # <ol class="breadcrumb">
18
- # <li>Foo</li>
19
- # <li class="active">Bar</li>
20
- # </ol>
21
- def breadcrumbs(&block)
22
- content_for :breadcrumbs, render_breadcrumbs(&block)
23
- end
1
+ # frozen_string_literal: true
24
2
 
25
- def render_breadcrumbs(&block) # :nodoc:
26
- content_tag :ol, class: 'breadcrumb', &block
27
- end
3
+ module Booties
4
+ module ApplicationHelper # :nodoc:
28
5
  end
29
6
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Booties
2
- module BadgeHelper
4
+ module BadgeHelper # :nodoc:
3
5
  include Utils
4
6
 
5
7
  ##
@@ -23,9 +25,10 @@ module Booties
23
25
  # <%= badge 'foo', class: 'bar' %>
24
26
  # <span class="badge bar">foo</span>
25
27
  def badge(content = nil, class: nil, **options, &block)
26
- content ||= capture(&block) if block_given?
27
28
  classes = merge_classes ['badge'], binding.local_variable_get(:class)
28
- content_tag :span, content, class: classes, **options
29
+ options = { class: classes, **options }
30
+
31
+ content_tag :span, content, options, &block
29
32
  end
30
33
  end
31
34
  end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Booties
4
+ module BreadcrumbHelper # :nodoc:
5
+ ##
6
+ # Renders an ol tag with the "breadcrumb" class and fills it with the
7
+ # content of the block.
8
+ #
9
+ # Example:
10
+ #
11
+ # <% breadcrumbs do %>
12
+ # <li>Foo</li>
13
+ # <li class="active">Bar</li>
14
+ # <% end %>
15
+ # <%= yield :breadcrumb %>
16
+ #
17
+ # <ol class="breadcrumb">
18
+ # <li>Foo</li>
19
+ # <li class="active">Bar</li>
20
+ # </ol>
21
+ def breadcrumbs(&block)
22
+ content_for :breadcrumbs, render_breadcrumbs(&block)
23
+ end
24
+
25
+ def render_breadcrumbs(&block) # :nodoc:
26
+ content_tag :ol, class: 'breadcrumb', &block
27
+ end
28
+ end
29
+ end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Booties
2
- module ButtonHelper
4
+ module ButtonHelper # :nodoc:
3
5
  include Utils
4
6
 
5
7
  ##
@@ -21,13 +23,13 @@ module Booties
21
23
  # <%= btn_link_to 'Sign out', destroy_user_session_path, context: :danger, class: 'btn-xs', method: :delete %>
22
24
  #
23
25
  # <a href="/users/sign_out" class="btn btn-danger btn-xs" data-method="delete">Sign out</a>
24
- def btn_link_to(name = nil, options = nil, html_options = nil, &block)
25
- name, options, html_options = capture(&block), name, options if block_given?
26
- html_options ||= {}
27
- context = html_options.delete(:context) { :default }
28
- html_options[:class] = \
29
- merge_classes %W[btn btn-#{context}], html_options[:class]
30
- link_to name, options, html_options
26
+ def btn_link_to(name_or_path, path = nil, context: :default, **opts, &block)
27
+ opts[:class] = merge_classes %W[btn btn-#{context}], opts[:class]
28
+ if block_given?
29
+ link_to name_or_path, opts, &block
30
+ else
31
+ link_to name_or_path, path, opts
32
+ end
31
33
  end
32
34
  end
33
35
  end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Booties
4
+ module DropdownHelper # :nodoc:
5
+ include Utils
6
+
7
+ ##
8
+ # Renders a link to toggle a dropdown menu.
9
+ #
10
+ # Examples:
11
+ #
12
+ # <%= link_to_dropdown do %>
13
+ # Foo
14
+ # <% end %>
15
+ #
16
+ # <%= link_to_dropdown class: 'foo' do %>
17
+ # Foo
18
+ # <% end %>
19
+ def link_to_dropdown(class: nil, &block)
20
+ classes = merge_classes binding.local_variable_get(:class),
21
+ 'dropdown-toggle'
22
+ text = capture(&block) + caret
23
+ link_to text, '#',
24
+ class: classes,
25
+ data: { toggle: 'dropdown' },
26
+ role: 'button'
27
+ end
28
+
29
+ ##
30
+ # Renders a button to toggle a dropdown menu.
31
+ #
32
+ # Examples:
33
+ #
34
+ # <%= button_to_dropdown do %>
35
+ # Foo
36
+ # <% end %>
37
+ #
38
+ # <%= button_to_dropdown context: :primary, class: 'btn-xs' do %>
39
+ # Foo
40
+ # <% end %>
41
+ def button_to_dropdown(context: :default, class: nil, &block)
42
+ classes = merge_classes binding.local_variable_get(:class),
43
+ %W[btn btn-#{context} dropdown-toggle]
44
+ text = capture(&block) + caret
45
+ button_tag text,
46
+ name: nil,
47
+ class: classes,
48
+ data: { toggle: 'dropdown' },
49
+ type: 'button'
50
+ end
51
+
52
+ ##
53
+ # Wraps a block in a dropdown menu list.
54
+ #
55
+ # Examples:
56
+ #
57
+ # <%= dropdown_menu do %>
58
+ # <li><%= link_to 'Foo', foos_path %></li>
59
+ # <li><%= link_to 'Bar', bars_path %></li>
60
+ # <% end %>
61
+ def dropdown_menu(&block)
62
+ content_tag :ul, class: 'dropdown-menu', &block
63
+ end
64
+
65
+ ##
66
+ # Renders caret for dropdown menu.
67
+ def caret
68
+ content_tag :span, '', class: 'caret'
69
+ end
70
+ end
71
+ end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Booties
2
- module FlagHelper
4
+ module FlagHelper # :nodoc:
3
5
  include Utils
4
6
 
5
7
  ##
@@ -27,10 +29,11 @@ module Booties
27
29
  # <%= flag 'foo', class: 'bar' %>
28
30
  # <span class="label label-default bar">foo</span>
29
31
  def flag(content = nil, context: :default, class: nil, **options, &block)
30
- content ||= capture(&block)
31
32
  classes = merge_classes %W[label label-#{context}],
32
- binding.local_variable_get(:class)
33
- content_tag :span, content, class: classes, **options
33
+ binding.local_variable_get(:class)
34
+ options = { class: classes, **options }
35
+
36
+ content_tag :span, content, options, &block
34
37
  end
35
38
  end
36
39
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Booties
2
- module ModalHelper
4
+ module ModalHelper # :nodoc:
3
5
  ##
4
6
  # Renders a modal dialog. The CSS id is provided by +id+. The fade effect
5
7
  # will be enabled by default, but it will be disabled if +fade+ is falsey.
@@ -29,6 +31,7 @@ module Booties
29
31
  # <% end %>
30
32
  # <% end %>
31
33
  # <% end %>
34
+
32
35
  def modal(id, fade: true, size: nil, with: Modal, **options, &block)
33
36
  with.new(self, id: id, fade: fade, size: size).render(**options, &block)
34
37
  end