bootstrap-view-helpers 0.0.1
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/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +29 -0
- data/app/helpers/bootstrap/accordion_helper.rb +63 -0
- data/app/helpers/bootstrap/badge_helper.rb +41 -0
- data/app/helpers/bootstrap/button_helper.rb +87 -0
- data/app/helpers/bootstrap/common_helper.rb +56 -0
- data/app/helpers/bootstrap/dropdown_helper.rb +100 -0
- data/app/helpers/bootstrap/form_helper.rb +19 -0
- data/app/helpers/bootstrap/stamp_helper.rb +45 -0
- data/config/routes.rb +2 -0
- data/lib/bootstrap-view-helpers.rb +4 -0
- data/lib/bootstrap-view-helpers/engine.rb +6 -0
- data/lib/bootstrap-view-helpers/version.rb +3 -0
- data/lib/tasks/bootstrap-view-helpers_tasks.rake +4 -0
- metadata +162 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2013 YOURNAME
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'rdoc/task'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rdoc/rdoc'
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
RDoc::Task = Rake::RDocTask
|
13
|
+
end
|
14
|
+
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
17
|
+
rdoc.title = 'BootstrapViewHelpers'
|
18
|
+
rdoc.options << '--line-numbers'
|
19
|
+
rdoc.rdoc_files.include('README.rdoc')
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
|
+
end
|
22
|
+
|
23
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
24
|
+
load 'rails/tasks/engine.rake'
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
Bundler::GemHelper.install_tasks
|
29
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Bootstrap::AccordionHelper
|
2
|
+
|
3
|
+
def accordion(options={})
|
4
|
+
options = ensure_accordion_id(options)
|
5
|
+
@accordion_id = options[:id]
|
6
|
+
options = ensure_class(options, 'accordion')
|
7
|
+
|
8
|
+
content_tag(:div, options) do
|
9
|
+
yield
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def accordion_group(text, options={})
|
14
|
+
options = ensure_accordion_group_id(options)
|
15
|
+
@accordion_group_id = options[:id]
|
16
|
+
open = options.delete(:open)
|
17
|
+
|
18
|
+
content_tag(:div, class: 'accordion-group') do
|
19
|
+
accordion_group_heading(text) + accordion_group_body(open) { yield }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def accordion_group_heading(text)
|
26
|
+
content_tag(:div, class: 'accordion-heading') do
|
27
|
+
content_tag(:a, text, class: %(accordion-toggle), href: "##{@accordion_group_id}", data: {toggle: 'collapse', parent: "##{@accordion_id}" })
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def accordion_group_body(open)
|
32
|
+
classes = %w(accordion-body collapse)
|
33
|
+
classes << 'in' if open
|
34
|
+
|
35
|
+
content_tag(:div, id: @accordion_group_id, class: classes) do
|
36
|
+
content_tag(:div, class: 'accordion-inner') do
|
37
|
+
yield
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def ensure_accordion_id(options)
|
43
|
+
if options.has_key?(:id)
|
44
|
+
options
|
45
|
+
else
|
46
|
+
@accordion_number = @accordion_number.to_i + 1
|
47
|
+
options.dup.tap do |h|
|
48
|
+
h[:id] = "accordion-#{@accordion_number}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def ensure_accordion_group_id(options)
|
54
|
+
if options.has_key?(:id)
|
55
|
+
options
|
56
|
+
else
|
57
|
+
@accordion_group_number = @accordion_group_number.to_i + 1
|
58
|
+
options.dup.tap do |h|
|
59
|
+
h[:id] = "#{@accordion_id}-group-#{@accordion_group_number}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# See: http://twitter.github.io/bootstrap/components.html#labels-badges
|
2
|
+
#
|
3
|
+
# Helper for producing Twitter Bootstrap badges
|
4
|
+
#
|
5
|
+
# Default badge:
|
6
|
+
#
|
7
|
+
# badge('Default')
|
8
|
+
#
|
9
|
+
# Other badges (see BADGE_TYPES):
|
10
|
+
#
|
11
|
+
# badge('Info', :info)
|
12
|
+
#
|
13
|
+
# Options passed through to <span> tag:
|
14
|
+
#
|
15
|
+
# badge('Warning', :warning, id: 'warn-id', class: 'more-class', my_key: 'my_value')
|
16
|
+
#
|
17
|
+
module Bootstrap::BadgeHelper
|
18
|
+
InvalidBadgeTypeError = Class.new(StandardError)
|
19
|
+
|
20
|
+
BADGE_TYPES = %w(default success warning important info inverse)
|
21
|
+
|
22
|
+
def badge(*args)
|
23
|
+
text = args.shift
|
24
|
+
options = add_badge_classes(*args)
|
25
|
+
content_tag(:span, text, options)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def add_badge_classes(*args)
|
31
|
+
options = args.extract_options!
|
32
|
+
validate_badge_types(args)
|
33
|
+
classes = ['badge'] + args.map { |arg| "badge-#{arg}" }
|
34
|
+
ensure_class(options, classes)
|
35
|
+
end
|
36
|
+
|
37
|
+
def validate_badge_types(badge_types)
|
38
|
+
badge_types.each { |e| raise(InvalidBadgeTypeError, e.inspect) unless BADGE_TYPES.include?(e.to_s) }
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# Helper for producing Twitter Bootstrap buttons OR links that look like buttons.
|
2
|
+
# See: http://twitter.github.io/bootstrap/base-css.html#buttons
|
3
|
+
#
|
4
|
+
# Default button:
|
5
|
+
#
|
6
|
+
# button('Default') #=> <button class="btn">Default</button>
|
7
|
+
#
|
8
|
+
# Pass in a url to make a link that looks like a button:
|
9
|
+
#
|
10
|
+
# button('Home', url: '/home') #=> <a href="/home" class="btn">Home</a>
|
11
|
+
#
|
12
|
+
# Or make a <button> look like a link:
|
13
|
+
#
|
14
|
+
# button('Home', :link)
|
15
|
+
#
|
16
|
+
# Specify the type (see BUTTON_TYPES):
|
17
|
+
#
|
18
|
+
# button('Info', :info)
|
19
|
+
#
|
20
|
+
# Specify the size (see BUTTON_SIZES)
|
21
|
+
#
|
22
|
+
# button('Small', :small)
|
23
|
+
#
|
24
|
+
# Options passed through to <span> tag:
|
25
|
+
#
|
26
|
+
# button('Warning', :warning, :large id: 'warn-id', class: 'more-class', my_key: 'my_value')
|
27
|
+
#
|
28
|
+
# Button groups/toolbars: http://twitter.github.io/bootstrap/components.html#buttonGroups
|
29
|
+
#
|
30
|
+
# = button_group do
|
31
|
+
# = button("Left", "/left")
|
32
|
+
# = button("Right", "/right")
|
33
|
+
#
|
34
|
+
# = button_toolbar do
|
35
|
+
# = button('Single Button', '/single')
|
36
|
+
# = button_group
|
37
|
+
# = button('Group Button 1')
|
38
|
+
# = button('Group Button 2')
|
39
|
+
# = button('Another Single')
|
40
|
+
#
|
41
|
+
module Bootstrap::ButtonHelper
|
42
|
+
InvalidButtonModifierError = Class.new(StandardError)
|
43
|
+
|
44
|
+
BUTTON_TYPES = %w(default primary info success warning danger inverse link)
|
45
|
+
BUTTON_SIZES = %w(default large small mini)
|
46
|
+
BUTTON_OTHERS = %w(block)
|
47
|
+
|
48
|
+
BUTTON_ALL = BUTTON_TYPES + BUTTON_SIZES + BUTTON_OTHERS
|
49
|
+
|
50
|
+
def button(*args)
|
51
|
+
text = args.shift
|
52
|
+
options = args.extract_options!
|
53
|
+
href = options.delete(:url)
|
54
|
+
options = add_button_classes(options, args)
|
55
|
+
|
56
|
+
if href.present?
|
57
|
+
link_to(text, href, options)
|
58
|
+
else
|
59
|
+
content_tag(:button, text, options)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def button_toolbar
|
64
|
+
content_tag(:div, class: 'btn-toolbar') do
|
65
|
+
yield
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def button_group
|
70
|
+
content_tag(:div, class: 'btn-group') do
|
71
|
+
yield
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def add_button_classes(options, button_types_and_sizes)
|
78
|
+
validate_types_and_sizes(button_types_and_sizes)
|
79
|
+
classes = ['btn'] + button_types_and_sizes.map { |e| "btn-#{e}" }
|
80
|
+
ensure_class(options, classes)
|
81
|
+
end
|
82
|
+
|
83
|
+
def validate_types_and_sizes(types_and_sizes)
|
84
|
+
types_and_sizes.each { |e| raise(InvalidButtonModifierError, e.inspect) unless BUTTON_ALL.include?(e.to_s) }
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Bootstrap::CommonHelper
|
2
|
+
ArgumentError = Class.new(::ArgumentError)
|
3
|
+
|
4
|
+
# Returns a new hash with the :class key's value converted to an
|
5
|
+
# Array with each element converted to a String.
|
6
|
+
#
|
7
|
+
# arrayify_class({}) #=> {:class=>[]}
|
8
|
+
# arrayify_class(:class => 'foo') #=> {:class=>["foo"]}
|
9
|
+
# arrayify_class(:class => [:foo, 'bar']) #=> {:class=>["foo", "bar"]}
|
10
|
+
def arrayify_class(hash)
|
11
|
+
raise ArgumentError.new("expected a Hash, got #{hash.inspect}") unless hash.is_a?(Hash)
|
12
|
+
|
13
|
+
return hash if hash[:class] == false
|
14
|
+
|
15
|
+
hash.dup.tap do |h|
|
16
|
+
classes = h[:class]
|
17
|
+
h[:class] = case
|
18
|
+
when classes.blank? then []
|
19
|
+
when classes.is_a?(Array) then classes.dup
|
20
|
+
else classes.to_s.split(/\s/)
|
21
|
+
end
|
22
|
+
h[:class].map!(&:to_s)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Returns down-caret character used in various dropdown menus.
|
27
|
+
def caret(options={})
|
28
|
+
options = ensure_class(options, 'caret')
|
29
|
+
content_tag(:span, nil, options)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Ensures that _hash_ has key of :class that includes _klass_.
|
33
|
+
#
|
34
|
+
# ensure_class({}, 'foo') #=> {class: 'foo'}
|
35
|
+
# ensure_class({class: 'bar', id: 'my-id'}, 'foo') #=> {:class=>["bar", "foo"], :id=>"my-id"}
|
36
|
+
def ensure_class(hash, klass)
|
37
|
+
arrayify_class(hash).tap do |h|
|
38
|
+
klasses = Array(klass).map(&:to_s)
|
39
|
+
klasses.each do |k|
|
40
|
+
h[:class] << k unless h[:class].include?(k)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns extra arguments that are Bootstrap modifiers. Basically 2nd argument
|
46
|
+
# up to (not including) the last (hash) argument.
|
47
|
+
#
|
48
|
+
# extract_extras('text') #=> []
|
49
|
+
# extract_extras('text', :small, :info, id: 'foo') #=> [:small, :info]
|
50
|
+
def extract_extras(*args)
|
51
|
+
args.extract_options!
|
52
|
+
args.shift
|
53
|
+
args
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# Helper methods for various Bootstrap dropdown menus
|
2
|
+
#
|
3
|
+
# * http://twitter.github.io/bootstrap/components.html#buttonDropdowns
|
4
|
+
# * http://twitter.github.io/bootstrap/components.html#navbar
|
5
|
+
#
|
6
|
+
# All of the *_dropdown methods should have dropdown_item() or dropdown_divider()
|
7
|
+
# as children.
|
8
|
+
#
|
9
|
+
# = nav_dropdown('Admin') do
|
10
|
+
# = dropdown_item('Users', admin_users_path)
|
11
|
+
# = dropdown_item('Logs', admin_logs_path)
|
12
|
+
# = dropdown_divider
|
13
|
+
# = dropdown_item('Exceptions', admin_exceptions_path)
|
14
|
+
#
|
15
|
+
# = button_dropdown('Actions') do
|
16
|
+
# / dropdown_items
|
17
|
+
#
|
18
|
+
# = split_button_dropdown('Edit', edit_user_path(@user)) do
|
19
|
+
# / dropdown_items
|
20
|
+
#
|
21
|
+
module Bootstrap::DropdownHelper
|
22
|
+
|
23
|
+
# should be nested within a <ul class='nav'> tag
|
24
|
+
def nav_dropdown(text)
|
25
|
+
content_tag(:li, class: 'dropdown') do
|
26
|
+
nav_dropdown_link(text) + dropdown_ul { yield }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# likely nested within button_toolbar
|
31
|
+
def button_dropdown(*args)
|
32
|
+
content_tag(:div, class: 'btn-group') do
|
33
|
+
button_dropdown_link(*args) + dropdown_ul { yield }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# likely nested within button_toolbar
|
38
|
+
def split_button_dropdown(*args)
|
39
|
+
extras = extract_extras(*args)
|
40
|
+
|
41
|
+
content_tag(:div, class: 'btn-group') do
|
42
|
+
split_button_dropdown_default(*args) + split_button_dropdown_toggle(extras) + dropdown_ul { yield }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Must be nested under one of the *_dropdown methods:
|
47
|
+
#
|
48
|
+
# dropdown_item('Action', '/action')
|
49
|
+
# dropdown_item('Action') # href set to 'javascript:void(0)'
|
50
|
+
# dropdown_item('Action', id: 'foo') # options passed to <a> tag
|
51
|
+
#
|
52
|
+
def dropdown_item(*args)
|
53
|
+
options = args.extract_options!
|
54
|
+
text = args.shift or raise "Need text to link to"
|
55
|
+
url = args.shift || 'javascript:void(0)'
|
56
|
+
|
57
|
+
content_tag(:li) do
|
58
|
+
link_to(text, url, options)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Produces a line to divide sections of a dropdown menu
|
63
|
+
def dropdown_divider
|
64
|
+
content_tag(:li, nil, class: 'divider')
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def nav_dropdown_link(text)
|
70
|
+
content_tag(:a, class: "dropdown-toggle", data: {toggle: "dropdown"}, href: "#") do
|
71
|
+
safe_join( [ h(text), caret ], ' ' )
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def button_dropdown_link(*args)
|
76
|
+
text = args.shift
|
77
|
+
classes = %w(btn dropdown-toggle) + args.map { |e| "btn-#{e}" }
|
78
|
+
content_tag(:a, class: classes, data: {toggle: "dropdown"}, href: "#") do
|
79
|
+
safe_join( [ h(text), caret ], ' ' )
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def split_button_dropdown_default(*args)
|
84
|
+
button(*args)
|
85
|
+
end
|
86
|
+
|
87
|
+
def split_button_dropdown_toggle(extras)
|
88
|
+
classes = %w(btn dropdown-toggle) + extras.map { |e| "btn-#{e}" }
|
89
|
+
content_tag(:button, class: classes, data: {toggle: 'dropdown'}) do
|
90
|
+
caret
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def dropdown_ul
|
95
|
+
content_tag(:ul, class: "dropdown-menu") do
|
96
|
+
yield
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Bootstrap::FormHelper
|
2
|
+
|
3
|
+
def submit_tag(value = "Save changes", options = {})
|
4
|
+
options = arrayify_class(options.symbolize_keys)
|
5
|
+
|
6
|
+
class_arg = Array(options.delete(:class)).map(&:to_s)
|
7
|
+
classes = []
|
8
|
+
classes << 'btn-primary' unless options.delete(:bootstrap) == false ||
|
9
|
+
class_arg.detect { |e| e.starts_with?('btn-') }
|
10
|
+
class_arg.each { |e| classes << e }
|
11
|
+
classes << 'btn' if classes.detect { |e| e.starts_with?('btn-') }
|
12
|
+
options = ensure_class(options, classes)
|
13
|
+
|
14
|
+
options[:disable_with] = "Processing ..." unless options.has_key?(:disable_with)
|
15
|
+
|
16
|
+
super(value, options)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# See: http://twitter.github.io/bootstrap/components.html#labels-badges
|
2
|
+
#
|
3
|
+
# Helper for producing Twitter Bootstrap labels. We call them stamps because #label() is
|
4
|
+
# a Rails helper method.
|
5
|
+
#
|
6
|
+
# Default label:
|
7
|
+
#
|
8
|
+
# stamp('Default')
|
9
|
+
#
|
10
|
+
# Other labels (see LABEL_TYPES):
|
11
|
+
#
|
12
|
+
# stamp('Info', :info)
|
13
|
+
#
|
14
|
+
# Options passed through to <span> tag:
|
15
|
+
#
|
16
|
+
# stamp('Warning', :warning, id: 'warn-id', class: 'more-class', my_key: 'my_value')
|
17
|
+
#
|
18
|
+
module Bootstrap::StampHelper
|
19
|
+
InvalidStampTypeError = Class.new(StandardError)
|
20
|
+
|
21
|
+
LABEL_TYPES = %w(default success warning important info inverse)
|
22
|
+
|
23
|
+
# stamp('Text')
|
24
|
+
# stamp('Text', :success) # see LABEL_TYPES
|
25
|
+
# stamp('Text', :info, id: 'my-id') # options passed thru to <span>
|
26
|
+
def stamp(*args)
|
27
|
+
text = args.shift
|
28
|
+
options = add_label_classes(*args)
|
29
|
+
content_tag(:span, text, options)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def add_label_classes(*args)
|
35
|
+
options = args.extract_options!
|
36
|
+
validate_label_types(args)
|
37
|
+
classes = ['label'] + args.map { |arg| "label-#{arg}" }
|
38
|
+
ensure_class(options, classes)
|
39
|
+
end
|
40
|
+
|
41
|
+
def validate_label_types(label_types)
|
42
|
+
label_types.each { |e| raise(InvalidStampTypeError, e.inspect) unless LABEL_TYPES.include?(e.to_s) }
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/config/routes.rb
ADDED
metadata
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bootstrap-view-helpers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Steve Downey
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-05-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rails
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec-rails
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: capybara
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: guard-rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: guard-spork
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: sqlite3
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
description: Rails view helpers for Bootstrap
|
111
|
+
email:
|
112
|
+
- steve.downtown@gmail.com
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- app/helpers/bootstrap/accordion_helper.rb
|
118
|
+
- app/helpers/bootstrap/badge_helper.rb
|
119
|
+
- app/helpers/bootstrap/button_helper.rb
|
120
|
+
- app/helpers/bootstrap/common_helper.rb
|
121
|
+
- app/helpers/bootstrap/dropdown_helper.rb
|
122
|
+
- app/helpers/bootstrap/form_helper.rb
|
123
|
+
- app/helpers/bootstrap/stamp_helper.rb
|
124
|
+
- config/routes.rb
|
125
|
+
- lib/bootstrap-view-helpers/engine.rb
|
126
|
+
- lib/bootstrap-view-helpers/version.rb
|
127
|
+
- lib/bootstrap-view-helpers.rb
|
128
|
+
- lib/tasks/bootstrap-view-helpers_tasks.rake
|
129
|
+
- MIT-LICENSE
|
130
|
+
- Rakefile
|
131
|
+
- README.rdoc
|
132
|
+
homepage: https://github.com/stevedowney/bootstrap_view_helpers
|
133
|
+
licenses: []
|
134
|
+
post_install_message:
|
135
|
+
rdoc_options: []
|
136
|
+
require_paths:
|
137
|
+
- lib
|
138
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
139
|
+
none: false
|
140
|
+
requirements:
|
141
|
+
- - ! '>='
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
144
|
+
segments:
|
145
|
+
- 0
|
146
|
+
hash: -3576308479683783950
|
147
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
|
+
none: false
|
149
|
+
requirements:
|
150
|
+
- - ! '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
segments:
|
154
|
+
- 0
|
155
|
+
hash: -3576308479683783950
|
156
|
+
requirements: []
|
157
|
+
rubyforge_project:
|
158
|
+
rubygems_version: 1.8.25
|
159
|
+
signing_key:
|
160
|
+
specification_version: 3
|
161
|
+
summary: Rails view helpers for Bootstrap
|
162
|
+
test_files: []
|