vidibus-core_extensions 0.3.14 → 0.3.15

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.14
1
+ 0.3.15
@@ -101,6 +101,36 @@ class Array
101
101
  converted.concat(array)
102
102
  end
103
103
 
104
+ # Sorts array of values, hashes or objects by given order.
105
+ # In order to sort hashes or objects, an attribute is required.
106
+ #
107
+ # Examples:
108
+ #
109
+ # list = ["two", "one", "three"]
110
+ # map = ["one", "two", "three"]
111
+ # list.sort_by_map(map)
112
+ # # => ["one", "two", "three"]
113
+ #
114
+ # list = [{:n => "two"}, {:n => "one"}, {:n => "three"}]
115
+ # map = ["one", "two", "three"]
116
+ # list.sort_by_map(map, :n)
117
+ # # => [{:n => "one"}, {:n => "two"}, {:n => "three"}]
118
+ #
119
+ def sort_by_map(map, attribute = nil)
120
+ ordered = []
121
+ for a in map
122
+ ordered << self.detect do |m|
123
+ if attribute
124
+ n = m.is_a?(Hash) ? m[attribute] : m.send(attribute)
125
+ a == n
126
+ else
127
+ a == m
128
+ end
129
+ end
130
+ end
131
+ ordered.compact
132
+ end
133
+
104
134
  private
105
135
 
106
136
  # Returns predecessor of given needle from haystack.
@@ -103,15 +103,15 @@ describe "Array" do
103
103
  it "should merge [[2],[]] with [[1],[2]]" do
104
104
  [[2],[]].merge_nested([[1],[2]]).should eql([[2,1],[]])
105
105
  end
106
-
106
+
107
107
  it "should merge [[1,2,3]] with [[1,2],[3]]" do
108
108
  [[1,2,3]].merge_nested([[1,2],[3]]).should eql([[1,2,3]])
109
109
  end
110
-
110
+
111
111
  it "should merge [[1,2],[3]] with [[1],[2,3]]" do
112
112
  [[1,2],[3]].merge_nested([[1],[2,3]]).should eql([[1,2],[3]])
113
113
  end
114
-
114
+
115
115
  it "should keep source intact" do
116
116
  source = [[1,2]]
117
117
  [[1,2]].merge_nested(source)
@@ -162,4 +162,30 @@ describe "Array" do
162
162
  [1,2].convert_boundaries.should eql([1,2])
163
163
  end
164
164
  end
165
+
166
+ describe "#sort_by_map" do
167
+ it "should sort the list of hashes by given order of attribute values" do
168
+ list = [{:n => "two"}, {:n => "one"}, {:n => "three"}]
169
+ map = ["one", "two", "three"]
170
+ list.sort_by_map(map, :n).should eql([{:n => "one"}, {:n => "two"}, {:n => "three"}])
171
+ end
172
+
173
+ it "should sort the list of objects by given order of attribute values" do
174
+ list = []
175
+ list << OpenStruct.new(:n => "two")
176
+ list << OpenStruct.new(:n => "one")
177
+ list << OpenStruct.new(:n => "three")
178
+ map = ["one", "two", "three"]
179
+ ordered = list.sort_by_map(map, :n)
180
+ ordered[0].n.should eql("one")
181
+ ordered[1].n.should eql("two")
182
+ ordered[2].n.should eql("three")
183
+ end
184
+
185
+ it "should sort the list of values by given order" do
186
+ list = ["two", "one", "three"]
187
+ map = ["one", "two", "three"]
188
+ list.sort_by_map(map).should eql(["one", "two", "three"])
189
+ end
190
+ end
165
191
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{vidibus-core_extensions}
8
- s.version = "0.3.14"
8
+ s.version = "0.3.15"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Andre Pankratz"]
12
- s.date = %q{2011-01-14}
12
+ s.date = %q{2011-01-15}
13
13
  s.description = %q{Provides some extensions to the ruby core.}
14
14
  s.email = %q{andre@vidibus.com}
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vidibus-core_extensions
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 13
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 14
10
- version: 0.3.14
9
+ - 15
10
+ version: 0.3.15
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andre Pankratz
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-14 00:00:00 +01:00
18
+ date: 2011-01-15 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency