array-sorted 1.1.0 → 1.1.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.
data/lib/array/namespaces.rb
CHANGED
data/lib/array/requires.rb
CHANGED
data/lib/array/sorted.rb
CHANGED
@@ -9,8 +9,13 @@ module ::Array::Sorted::ArrayInterface
|
|
9
9
|
# initialize #
|
10
10
|
################
|
11
11
|
|
12
|
-
|
13
|
-
#
|
12
|
+
###
|
13
|
+
# Adds optional block for object by which sort order is determined.
|
14
|
+
#
|
15
|
+
# @yield [object] Block to use to determine sort order object.
|
16
|
+
# @yieldparam object Array member or insert item.
|
17
|
+
# @yieldreturn [Object] Object to be used for sort order
|
18
|
+
#
|
14
19
|
def initialize( configuration_instance = nil, *args, & sort_object_block )
|
15
20
|
|
16
21
|
super( configuration_instance, *args )
|
@@ -20,6 +25,18 @@ module ::Array::Sorted::ArrayInterface
|
|
20
25
|
end
|
21
26
|
|
22
27
|
end
|
28
|
+
|
29
|
+
#####################
|
30
|
+
# unsorted_insert #
|
31
|
+
#####################
|
32
|
+
|
33
|
+
alias_method :unsorted_insert, :hooked_insert
|
34
|
+
|
35
|
+
##################
|
36
|
+
# unsorted_set #
|
37
|
+
##################
|
38
|
+
|
39
|
+
alias_method :unsorted_set, :hooked_set
|
23
40
|
|
24
41
|
##############
|
25
42
|
# reverse! #
|
@@ -93,6 +110,10 @@ module ::Array::Sorted::ArrayInterface
|
|
93
110
|
|
94
111
|
end
|
95
112
|
|
113
|
+
######################################################################################################################
|
114
|
+
private ##########################################################################################################
|
115
|
+
######################################################################################################################
|
116
|
+
|
96
117
|
###############################
|
97
118
|
# perform_set_between_hooks #
|
98
119
|
###############################
|
@@ -103,7 +124,9 @@ module ::Array::Sorted::ArrayInterface
|
|
103
124
|
delete_at( index )
|
104
125
|
end
|
105
126
|
|
106
|
-
|
127
|
+
index = perform_single_object_insert_between_hooks( index, object )
|
128
|
+
|
129
|
+
return false
|
107
130
|
|
108
131
|
end
|
109
132
|
|
@@ -117,57 +140,91 @@ module ::Array::Sorted::ArrayInterface
|
|
117
140
|
|
118
141
|
# we have to have at least one member for comparison-based insert (to retain sorted order)
|
119
142
|
|
120
|
-
objects.
|
143
|
+
objects.each_with_index do |this_object, this_index|
|
144
|
+
perform_single_object_insert_between_hooks( index + this_index, this_object )
|
145
|
+
end
|
146
|
+
|
147
|
+
# return index our insert began with
|
148
|
+
return index
|
149
|
+
|
150
|
+
end
|
151
|
+
|
152
|
+
#############################
|
153
|
+
# perform_unsorted_insert #
|
154
|
+
#############################
|
155
|
+
|
156
|
+
def perform_unsorted_insert( index, object )
|
157
|
+
|
158
|
+
return undecorated_insert( index, object )
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
#################################
|
163
|
+
# get_index_for_sorted_insert #
|
164
|
+
#################################
|
165
|
+
|
166
|
+
def get_index_for_sorted_insert( object )
|
167
|
+
|
168
|
+
index = nil
|
169
|
+
|
170
|
+
if object.nil?
|
121
171
|
|
122
|
-
|
172
|
+
index = @sort_order_reversed ? count : 0
|
173
|
+
|
174
|
+
else
|
123
175
|
|
124
|
-
if this_object.nil?
|
125
|
-
if @sort_order_reversed
|
126
|
-
super( count, this_object )
|
127
|
-
else
|
128
|
-
super( 0, this_object )
|
129
|
-
end
|
130
|
-
next
|
131
|
-
end
|
132
|
-
|
133
176
|
self.each_with_index do |this_member, this_index|
|
134
|
-
|
135
|
-
insert_sort_object =
|
177
|
+
|
178
|
+
insert_sort_object = object
|
136
179
|
existing_sort_object = this_member
|
137
|
-
|
180
|
+
|
138
181
|
if @sort_object_block
|
139
|
-
insert_sort_object = @sort_object_block.call(
|
140
|
-
existing_sort_object = @sort_object_block.call(
|
182
|
+
insert_sort_object = @sort_object_block.call( object )
|
183
|
+
existing_sort_object = @sort_object_block.call( object )
|
141
184
|
end
|
142
|
-
|
185
|
+
|
143
186
|
if @sort_order_reversed
|
144
|
-
|
187
|
+
|
145
188
|
case insert_sort_object <=> existing_sort_object
|
146
189
|
when 0, 1
|
147
|
-
|
148
|
-
insert_occurred = true
|
190
|
+
index = this_index
|
149
191
|
break
|
150
192
|
end
|
151
|
-
|
193
|
+
|
152
194
|
else
|
153
|
-
|
195
|
+
|
154
196
|
case insert_sort_object <=> existing_sort_object
|
155
197
|
when 0, -1
|
156
|
-
|
157
|
-
insert_occurred = true
|
198
|
+
index = this_index
|
158
199
|
break
|
159
200
|
end
|
160
|
-
|
201
|
+
|
161
202
|
end
|
162
|
-
|
203
|
+
|
163
204
|
end
|
164
|
-
|
165
|
-
unless
|
166
|
-
|
205
|
+
|
206
|
+
unless index
|
207
|
+
index = count
|
167
208
|
end
|
168
|
-
|
209
|
+
|
169
210
|
end
|
211
|
+
|
212
|
+
return index
|
213
|
+
|
214
|
+
end
|
170
215
|
|
216
|
+
################################################
|
217
|
+
# perform_single_object_insert_between_hooks #
|
218
|
+
################################################
|
219
|
+
|
220
|
+
def perform_single_object_insert_between_hooks( index, object )
|
221
|
+
|
222
|
+
insert_index = get_index_for_sorted_insert( object )
|
223
|
+
|
224
|
+
perform_unsorted_insert( insert_index, object )
|
225
|
+
|
226
|
+
return insert_index
|
227
|
+
|
171
228
|
end
|
172
229
|
|
173
230
|
end
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: array-sorted
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06
|
12
|
+
date: 2012-07-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: array-hooked
|
@@ -40,8 +40,7 @@ files:
|
|
40
40
|
- lib/array/sorted.rb
|
41
41
|
- lib/array-hooked-sorted.rb
|
42
42
|
- lib/array-sorted.rb
|
43
|
-
-
|
44
|
-
- spec/Array/Sorted_spec.rb
|
43
|
+
- spec/array/sorted_spec.rb
|
45
44
|
- README.md
|
46
45
|
- CHANGELOG.rdoc
|
47
46
|
homepage: http://rubygems.org/gems/array-sorted
|
data/lib/hooked/array/sorted.rb
DELETED