generate-column-widths 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 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: []