coopy 0.6.4.1 → 1.0.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 (79) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.rspec +2 -0
  4. data/CHANGELOG.md +7 -0
  5. data/Gemfile +7 -0
  6. data/LICENSE.md +22 -0
  7. data/README.md +59 -0
  8. data/Rakefile +4 -6
  9. data/coopy.gemspec +26 -0
  10. data/lib/coopy.rb +32 -175
  11. data/lib/coopy/alignment.rb +260 -0
  12. data/lib/coopy/bag.rb +17 -0
  13. data/lib/coopy/cell_info.rb +24 -0
  14. data/lib/coopy/change_type.rb +10 -0
  15. data/lib/coopy/compare_flags.rb +62 -0
  16. data/lib/coopy/compare_table.rb +327 -0
  17. data/lib/coopy/coopy.rb +22 -0
  18. data/lib/coopy/cross_match.rb +10 -0
  19. data/lib/coopy/csv_table.rb +51 -0
  20. data/lib/coopy/diff_render.rb +307 -0
  21. data/lib/coopy/index.rb +73 -0
  22. data/lib/coopy/index_item.rb +17 -0
  23. data/lib/coopy/index_pair.rb +72 -0
  24. data/lib/coopy/mover.rb +123 -0
  25. data/lib/coopy/ordering.rb +27 -0
  26. data/lib/coopy/row.rb +9 -0
  27. data/lib/coopy/simple_cell.rb +15 -0
  28. data/lib/coopy/simple_table.rb +144 -0
  29. data/lib/coopy/simple_view.rb +36 -0
  30. data/lib/coopy/table.rb +44 -0
  31. data/lib/coopy/table_comparison_state.rb +33 -0
  32. data/lib/coopy/table_diff.rb +634 -0
  33. data/lib/coopy/table_text.rb +14 -0
  34. data/lib/coopy/table_view.rb +31 -0
  35. data/lib/coopy/unit.rb +53 -0
  36. data/lib/coopy/version.rb +3 -0
  37. data/lib/coopy/view.rb +34 -0
  38. data/spec/fixtures/bridges.html +10 -0
  39. data/spec/fixtures/bridges_diff.csv +8 -0
  40. data/spec/fixtures/bridges_new.csv +9 -0
  41. data/spec/fixtures/bridges_old.csv +9 -0
  42. data/spec/fixtures/planetary_bodies.html +22 -0
  43. data/spec/fixtures/planetary_bodies_diff.csv +19 -0
  44. data/spec/fixtures/planetary_bodies_new.csv +20 -0
  45. data/spec/fixtures/planetary_bodies_old.csv +19 -0
  46. data/spec/fixtures/quote_me.csv +10 -0
  47. data/spec/fixtures/quote_me2.csv +11 -0
  48. data/spec/integration/table_diff_spec.rb +57 -0
  49. data/spec/libs/compare_flags_spec.rb +40 -0
  50. data/spec/libs/coopy_spec.rb +14 -0
  51. data/spec/libs/ordering_spec.rb +28 -0
  52. data/spec/libs/unit_spec.rb +31 -0
  53. data/spec/spec_helper.rb +29 -0
  54. metadata +153 -46
  55. data/bin/sqlite_diff +0 -4
  56. data/bin/sqlite_patch +0 -4
  57. data/bin/sqlite_rediff +0 -4
  58. data/lib/coopy/dbi_sql_wrapper.rb +0 -89
  59. data/lib/coopy/diff_apply_sql.rb +0 -35
  60. data/lib/coopy/diff_columns.rb +0 -33
  61. data/lib/coopy/diff_output.rb +0 -21
  62. data/lib/coopy/diff_output_action.rb +0 -34
  63. data/lib/coopy/diff_output_group.rb +0 -40
  64. data/lib/coopy/diff_output_raw.rb +0 -17
  65. data/lib/coopy/diff_output_stats.rb +0 -45
  66. data/lib/coopy/diff_output_table.rb +0 -49
  67. data/lib/coopy/diff_output_tdiff.rb +0 -48
  68. data/lib/coopy/diff_parser.rb +0 -92
  69. data/lib/coopy/diff_render_csv.rb +0 -29
  70. data/lib/coopy/diff_render_html.rb +0 -74
  71. data/lib/coopy/diff_render_log.rb +0 -52
  72. data/lib/coopy/row_change.rb +0 -25
  73. data/lib/coopy/scraperwiki_sql_wrapper.rb +0 -8
  74. data/lib/coopy/scraperwiki_utils.rb +0 -23
  75. data/lib/coopy/sequel_sql_wrapper.rb +0 -73
  76. data/lib/coopy/sql_compare.rb +0 -222
  77. data/lib/coopy/sql_wrapper.rb +0 -34
  78. data/lib/coopy/sqlite_sql_wrapper.rb +0 -143
  79. data/test/test_coopy.rb +0 -126
@@ -1,34 +0,0 @@
1
- require 'coopy/diff_output'
2
-
3
- class DiffOutputAction < DiffOutput
4
- def row_insert(rc)
5
- end
6
-
7
- def row_delete(rc)
8
- end
9
-
10
- def row_update(rc)
11
- end
12
-
13
- def row_skip(rc)
14
- end
15
-
16
- def row_context(rc)
17
- end
18
-
19
- def apply_row(rc)
20
- mode = rc.row_mode
21
- case mode
22
- when "+++"
23
- row_insert(rc)
24
- when "---"
25
- row_delete(rc)
26
- when "->"
27
- row_update(rc)
28
- when "..."
29
- row_skip(rc)
30
- when ""
31
- row_context(rc)
32
- end
33
- end
34
- end
@@ -1,40 +0,0 @@
1
- require 'coopy/diff_columns'
2
- require 'coopy/row_change'
3
-
4
- class DiffOutputGroup
5
- def initialize(*sinks)
6
- @sinks = sinks
7
- end
8
-
9
- def <<(x)
10
- @sinks = [] if @sinks.nil?
11
- @sinks << x
12
- end
13
-
14
- def begin_diff
15
- @sinks.each { |s| s.begin_diff }
16
- end
17
-
18
- def end_diff
19
- @sinks.each { |s| s.end_diff }
20
- end
21
-
22
- def apply_row(rc)
23
- @sinks.each { |s| s.apply_row(rc) }
24
- end
25
-
26
- def to_string
27
- @sinks.each do |s|
28
- result = s.to_string
29
- return result if result!=""
30
- end
31
- ""
32
- end
33
-
34
- def want_context
35
- return @want_context0 unless @want_context0.nil?
36
- @want_context0 = false
37
- @want_context0 = @sinks.each { |s| @want_context0 ||= s.want_context }
38
- @want_context0
39
- end
40
- end
@@ -1,17 +0,0 @@
1
- require 'coopy/diff_output'
2
-
3
- class DiffOutputRaw < DiffOutput
4
- def apply_row(rc)
5
- unless @shown_columns
6
- puts "COLUMN NAMES: #{rc.columns.column_name}"
7
- puts "COLUMN OFFSETS: #{rc.columns.column_offset}"
8
- puts "COLUMN CHANGE ROW: #{rc.columns.change_row}"
9
- puts "COLUMN TITLE ROW: #{rc.columns.title_row}"
10
- puts " "
11
- @shown_columns = true
12
- end
13
- puts "Mode: [#{rc.row_mode}]"
14
- puts "Cells: #{rc.cells}"
15
- puts " "
16
- end
17
- end
@@ -1,45 +0,0 @@
1
- require 'coopy/diff_output'
2
-
3
- class Coopy::DiffOutputStats < DiffOutput
4
- attr_accessor :row
5
-
6
- def initialize
7
- @row = {}
8
- end
9
-
10
- def row_inc(tag)
11
- @row[tag] = 0 unless @row.has_key? tag
12
- @row[tag] = @row[tag]+1
13
- end
14
-
15
- def apply_row(rc)
16
- row_inc(:all)
17
- case rc.row_mode
18
- when "+++"
19
- row_inc(:insert)
20
- when "---"
21
- row_inc(:delete)
22
- when "->"
23
- row_inc(:update)
24
- when "..."
25
- row_inc(:skip)
26
- when ""
27
- row_inc(:context)
28
- end
29
- end
30
-
31
- def add(sel,sel_tag,tag)
32
- v = 0
33
- v = sel[tag] if sel.has_key? tag
34
- "#{sel_tag.to_s},#{tag.to_s},#{v}\n"
35
- end
36
-
37
- def to_string
38
- txt = ""
39
- [:all,:insert,:delete,:update,:skip,:context].each do |tag|
40
- txt = txt + add(@row,:row,tag)
41
- end
42
- txt
43
- end
44
- end
45
-
@@ -1,49 +0,0 @@
1
- require 'coopy/diff_output'
2
-
3
- class DiffOutputTable < DiffOutput
4
- def begin_table
5
- end
6
-
7
- def end_table
8
- end
9
-
10
- def begin_row(mode)
11
- end
12
-
13
- def insert_cell(txt,mode,separator)
14
- end
15
-
16
- def end_row
17
- end
18
-
19
- def quote(x)
20
- return "" if x.nil?
21
- x
22
- end
23
-
24
- def apply_row(rc)
25
- self.begin_row(rc.row_mode)
26
- self.insert_cell(rc.row_mode,
27
- (rc.row_mode=="->") ? rc.row_mode : "",
28
- (rc.row_mode=="->") ? rc.row_mode : "")
29
- rc.cells.each do |cell|
30
- if cell[:new_value]
31
- self.insert_cell(quote(cell[:value]) + "->" + quote(cell[:new_value]),
32
- cell[:cell_mode],
33
- "->")
34
- else
35
- self.insert_cell(cell[:txt],cell[:cell_mode],cell[:separator])
36
- end
37
- end
38
- self.end_row
39
- end
40
-
41
- def begin_diff
42
- self.begin_table
43
- end
44
-
45
- def end_diff
46
- self.end_table
47
- end
48
- end
49
-
@@ -1,48 +0,0 @@
1
- require 'coopy/diff_output_action'
2
-
3
- # this is just a stub, not yet functional
4
- class DiffOutputTdiff < DiffOutputAction
5
- def begin_diff
6
- puts "# tdiff version 0.3"
7
- end
8
-
9
- def row_show(rc)
10
- rc.active_columns.each do |col|
11
- title = col[:title]
12
- offset = col[:diff_offset]
13
- print "|"
14
- print title
15
- print "="
16
- print rc.cells[offset][:txt]
17
- unless rc.cells[offset][:new_value].nil?
18
- print "->"
19
- print rc.cells[offset][:new_value]
20
- end
21
- end
22
- puts "|"
23
- end
24
-
25
- def row_insert(rc)
26
- print "+ "
27
- row_show(rc)
28
- end
29
-
30
- def row_delete(rc)
31
- print "- "
32
- row_show(rc)
33
- end
34
-
35
- def row_update(rc)
36
- print "= "
37
- row_show(rc)
38
- end
39
-
40
- def row_skip(rc)
41
- puts "* ||"
42
- end
43
-
44
- def row_context(rc)
45
- print "* "
46
- row_show(rc)
47
- end
48
- end
@@ -1,92 +0,0 @@
1
- require 'coopy/diff_output'
2
- require 'csv'
3
-
4
- class DiffParser
5
- def initialize(fname)
6
- @rows = CSV.read(fname)
7
- end
8
-
9
- def set_output(output)
10
- @diff_output = output
11
- end
12
-
13
- def apply_row_main(rc,columns)
14
- rc.columns = columns
15
- @diff_output.apply_row(rc)
16
- end
17
-
18
- def apply
19
- rows = @rows
20
- render = @diff_output
21
- return if render.nil?
22
- render.begin_diff
23
- rcs = []
24
- columns = DiffColumns.new
25
- rows.each_with_index do |row, r|
26
- row_mode = ""
27
- open = false
28
- next if row.length == 0
29
- txt = row[0]
30
- txt = "" if txt.nil?
31
- if txt=="@" or txt=="@@"
32
- row_mode = "@@"
33
- columns.title_row = row
34
- columns.update
35
- elsif txt=="!" or txt=="+++" or txt=="---" or txt=="..." or txt.include? "->"
36
- row_mode = txt
37
- columns.change_row = row if txt=="!"
38
- else
39
- open = true
40
- end
41
- cmd = txt
42
- cells = []
43
- row.each_with_index do |val, c|
44
- next if c == 0
45
- nval = nil
46
- txt = ""
47
- txt = val.to_s unless val.nil?
48
- txt = "" if txt=="NULL"
49
- cell_mode = ""
50
- separator = ""
51
- if open and !columns.change_row.nil?
52
- change = columns.change_row[c]
53
- if change=="+++" or change == "---"
54
- cell_mode = change
55
- end
56
- end
57
- if cmd.to_s.include? "->"
58
- if txt.include? cmd
59
- cell_mode = "->"
60
- separator = cmd
61
- b = txt.index(cmd)
62
- val = txt[0,b]
63
- nval = txt[b+cmd.length,txt.length]
64
- end
65
- end
66
- cells << {
67
- :txt => txt,
68
- :value => val,
69
- :new_value => nval,
70
- :cell_mode => cell_mode,
71
- :separator => separator
72
- }
73
- end
74
- rc = RowChange.new(row_mode,cells)
75
- unless columns.title_row.nil?
76
- rcs.each { |rc| self.apply_row_main(rc,columns) }
77
- rcs = []
78
- self.apply_row_main(rc,columns)
79
- else
80
- rcs << rc
81
- end
82
- end
83
- rcs.each { |rc| self.apply_row_main(rc,columns) }
84
- render.end_diff
85
- end
86
-
87
- def to_string
88
- return diff_output.to_string unless diff_output.nil?
89
- ""
90
- end
91
- end
92
-
@@ -1,29 +0,0 @@
1
- require 'coopy/diff_output_table'
2
- require 'csv'
3
-
4
- class DiffRenderCsv < DiffOutputTable
5
- def initialize(fname = nil)
6
- @txt = ""
7
- @csv = CSV.open(fname,'w') if fname
8
- end
9
-
10
- def begin_row(row_mode)
11
- @line = []
12
- end
13
-
14
- def insert_cell(txt,mode,separator)
15
- @line << txt
16
- end
17
-
18
- def end_row
19
- if @csv
20
- @csv.add_row(@line)
21
- else
22
- @txt << @line.to_csv
23
- end
24
- end
25
-
26
- def to_string
27
- @txt
28
- end
29
- end
@@ -1,74 +0,0 @@
1
- require 'coopy/diff_output_table'
2
-
3
- class DiffRenderHtml < DiffOutputTable
4
- def initialize
5
- @text_to_insert = []
6
- end
7
-
8
- def insert(str)
9
- @text_to_insert << str
10
- end
11
-
12
- def begin_table
13
- self.insert "<table class='csv_sheet'>\n"
14
- end
15
-
16
- def begin_row(mode)
17
- @td_open = '<td';
18
- @td_close = '</td>';
19
- @row_color = "";
20
- @open = false;
21
- case mode
22
- when "@@"
23
- @td_open = "<th"
24
- @td_close = "</th>"
25
- when "!"
26
- @row_color = "#aaaaaa"
27
- when "+++"
28
- @row_color = "#7fff7f";
29
- when "---"
30
- @row_color = "#ff7f7f";
31
- else
32
- @open = true
33
- end
34
- tr = "<tr>";
35
- row_decorate = ""
36
- if @row_color!=""
37
- row_decorate = " bgcolor=\"" + @row_color + "\" style=\"background-color: " + @row_color + ";\""
38
- tr = "<tr" + row_decorate + ">"
39
- end
40
- self.insert(tr)
41
- end
42
-
43
- def insert_cell(txt,mode,separator)
44
- cell_decorate = ""
45
- case mode
46
- when "+++"
47
- cell_decorate = " bgcolor=\"#7fff7f\" style=\"background-color: #7fff7f;\""
48
- when "---"
49
- cell_decorate = " bgcolor=\"#ff7f7f\" style=\"background-color: #ff7f7f;\""
50
- when "->"
51
- cell_decorate = " bgcolor=\"#7f7fff\" style=\"background-color: #7f7fff;\""
52
- end
53
- self.insert @td_open+cell_decorate+">"
54
- self.insert txt
55
- self.insert @td_close
56
- end
57
-
58
- def end_row
59
- self.insert "</tr>\n"
60
- end
61
-
62
- def end_table
63
- self.insert "</table>\n"
64
- end
65
-
66
- def html
67
- @text_to_insert.join ''
68
- end
69
-
70
- def to_string
71
- html
72
- end
73
- end
74
-
@@ -1,52 +0,0 @@
1
- require 'diff_output_table'
2
-
3
- class DiffRenderLog < DiffOutputTable
4
- def initialize
5
- @r = 0
6
- @c = 0
7
- @row_mode = ""
8
- @row_log = []
9
- @cell_log = []
10
- end
11
-
12
- def begin_table
13
- end
14
-
15
- def begin_row(mode)
16
- @row_mode = mode
17
- @row_log << [@r, mode]
18
- @c = 0
19
- end
20
-
21
- def insert_cell(txt,mode,separator)
22
- @cell_log << {
23
- :col => @c,
24
- :row => @r,
25
- :txt => txt,
26
- :cell_mode => mode,
27
- :row_mode => @row_mode,
28
- :separator => separator
29
- }
30
- @c = @c + 1
31
- end
32
-
33
- def end_row
34
- @r = @r + 1
35
- end
36
-
37
- def end_table
38
- end
39
-
40
- def log
41
- txt = ""
42
- @cell_log.each do |v|
43
- txt << v[:col].to_s + "," + v[:row].to_s + " [" + v[:cell_mode] + "/" +
44
- v[:row_mode] + "] " + v[:separator] + " : " + v[:txt].to_s + "\n"
45
- end
46
- txt
47
- end
48
-
49
- def to_string
50
- log
51
- end
52
- end