swak 0.0.9 → 0.1.0
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/swak.rb +2 -0
- data/lib/swak/interval.rb +41 -0
- metadata +3 -2
data/lib/swak.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'swak', 'logger')
|
2
|
+
require File.join(File.dirname(__FILE__), 'swak', 'interval')
|
2
3
|
|
3
4
|
class String
|
4
5
|
AnsiMap = {"k" => 0,
|
@@ -17,6 +18,7 @@ class String
|
|
17
18
|
return "[#{fg ? 3 : 4}#{color_int}m#{self}[#{fg ? 3 : 4}9m"
|
18
19
|
end
|
19
20
|
|
21
|
+
# Wraps long string by lines, using whitespace boundaries
|
20
22
|
def wrap(max_chars_per_line=80)
|
21
23
|
return gsub(/\n/," ").scan(/\S.{0,#{max_chars_per_line-2}}\S(?=\s|$)|\S+/).join("\n")
|
22
24
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Swak
|
2
|
+
module Interval
|
3
|
+
def Interval.sort_by_end
|
4
|
+
return Proc.new{|interval| [interval[1], interval[0]]}
|
5
|
+
end
|
6
|
+
|
7
|
+
def Interval.sort_by_start
|
8
|
+
return Proc.new{|interval| [interval[0], interval[1]]}
|
9
|
+
end
|
10
|
+
|
11
|
+
def Interval.intersect(x,y)
|
12
|
+
return x[0] < y[1] && x[1] > y[0]
|
13
|
+
end
|
14
|
+
|
15
|
+
def Interval.lists_intersect(list1, list2)
|
16
|
+
list1 = list1.sort_by(&Interval::sort_by_start)
|
17
|
+
list2 = list2.sort_by(&Interval::sort_by_end)
|
18
|
+
|
19
|
+
results = []
|
20
|
+
|
21
|
+
return results if list1.size == 0 || list2.size == 0
|
22
|
+
|
23
|
+
j = 0
|
24
|
+
list1.each_with_index do |int1, i|
|
25
|
+
next if int1[1] <= list2[j][0] # int1 is strictly less than int2, so walk int1 forward
|
26
|
+
|
27
|
+
# int2 is strictly less than int1, walk it forward
|
28
|
+
while j < list2.size && list2[j][1] <= int1[0]
|
29
|
+
j += 1
|
30
|
+
end
|
31
|
+
|
32
|
+
break if j >= list2.size
|
33
|
+
|
34
|
+
results << [int1, list2[j]] if intersect(int1, list2[j])
|
35
|
+
end
|
36
|
+
|
37
|
+
return results
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: swak
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0
|
5
|
+
version: 0.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jesse Rodriguez
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-06-15 00:00:00 Z
|
14
14
|
dependencies: []
|
15
15
|
|
16
16
|
description: Random tools and mixins
|
@@ -23,6 +23,7 @@ extra_rdoc_files: []
|
|
23
23
|
|
24
24
|
files:
|
25
25
|
- lib/swak.rb
|
26
|
+
- lib/swak/interval.rb
|
26
27
|
- lib/swak/logger.rb
|
27
28
|
homepage: http://rubygems.org/gems/swak
|
28
29
|
licenses: []
|