daff 1.2.6 → 1.3.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.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -6
  3. data/bin/daff.rb +0 -0
  4. data/lib/daff.rb +6 -0
  5. data/lib/lib/coopy/alignment.rb +146 -169
  6. data/lib/lib/coopy/cell_builder.rb +1 -1
  7. data/lib/lib/coopy/cell_info.rb +2 -1
  8. data/lib/lib/coopy/column_change.rb +16 -0
  9. data/lib/lib/coopy/compare_flags.rb +33 -5
  10. data/lib/lib/coopy/compare_table.rb +219 -99
  11. data/lib/lib/coopy/coopy.rb +205 -99
  12. data/lib/lib/coopy/csv.rb +17 -22
  13. data/lib/lib/coopy/diff_render.rb +16 -8
  14. data/lib/lib/coopy/flat_cell_builder.rb +11 -8
  15. data/lib/lib/coopy/highlight_patch.rb +363 -63
  16. data/lib/lib/coopy/highlight_patch_unit.rb +1 -1
  17. data/lib/lib/coopy/index.rb +21 -8
  18. data/lib/lib/coopy/index_item.rb +7 -3
  19. data/lib/lib/coopy/index_pair.rb +13 -10
  20. data/lib/lib/coopy/merger.rb +3 -3
  21. data/lib/lib/coopy/meta.rb +17 -0
  22. data/lib/lib/coopy/mover.rb +7 -5
  23. data/lib/lib/coopy/ndjson.rb +2 -2
  24. data/lib/lib/coopy/nested_cell_builder.rb +7 -7
  25. data/lib/lib/coopy/ordering.rb +6 -2
  26. data/lib/lib/coopy/property_change.rb +16 -0
  27. data/lib/lib/coopy/row.rb +1 -0
  28. data/lib/lib/coopy/row_change.rb +42 -0
  29. data/lib/lib/coopy/row_stream.rb +11 -0
  30. data/lib/lib/coopy/simple_table.rb +84 -30
  31. data/lib/lib/coopy/simple_view.rb +8 -8
  32. data/lib/lib/coopy/sparse_sheet.rb +1 -1
  33. data/lib/lib/coopy/sql_column.rb +22 -10
  34. data/lib/lib/coopy/sql_compare.rb +397 -85
  35. data/lib/lib/coopy/sql_database.rb +2 -0
  36. data/lib/lib/coopy/sql_helper.rb +5 -0
  37. data/lib/lib/coopy/sql_table.rb +122 -19
  38. data/lib/lib/coopy/sql_table_name.rb +1 -1
  39. data/lib/lib/coopy/sqlite_helper.rb +250 -3
  40. data/lib/lib/coopy/table.rb +1 -0
  41. data/lib/lib/coopy/table_diff.rb +643 -464
  42. data/lib/lib/coopy/table_io.rb +19 -6
  43. data/lib/lib/coopy/table_modifier.rb +1 -1
  44. data/lib/lib/coopy/table_stream.rb +102 -0
  45. data/lib/lib/coopy/terminal_diff_render.rb +4 -3
  46. data/lib/lib/coopy/unit.rb +22 -2
  47. data/lib/lib/coopy/viterbi.rb +4 -4
  48. data/lib/lib/haxe/ds/int_map.rb +1 -1
  49. data/lib/lib/haxe/ds/string_map.rb +1 -1
  50. data/lib/lib/haxe/format/json_parser.rb +1 -1
  51. data/lib/lib/haxe/format/json_printer.rb +1 -1
  52. data/lib/lib/haxe/io/bytes.rb +2 -2
  53. data/lib/lib/haxe/io/eof.rb +1 -1
  54. data/lib/lib/haxe/io/output.rb +1 -1
  55. data/lib/lib/hx_overrides.rb +1 -1
  56. data/lib/lib/hx_sys.rb +9 -5
  57. data/lib/lib/lambda.rb +3 -3
  58. data/lib/lib/list.rb +1 -1
  59. data/lib/lib/rb/ruby_iterator.rb +2 -2
  60. data/lib/lib/reflect.rb +1 -1
  61. data/lib/lib/sys/io/file_output.rb +1 -1
  62. data/lib/lib/sys/io/hx_file.rb +1 -1
  63. data/lib/lib/x_list/list_iterator.rb +2 -2
  64. metadata +29 -25
  65. data/lib/lib/coopy/table_text.rb +0 -26
  66. data/lib/lib/haxe/io/bytes_buffer.rb +0 -19
  67. data/lib/lib/haxe/io/bytes_input.rb +0 -13
  68. data/lib/lib/haxe/io/bytes_output.rb +0 -33
  69. data/lib/lib/haxe/io/input.rb +0 -11
@@ -8,16 +8,16 @@ module Coopy
8
8
  end
9
9
 
10
10
  def get_content(name)
11
- return ::Sys::Io::HxFile.get_content(name)
11
+ ::Sys::Io::HxFile.get_content(name)
12
12
  end
13
13
 
14
14
  def save_content(name,txt)
15
15
  ::Sys::Io::HxFile.save_content(name,txt)
16
- return true
16
+ true
17
17
  end
18
18
 
19
19
  def args
20
- return HxSys.args
20
+ HxSys.args
21
21
  end
22
22
 
23
23
  def write_stdout(txt)
@@ -38,15 +38,28 @@ module Coopy
38
38
  end
39
39
 
40
40
  def async
41
- return false
41
+ false
42
42
  end
43
43
 
44
44
  def exists(path)
45
- return File.exist?(path)
45
+ File.exist?(path)
46
+ end
47
+
48
+ def is_tty_known
49
+ false
50
+ end
51
+
52
+ def is_tty
53
+ return true if HxSys.get_env("GIT_PAGER_IN_USE") == "true"
54
+ false
46
55
  end
47
56
 
48
57
  def open_sqlite_database(path)
49
- return nil
58
+ nil
59
+ end
60
+
61
+ def send_to_browser(html)
62
+ puts "do not know how to send to browser in this language"
50
63
  end
51
64
 
52
65
  haxe_me ["coopy", "TableIO"]
@@ -31,7 +31,7 @@ module Coopy
31
31
  end
32
32
  end
33
33
  end
34
- return @t.insert_or_delete_columns(fate,@t.get_width - 1)
34
+ @t.insert_or_delete_columns(fate,@t.get_width - 1)
35
35
  end
36
36
 
37
37
  haxe_me ["coopy", "TableModifier"]
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ module Coopy
5
+ class TableStream
6
+
7
+ def initialize(t)
8
+ @t = t
9
+ @at = -1
10
+ @h = t.get_height
11
+ @src = nil
12
+ if @h < 0
13
+ meta = t.get_meta
14
+ raise hx_raise("Cannot get meta information for table") if meta == nil
15
+ @src = meta.get_row_stream
16
+ raise hx_raise("Cannot iterate table") if @src == nil
17
+ end
18
+ end
19
+
20
+ protected
21
+
22
+ attr_accessor :t
23
+ attr_accessor :at
24
+ attr_accessor :h
25
+ attr_accessor :src
26
+ attr_accessor :columns
27
+ attr_accessor :row
28
+
29
+ public
30
+
31
+ def fetch_columns
32
+ return @columns if @columns != nil
33
+ if @src != nil
34
+ @columns = @src.fetch_columns
35
+ return @columns
36
+ end
37
+ @columns = Array.new
38
+ begin
39
+ _g1 = 0
40
+ _g = @t.get_width
41
+ while(_g1 < _g)
42
+ i = _g1
43
+ _g1+=1
44
+ @columns.push(@t.get_cell(i,0))
45
+ end
46
+ end
47
+ @columns
48
+ end
49
+
50
+ def fetch_row
51
+ return @src.fetch_row if @src != nil
52
+ return nil if @at >= @h
53
+ row = {}
54
+ begin
55
+ _g1 = 0
56
+ _g = @columns.length
57
+ while(_g1 < _g)
58
+ i = _g1
59
+ _g1+=1
60
+ begin
61
+ v = @t.get_cell(i,@at)
62
+ begin
63
+ value = v
64
+ row[@columns[i]] = value
65
+ end
66
+ v
67
+ end
68
+ end
69
+ end
70
+ row
71
+ end
72
+
73
+ def fetch
74
+ if @at == -1
75
+ @at+=1
76
+ self.fetch_columns if @src != nil
77
+ return true
78
+ end
79
+ if @src != nil
80
+ @at = 1
81
+ @row = self.fetch_row
82
+ return @row != nil
83
+ end
84
+ @at+=1
85
+ @at < @h
86
+ end
87
+
88
+ def get_cell(x)
89
+ return @columns[x] if @at == 0
90
+ return @row[@columns[x]] if @row != nil
91
+ @t.get_cell(x,@at)
92
+ end
93
+
94
+ def width
95
+ self.fetch_columns
96
+ @columns.length
97
+ end
98
+
99
+ haxe_me ["coopy", "TableStream"]
100
+ end
101
+
102
+ end
@@ -32,6 +32,7 @@ module Coopy
32
32
  @v = t.get_cell_view
33
33
  @codes = {}
34
34
  @codes["header"] = "\x1B[0;1m"
35
+ @codes["meta"] = "\x1B[0;1m"
35
36
  @codes["spec"] = "\x1B[35;1m"
36
37
  @codes["add"] = "\x1B[32;1m"
37
38
  @codes["conflict"] = "\x1B[33;1m"
@@ -74,7 +75,7 @@ module Coopy
74
75
  @v = nil
75
76
  @csv = nil
76
77
  @codes = nil
77
- return txt
78
+ txt
78
79
  end
79
80
 
80
81
  protected
@@ -101,7 +102,7 @@ module Coopy
101
102
  else
102
103
  val = cell.pretty_value
103
104
  end
104
- return @csv.render_cell(@v,val)
105
+ @csv.render_cell(@v,val)
105
106
  end
106
107
 
107
108
  def pick_sizes(t)
@@ -161,7 +162,7 @@ module Coopy
161
162
  end
162
163
  end
163
164
  return nil if total > 130
164
- return sizes
165
+ sizes
165
166
  end
166
167
 
167
168
  haxe_me ["coopy", "TerminalDiffRender"]
@@ -24,7 +24,7 @@ module Coopy
24
24
 
25
25
  def to_s
26
26
  return _hx_str(::Coopy::Unit.describe(@p)) + "|" + _hx_str(::Coopy::Unit.describe(@l)) + ":" + _hx_str(::Coopy::Unit.describe(@r)) if @p >= -1
27
- return _hx_str(::Coopy::Unit.describe(@l)) + ":" + _hx_str(::Coopy::Unit.describe(@r))
27
+ _hx_str(::Coopy::Unit.describe(@l)) + ":" + _hx_str(::Coopy::Unit.describe(@r))
28
28
  end
29
29
 
30
30
  def from_string(txt)
@@ -54,7 +54,27 @@ module Coopy
54
54
  end
55
55
  end
56
56
  end
57
- return false
57
+ false
58
+ end
59
+
60
+ # protected - in ruby this doesn't play well with static/inline methods
61
+
62
+ def base26(num)
63
+ alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
64
+ return "-" if num < 0
65
+ out = ""
66
+ begin
67
+ out = _hx_str(out) + _hx_str(alpha[num.remainder(26)])
68
+ num = (num / 26).floor - 1
69
+ end while(num >= 0)
70
+ out
71
+ end
72
+
73
+ public
74
+
75
+ def to_base26string
76
+ return _hx_str(self.base26(@p)) + "|" + _hx_str(self.base26(@l)) + ":" + _hx_str(self.base26(@r)) if @p >= -1
77
+ _hx_str(self.base26(@l)) + ":" + _hx_str(self.base26(@r))
58
78
  end
59
79
 
60
80
  # protected - in ruby this doesn't play well with static/inline methods
@@ -153,22 +153,22 @@ module Coopy
153
153
  end
154
154
  end
155
155
  txt += " costs " + _hx_str(self.get_cost)
156
- return txt
156
+ txt
157
157
  end
158
158
 
159
159
  def length
160
160
  self.calculate_path if @index > 0
161
- return @index
161
+ @index
162
162
  end
163
163
 
164
164
  def get(i)
165
165
  self.calculate_path
166
- return @path.get(0,i)
166
+ @path.get(0,i)
167
167
  end
168
168
 
169
169
  def get_cost
170
170
  self.calculate_path
171
- return @best_cost
171
+ @best_cost
172
172
  end
173
173
 
174
174
  haxe_me ["coopy", "Viterbi"]
@@ -9,7 +9,7 @@ module Ds
9
9
  end
10
10
 
11
11
  def get(key)
12
- return self[key]
12
+ self[key]
13
13
  end
14
14
 
15
15
  haxe_me ["haxe", "ds", "IntMap"]
@@ -9,7 +9,7 @@ module Ds
9
9
  end
10
10
 
11
11
  def get(key)
12
- return self[key]
12
+ self[key]
13
13
  end
14
14
 
15
15
  haxe_me ["haxe", "ds", "StringMap"]
@@ -246,7 +246,7 @@ module Format
246
246
  end
247
247
  end
248
248
  buf_b += @str[start,@pos - start - 1]
249
- return buf_b
249
+ buf_b
250
250
  end
251
251
 
252
252
  def invalid_char
@@ -230,7 +230,7 @@ module Format
230
230
  def JsonPrinter._print(o,replacer = nil,space = nil)
231
231
  printer = ::Haxe::Format::JsonPrinter.new(replacer,space)
232
232
  printer.write("",o)
233
- return printer.buf.b
233
+ printer.buf.b
234
234
  end
235
235
 
236
236
  haxe_me ["haxe", "format", "JsonPrinter"]
@@ -20,11 +20,11 @@ module Io
20
20
 
21
21
  def get_string(pos,len)
22
22
  raise hx_raise(::Haxe::Io::Error.outside_bounds) if pos < 0 || len < 0 || pos + len > @length
23
- return @b.byteslice(pos,len)
23
+ @b.byteslice(pos,len)
24
24
  end
25
25
 
26
26
  def Bytes.of_string(s)
27
- return ::Haxe::Io::Bytes.new(s.bytesize,s)
27
+ ::Haxe::Io::Bytes.new(s.bytesize,s)
28
28
  end
29
29
 
30
30
  haxe_me ["haxe", "io", "Bytes"]
@@ -8,7 +8,7 @@ module Io
8
8
  protected
9
9
 
10
10
  def to_s
11
- return "Eof"
11
+ "Eof"
12
12
  end
13
13
 
14
14
  haxe_me ["haxe", "io", "Eof"]
@@ -18,7 +18,7 @@ module Io
18
18
  pos+=1
19
19
  k-=1
20
20
  end
21
- return len
21
+ len
22
22
  end
23
23
 
24
24
  def write_full_bytes(s,pos,len)
@@ -11,7 +11,7 @@
11
11
  h = date.get_hours
12
12
  mi = date.get_minutes
13
13
  s = date.get_seconds
14
- return _hx_str(date.get_full_year) + "-" + _hx_str((((m < 10) ? "0" + _hx_str(m) : "" + _hx_str(m)))) + "-" + _hx_str((((d < 10) ? "0" + _hx_str(d) : "" + _hx_str(d)))) + " " + _hx_str((((h < 10) ? "0" + _hx_str(h) : "" + _hx_str(h)))) + ":" + _hx_str((((mi < 10) ? "0" + _hx_str(mi) : "" + _hx_str(mi)))) + ":" + _hx_str((((s < 10) ? "0" + _hx_str(s) : "" + _hx_str(s))))
14
+ _hx_str(date.get_full_year) + "-" + _hx_str((((m < 10) ? "0" + _hx_str(m) : "" + _hx_str(m)))) + "-" + _hx_str((((d < 10) ? "0" + _hx_str(d) : "" + _hx_str(d)))) + " " + _hx_str((((h < 10) ? "0" + _hx_str(h) : "" + _hx_str(h)))) + ":" + _hx_str((((mi < 10) ? "0" + _hx_str(mi) : "" + _hx_str(mi)))) + ":" + _hx_str((((s < 10) ? "0" + _hx_str(s) : "" + _hx_str(s))))
15
15
  end
16
16
 
17
17
  haxe_me ["HxOverrides"]
@@ -4,7 +4,11 @@
4
4
  class HxSys
5
5
 
6
6
  def HxSys.args
7
- return ARGV
7
+ ARGV
8
+ end
9
+
10
+ def HxSys.get_env(s)
11
+ getenv(s)
8
12
  end
9
13
 
10
14
  # protected - in ruby this doesn't play well with static/inline methods
@@ -27,7 +31,7 @@
27
31
  end
28
32
  end
29
33
  return arg if ok
30
- return "\"" + _hx_str(arg.split("\"").join("\\\"")) + "\""
34
+ "\"" + _hx_str(arg.split("\"").join("\\\"")) + "\""
31
35
  end
32
36
 
33
37
  public
@@ -50,15 +54,15 @@
50
54
  else
51
55
  result = 1
52
56
  end
53
- return result
57
+ result
54
58
  end
55
59
 
56
60
  def HxSys.stdout
57
- return ::Sys::Io::FileOutput.new(STDOUT)
61
+ ::Sys::Io::FileOutput.new(STDOUT)
58
62
  end
59
63
 
60
64
  def HxSys.stderr
61
- return ::Sys::Io::FileOutput.new(STDERR)
65
+ ::Sys::Io::FileOutput.new(STDERR)
62
66
  end
63
67
 
64
68
  haxe_me ["Sys"]
@@ -10,7 +10,7 @@
10
10
  i = _it._next
11
11
  a.push(i)
12
12
  end
13
- return a
13
+ a
14
14
  end
15
15
 
16
16
  def Lambda.map(it,f)
@@ -20,7 +20,7 @@
20
20
  x = _it._next
21
21
  l.add((f).call(x))
22
22
  end
23
- return l
23
+ l
24
24
  end
25
25
 
26
26
  def Lambda.has(it,elt)
@@ -29,7 +29,7 @@
29
29
  x = _it._next
30
30
  return true if x == elt
31
31
  end
32
- return false
32
+ false
33
33
  end
34
34
 
35
35
  haxe_me ["Lambda"]
@@ -28,7 +28,7 @@
28
28
  end
29
29
 
30
30
  def iterator
31
- return ::X_List::ListIterator.new(@h)
31
+ ::X_List::ListIterator.new(@h)
32
32
  end
33
33
 
34
34
  haxe_me ["List"]
@@ -34,14 +34,14 @@ module Rb
34
34
  def has_next
35
35
  return @ref[:has_next].call if @at == -1
36
36
  return @ref[:has_next][:call].call if @at == -2
37
- return @at < @len
37
+ @at < @len
38
38
  end
39
39
 
40
40
  def _next
41
41
  return @ref[:_next].call if @at == -1
42
42
  return @ref[:_next][:call].call if @at == -2
43
43
  @at+=1
44
- return @ref.next
44
+ @ref.next
45
45
  end
46
46
 
47
47
  haxe_me ["rb", "RubyIterator"]
@@ -23,7 +23,7 @@
23
23
  end
24
24
 
25
25
  def Reflect.is_function(f)
26
- return f.respond_to?("call")
26
+ f.respond_to?("call")
27
27
  end
28
28
 
29
29
  haxe_me ["Reflect"]