generate-column-widths 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: aeaae8a97425684bcaaa894651131a3f6fe93d28
4
+ data.tar.gz: fe60d18972ef4917c5e1a6c539e4b40ab71ddace
5
+ SHA512:
6
+ metadata.gz: 81218fd6c200cb01573b4e3f797a77d479723b5f0b3e84967ededb6fa450436454c0c5e39c7912be4b8e475025c42775212953ed31189f82b89aa517136a0e0e
7
+ data.tar.gz: 9c418a888ffca67054c6b950e8fd09746857e527c1f2dadcf4ef118fd2a84d49833c35a7e84de7aeac031ebbc693d7dfd37d4cd3af6e06ccb11e082baf13be2a
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in generate-column-widths.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 'Liane Allen'
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,193 @@
1
+ # GenerateColumnWidths
2
+
3
+ This gem allows you to calculate the number of columns to span in a css grid
4
+ when your site may have a variable number of columns of data to display.
5
+
6
+ It allows you to generate the number of columns you need, and to have them
7
+ automatically be the correct widths to fit your page, based on the data you have
8
+ to display. You don't need to know a priori how many columns your data will
9
+ produce, and you don't need to fill your html with a bunch of centering divs to
10
+ try to make it look ok.
11
+
12
+ It also allows you to accommodate a situation when the columns being generated
13
+ need to fit alongside columns that are already on the page.
14
+
15
+ You use the generated variable to create columns automatically in your views.
16
+ For example, in this snippet, which generates a 4 column layout for screen sizes
17
+ small and above (a Bootstrap concept):
18
+
19
+ <% @your_collection.each do |item| %>
20
+ <div class="col-sm-3">
21
+ ...
22
+ <% end %>
23
+
24
+ The variable generated by the gem replaces the "3" in the col-sm-3 with the
25
+ variable generated by the gem's method. As your view iterates through the
26
+ items in the collection and renders them in the view, it will generate only the
27
+ number of columns you need for the data you have. The columns will
28
+ automatically be the right width to accommodate your data. If you have fewer
29
+ than expected, your columns won't all be clumped together to one side- and you
30
+ can accomplish that without having to add a bunch of centering divs to wrap the
31
+ content.
32
+
33
+ This doc is largely implementation oriented. If you need a bit more of a plain
34
+ English description of what it does, check out my blog post:
35
+ [lianeallen.com/home/2014/09/module-to-auto-generate-column-widths-in-a-grid-system/](http://www.lianeallen.com/home/2014/09/module-to-auto-generate-column-widths-in-a-grid-system/)
36
+
37
+ ## Installation
38
+
39
+ Add this line to your application's Gemfile:
40
+
41
+ gem 'generate-column-widths'
42
+
43
+ And then execute:
44
+
45
+ $ bundle
46
+
47
+ Or install it yourself as:
48
+
49
+ $ gem install generate-column-widths
50
+
51
+ ## Usage
52
+ Once it's installed, it's easy to use:
53
+
54
+ ###1. Include the Module in the Model that Needs It
55
+
56
+ In the model whose views will need auto-generated column widths:
57
+
58
+ include GenerateColumnWidths
59
+
60
+ #### Example
61
+ Since I'm using this for views that contain lists of project categories, I put
62
+ it in my Category model, category.rb:
63
+
64
+ class Category < ActiveRecord::Base
65
+ include GenerateColumnWidths
66
+ ...
67
+ end
68
+
69
+ ###2. Determine How Many Columns are in Your Data
70
+ From the controller where the view is generated, calculate the number of columns
71
+ you need.
72
+
73
+ ####Example:
74
+ In my case, I needed to get a count of the number of meta-category headings I'd
75
+ have in my view by finding out how many of those meta-categories contained any
76
+ associated projects:
77
+
78
+ @category_types = # code to find which meta categories contain projects
79
+ @category_types_count = category_types.count
80
+
81
+ ###3. Call the Generator
82
+ In your controller, call the generator.
83
+
84
+ Simply call the generate_widths method with your new variable. Call it via the
85
+ model into which you placed it. In my case, that's Category.
86
+
87
+ This is the code in my categories_controller.
88
+
89
+ @column_width = Category.new.generate_widths(
90
+ @category_types_count
91
+ )
92
+
93
+ I use @column_width in the Bootstrap div in my categories index view (see below).
94
+
95
+ ###5. Use it in Your View
96
+ Replace the number in the div that defines the column span in your view.
97
+ Here's what it looks like in a Bootstrap column div for small views and higher:
98
+
99
+ <% @category_types.each do |type| %>
100
+ <div class="col-sm-<%= @column_width %>">
101
+ ...
102
+ <% end %>
103
+
104
+ Be sure to put the div inside the iterator, or you're going to end up with just one
105
+ narrow column.
106
+
107
+ ###You Can Change the Defaults
108
+ The generator has several defaults built in. It assumes you want a maximum of 4
109
+ columns in your view, using a 12 column Bootstrap3 grid. You can change the
110
+ defaults by specifying a different value for any or all of the optional variables.
111
+
112
+ You need only include those options you want to change. Any option you don't
113
+ include will automatically use the default.
114
+
115
+ ####Option: total_grid_columns
116
+ The number of columns in your grid system. Bootstrap3 uses 12, others may use 9
117
+ or some other number.
118
+
119
+ Default:
120
+
121
+ total_grid_columns: 12
122
+
123
+ ####Option: existing_columns
124
+ The number of columns already in the view, that will share a row with your new
125
+ columns. In the vast majority of cases, you won't need to change this, but it's
126
+ here in case you do.
127
+
128
+ Default:
129
+
130
+ existing_columns: 0
131
+
132
+ ####Option: min_column_span
133
+ The minimum span you want to use. This is one of those counter-intuitive things
134
+ in Bootstrap. It's not the number of columns you want, it's:
135
+
136
+ How many of the 12 columns in the grid do you want this column to span?
137
+
138
+ So, you divide the total number of columns in the grid by this number to get
139
+ the number of columns you're trying to span.
140
+
141
+ The result is how many columns you'll end up with in your row, before Bootstrap
142
+ wraps to a new line to display the next set of columns.
143
+
144
+ The default is to span 3 columns, at a minimum, which means (12 / 3 = 4) you'll
145
+ get a maximum of 4 columns in the view.
146
+
147
+ Default:
148
+
149
+ min_column_span: 3
150
+
151
+ Unless you're fond of seeing divide by zero errors, don't set this to zero.
152
+
153
+ ####Option: max_column_span
154
+ This is the maximum number of columns you want to span. It's the opposite of the
155
+ above. The default is 12, so divide 12/12, and you get ... 1. That's the minimum
156
+ number of columns that will be shown.
157
+
158
+ Default:
159
+
160
+ max_column_span: 12
161
+
162
+ Unless you're fond of seeing divide by zero errors, don't set this to zero.
163
+
164
+ ####Example 1
165
+ On one page, I need to accomodate an extra column of data that's generated
166
+ elsewhere. So my categories columns will appear in the same row as an extra
167
+ column. To deal with this, I can call:
168
+
169
+ @column_width = Category.new.generate_widths(
170
+ @category_types_count,
171
+ existing_columns: 1
172
+ )
173
+
174
+ ####Example 2
175
+ Alternatively, if I were using a 9 grid, instead of a 12 grid, I could specify:
176
+
177
+ @column_width = Category.new.generate_widths(
178
+ @category_types_count,
179
+ total_grid_columns: 9,
180
+ max_column_span: 9
181
+ )
182
+
183
+ In this case, the default min_column_span (3) would be divided into 9, giving me a
184
+ maximum of 3 columns in my view before Bootstrap wraps to a new line for
185
+ additional columns.
186
+
187
+ ## Contributing
188
+
189
+ 1. Fork it ( https://github.com/[my-github-username]/generate-column-widths/fork )
190
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
191
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
192
+ 4. Push to the branch (`git push origin my-new-feature`)
193
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'generate-column-widths/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "generate-column-widths"
8
+ spec.version = GenerateColumnWidths::VERSION
9
+ spec.authors = ["'Liane Allen'"]
10
+ spec.email = ["'github@lianeallen.com'"]
11
+ spec.summary = %q{Generate the span value to use with a css grid system.}
12
+ spec.description = %q{Automatically generates the span value to use when
13
+ your view may have a variable number of columns,
14
+ and you're using a css grid system.}
15
+ spec.homepage = "http://github.com/liantics/generate-column-widths"
16
+ spec.license = "MIT"
17
+
18
+ spec.files = `git ls-files -z`.split("\x0")
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.6"
24
+ spec.add_development_dependency "rake"
25
+ end
data/gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ Gemfile.lock
@@ -0,0 +1,20 @@
1
+ require "generate-column-widths/version"
2
+
3
+ module GenerateColumnWidths
4
+ def generate_widths(new_columns,
5
+ total_grid_columns: 12,
6
+ existing_columns: 0,
7
+ min_column_span: 3,
8
+ max_column_span: 12)
9
+ columns_in_row = new_columns + existing_columns
10
+ span = (total_grid_columns / columns_in_row).floor
11
+
12
+ if span < min_column_span
13
+ span = min_column_span
14
+ elsif span > max_column_span
15
+ span = max_column_span
16
+ end
17
+
18
+ span
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ module GenerateColumnWidths
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: generate-column-widths
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - "'Liane Allen'"
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: |-
42
+ Automatically generates the span value to use when
43
+ your view may have a variable number of columns,
44
+ and you're using a css grid system.
45
+ email:
46
+ - "'github@lianeallen.com'"
47
+ executables: []
48
+ extensions: []
49
+ extra_rdoc_files: []
50
+ files:
51
+ - ".gitignore"
52
+ - Gemfile
53
+ - LICENSE.txt
54
+ - README.md
55
+ - Rakefile
56
+ - generate-column-widths.gemspec
57
+ - gitignore
58
+ - lib/generate-column-widths.rb
59
+ - lib/generate-column-widths/version.rb
60
+ homepage: http://github.com/liantics/generate-column-widths
61
+ licenses:
62
+ - MIT
63
+ metadata: {}
64
+ post_install_message:
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ requirements: []
79
+ rubyforge_project:
80
+ rubygems_version: 2.2.2
81
+ signing_key:
82
+ specification_version: 4
83
+ summary: Generate the span value to use with a css grid system.
84
+ test_files: []