listy 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Listy
2
2
 
3
3
  Listy is a Gem that contains a bunch of view helpers for use in Ruby on Rails to easily create different types of lists.
4
+
4
5
  I apologize for all the updates happening in 0.0.X. This started out as a test gem project with very bad code, and I'm refactoring and updating the code pretty frequently.
5
6
  I will do my best to keep this document up to date with the versions.
6
7
 
@@ -9,6 +10,15 @@ I will do my best to keep this document up to date with the versions.
9
10
  Listy is only compatible with Rails 3.1 and above.
10
11
  It leverages both the Asset Pipeline and the JQuery library.
11
12
 
13
+ So either manually include your own version of JQuery, or ensure the bundled version is specified in your `app/assets/javascripts/application.js`
14
+
15
+ ```ruby
16
+ //= require jquery
17
+ //= require jquery_ujs
18
+ ```
19
+
20
+ If you don't plan on using any of the Hiding/Collapsing of the lists - you don't have to include the JQuery stuff.
21
+
12
22
  ## Installation
13
23
 
14
24
  Add this line to your application's Gemfile:
@@ -27,74 +37,111 @@ Listy also includes some Javascript assets, so be sure to add the following line
27
37
 
28
38
  //= require listy
29
39
 
40
+ If you don't plan on using any of the Hiding/Collapsing of the lists - you don't have to include this.
41
+
30
42
  ## Usage
31
43
 
32
44
  There are a couple of helper methods including:
33
45
 
34
46
  ### listy_links
35
47
 
36
- listy_links(collection, display_method_name, options={})
48
+ listy_links(collection, options={})
49
+
50
+ This method creates a simple unordered list of links of the elements in the collection. This is suitable for Ruby on Rails models.
37
51
 
38
- This method creates a simple unordered list of the elements in the collection. This is suitable for Ruby on Rails models.
52
+ * collection - Should be an ActiveRecord collection.
39
53
 
40
54
  Options you can pass in include
41
55
 
56
+ * display_method - Symbol of method to be called on each record to generate what is displayed in the list. If you set is not specified, to_s will be called on the element to generate the display string.
42
57
  * :css_class - The class that is applied to the resulting ul list element
43
58
  * :empty_message - The message that is displayed if the collection is empty
44
- * :show_more - If set to true, the list will display only the first 10 elements, and hide the rest and create a "Show More" link. Be sure to have `//= require listy` in your application.js for the "Show More" link to work.
59
+ * :show_more - If set to true, the list will display only the first 10 elements, and hide the rest and create a "Show More" link. Show more functionality requires JQuery and list.js - please read above.
45
60
  * :show_more_limit - If you want more that the first 10 elements to show when show_more is set to true, then specify that limit here.
46
61
 
47
- Examples
62
+ #### Example Usage:
48
63
 
49
64
  ```ruby
50
- <%= listy_links BlogPost.all, :title %>
65
+ <%= listy_links BlogPost.all %> <!-- probably not that useful -->
66
+
67
+ <%= listy_links BlogPost.all, :display_method => :title %>
51
68
 
52
- <%= listy_links User.all, :email, :show_more => true %>
69
+ <%= listy_links User.all, :display_method => :email, :show_more => true %>
53
70
 
54
- <%= listy_links Product.all, :part_number, :show_more => true, :show_more_limit => 100, :css_class => "products-list" %>
71
+ <%= listy_links Product.all, :display_method => :part_number, :show_more => true, :show_more_limit => 100, :css_class => "products-list" %>
55
72
  ```
56
73
  ### multi_column_listy_links
57
74
 
58
- multi_column_listy_links(collection, display_method_name, number_of_columns, options={})
75
+ multi_column_listy_links(collection, number_of_columns, options={})
59
76
 
60
77
  This does the same thing as listy_links but presents it in the number of columns you specify.
61
78
 
79
+ * collection - Should be an ActiveRecord collection.
80
+ * number_of_columns - The number of columns you want the list split up into.
81
+
62
82
  Options you can pass in include:
63
83
 
84
+ * display_method - Symbol of method to be called on each record to generate what is displayed in the list. If you set is not specified, to_s will be called on the element to generate the display string.
64
85
  * :css_class - The class that is applied to the resulting ul list elements in each column
65
86
  * :empty_message - The message that is displayed if the collection is empty
66
87
 
67
- Examples
88
+ #### Example Usage:
68
89
 
69
90
  ```ruby
70
- <%= listy_links BlogPost.all, :title %>
91
+ <%= multi_column_listy_links BlogPost.all, 3, :display_method => :title %>
71
92
 
72
- <%= listy_links User.all, :email, :show_more => true %>
93
+ <%= multi_column_listy_links User.all, 2, :display_method => :email %>
73
94
 
74
- <%= listy_links Product.all, :part_number, :show_more => true, :show_more_limit => 100, :css_class => "products-list" %>
95
+ <%= multi_column_listy_links Product.all, 4, :display_method => :part_number, :css_class => "products-list", :empty_message => "There are no products" %>
75
96
  ```
76
97
 
77
98
  ### listy_tree
78
99
 
79
100
  listy_tree(collection, spec, options={})
80
101
 
81
- This method is for creating a nested tree of unordered lists for a collection with nested collections. This is suitable for Rails models that have has_many relationships.
102
+ This method is for creating a nested tree of unordered lists for a collection with nested collections.
103
+ This is suitable for Rails models that have has_many relationships. The lists will be collapsable if you click on the parent elements (requires JQuery and listy.js, please read above).
104
+
82
105
  The spec is basically instructions on how to create the nested tree. It is a nested hash where each child specifies how to create the nested list
83
106
 
84
- Example let's say we have the following
107
+
108
+ #### Spec Explanation
109
+
110
+ The spec is a nested hash that contains the following elements:
111
+
112
+ * display_method - Symbol of method to be called on each record to generate what is displayed in the list. If you set is not specified, to_s will be called on the element to generate the display string.
113
+ * :children - The name of the method (typically the has_many relationship) to call to get the nested collection (leave unspecified or nil if this is the leaf node)
114
+ * :child - The spec for the elements of the children (leave unspecified or nil if this is the leaf node)
115
+
116
+ Here's a sample spec
117
+
118
+ Let's say we have the following
85
119
 
86
120
  * Country which has_many States
87
121
  * State which has_many Cities
88
122
 
89
- Examples:
123
+
124
+ ```ruby
125
+ spec = { :display_method => :name,
126
+ :children => :states,
127
+ :child => { :display_method => :name,
128
+ :children => :cities,
129
+ :child => { :display_method => :name }
130
+ }
131
+ }
132
+ ```
133
+
134
+
135
+
136
+ #### Example Usage:
90
137
 
91
138
  ```ruby
92
139
  listy_tree(Country.all,
93
- { :display_method_name => :name,
140
+ { :display_method => :name,
94
141
  :children => :states,
95
- :child => { :display_method_name => :name,
142
+ :child => { :display_method => :name,
96
143
  :children => :cities,
97
- :child => { :display_method_name => :name }
144
+ :child => { :display_method => :name }
98
145
  }
99
146
  })
100
147
  ```
data/lib/listy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Listy
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -5,17 +5,17 @@ module Listy
5
5
  if collection.present?
6
6
  html = "<div class='listy-tree'>" + create_listy_tree(collection, spec, "", 0) + "</div>"
7
7
  else
8
- html = "There are no entries in this tree."
9
- html = options[:empty_message] if !options[:empty_message].nil?
8
+ html = options[:empty_message] || "There are no entries in this list."
10
9
  end
11
10
  raw html
12
11
  end
13
12
 
14
13
 
15
14
 
16
- def listy_links(collection, display_method_name, options={})
15
+ def listy_links(collection, options={})
17
16
  if collection.present?
18
- html = "<ul class='" + options[:css_class] + "'>"
17
+ css_class = options[:css_class] || ""
18
+ html = "<ul class='" + css_class + "'>"
19
19
  show_more_limit_reached = false
20
20
 
21
21
  show_more_limit = options[:show_more_limit] || 10 if options[:show_more]
@@ -26,7 +26,8 @@ module Listy
26
26
  html += "<div class='listy-show-more-list' style='display:none'>"
27
27
  show_more_limit_reached = true
28
28
  end
29
- html += "<li>" + link_to(element.try(display_method_name), element) + "</li>"
29
+ display = options[:display_method].nil? ? element.to_s : element.try(options[:display_method])
30
+ html += "<li>" + link_to(display, element) + "</li>"
30
31
  end
31
32
 
32
33
  if options[:show_more] && show_more_limit_reached
@@ -36,27 +37,26 @@ module Listy
36
37
 
37
38
  html += "</ul>"
38
39
  else
39
- html = "There are no entries in this list."
40
- html = options[:empty_message] if !options[:empty_message].nil?
40
+ html = options[:empty_message] || "There are no entries in this list."
41
41
  end
42
42
 
43
43
  raw html
44
44
  end
45
45
 
46
- def multi_column_listy_links(collection, display_method_name, number_of_columns, options={})
46
+ def multi_column_listy_links(collection, number_of_columns, options={})
47
47
  html = ""
48
48
  if collection.present?
49
- number_of_entries_per_column = collection.size/number_of_columns
49
+ number_of_entries_per_column = (Float(collection.size)/Float(number_of_columns)).ceil
50
50
  percentage_width_of_column = 100 / number_of_columns
51
51
  Rails.logger.info(collection.size.to_s + " " + number_of_entries_per_column.to_s)
52
52
  (0..number_of_columns-1).each do |i|
53
53
  html += "<div style='float:left;width:" + percentage_width_of_column.to_s + "%'>"
54
54
 
55
55
  start_index = i * number_of_entries_per_column
56
- end_index = (i+1) * number_of_entries_per_column
56
+ end_index = (i+1) * number_of_entries_per_column - 1
57
57
  end_index = collection.size if end_index > collection.size
58
58
 
59
- html += listy_links(collection[start_index..end_index], display_method_name, options)
59
+ html += listy_links(collection[start_index..end_index], options)
60
60
 
61
61
  html += "</div>"
62
62
  end
@@ -64,8 +64,7 @@ module Listy
64
64
  html += "<div style='clear:both'></div>"
65
65
 
66
66
  else
67
- html = "There are no entries in this list."
68
- html = options[:empty_message] if !options[:empty_message].nil?
67
+ html = options[:empty_message] || "There are no entries in this list."
69
68
  end
70
69
 
71
70
  raw html
@@ -77,7 +76,8 @@ module Listy
77
76
 
78
77
  collection.each do |element|
79
78
  html += "<li>"
80
- html += "<div class='listy-tree-list-header'>#{element.try(spec[:display_method_name])}</div>"
79
+ display = spec[:display_method].nil? ? element.to_s : element.try(spec[:display_method])
80
+ html += "<div class='listy-tree-list-header'>#{display}</div>"
81
81
  html = create_listy_tree(element.try(spec[:children]), spec[:child], html, level+1) if !spec[:children].nil?
82
82
  html += "</li>"
83
83
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: listy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: