nested_list 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ Description
2
+ ===========
3
+
4
+ nested_list gem is a tool for creating nested cross browser drop downs. It doesn't use any fancy UI, all margins were done with spaces (&nbsp). It is simple and it works.
5
+
6
+ Install
7
+ =======
8
+
9
+ `gem install nested_list`
10
+
11
+ OR
12
+
13
+ Put this line in your Gemfile:
14
+ `gem 'nested_list'`
15
+
16
+ Then run the bundle command:
17
+ `$ bundle`
18
+
19
+ Example of usage
20
+ =======
21
+
22
+ Array with nested options which using ">" as a delimiter
23
+
24
+ @nested_names_arr = []
25
+ @nested_names_arr << {name: "All Categories", id: 'all'}
26
+ @nested_names_arr << {name: "Audio", id: '1'}
27
+ @nested_names_arr << {name: "Audio>Accessorize>Smile", id: '566767'}
28
+ @nested_names_arr << {name: "Audio>Accessorize>Pillow", id: '45255'}
29
+ @nested_names_arr << {name: "Audio>DVD", id: '234245'}
30
+ @nested_names_arr << {name: "Baby", id: '44245tr5'}
31
+
32
+ Pass it as a parameter and get options for drop down as an output
33
+
34
+ nested_list = NestedList.new(@nested_names_arr)
35
+ nested_list.html_options
36
+
37
+ As a result you will see a drop down like this:
38
+
39
+ ![generated drop down][dropdown_screenshot]
40
+
41
+ Contributing
42
+ ============
43
+
44
+ if you find a bug or have something to add, please do
45
+
46
+ [dropdown_screenshot]: http://i.imgur.com/OylKc.png "Drop Down Example"
data/lib/nested_list.rb CHANGED
@@ -1,9 +1,11 @@
1
+ # encoding: utf-8
1
2
  require "nested_list/nested_select"
2
3
  require "active_support/inflector"
3
4
 
4
5
  module Generator
5
6
 
6
7
  class NestedList
8
+ include NestedSelect
7
9
  # Get Array of nested names:
8
10
  #[{name: "All Categories", id: 'all'},
9
11
  # {name: "Audio", id: '1'},
@@ -17,58 +19,56 @@ module Generator
17
19
 
18
20
  #Return a list of nested html_options from nested names array
19
21
  def html_options
20
- @wraped_list = {}
21
- list = NestedSelect::List.new("root", nil)
22
+ @wraped_list = {}
23
+ list = NestedSelect::List.new("root", nil)
22
24
 
23
- @nested_names_arr.each do |nested_names|
24
- @names = nested_names[:name].split(">")
25
- point = list
26
- length = @names.length - 1
27
- @names.each_with_index do |name, level|
28
- id = nested_names[:id]
29
- full_name = @names[0..level].join(" ").parameterize
25
+ @nested_names_arr.each do |retailer_category|
26
+ @names = retailer_category[:name].split(">")
27
+ point = list
28
+ length = @names.length - 1
29
+ @names.each_with_index do |name, level|
30
+ id = retailer_category[:id]
31
+ full_name = parameterized_name(@names[0..level])
32
+ if exist_node=list.find_by_name(full_name)
33
+ # Use existed name
34
+ if exist_node.full_name!=full_name && length != level
30
35
 
31
- if exist_node=list.find_by_name(full_name)
32
- # Use existed name
33
- if exist_node.full_name!=full_name && length != level
34
-
35
- found_item = exist_node.find_item(name)
36
- moved_item = found_item
37
-
38
- exist_node.remove_item(found_item)
39
- item = NestedSelect::List.new(name, nil)
40
- item.add_item(moved_item)
41
- exist_node.add_item(item)
42
- point = item
43
- else
44
- point = exist_node
45
- end
36
+ found_item = exist_node.find_item(name)
37
+ moved_item = found_item
46
38
 
39
+ exist_node.remove_item(found_item)
40
+ item = NestedSelect::List.new(name, nil)
41
+ item.add_item(moved_item)
42
+ exist_node.add_item(item)
43
+ point = item
47
44
  else
48
- # Create new node
49
- unless (level == length)
50
- item = NestedSelect::List.new(name, nil)
51
- item.add_item(NestedSelect::Item.new(name, nil))
52
- else
53
- item = NestedSelect::Item.new(name, id)
54
- end
55
-
56
- point.add_item(item)
57
- point = item
45
+ point = exist_node
58
46
  end
59
- end
60
47
 
61
- end
48
+ else
49
+ # Create new node
50
+ unless (level == length)
51
+ item = NestedSelect::List.new(name, nil)
52
+ item.add_item(NestedSelect::Item.new(name, nil))
53
+ else
54
+ item = NestedSelect::Item.new(name, id)
55
+ end
56
+
57
+ point.add_item(item)
58
+ point = item
59
+ end
60
+ end
62
61
 
63
- @wraped_list = list.wrap
64
- end
62
+ end
63
+
64
+ @wraped_list = list.wrap
65
+ end
65
66
  end
66
67
 
67
68
  # Example
68
69
  def nested_options_example
69
70
  @nested_names_arr = []
70
71
  @nested_names_arr << {name: "All Categories", id: 'all'}
71
- @nested_names_arr << {name: "Audio", id: '1'}
72
72
  @nested_names_arr << {name: "Audio>Accessorize>Smile", id: '566767'}
73
73
  @nested_names_arr << {name: "Audio>Accessorize>Pillow", id: '45255'}
74
74
  @nested_names_arr << {name: "Audio>DVD", id: '234245'}
@@ -78,4 +78,18 @@ module Generator
78
78
  nested_list.html_options
79
79
  end
80
80
 
81
+ #Support other language
82
+ # Example
83
+ def nested_options_example_ru
84
+ @nested_names_arr = []
85
+ @nested_names_arr << {name: "Все категории", id: 'all'}
86
+ @nested_names_arr << {name: "Аудио>Аксессуары>Smile", id: '566767'}
87
+ @nested_names_arr << {name: "Аудио>Аксессуары>Подушка", id: '45255'}
88
+ @nested_names_arr << {name: "Аудио>DVD", id: '234245'}
89
+ @nested_names_arr << {name: "Товары для детей", id: '44245tr5'}
90
+
91
+ nested_list = NestedList.new(@nested_names_arr)
92
+ nested_list.html_options
93
+ end
94
+
81
95
  end
@@ -1,6 +1,11 @@
1
1
  module NestedSelect
2
+ def parameterized_name(names)
3
+ names.map! { |name| name.to_s.strip.downcase }
4
+ names.join("-")
5
+ end
2
6
 
3
7
  class Item
8
+ include NestedSelect
4
9
  attr_accessor :name, :parent, :id
5
10
  @@use_spaces = true
6
11
  def initialize(name, id)
@@ -19,7 +24,7 @@ module NestedSelect
19
24
 
20
25
  def find_by_name(name_tmp)
21
26
  if !self.name.empty? && self.full_name == name_tmp
22
- self.parent
27
+ self.parent
23
28
  else
24
29
  false
25
30
  end
@@ -48,9 +53,9 @@ module NestedSelect
48
53
  end
49
54
  # Remove last general for all element
50
55
  full_name.pop
51
- full_name_str = full_name.reverse!.join(" ")
56
+ full_name_str = parameterized_name(full_name.reverse!)
52
57
  end
53
- @full_name_str ||= full_name_str.parameterize
58
+ @full_name_str ||= full_name_str
54
59
  end
55
60
 
56
61
  def wrap
@@ -72,7 +77,6 @@ module NestedSelect
72
77
 
73
78
  def branches
74
79
  @branches = @items[1..@items.size]
75
- @branches
76
80
  end
77
81
 
78
82
  def add_item(item)
@@ -86,27 +90,24 @@ module NestedSelect
86
90
  end
87
91
 
88
92
  def find_item(tmp_name)
89
- @items.each do |item|
90
- return item if item.name == tmp_name.to_s.strip
93
+ tmp_name = tmp_name.to_s.strip
94
+ @items.find do |item|
95
+ item.name == tmp_name
91
96
  end
92
97
  end
93
98
 
94
99
  def items_count
95
- count = 0
96
- @items.each do |item|
97
- count += item.items_count
98
- end
99
- count
100
+ @items.inject(0){|acc,i| acc+i.items_count}
100
101
  end
101
102
 
102
103
  def find_by_name(name_tmp)
103
104
  existed_item = nil
104
105
  existed_items = []
105
-
106
+
106
107
  if self.full_name == name_tmp
107
108
  return self
108
109
  end
109
-
110
+
110
111
  @items.each do |item|
111
112
  existed_item = item.find_by_name(name_tmp)
112
113
  existed_items << existed_item if existed_item
@@ -8,11 +8,15 @@ module NestedList
8
8
  template = ERB.new <<-EOF
9
9
  <!DOCTYPE html>
10
10
  <html>
11
- <head>
11
+ <head>
12
12
  <title>Nested List</title>
13
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
13
14
  </head>
14
15
  <body>
15
- <select><%= nested_options_example %></select>
16
+ Nested categories list:<br/>
17
+ <select><%= nested_options_example %></select><br/><br/>
18
+ Can be used for other language:<br/>
19
+ <select><%= nested_options_example_ru %></select>
16
20
  </body>
17
21
  </html>
18
22
  EOF
@@ -1,3 +1,3 @@
1
1
  module NestedList
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Nested List</title>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ </head>
7
+ <body>
8
+ Nested categories list:<br/>
9
+ <select><option value='all' class='level_1 item'>All categories</option><option value='audio:group' class='level_1 group'>Audio</option><option value='audio-accessorize:group' class='level_2 group'>&nbsp;&nbsp;&nbsp;&nbsp;Accessorize</option><option value='566767' class='level_3 item'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Smile</option><option value='45255' class='level_3 item'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pillow</option><option value='234245' class='level_2 item'>&nbsp;&nbsp;&nbsp;&nbsp;Dvd</option><option value='44245tr5' class='level_1 item'>Baby</option></select><br/><br/>
10
+ Can be used for other language:<br/>
11
+ <select><option value='all' class='level_1 item'>Все категории</option><option value='Аудио:group' class='level_1 group'>Аудио</option><option value='Аудио-Аксессуары:group' class='level_2 group'>&nbsp;&nbsp;&nbsp;&nbsp;Аксессуары</option><option value='566767' class='level_3 item'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Smile</option><option value='45255' class='level_3 item'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Подушка</option><option value='234245' class='level_2 item'>&nbsp;&nbsp;&nbsp;&nbsp;Dvd</option><option value='44245tr5' class='level_1 item'>Товары для детей</option></select>
12
+ </body>
13
+ </html>
data/nested_list.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Dina Zhyliaieva"]
10
10
  s.email = ["din.chick@gmail.com"]
11
- s.homepage = ""
11
+ s.homepage = "https://github.com/dinaionenko/nested_list"
12
12
  s.summary = %q{A Nested list is library that allow to generate a set of options to use it in simple select element.}
13
13
  s.description = %q{A Nested list is library that allow to generate a set of options to use it in simple select element. The options are generated in such way that you can get nested drop-down list saved system style just using simple <select/> element. Run rake nested_list_html_page to generate html page as example.}
14
14
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: nested_list
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Dina Zhyliaieva
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-02-16 00:00:00 +02:00
13
+ date: 2012-03-01 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies: []
16
16
 
@@ -26,14 +26,16 @@ extra_rdoc_files: []
26
26
  files:
27
27
  - Gemfile
28
28
  - Gemfile.lock
29
+ - README.md
29
30
  - Rakefile
30
31
  - lib/nested_list.rb
31
32
  - lib/nested_list/nested_select.rb
32
33
  - lib/nested_list/tasks.rb
33
34
  - lib/nested_list/version.rb
35
+ - lib/public/nested_list.html
34
36
  - nested_list.gemspec
35
37
  has_rdoc: true
36
- homepage: ""
38
+ homepage: https://github.com/dinaionenko/nested_list
37
39
  licenses: []
38
40
 
39
41
  post_install_message: