bootstrap_builders 0.0.3 → 0.0.4

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/{LICENSE.txt → MIT-LICENSE} +1 -1
  3. data/README.md +52 -8
  4. data/Rakefile +17 -44
  5. data/app/assets/javascripts/bootstrap_builders/application.js +13 -0
  6. data/app/assets/stylesheets/bootstrap_builders/application.css +15 -0
  7. data/app/controllers/bootstrap_builders/application_controller.rb +2 -0
  8. data/app/helpers/bootstrap_builders/application_helper.rb +104 -0
  9. data/app/views/layouts/bootstrap_builders/application.html.erb +14 -0
  10. data/config/routes.rb +2 -0
  11. data/config/spring.rb +1 -0
  12. data/lib/bootstrap_builders.rb +15 -5
  13. data/lib/bootstrap_builders/attribute_rows.rb +95 -0
  14. data/lib/bootstrap_builders/button.rb +90 -22
  15. data/lib/bootstrap_builders/class_attribute_handler.rb +20 -0
  16. data/lib/bootstrap_builders/configuration.rb +7 -0
  17. data/lib/bootstrap_builders/engine.rb +3 -0
  18. data/lib/bootstrap_builders/is_a_checker.rb +14 -0
  19. data/lib/bootstrap_builders/panel.rb +88 -0
  20. data/lib/bootstrap_builders/table.rb +44 -0
  21. data/lib/bootstrap_builders/version.rb +3 -0
  22. data/lib/tasks/bootstrap_builders_tasks.rake +4 -0
  23. metadata +158 -44
  24. data/.document +0 -5
  25. data/.rspec +0 -1
  26. data/.rubocop.yml +0 -60
  27. data/Gemfile +0 -14
  28. data/Gemfile.lock +0 -99
  29. data/VERSION +0 -1
  30. data/bootstrap_builders.gemspec +0 -76
  31. data/lib/bootstrap_builders/application_helpers.rb +0 -55
  32. data/lib/bootstrap_builders/box.rb +0 -66
  33. data/spec/bootstrap_helpers/box_spec.rb +0 -17
  34. data/spec/bootstrap_helpers/button_spec.rb +0 -12
  35. data/spec/spec_helper.rb +0 -12
  36. data/spec/support/working_helpers.rb +0 -39
@@ -1,25 +1,35 @@
1
1
  class BootstrapBuilders::Button
2
+ attr_accessor :label
3
+
4
+ def self.parse_url_args(args)
5
+ if args.last.is_a?(Hash)
6
+ real_args = args.pop
7
+ else
8
+ real_args = {}
9
+ end
10
+
11
+ real_args[:url] ||= args.shift if args.first
12
+ real_args[:label] ||= args.shift if args.first
13
+ real_args
14
+ end
15
+
2
16
  def initialize(args)
3
- @label = args.fetch(:label)
4
- @mini = args[:mini]
17
+ @label = args[:label]
5
18
  @class = args[:class]
6
19
  @url = args.fetch(:url)
7
20
  @args = args
8
21
  @context = args.fetch(:context)
9
- @icon = args.fetch(:icon)
22
+ @icon = args[:icon]
10
23
  @can = args[:can]
24
+ @small = args[:small]
25
+ @mini = args[:mini]
11
26
  end
12
27
 
13
28
  def classes
14
29
  unless @classes
15
- @classes = ["btn", "btn-default"]
16
- @classes << "btn-xs" if @mini
17
-
18
- if @class.is_a?(String)
19
- @classes += @class.split(/\s+/)
20
- elsif @class.is_a?(Array)
21
- @classes += @class
22
- end
30
+ @classes = BootstrapBuilders::ClassAttributeHandler.new(class: ["btn", "btn-default"])
31
+ @classes.add("btn-xs") if @mini || @small
32
+ @classes.add(@class) if @class
23
33
  end
24
34
 
25
35
  @classes
@@ -28,14 +38,26 @@ class BootstrapBuilders::Button
28
38
  def html
29
39
  return unless can?
30
40
 
31
- @context.link_to @url, class: classes, data: @args[:data], method: @args[:method], remote: @args[:remote] do
41
+ handle_confirm_argument
42
+
43
+ @context.link_to(@url, class: classes.classes, data: @args[:data], method: @args[:method], remote: @args[:remote], title: @args[:title]) do
32
44
  html = ""
33
- html << @context.content_tag(:i, nil, class: ["fa", "fa-#{@icon}"])
34
- html << " #{@label}" if @label
35
- html.html_safe
45
+ html << @context.content_tag(:i, nil, class: ["fa", "fa-#{@icon}"]) if @icon
46
+ html << " #{@label}" if @label && !@mini
47
+ html.strip.html_safe
36
48
  end
37
49
  end
38
50
 
51
+ def can_model
52
+ can_object unless @can_model
53
+ @can_model
54
+ end
55
+
56
+ def can_model_class
57
+ can_object unless @can_model_class
58
+ @can_model_class
59
+ end
60
+
39
61
  private
40
62
 
41
63
  def can?
@@ -45,17 +67,63 @@ private
45
67
  end
46
68
 
47
69
  def can_object
48
- return @can if @can
70
+ if !@can_object && @can_object != false
71
+ if @can
72
+ can_object_from_given_can_argument
73
+ elsif @url
74
+ can_object_from_url
75
+ end
76
+
77
+ @can_object = false unless @can_object
78
+ end
79
+
80
+ @can_object
81
+ end
49
82
 
50
- if @url.is_a?(Array)
51
- model = @url.last
83
+ def can_object_from_url
84
+ url = @url.clone
85
+
86
+ if url.is_a?(Array)
87
+ url.pop if url.last.is_a?(Hash)
88
+ last_element_in_url = url.last
52
89
  else
53
- model = @url
90
+ last_element_in_url = url
54
91
  end
55
92
 
56
- return nil unless model
93
+ if last_element_in_url.is_a?(Class)
94
+ model_class = last_element_in_url
95
+ else
96
+ model_class = last_element_in_url.class
97
+ end
98
+
99
+ ancestors = model_class.ancestors.map(&:name)
100
+
101
+ if ancestors.include?("ActiveRecord::Base") || ancestors.include?("BazaModels::Model")
102
+ @can_object = last_element_in_url
103
+ @can_model = last_element_in_url unless last_element_in_url.is_a?(Class)
104
+ @can_model_class = model_class
105
+ end
106
+ end
107
+
108
+ def can_object_from_given_can_argument
109
+ if @can.is_a?(Class)
110
+ model_class = @can
111
+ else
112
+ model_class = @can.class
113
+ end
114
+
115
+ ancestors = model_class.ancestors.map(&:name)
116
+
117
+ if ancestors.include?("ActiveRecord::Base") || ancestors.include?("BazaModels::Model")
118
+ @can_object = @can
119
+ @can_model = @can unless @can.is_a?(Class)
120
+ @can_model_class = model_class
121
+ end
122
+ end
57
123
 
58
- ancestors = model.class.ancestors.map(&:name)
59
- return model if ancestors.include?("ActiveRecord::Base") || ancestors.include?("BazaModels::Model")
124
+ def handle_confirm_argument
125
+ return unless @args[:confirm]
126
+ @args[:data] ||= {}
127
+ @args[:data][:confirm] = I18n.t("are_you_sure")
60
128
  end
61
129
  end
@@ -0,0 +1,20 @@
1
+ class BootstrapBuilders::ClassAttributeHandler
2
+ attr_reader :classes
3
+
4
+ def initialize(args)
5
+ @classes = convert_to_array(args.fetch(:class))
6
+ end
7
+
8
+ def add(class_argument)
9
+ @classes += convert_to_array(class_argument)
10
+ end
11
+
12
+ private
13
+
14
+ def convert_to_array(argument)
15
+ return argument.split(/\s+/) if argument.is_a?(String)
16
+ return argument if argument.is_a?(Array)
17
+ return [] if args.fetch(:class).nil?
18
+ raise "Unknown class-type: #{args.fetch(:class)}" unless @classes
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ class BootstrapBuilders::Configuration
2
+ attr_accessor :default_table_classes
3
+
4
+ def initialize
5
+ @default_table_classes = [:bordered, :hover, :striped]
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ class BootstrapBuilders::Engine < ::Rails::Engine
2
+ isolate_namespace BootstrapBuilders
3
+ end
@@ -0,0 +1,14 @@
1
+ class BootstrapBuilders::IsAChecker
2
+ def self.is_a?(object, class_name)
3
+ BootstrapBuilders::IsAChecker.new(object: object, class_name: class_name).is_a?
4
+ end
5
+
6
+ def initialize(args)
7
+ @object = args.fetch(:object)
8
+ @class_name = args.fetch(:class_name).to_s
9
+ end
10
+
11
+ def is_a?
12
+ @object.class.ancestors.map(&:name).include?(@class_name)
13
+ end
14
+ end
@@ -0,0 +1,88 @@
1
+ class BootstrapBuilders::Panel
2
+ def initialize(args)
3
+ @title = args.fetch(:title)
4
+ @controls = args[:controls]
5
+ @table = args[:table]
6
+ @block = args.fetch(:block)
7
+ @context = args.fetch(:context)
8
+ @class = args[:class]
9
+ @data = args[:data]
10
+
11
+ @css = {}
12
+ @css[:width] = args.fetch(:width) if args[:width]
13
+ end
14
+
15
+ def html
16
+ @panel = HtmlGen::Element.new(:div, inden: " ", classes: container_classes, css: @css, data: @data)
17
+
18
+ add_heading if @title || @controls
19
+
20
+ if @table
21
+ add_table
22
+ else
23
+ add_body
24
+ end
25
+
26
+ html = @panel.html
27
+
28
+ if html.respond_to?(:html_safe)
29
+ html.html_safe
30
+ else
31
+ html
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def add_heading
38
+ heading = @panel.add_ele(:div, classes: ["panel-heading", "clearfix"])
39
+
40
+ if !@title || @title.to_s.strip.empty?
41
+ heading.add_ele(:div, classes: ["panel-title", "pull-left"], str_html: "&nbsp;") if @controls
42
+ else
43
+ heading.add_ele(:div, classes: ["panel-title", "pull-left"], str: @title)
44
+ end
45
+
46
+ heading.add_ele(:div, classes: ["pull-right"], str_html: controls_content) if @controls
47
+ end
48
+
49
+ def controls_content
50
+ if @controls.is_a?(Array)
51
+ @controls.join(" ")
52
+ else
53
+ @controls.to_s
54
+ end
55
+ end
56
+
57
+ def add_table
58
+ table_responsive = @panel.add_ele(:div, classes: ["table-responsive"])
59
+
60
+ table_args = {
61
+ class: "bb-panel-table",
62
+ bs_classes: ["table-striped", "table-hover", "bb-panel-table"],
63
+ context: @context,
64
+ blk: @block
65
+ }
66
+
67
+ table_args.merge!(@table) if @table.is_a?(Hash)
68
+
69
+ table = BootstrapBuilders::Table.new(table_args)
70
+ table_responsive.add_html(table.html)
71
+ end
72
+
73
+ def add_body
74
+ @panel.add_html(@context.content_tag(:div, nil, class: ["panel-body"], &@block))
75
+ end
76
+
77
+ def container_classes
78
+ classes = ["panel", "panel-default", "bb-panel"]
79
+
80
+ if @class.is_a?(String)
81
+ classes += @class.split(/\s+/)
82
+ elsif @class.is_a?(Array)
83
+ classes += @class
84
+ end
85
+
86
+ classes
87
+ end
88
+ end
@@ -0,0 +1,44 @@
1
+ class BootstrapBuilders::Table
2
+ def initialize(args)
3
+ @args = args
4
+ @blk = args.delete(:blk)
5
+ @context = args.delete(:context)
6
+ end
7
+
8
+ def html
9
+ @context.content_tag(:table, attributes, &@blk)
10
+ end
11
+
12
+ private
13
+
14
+ def attributes
15
+ attributes = {class: classes}
16
+
17
+ pass_through = [:data]
18
+ pass_through.each do |pass_through_arg|
19
+ next unless @args.key?(pass_through_arg)
20
+ attributes[pass_through_arg] = @args[pass_through_arg]
21
+ end
22
+
23
+ attributes
24
+ end
25
+
26
+ def classes
27
+ if @args[:bs_classes]
28
+ classes = @args[:bs_classes]
29
+ else
30
+ classes = BootstrapBuilders.configuration.default_table_classes
31
+ end
32
+
33
+ classes.map! { |class_name| "table-#{class_name}" }
34
+
35
+ if @args[:class].is_a?(String)
36
+ classes += @args.fetch(:class).split(/\s+/)
37
+ elsif @args[:class].is_a?(Array)
38
+ classes += @args.fetch(:class)
39
+ end
40
+
41
+ classes += ["table", "bb-table"]
42
+ classes
43
+ end
44
+ end
@@ -0,0 +1,3 @@
1
+ module BootstrapBuilders
2
+ VERSION = "0.0.4".freeze
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :bootstrap_builders do
3
+ # # Task goes here
4
+ # end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootstrap_builders
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - kaspernj
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-21 00:00:00.000000000 Z
11
+ date: 2016-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.0
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: html_gen
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -25,75 +39,173 @@ dependencies:
25
39
  - !ruby/object:Gem::Version
26
40
  version: 0.0.11
27
41
  - !ruby/object:Gem::Dependency
28
- name: rspec
42
+ name: devise
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - "~>"
45
+ - - '='
32
46
  - !ruby/object:Gem::Version
33
- version: 3.4.0
47
+ version: 3.5.6
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - "~>"
52
+ - - '='
39
53
  - !ruby/object:Gem::Version
40
- version: 3.4.0
54
+ version: 3.5.6
41
55
  - !ruby/object:Gem::Dependency
42
- name: rdoc
56
+ name: sqlite3
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - '='
46
60
  - !ruby/object:Gem::Version
47
- version: '3.12'
61
+ version: 1.3.11
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - '='
53
67
  - !ruby/object:Gem::Version
54
- version: '3.12'
68
+ version: 1.3.11
55
69
  - !ruby/object:Gem::Dependency
56
- name: bundler
70
+ name: cancancan
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - "~>"
73
+ - - '='
60
74
  - !ruby/object:Gem::Version
61
- version: '1.0'
75
+ version: 1.13.1
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - "~>"
80
+ - - '='
67
81
  - !ruby/object:Gem::Version
68
- version: '1.0'
82
+ version: 1.13.1
69
83
  - !ruby/object:Gem::Dependency
70
- name: jeweler
84
+ name: rspec-rails
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - "~>"
87
+ - - '='
74
88
  - !ruby/object:Gem::Version
75
- version: 2.0.1
89
+ version: 3.4.2
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - "~>"
94
+ - - '='
81
95
  - !ruby/object:Gem::Version
82
- version: 2.0.1
96
+ version: 3.4.2
83
97
  - !ruby/object:Gem::Dependency
84
- name: best_practice_project
98
+ name: factory_girl_rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 4.6.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 4.6.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: haml
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - ">="
88
116
  - !ruby/object:Gem::Version
89
- version: '0'
117
+ version: 4.0.7
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - ">="
95
123
  - !ruby/object:Gem::Version
96
- version: '0'
124
+ version: 4.0.7
125
+ - !ruby/object:Gem::Dependency
126
+ name: spring
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 1.6.4
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 1.6.4
139
+ - !ruby/object:Gem::Dependency
140
+ name: capybara
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '='
144
+ - !ruby/object:Gem::Version
145
+ version: 2.6.2
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '='
151
+ - !ruby/object:Gem::Version
152
+ version: 2.6.2
153
+ - !ruby/object:Gem::Dependency
154
+ name: capybara-webkit
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '='
158
+ - !ruby/object:Gem::Version
159
+ version: 1.8.0
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '='
165
+ - !ruby/object:Gem::Version
166
+ version: 1.8.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: spring-commands-rspec
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '='
172
+ - !ruby/object:Gem::Version
173
+ version: 1.0.4
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '='
179
+ - !ruby/object:Gem::Version
180
+ version: 1.0.4
181
+ - !ruby/object:Gem::Dependency
182
+ name: spring-commands-rubocop
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '='
186
+ - !ruby/object:Gem::Version
187
+ version: 0.1.0
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '='
193
+ - !ruby/object:Gem::Version
194
+ version: 0.1.0
195
+ - !ruby/object:Gem::Dependency
196
+ name: best_practice_project
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '='
200
+ - !ruby/object:Gem::Version
201
+ version: 0.0.9
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '='
207
+ - !ruby/object:Gem::Version
208
+ version: 0.0.9
97
209
  - !ruby/object:Gem::Dependency
98
210
  name: rubocop
99
211
  requirement: !ruby/object:Gem::Requirement
@@ -109,32 +221,34 @@ dependencies:
109
221
  - !ruby/object:Gem::Version
110
222
  version: 0.36.0
111
223
  description: A library to generate Bootstrap HTML for Rails.
112
- email: k@spernj.org
224
+ email:
225
+ - kaspernj@gmail.com
113
226
  executables: []
114
227
  extensions: []
115
- extra_rdoc_files:
116
- - LICENSE.txt
117
- - README.md
228
+ extra_rdoc_files: []
118
229
  files:
119
- - ".document"
120
- - ".rspec"
121
- - ".rubocop.yml"
122
- - Gemfile
123
- - Gemfile.lock
124
- - LICENSE.txt
230
+ - MIT-LICENSE
125
231
  - README.md
126
232
  - Rakefile
127
- - VERSION
128
- - bootstrap_builders.gemspec
233
+ - app/assets/javascripts/bootstrap_builders/application.js
234
+ - app/assets/stylesheets/bootstrap_builders/application.css
235
+ - app/controllers/bootstrap_builders/application_controller.rb
236
+ - app/helpers/bootstrap_builders/application_helper.rb
237
+ - app/views/layouts/bootstrap_builders/application.html.erb
238
+ - config/routes.rb
239
+ - config/spring.rb
129
240
  - lib/bootstrap_builders.rb
130
- - lib/bootstrap_builders/application_helpers.rb
131
- - lib/bootstrap_builders/box.rb
241
+ - lib/bootstrap_builders/attribute_rows.rb
132
242
  - lib/bootstrap_builders/button.rb
133
- - spec/bootstrap_helpers/box_spec.rb
134
- - spec/bootstrap_helpers/button_spec.rb
135
- - spec/spec_helper.rb
136
- - spec/support/working_helpers.rb
137
- homepage: http://github.com/kaspernj/bootstrap_builders
243
+ - lib/bootstrap_builders/class_attribute_handler.rb
244
+ - lib/bootstrap_builders/configuration.rb
245
+ - lib/bootstrap_builders/engine.rb
246
+ - lib/bootstrap_builders/is_a_checker.rb
247
+ - lib/bootstrap_builders/panel.rb
248
+ - lib/bootstrap_builders/table.rb
249
+ - lib/bootstrap_builders/version.rb
250
+ - lib/tasks/bootstrap_builders_tasks.rake
251
+ homepage: https://github.com/kaspernj/bootstrap_builders
138
252
  licenses:
139
253
  - MIT
140
254
  metadata: {}