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.
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: []