sycl 1.3 → 1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/sycl.rb +55 -9
- metadata +4 -4
data/lib/sycl.rb
CHANGED
@@ -124,11 +124,14 @@ module Sycl
|
|
124
124
|
# puts a.to_yaml # outputs '[Alpha, Bravo, Charlie, Delta]'
|
125
125
|
|
126
126
|
class Array < ::Array
|
127
|
+
|
128
|
+
@@default_sorting = true
|
129
|
+
|
127
130
|
def initialize(*args) # :nodoc:
|
128
131
|
@yaml_preprocessor = nil
|
129
132
|
@yaml_postprocessor = nil
|
130
133
|
@yaml_style = nil
|
131
|
-
@render_sorted =
|
134
|
+
@render_sorted = @@default_sorting
|
132
135
|
super
|
133
136
|
end
|
134
137
|
|
@@ -153,6 +156,17 @@ module Sycl
|
|
153
156
|
retval
|
154
157
|
end
|
155
158
|
|
159
|
+
# Set Default Array Sorting. In some cases we want to instantiate
|
160
|
+
# all sycl objects with sorting defaulted to either true or false.
|
161
|
+
#
|
162
|
+
# Example:
|
163
|
+
#
|
164
|
+
# Sycl::Array.default_sorting = false
|
165
|
+
|
166
|
+
def self.default_sorting=(sort)
|
167
|
+
@@default_sorting = sort
|
168
|
+
end
|
169
|
+
|
156
170
|
|
157
171
|
# Make sure that if we write to this array, we promote any inputs
|
158
172
|
# to their Sycl equivalents. This lets dot notation, styled YAML,
|
@@ -269,7 +283,6 @@ module Sycl
|
|
269
283
|
end
|
270
284
|
end
|
271
285
|
|
272
|
-
|
273
286
|
# Do not sort this array when it is rendered as YAML. Usually we want
|
274
287
|
# elements sorted so that diffs are human-readable, however, there are
|
275
288
|
# certain cases where array ordering is significant (for example, a
|
@@ -279,6 +292,12 @@ module Sycl
|
|
279
292
|
@render_sorted = false
|
280
293
|
end
|
281
294
|
|
295
|
+
# Sort this array when it is rendered as YAML. Useful when the default_sorting
|
296
|
+
# has been set to false and arrays should be sorted.
|
297
|
+
|
298
|
+
def render_sorted!
|
299
|
+
@render_sorted = true
|
300
|
+
end
|
282
301
|
|
283
302
|
# Set a preprocessor hook which runs before each time YAML is
|
284
303
|
# dumped, for example, via to_yaml() or Sycl::dump(). The hook is a
|
@@ -547,15 +566,30 @@ module Sycl
|
|
547
566
|
|
548
567
|
include Comparable
|
549
568
|
|
550
|
-
def <=>(
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
569
|
+
def <=>(other) # :nodoc:
|
570
|
+
self_keys = self.keys.sort
|
571
|
+
other_keys = other.respond_to?(:keys) ? other.keys.sort :
|
572
|
+
other.respond_to?(:sort) ? other.sort :
|
573
|
+
other.respond_to?(:to_s) ? [other.to_s] :
|
574
|
+
other ? [other] : []
|
575
|
+
|
576
|
+
while true
|
577
|
+
if self_keys.empty? && other_keys.empty?
|
578
|
+
return 0
|
579
|
+
elsif self_keys.empty?
|
580
|
+
return 1
|
581
|
+
elsif other_keys.empty?
|
582
|
+
return -1
|
583
|
+
else
|
584
|
+
self_key = self_keys.shift
|
585
|
+
other_key = other_keys.shift
|
586
|
+
if self_key != other_key
|
587
|
+
return self_key <=> other_key
|
588
|
+
end
|
589
|
+
end
|
590
|
+
end
|
556
591
|
end
|
557
592
|
|
558
|
-
|
559
593
|
# Make this hash, and its children, rendered in inline/flow style.
|
560
594
|
# The default is to render arrays in block (multi-line) style.
|
561
595
|
|
@@ -674,3 +708,15 @@ module Sycl
|
|
674
708
|
|
675
709
|
end
|
676
710
|
end
|
711
|
+
|
712
|
+
class String
|
713
|
+
alias_method :original_comparator, :<=>
|
714
|
+
|
715
|
+
def <=>(other)
|
716
|
+
if other.is_a?(Sycl::Hash)
|
717
|
+
-1 * (other <=> self)
|
718
|
+
else
|
719
|
+
self.__send__(:original_comparator, other)
|
720
|
+
end
|
721
|
+
end
|
722
|
+
end
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sycl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: "1.
|
8
|
+
- 4
|
9
|
+
version: "1.4"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Andrew Ho
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date:
|
17
|
+
date: 2013-07-17 00:00:00 +00:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|