liquidity 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,104 @@
1
+ = Motivation
2
+
3
+ Liquid layouts: the practice (among other things) of rendering a single ul/li group (like this):
4
+
5
+ <ul>
6
+ <li>1</li>
7
+ <li>2</li>
8
+ <li>3</li>
9
+ <li>4</li>
10
+ <li>5</li>
11
+ <li>6</li>
12
+ <li>7</li>
13
+ <li>8</li>
14
+ <li>9</li>
15
+ <li>10</li>
16
+ <li>11</li>
17
+ </ul>
18
+
19
+ into a multi-column layout like this:
20
+
21
+ 1 2 3
22
+ 4 5 6
23
+ 7 8 9
24
+ 10 11
25
+
26
+ using CSS like this:
27
+
28
+ <style type="text/css">
29
+ ul {width: 30%}
30
+ li {width: 33%; text-align: left; float: left}
31
+ </style>
32
+
33
+
34
+ But what if you wanted the data sorted by column, not by row? For this, CSS is inadequate: it's capable of flowing from left to right,
35
+ top to bottom. So in order to acheive a column sorting, we need to resort the data, like this:
36
+
37
+ <ul>
38
+ <li>1</li>
39
+ <li>5</li>
40
+ <li>9</li>
41
+ <li>2</li>
42
+ <li>6</li>
43
+ <li>10</li>
44
+ <li>3</li>
45
+ <li>7</li>
46
+ <li>11</li>
47
+ <li>4</li>
48
+ <li>8</li>
49
+ <li></li>
50
+ </ul>
51
+
52
+ Using the same CSS, this would render:
53
+
54
+ 1 5 9
55
+ 2 6 10
56
+ 3 7 11
57
+ 4 8
58
+
59
+ The liquidity gem adds a "column_sort" method to the Array class, making it simple to resort your collection for a column-sorted liquid
60
+ layout.
61
+
62
+ = Installation
63
+
64
+ Install the gem from rubygems.org:
65
+
66
+ # gem install liquidity
67
+
68
+ = Usage
69
+
70
+ Though I would imagine you would typically be using this for doing liquid layouts on the web, for the purposes of instruction, we'll
71
+ imagine that we have the following method for printing out an array:
72
+
73
+ require 'liquidity'
74
+
75
+ def print_matrix(a)
76
+ a.each_slice(3) do |slice|
77
+ puts slice.join("\t")
78
+ end
79
+ end
80
+
81
+ If we passed off the array of (1..11) to it, we would see the following printed:
82
+
83
+ a = (1..11).to_a
84
+ print_matrix a
85
+ # ==>
86
+ 1 2 3
87
+ 4 5 6
88
+ 7 8 9
89
+ 10 11
90
+
91
+ Now, imagine that we wanted see the matrix where the data was sorted into columns, not rows. We can use the "column\_sort" method
92
+ provided by the "liquidity" gem:
93
+
94
+ a = (1..11).to_a
95
+ print_matrix a.column_sort(3)
96
+ # ==>
97
+ 1 5 9
98
+ 2 6 10
99
+ 3 7 11
100
+ 4 8
101
+
102
+ == Passing a block to column_sort
103
+
104
+ Just like the {Array::sort}[http://ruby-doc.org/core/classes/Array.html#M002185] method, you can pass a block to column_sort.
@@ -0,0 +1,2 @@
1
+ require 'enumerator'
2
+ require 'liquidity/liquidity'
@@ -0,0 +1,61 @@
1
+ class Array
2
+
3
+ #Though I would imagine you would typically be using this for doing liquid layouts on the web, for the purposes of instruction, we'll
4
+ #imagine that we have the following method for printing out an array:
5
+ #
6
+ # require 'liquidity'
7
+ #
8
+ # def print_matrix(a)
9
+ # a.each_slice(3) do |slice|
10
+ # puts slice.join("\t")
11
+ # end
12
+ # end
13
+ #
14
+ #If we passed off the array of (1..11) to it, we would see the following printed:
15
+ #
16
+ # a = (1..11).to_a
17
+ # print_matrix a
18
+ # # ==>
19
+ # 1 2 3
20
+ # 4 5 6
21
+ # 7 8 9
22
+ # 10 11
23
+ #
24
+ #Now, imagine that we wanted see the matrix where the data was sorted into columns, not rows. We can use the "column\_sort" method
25
+ #provided by the "liquidity" gem:
26
+ #
27
+ # a = (1..11).to_a
28
+ # print_matrix a.column_sort(3)
29
+ # # ==>
30
+ # 1 5 9
31
+ # 2 6 10
32
+ # 3 7 11
33
+ # 4 8
34
+ #
35
+ #== Passing a block to column_sort
36
+ #
37
+ #Just like the {Array::sort}[http://ruby-doc.org/core/classes/Array.html#M002185] method, you can pass a block to column_sort.
38
+ def column_sort(num_columns, &block)
39
+ new_array = sort(&block)
40
+ new_length = new_array.length % num_columns == 0 ? new_array.length : new_array.length + num_columns - new_array.length % num_columns
41
+ new_array.pad(new_length).slices(num_columns).transpose.flatten
42
+ end
43
+
44
+ # pad an array to a new length, adding nil elements onto the end of the collection
45
+ def pad(new_length)
46
+ if new_length > length
47
+ self + ([nil] * (new_length - length))
48
+ else
49
+ self
50
+ end
51
+ end
52
+
53
+ # return a new array, sliced up into a given number of smaller arrays.
54
+ # e.g.:
55
+ # [1,2,3,4].slices(2) #==> [[1,2],[3,4]]
56
+ def slices(num_slices)
57
+ array_of_slices = []
58
+ each_slice(length / num_slices) { |s| array_of_slices << s }
59
+ array_of_slices
60
+ end
61
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: liquidity
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Matt Parker
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-04-04 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: This gem adds a "column_sort" method to the Array class.
22
+ email: moonmaster9000@gmail.com
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files:
28
+ - README.rdoc
29
+ files:
30
+ - README.rdoc
31
+ - lib/liquidity.rb
32
+ - lib/liquidity/liquidity.rb
33
+ has_rdoc: true
34
+ homepage: http://github.com/moonmaster9000/liquidity
35
+ licenses: []
36
+
37
+ post_install_message:
38
+ rdoc_options:
39
+ - --charset=UTF-8
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ version: "0"
56
+ requirements: []
57
+
58
+ rubyforge_project:
59
+ rubygems_version: 1.3.6
60
+ signing_key:
61
+ specification_version: 3
62
+ summary: A gem for making column-sorted liquid layouts simple.
63
+ test_files: []
64
+