swak 0.0.9 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/swak.rb +2 -0
  2. data/lib/swak/interval.rb +41 -0
  3. 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.9
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-04-28 00:00:00 Z
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: []