rails-bootstrap-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.
- checksums.yaml +15 -0
- data/MIT-LICENSE +20 -0
- data/README.md +158 -0
- data/Rakefile +38 -0
- data/lib/rails-bootstrap-helpers.rb +20 -0
- data/lib/rails-bootstrap-helpers/core_ext/abstract.rb +72 -0
- data/lib/rails-bootstrap-helpers/helpers/alert_helper.rb +45 -0
- data/lib/rails-bootstrap-helpers/helpers/base_helper.rb +32 -0
- data/lib/rails-bootstrap-helpers/helpers/button_helper.rb +55 -0
- data/lib/rails-bootstrap-helpers/helpers/form_tag_helper.rb +22 -0
- data/lib/rails-bootstrap-helpers/helpers/label_helper.rb +35 -0
- data/lib/rails-bootstrap-helpers/helpers/options_helper.rb +32 -0
- data/lib/rails-bootstrap-helpers/rails/engine.rb +15 -0
- data/lib/rails-bootstrap-helpers/renderers/abstract_button_renderer.rb +86 -0
- data/lib/rails-bootstrap-helpers/renderers/button_renderer.rb +43 -0
- data/lib/rails-bootstrap-helpers/renderers/renderer.rb +14 -0
- data/lib/rails-bootstrap-helpers/version.rb +3 -0
- data/lib/tasks/bootstrap-rails-helpers_tasks.rake +4 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +59 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +58 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/test.log +47 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/helpers/alert_helper_spec.rb +24 -0
- data/spec/helpers/base_helper_spec.rb +18 -0
- data/spec/helpers/button_helper_spec.rb +94 -0
- data/spec/helpers/form_tag_helper_spec.rb +43 -0
- data/spec/helpers/label_helper_spec.rb +23 -0
- data/spec/helpers/options_helper_spec.rb +47 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/support/matchers/helpers/alert_helper/render_bs_alert.rb +116 -0
- data/spec/support/matchers/helpers/base_helper/render_icon.rb +55 -0
- data/spec/support/matchers/helpers/button_helper/render_bs_button_to.rb +135 -0
- data/spec/support/matchers/helpers/button_helper/render_inline_button_to.rb +79 -0
- data/spec/support/matchers/helpers/form_tag_helper/render_bs_button_tag.rb +136 -0
- data/spec/support/matchers/helpers/label_helper/render_bs_label.rb +114 -0
- metadata +287 -0
@@ -0,0 +1,55 @@
|
|
1
|
+
RSpec::Matchers.define :render_icon do |icon|
|
2
|
+
def options
|
3
|
+
@options ||= { invert: false }
|
4
|
+
end
|
5
|
+
|
6
|
+
def icon
|
7
|
+
@icon
|
8
|
+
end
|
9
|
+
|
10
|
+
def cls
|
11
|
+
cls = "icon-#{icon}"
|
12
|
+
cls << " icon-white" if invert?
|
13
|
+
cls
|
14
|
+
end
|
15
|
+
|
16
|
+
def expected
|
17
|
+
@render_icon_expected ||= "<i class=\"#{cls}\"></i>"
|
18
|
+
end
|
19
|
+
|
20
|
+
def got
|
21
|
+
@got ||= helper.icon(icon, invert: options[:invert])
|
22
|
+
end
|
23
|
+
|
24
|
+
def failure_message (is_not)
|
25
|
+
ex = is_not ? "expected not" : "expected"
|
26
|
+
"#{ex}: #{expected}\n got: #{got}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def invert?
|
30
|
+
@invert_set
|
31
|
+
end
|
32
|
+
|
33
|
+
chain :inverted do |invert|
|
34
|
+
options[:invert] = invert
|
35
|
+
@invert_set = true
|
36
|
+
end
|
37
|
+
|
38
|
+
match do
|
39
|
+
@icon = icon
|
40
|
+
expected == got
|
41
|
+
end
|
42
|
+
|
43
|
+
failure_message_for_should do
|
44
|
+
failure_message(false)
|
45
|
+
end
|
46
|
+
|
47
|
+
failure_message_for_should_not do
|
48
|
+
failure_message(true)
|
49
|
+
end
|
50
|
+
|
51
|
+
description do
|
52
|
+
ext = invert? ? "inverted " : ""
|
53
|
+
"render an icon with the #{ext}style: #{icon}"
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
RSpec::Matchers.define :render_bs_button_to do |text|
|
2
|
+
def options
|
3
|
+
@options ||= { }
|
4
|
+
end
|
5
|
+
|
6
|
+
def append_style (style)
|
7
|
+
" btn-#{style}"
|
8
|
+
end
|
9
|
+
|
10
|
+
def cls
|
11
|
+
@cls ||= begin
|
12
|
+
cls = "btn"
|
13
|
+
cls << " btn-#{options[:style]}" if style?
|
14
|
+
cls << " btn-#{options[:size]}" if size?
|
15
|
+
cls
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def text_with_icon
|
20
|
+
if icon?
|
21
|
+
cls = "icon-#{options[:icon]}"
|
22
|
+
cls << " icon-white" if inverted?
|
23
|
+
icon = "<i class=\"#{cls}\"></i>"
|
24
|
+
default = icon + " " + text
|
25
|
+
|
26
|
+
if icon_position?
|
27
|
+
if options[:icon_position].to_s == "right"
|
28
|
+
return text + " " + icon
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
default
|
33
|
+
else
|
34
|
+
text
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def expected
|
39
|
+
@render_button_expected ||= "<a href=\"#{url}\" class=\"#{cls}\">#{text_with_icon}</a>"
|
40
|
+
end
|
41
|
+
|
42
|
+
def got
|
43
|
+
@got ||= helper.bs_button_to(text, url, options)
|
44
|
+
end
|
45
|
+
|
46
|
+
def failure_message (is_not)
|
47
|
+
ex = is_not ? "expected not" : "expected"
|
48
|
+
"#{ex}: #{expected}\n got: #{got}"
|
49
|
+
end
|
50
|
+
|
51
|
+
def text
|
52
|
+
@text
|
53
|
+
end
|
54
|
+
|
55
|
+
def url
|
56
|
+
@url || "default_url"
|
57
|
+
end
|
58
|
+
|
59
|
+
def style?
|
60
|
+
@style_set
|
61
|
+
end
|
62
|
+
|
63
|
+
def size?
|
64
|
+
@size_set
|
65
|
+
end
|
66
|
+
|
67
|
+
def icon?
|
68
|
+
@icon_set
|
69
|
+
end
|
70
|
+
|
71
|
+
def inverted?
|
72
|
+
@inverted_set
|
73
|
+
end
|
74
|
+
|
75
|
+
def icon_position?
|
76
|
+
@icon_position_set
|
77
|
+
end
|
78
|
+
|
79
|
+
chain :to do |url|
|
80
|
+
@url = url
|
81
|
+
end
|
82
|
+
|
83
|
+
chain :with_style do |style|
|
84
|
+
options[:style] = style
|
85
|
+
@style_set = true
|
86
|
+
end
|
87
|
+
|
88
|
+
chain :with_size do |size|
|
89
|
+
options[:size] = size
|
90
|
+
@size_set = true
|
91
|
+
end
|
92
|
+
|
93
|
+
chain :with_icon do |icon|
|
94
|
+
options[:icon] = icon
|
95
|
+
@icon_set = true
|
96
|
+
end
|
97
|
+
|
98
|
+
chain :with_icon_inverted do |inverted|
|
99
|
+
options[:icon_invert] = inverted
|
100
|
+
@inverted_set = true
|
101
|
+
end
|
102
|
+
|
103
|
+
chain :with_icon_position do |icon_position|
|
104
|
+
options[:icon_position] = icon_position
|
105
|
+
@icon_position_Set = true
|
106
|
+
end
|
107
|
+
|
108
|
+
match do
|
109
|
+
@text = text
|
110
|
+
expected == got
|
111
|
+
end
|
112
|
+
|
113
|
+
failure_message_for_should do
|
114
|
+
failure_message(false)
|
115
|
+
end
|
116
|
+
|
117
|
+
failure_message_for_should_not do
|
118
|
+
failure_message(true)
|
119
|
+
end
|
120
|
+
|
121
|
+
description do
|
122
|
+
desc = "render a button to '#{url}'"
|
123
|
+
descs = []
|
124
|
+
descs << "with the style: #{options[:style]}" if style?
|
125
|
+
descs << "with the size: #{options[:size]}" if size?
|
126
|
+
|
127
|
+
ext = inverted? ? "inverted " : ""
|
128
|
+
|
129
|
+
descs << "with the #{ext}icon: #{options[:icon]}" if icon?
|
130
|
+
descs << "with the icon_position: #{options[:icon_position]}" if icon_position?
|
131
|
+
|
132
|
+
desc << " " if descs.any?
|
133
|
+
desc << descs.to_sentence
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
RSpec::Matchers.define :render_inline_button_to do |url, icon|
|
2
|
+
def options
|
3
|
+
@options ||= { size: "mini" }
|
4
|
+
end
|
5
|
+
|
6
|
+
def cls
|
7
|
+
@cls ||= "btn btn-#{options[:size]}"
|
8
|
+
end
|
9
|
+
|
10
|
+
def text_with_icon
|
11
|
+
"<i class=\"icon-#{icon}\"></i> "
|
12
|
+
end
|
13
|
+
|
14
|
+
def attributes
|
15
|
+
attrs = {
|
16
|
+
href: url,
|
17
|
+
class: cls
|
18
|
+
}
|
19
|
+
|
20
|
+
attrs = attrs.map do |k, v|
|
21
|
+
"#{k}=\"#{v}\""
|
22
|
+
end
|
23
|
+
|
24
|
+
attrs.join(" ")
|
25
|
+
end
|
26
|
+
|
27
|
+
def expected
|
28
|
+
@render_remove_button_expected ||= "<a #{attributes}>#{text_with_icon}</a>"
|
29
|
+
end
|
30
|
+
|
31
|
+
def got
|
32
|
+
@got ||= helper.bs_inline_button_to(url, icon, options)
|
33
|
+
end
|
34
|
+
|
35
|
+
def failure_message (is_not)
|
36
|
+
ex = is_not ? "expected not" : "expected"
|
37
|
+
"#{ex}: #{expected}\n got: #{got}"
|
38
|
+
end
|
39
|
+
|
40
|
+
def url
|
41
|
+
@url
|
42
|
+
end
|
43
|
+
|
44
|
+
def icon
|
45
|
+
@icon
|
46
|
+
end
|
47
|
+
|
48
|
+
def size?
|
49
|
+
@size_set
|
50
|
+
end
|
51
|
+
|
52
|
+
chain :with_size do |size|
|
53
|
+
options[:size] = size
|
54
|
+
@size_set = true
|
55
|
+
end
|
56
|
+
|
57
|
+
match do
|
58
|
+
@url = url
|
59
|
+
@icon = icon
|
60
|
+
expected == got
|
61
|
+
end
|
62
|
+
|
63
|
+
failure_message_for_should do
|
64
|
+
failure_message(false)
|
65
|
+
end
|
66
|
+
|
67
|
+
failure_message_for_should_not do
|
68
|
+
failure_message(true)
|
69
|
+
end
|
70
|
+
|
71
|
+
description do
|
72
|
+
desc = "render an inline button to '#{url}' with the icon: #{icon}"
|
73
|
+
descs = []
|
74
|
+
descs << "with the size: #{options[:size]}" if size?
|
75
|
+
|
76
|
+
desc << " " if descs.any?
|
77
|
+
desc << descs.to_sentence(two_words_connector: " and ", last_word_connector: " and ")
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
RSpec::Matchers.define :render_bs_button_tag do |text, type|
|
2
|
+
def options
|
3
|
+
@options ||= { }
|
4
|
+
end
|
5
|
+
|
6
|
+
def append_style (style)
|
7
|
+
" btn-#{style}"
|
8
|
+
end
|
9
|
+
|
10
|
+
def cls
|
11
|
+
@cls ||= begin
|
12
|
+
cls = "btn"
|
13
|
+
cls << " btn-#{options[:style]}" if style?
|
14
|
+
cls << " btn-#{options[:size]}" if size?
|
15
|
+
cls
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def text_with_icon
|
20
|
+
if icon?
|
21
|
+
cls = "icon-#{options[:icon]}"
|
22
|
+
cls << " icon-white" if inverted?
|
23
|
+
icon = "<i class=\"#{cls}\"></i>"
|
24
|
+
default = icon + " " + text
|
25
|
+
|
26
|
+
if icon_position?
|
27
|
+
if options[:icon_position].to_s == "right"
|
28
|
+
return text + " " + icon
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
default
|
33
|
+
else
|
34
|
+
text
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def expected
|
39
|
+
@render_button_expected ||= "<button class=\"#{cls}\" name=\"button\" type=\"#{type}\">#{text_with_icon}</button>"
|
40
|
+
end
|
41
|
+
|
42
|
+
def got
|
43
|
+
@got ||= helper.bs_button_tag(text, type, options)
|
44
|
+
end
|
45
|
+
|
46
|
+
def failure_message (is_not)
|
47
|
+
ex = is_not ? "expected not" : "expected"
|
48
|
+
"#{ex}: #{expected}\n got: #{got}"
|
49
|
+
end
|
50
|
+
|
51
|
+
def text
|
52
|
+
@text
|
53
|
+
end
|
54
|
+
|
55
|
+
def type
|
56
|
+
@type
|
57
|
+
end
|
58
|
+
|
59
|
+
def style?
|
60
|
+
@style_set
|
61
|
+
end
|
62
|
+
|
63
|
+
def size?
|
64
|
+
@size_set
|
65
|
+
end
|
66
|
+
|
67
|
+
def icon?
|
68
|
+
@icon_set
|
69
|
+
end
|
70
|
+
|
71
|
+
def inverted?
|
72
|
+
@inverted_set
|
73
|
+
end
|
74
|
+
|
75
|
+
def icon_position?
|
76
|
+
@icon_position_set
|
77
|
+
end
|
78
|
+
|
79
|
+
chain :to do |url|
|
80
|
+
@url = url
|
81
|
+
end
|
82
|
+
|
83
|
+
chain :with_style do |style|
|
84
|
+
options[:style] = style
|
85
|
+
@style_set = true
|
86
|
+
end
|
87
|
+
|
88
|
+
chain :with_size do |size|
|
89
|
+
options[:size] = size
|
90
|
+
@size_set = true
|
91
|
+
end
|
92
|
+
|
93
|
+
chain :with_icon do |icon|
|
94
|
+
options[:icon] = icon
|
95
|
+
@icon_set = true
|
96
|
+
end
|
97
|
+
|
98
|
+
chain :with_icon_inverted do |inverted|
|
99
|
+
options[:icon_invert] = inverted
|
100
|
+
@inverted_set = true
|
101
|
+
end
|
102
|
+
|
103
|
+
chain :with_icon_position do |icon_position|
|
104
|
+
options[:icon_position] = icon_position
|
105
|
+
@icon_position_Set = true
|
106
|
+
end
|
107
|
+
|
108
|
+
match do
|
109
|
+
@text = text
|
110
|
+
@type = type
|
111
|
+
expected == got
|
112
|
+
end
|
113
|
+
|
114
|
+
failure_message_for_should do
|
115
|
+
failure_message(false)
|
116
|
+
end
|
117
|
+
|
118
|
+
failure_message_for_should_not do
|
119
|
+
failure_message(true)
|
120
|
+
end
|
121
|
+
|
122
|
+
description do
|
123
|
+
desc = "render a button with type '#{type}'"
|
124
|
+
descs = []
|
125
|
+
descs << "with the style: #{options[:style]}" if style?
|
126
|
+
descs << "with the size: #{options[:size]}" if size?
|
127
|
+
|
128
|
+
ext = inverted? ? "inverted " : ""
|
129
|
+
|
130
|
+
descs << "with the #{ext}icon: #{options[:icon]}" if icon?
|
131
|
+
descs << "with the icon_position: #{options[:icon_position]}" if icon_position?
|
132
|
+
|
133
|
+
desc << " " if descs.any?
|
134
|
+
desc << descs.to_sentence(two_words_connector: " and ", last_word_connector: " and ")
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
RSpec::Matchers.define :render_bs_label do |text|
|
2
|
+
def options
|
3
|
+
@options ||= { }
|
4
|
+
end
|
5
|
+
|
6
|
+
def style
|
7
|
+
@style
|
8
|
+
end
|
9
|
+
|
10
|
+
def style?
|
11
|
+
@style.present?
|
12
|
+
end
|
13
|
+
|
14
|
+
def custom_class
|
15
|
+
@custom_class
|
16
|
+
end
|
17
|
+
|
18
|
+
def custom_class?
|
19
|
+
@custom_class.present?
|
20
|
+
end
|
21
|
+
|
22
|
+
def tooltip?
|
23
|
+
options.key?(:tooltip)
|
24
|
+
end
|
25
|
+
|
26
|
+
def tooltip_position?
|
27
|
+
options.key?(:tooltip_position)
|
28
|
+
end
|
29
|
+
|
30
|
+
def text
|
31
|
+
@text
|
32
|
+
end
|
33
|
+
|
34
|
+
def html_cls
|
35
|
+
@html_cls ||= custom_class? ? custom_class.to_s : style.to_s
|
36
|
+
end
|
37
|
+
|
38
|
+
def build_html_class
|
39
|
+
"label".tap do |c|
|
40
|
+
c << " label-#{html_cls}" unless html_cls == "default"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def html_attributes
|
45
|
+
attrs = { class: build_html_class }
|
46
|
+
|
47
|
+
if tooltip?
|
48
|
+
if tooltip_position?
|
49
|
+
attrs[:"data-placement"] = options[:tooltip_position]
|
50
|
+
end
|
51
|
+
|
52
|
+
attrs[:"data-toggle"] = "tooltip"
|
53
|
+
attrs[:title] = options[:tooltip]
|
54
|
+
end
|
55
|
+
|
56
|
+
attrs.map { |k, v| "#{k}=\"#{v}\"" }.join(" ")
|
57
|
+
end
|
58
|
+
|
59
|
+
def expected
|
60
|
+
@render_bs_label_expected ||= begin
|
61
|
+
"<span #{html_attributes}>#{text}</span>"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def got
|
66
|
+
@got ||= helper.bs_label(text, style, options)
|
67
|
+
end
|
68
|
+
|
69
|
+
def failure_message (is_not)
|
70
|
+
ex = is_not ? "expected not" : "expected"
|
71
|
+
"#{ex}: #{expected}\n got: #{got}"
|
72
|
+
end
|
73
|
+
|
74
|
+
chain :with_style do |style|
|
75
|
+
@style = style
|
76
|
+
end
|
77
|
+
|
78
|
+
chain :as_class do |custom_class|
|
79
|
+
@custom_class = custom_class
|
80
|
+
end
|
81
|
+
|
82
|
+
chain :with_tooltip do |tooltip|
|
83
|
+
options[:tooltip] = tooltip
|
84
|
+
end
|
85
|
+
|
86
|
+
chain :with_tooltip_position do |tooltip_position|
|
87
|
+
options[:tooltip_position] = tooltip_position
|
88
|
+
end
|
89
|
+
|
90
|
+
match do
|
91
|
+
@text = text
|
92
|
+
@style ||= "default"
|
93
|
+
expected == got
|
94
|
+
end
|
95
|
+
|
96
|
+
failure_message_for_should do
|
97
|
+
failure_message(false)
|
98
|
+
end
|
99
|
+
|
100
|
+
failure_message_for_should_not do
|
101
|
+
failure_message(true)
|
102
|
+
end
|
103
|
+
|
104
|
+
description do
|
105
|
+
desc = "should return a label with the text '#{text}' and with the #{style} style"
|
106
|
+
desc << " as the class #{html_cls}" if custom_class?
|
107
|
+
descs = []
|
108
|
+
descs << "with the '#{options[:tooltip]}' tooltip" if tooltip?
|
109
|
+
descs << "with the '#{options[:tooltip_position]}' tooltip position" if tooltip_position?
|
110
|
+
|
111
|
+
desc << " " if descs.any?
|
112
|
+
desc << descs.to_sentence(two_words_connector: " and ", last_word_connector: " and ")
|
113
|
+
end
|
114
|
+
end
|