daff 1.1.5 → 1.1.6

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/README.md CHANGED
@@ -19,9 +19,9 @@ Download the code for your preferred language here:
19
19
 
20
20
  For certain languages you can use the command-line:
21
21
  ````sh
22
- npm install daff # node/javascript
23
- pip3 install daff # python3
24
- gem install daff # ruby
22
+ npm install daff -g # node/javascript
23
+ pip3 install daff # python3
24
+ gem install daff # ruby
25
25
  ````
26
26
 
27
27
  Or use the library to view csv diffs on github via a chrome extension:
@@ -71,151 +71,184 @@ module Coopy
71
71
  end
72
72
  end
73
73
 
74
- public
75
-
76
- def Coopy.compare_tables(local,remote)
77
- ct = ::Coopy::CompareTable.new
78
- comp = ::Coopy::TableComparisonState.new
79
- comp.a = local
80
- comp.b = remote
81
- ct.attach(comp)
82
- return ct
83
- end
84
-
85
- def Coopy.compare_tables3(parent,local,remote)
86
- ct = ::Coopy::CompareTable.new
87
- comp = ::Coopy::TableComparisonState.new
88
- comp.p = parent
89
- comp.a = local
90
- comp.b = remote
91
- ct.attach(comp)
92
- return ct
93
- end
74
+ attr_accessor :status
75
+ attr_accessor :daff_cmd
94
76
 
95
- # protected - in ruby this doesn't play well with static/inline methods
96
-
97
- def Coopy.random_tests
98
- st = ::Coopy::SimpleTable.new(15,6)
99
- tab = st
100
- ::Haxe::Log._trace.call("table size is " + _hx_str(tab.get_width) + "x" + _hx_str(tab.get_height),{ file_name: "Coopy.hx", line_number: 42, class_name: "coopy.Coopy", method_name: "randomTests"})
101
- tab.set_cell(3,4,::Coopy::SimpleCell.new(33))
102
- ::Haxe::Log._trace.call("element is " + _hx_str(lambda{ s = tab.get_cell(3,4)
103
- _r = s.to_s}.call()),{ file_name: "Coopy.hx", line_number: 44, class_name: "coopy.Coopy", method_name: "randomTests"})
104
- compare = ::Coopy::Compare.new
105
- d1 = ::Coopy::ViewedDatum.get_simple_view(::Coopy::SimpleCell.new(10))
106
- d2 = ::Coopy::ViewedDatum.get_simple_view(::Coopy::SimpleCell.new(10))
107
- d3 = ::Coopy::ViewedDatum.get_simple_view(::Coopy::SimpleCell.new(20))
108
- report = ::Coopy::Report.new
109
- compare.compare(d1,d2,d3,report)
110
- ::Haxe::Log._trace.call("report is " + _hx_str(report.to_s),{ file_name: "Coopy.hx", line_number: 52, class_name: "coopy.Coopy", method_name: "randomTests"})
111
- d2 = ::Coopy::ViewedDatum.get_simple_view(::Coopy::SimpleCell.new(50))
112
- report.clear
113
- compare.compare(d1,d2,d3,report)
114
- ::Haxe::Log._trace.call("report is " + _hx_str(report.to_s),{ file_name: "Coopy.hx", line_number: 56, class_name: "coopy.Coopy", method_name: "randomTests"})
115
- d2 = ::Coopy::ViewedDatum.get_simple_view(::Coopy::SimpleCell.new(20))
116
- report.clear
117
- compare.compare(d1,d2,d3,report)
118
- ::Haxe::Log._trace.call("report is " + _hx_str(report.to_s),{ file_name: "Coopy.hx", line_number: 60, class_name: "coopy.Coopy", method_name: "randomTests"})
119
- d1 = ::Coopy::ViewedDatum.get_simple_view(::Coopy::SimpleCell.new(20))
120
- report.clear
121
- compare.compare(d1,d2,d3,report)
122
- ::Haxe::Log._trace.call("report is " + _hx_str(report.to_s),{ file_name: "Coopy.hx", line_number: 64, class_name: "coopy.Coopy", method_name: "randomTests"})
123
- comp = ::Coopy::TableComparisonState.new
124
- ct = ::Coopy::CompareTable.new
125
- comp.a = st
126
- comp.b = st
127
- ct.attach(comp)
128
- ::Haxe::Log._trace.call("comparing tables",{ file_name: "Coopy.hx", line_number: 72, class_name: "coopy.Coopy", method_name: "randomTests"})
129
- t1 = ::Coopy::SimpleTable.new(3,2)
130
- t2 = ::Coopy::SimpleTable.new(3,2)
131
- t3 = ::Coopy::SimpleTable.new(3,2)
132
- dt1 = ::Coopy::ViewedDatum.new(t1,::Coopy::SimpleView.new)
133
- dt2 = ::Coopy::ViewedDatum.new(t2,::Coopy::SimpleView.new)
134
- dt3 = ::Coopy::ViewedDatum.new(t3,::Coopy::SimpleView.new)
135
- compare.compare(dt1,dt2,dt3,report)
136
- ::Haxe::Log._trace.call("report is " + _hx_str(report.to_s),{ file_name: "Coopy.hx", line_number: 80, class_name: "coopy.Coopy", method_name: "randomTests"})
137
- t3.set_cell(1,1,::Coopy::SimpleCell.new("hello"))
138
- compare.compare(dt1,dt2,dt3,report)
139
- ::Haxe::Log._trace.call("report is " + _hx_str(report.to_s),{ file_name: "Coopy.hx", line_number: 83, class_name: "coopy.Coopy", method_name: "randomTests"})
140
- t1.set_cell(1,1,::Coopy::SimpleCell.new("hello"))
141
- compare.compare(dt1,dt2,dt3,report)
142
- ::Haxe::Log._trace.call("report is " + _hx_str(report.to_s),{ file_name: "Coopy.hx", line_number: 86, class_name: "coopy.Coopy", method_name: "randomTests"})
143
- v = ::Coopy::Viterbi.new
144
- td = ::Coopy::TableDiff.new(nil,nil)
145
- idx = ::Coopy::Index.new
146
- dr = ::Coopy::DiffRender.new
147
- cf = ::Coopy::CompareFlags.new
148
- hp = ::Coopy::HighlightPatch.new(nil,nil)
149
- csv = ::Coopy::Csv.new
150
- tm = ::Coopy::TableModifier.new(nil)
151
- return 0
77
+ def command(io,cmd,args)
78
+ r = 0
79
+ r = io.command(cmd,args) if io.async
80
+ if r != 999
81
+ io.write_stdout("$ " + _hx_str(cmd))
82
+ begin
83
+ _g = 0
84
+ while(_g < args.length)
85
+ arg = args[_g]
86
+ _g+=1
87
+ io.write_stdout(" ")
88
+ spaced = (arg.index(" ",nil || 0) || -1) >= 0
89
+ io.write_stdout("\"") if spaced
90
+ io.write_stdout(arg)
91
+ io.write_stdout("\"") if spaced
92
+ end
93
+ end
94
+ io.write_stdout("\n")
95
+ end
96
+ r = io.command(cmd,args) if !io.async
97
+ return r
152
98
  end
153
99
 
154
- def Coopy.cell_for(x)
155
- return nil if x == nil
156
- return ::Coopy::SimpleCell.new(x)
157
- end
100
+ public
158
101
 
159
- def Coopy.json_to_table(json)
160
- output = nil
161
- begin
162
- _g = 0
163
- _g1 = Reflect.fields(json)
164
- while(_g < _g1.length)
165
- name = _g1[_g]
166
- _g+=1
167
- t = Reflect.field(json,name)
168
- columns = Reflect.field(t,"columns")
169
- next if columns == nil
170
- rows = Reflect.field(t,"rows")
171
- next if rows == nil
172
- output = ::Coopy::SimpleTable.new(columns.length,rows.length)
173
- has_hash = false
174
- has_hash_known = false
175
- begin
176
- _g3 = 0
177
- _g2 = rows.length
178
- while(_g3 < _g2)
179
- i = _g3
180
- _g3+=1
181
- row = rows[i]
182
- if !has_hash_known
183
- has_hash = true if Reflect.fields(row).length == columns.length
184
- has_hash_known = true
185
- end
186
- if !has_hash
187
- lst = row
188
- begin
189
- _g5 = 0
190
- _g4 = columns.length
191
- while(_g5 < _g4)
192
- j = _g5
193
- _g5+=1
194
- val = lst[j]
195
- output.set_cell(j,i,::Coopy::Coopy.cell_for(val))
196
- end
197
- end
198
- else
199
- _g51 = 0
200
- _g41 = columns.length
201
- while(_g51 < _g41)
202
- j1 = _g51
203
- _g51+=1
204
- val1 = Reflect.field(row,columns[j1])
205
- output.set_cell(j1,i,::Coopy::Coopy.cell_for(val1))
206
- end
102
+ def install_git_driver(io,formats)
103
+ r = 0
104
+ if @status == nil
105
+ @status = {}
106
+ @daff_cmd = ""
107
+ end
108
+ key = "hello"
109
+ if !@status.include?(key)
110
+ io.write_stdout("Setting up git to use daff on")
111
+ begin
112
+ _g = 0
113
+ while(_g < formats.length)
114
+ format = formats[_g]
115
+ _g+=1
116
+ io.write_stdout(" *." + _hx_str(format))
117
+ end
118
+ end
119
+ io.write_stdout(" files\n")
120
+ @status[key] = r
121
+ end
122
+ key = "can_run_git"
123
+ if !@status.include?(key)
124
+ r = self.command(io,"git",["--version"])
125
+ return r if r == 999
126
+ @status[key] = r
127
+ if r != 0
128
+ io.write_stderr("! Cannot run git, aborting\n")
129
+ return 1
130
+ end
131
+ io.write_stdout("- Can run git\n")
132
+ end
133
+ daffs = ["daff","daff.rb","daff.py"]
134
+ if @daff_cmd == ""
135
+ begin
136
+ _g1 = 0
137
+ while(_g1 < daffs.length)
138
+ daff = daffs[_g1]
139
+ _g1+=1
140
+ key1 = "can_run_" + _hx_str(daff)
141
+ if !@status.include?(key1)
142
+ r = self.command(io,daff,["version"])
143
+ return r if r == 999
144
+ @status[key1] = r
145
+ if r == 0
146
+ @daff_cmd = daff
147
+ io.write_stdout("- Can run " + _hx_str(daff) + " as \"" + _hx_str(daff) + "\"\n")
148
+ break
207
149
  end
208
150
  end
209
151
  end
210
152
  end
153
+ if @daff_cmd == ""
154
+ io.write_stderr("! Cannot find daff, is it in your path?\n")
155
+ return 1
156
+ end
211
157
  end
212
- output.trim_blank if output != nil
213
- return output
158
+ begin
159
+ _g2 = 0
160
+ while(_g2 < formats.length)
161
+ format1 = formats[_g2]
162
+ _g2+=1
163
+ key = "have_diff_driver_" + _hx_str(format1)
164
+ if !@status.include?(key)
165
+ r = self.command(io,"git",["config","--global","--get","diff.daff-" + _hx_str(format1) + ".command"])
166
+ return r if r == 999
167
+ @status[key] = r
168
+ end
169
+ have_diff_driver = @status[key] == 0
170
+ key = "add_diff_driver_" + _hx_str(format1)
171
+ if !@status.include?(key)
172
+ if !have_diff_driver
173
+ r = self.command(io,"git",["config","--global","diff.daff-" + _hx_str(format1) + ".command",_hx_str(@daff_cmd) + " diff --git"])
174
+ return r if r == 999
175
+ io.write_stdout("- Added diff driver for " + _hx_str(format1) + "\n")
176
+ else
177
+ r = 0
178
+ io.write_stdout("- Already have diff driver for " + _hx_str(format1) + ", not touching it\n")
179
+ end
180
+ @status[key] = r
181
+ end
182
+ key = "have_merge_driver_" + _hx_str(format1)
183
+ if !@status.include?(key)
184
+ r = self.command(io,"git",["config","--global","--get","merge.daff-" + _hx_str(format1) + ".driver"])
185
+ return r if r == 999
186
+ @status[key] = r
187
+ end
188
+ have_merge_driver = @status[key] == 0
189
+ key = "name_merge_driver_" + _hx_str(format1)
190
+ if !@status.include?(key)
191
+ if !have_merge_driver
192
+ r = self.command(io,"git",["config","--global","merge.daff-" + _hx_str(format1) + ".name","daff tabular " + _hx_str(format1) + " merge"])
193
+ return r if r == 999
194
+ else
195
+ r = 0
196
+ end
197
+ @status[key] = r
198
+ end
199
+ key = "add_merge_driver_" + _hx_str(format1)
200
+ if !@status.include?(key)
201
+ if !have_merge_driver
202
+ r = self.command(io,"git",["config","--global","merge.daff-" + _hx_str(format1) + ".driver",_hx_str(@daff_cmd) + " merge --output %A %O %A %B"])
203
+ return r if r == 999
204
+ io.write_stdout("- Added merge driver for " + _hx_str(format1) + "\n")
205
+ else
206
+ r = 0
207
+ io.write_stdout("- Already have merge driver for " + _hx_str(format1) + ", not touching it\n")
208
+ end
209
+ @status[key] = r
210
+ end
211
+ end
212
+ end
213
+ if !io.exists(".git/config")
214
+ io.write_stderr("! This next part needs to happen in a git repository.\n")
215
+ io.write_stderr("! Please run again from the root of a git repository.\n")
216
+ return 1
217
+ end
218
+ attr = ".gitattributes"
219
+ txt = ""
220
+ post = ""
221
+ if !io.exists(attr)
222
+ io.write_stdout("- No .gitattributes file\n")
223
+ else
224
+ io.write_stdout("- You have a .gitattributes file\n")
225
+ txt = io.get_content(attr)
226
+ end
227
+ need_update = false
228
+ begin
229
+ _g3 = 0
230
+ while(_g3 < formats.length)
231
+ format2 = formats[_g3]
232
+ _g3+=1
233
+ if (txt.index("*." + _hx_str(format2),nil || 0) || -1) >= 0
234
+ io.write_stderr("- Your .gitattributes file already mentions *." + _hx_str(format2) + "\n")
235
+ else
236
+ post += "*." + _hx_str(format2) + " diff=daff-" + _hx_str(format2) + "\n"
237
+ post += "*." + _hx_str(format2) + " merge=daff-" + _hx_str(format2) + "\n"
238
+ io.write_stdout("- Placing the following lines in .gitattributes:\n")
239
+ io.write_stdout(post)
240
+ txt += "\n" if txt != "" && !need_update
241
+ txt += post
242
+ need_update = true
243
+ end
244
+ end
245
+ end
246
+ io.save_content(attr,txt) if need_update
247
+ io.write_stdout("- Done!\n")
248
+ return 0
214
249
  end
215
250
 
216
- public
217
-
218
- def Coopy.coopyhx(io)
251
+ def coopyhx(io)
219
252
  args = io.args
220
253
  return ::Coopy::Coopy.random_tests if args[0] == "--test"
221
254
  more = true
@@ -293,6 +326,34 @@ module Coopy
293
326
  end
294
327
  cmd = args[0]
295
328
  if args.length < 2
329
+ if cmd == "version"
330
+ io.write_stdout(_hx_str(::Coopy::Coopy.version) + "\n")
331
+ return 0
332
+ end
333
+ if cmd == "git"
334
+ io.write_stdout("You can use daff to improve git's handling of csv files, by using it as a\ndiff driver (for showing what has changed) and as a merge driver (for merging\nchanges between multiple versions).\n")
335
+ io.write_stdout("\n")
336
+ io.write_stdout("Automatic setup\n")
337
+ io.write_stdout("---------------\n\n")
338
+ io.write_stdout("Run:\n")
339
+ io.write_stdout(" daff git csv\n")
340
+ io.write_stdout("\n")
341
+ io.write_stdout("Manual setup\n")
342
+ io.write_stdout("------------\n\n")
343
+ io.write_stdout("Create and add a file called .gitattributes in the root directory of your\nrepository, containing:\n\n")
344
+ io.write_stdout(" *.csv diff=daff-csv\n")
345
+ io.write_stdout(" *.csv merge=daff-csv\n")
346
+ io.write_stdout("\nCreate a file called .gitconfig in your home directory (or alternatively\nopen .git/config for a particular repository) and add:\n\n")
347
+ io.write_stdout(" [diff \"daff-csv\"]\n")
348
+ io.write_stdout(" command = daff diff --git\n")
349
+ io.write_stderr("\n")
350
+ io.write_stdout(" [merge \"daff-csv\"]\n")
351
+ io.write_stdout(" name = daff tabular merge\n")
352
+ io.write_stdout(" driver = daff merge --output %A %O %A %B\n\n")
353
+ io.write_stderr("Make sure you can run daff from the command-line as just \"daff\" - if not,\nreplace \"daff\" in the driver and command lines above with the correct way\nto call it.")
354
+ io.write_stderr("\n")
355
+ return 0
356
+ end
296
357
  io.write_stderr("daff can produce and apply tabular diffs.\n")
297
358
  io.write_stderr("Call as:\n")
298
359
  io.write_stderr(" daff [--output OUTPUT.csv] a.csv b.csv\n")
@@ -302,7 +363,8 @@ module Coopy
302
363
  io.write_stderr(" daff merge [--inplace] [--output OUTPUT.csv] parent.csv a.csv b.csv\n")
303
364
  io.write_stderr(" daff trim [--output OUTPUT.csv] source.csv\n")
304
365
  io.write_stderr(" daff render [--output OUTPUT.html] diff.csv\n")
305
- io.write_stderr(" daff git csv\n")
366
+ io.write_stderr(" daff git\n")
367
+ io.write_stderr(" daff version\n")
306
368
  io.write_stderr("\n")
307
369
  io.write_stderr("The --inplace option to patch and merge will result in modification of a.csv.\n")
308
370
  io.write_stderr("\n")
@@ -323,7 +385,7 @@ module Coopy
323
385
  end
324
386
  cmd1 = args[0]
325
387
  offset = 1
326
- if !Lambda.has(["diff","patch","merge","trim","render","git"],cmd1)
388
+ if !Lambda.has(["diff","patch","merge","trim","render","git","version"],cmd1)
327
389
  if (cmd1.index(".",nil || 0) || -1) != -1 || (cmd1.index("--",nil || 0) || -1) == 0
328
390
  cmd1 = "diff"
329
391
  offset = 0
@@ -331,28 +393,7 @@ module Coopy
331
393
  end
332
394
  if cmd1 == "git"
333
395
  types = args.slice!(offset,args.length - offset)
334
- io.write_stdout("You can use daff to improve git's handling of csv files, by using it as a\ndiff driver (for showing what has changed) and as a merge driver (for merging\nchanges between multiple versions). Here is how.\n")
335
- io.write_stdout("\n")
336
- io.write_stdout("Create and add a file called .gitattributes in the root directory of your\nrepository, containing:\n\n")
337
- begin
338
- _g2 = 0
339
- while(_g2 < types.length)
340
- t = types[_g2]
341
- _g2+=1
342
- io.write_stdout(" *." + _hx_str(t) + " diff=daff-diff\n")
343
- io.write_stdout(" *." + _hx_str(t) + " merge=daff-merge\n")
344
- end
345
- end
346
- io.write_stdout("\nCreate a file called .gitconfig in your home directory (or alternatively\nopen .git/config for a particular repository) and add:\n\n")
347
- io.write_stdout(" [merge \"daff-merge\"]\n")
348
- io.write_stdout(" name = daff tabular merge\n")
349
- io.write_stdout(" driver = daff merge --output %A %O %A %B\n\n")
350
- io.write_stdout(" [diff \"daff-diff\"]\n")
351
- io.write_stdout(" command = daff diff --git\n")
352
- io.write_stderr("\n")
353
- io.write_stderr("Make sure you can run daff from the command-line as just \"daff\" - if not,\nreplace \"daff\" in the driver and command lines above with the correct way\nto call it.")
354
- io.write_stderr("\n")
355
- return 0
396
+ return self.install_git_driver(io,types)
356
397
  end
357
398
  if git
358
399
  ct = args.length - offset
@@ -423,9 +464,158 @@ module Coopy
423
464
  end
424
465
  end
425
466
 
467
+
468
+ class << self
469
+ attr_accessor :version
470
+ end
471
+ @version = "1.1.6"
472
+
473
+ def Coopy.compare_tables(local,remote)
474
+ ct = ::Coopy::CompareTable.new
475
+ comp = ::Coopy::TableComparisonState.new
476
+ comp.a = local
477
+ comp.b = remote
478
+ ct.attach(comp)
479
+ return ct
480
+ end
481
+
482
+ def Coopy.compare_tables3(parent,local,remote)
483
+ ct = ::Coopy::CompareTable.new
484
+ comp = ::Coopy::TableComparisonState.new
485
+ comp.p = parent
486
+ comp.a = local
487
+ comp.b = remote
488
+ ct.attach(comp)
489
+ return ct
490
+ end
491
+
492
+ # protected - in ruby this doesn't play well with static/inline methods
493
+
494
+ def Coopy.random_tests
495
+ st = ::Coopy::SimpleTable.new(15,6)
496
+ tab = st
497
+ ::Haxe::Log._trace.call("table size is " + _hx_str(tab.get_width) + "x" + _hx_str(tab.get_height),{ file_name: "Coopy.hx", line_number: 44, class_name: "coopy.Coopy", method_name: "randomTests"})
498
+ tab.set_cell(3,4,::Coopy::SimpleCell.new(33))
499
+ ::Haxe::Log._trace.call("element is " + _hx_str(lambda{ s = tab.get_cell(3,4)
500
+ _r = s.to_s}.call()),{ file_name: "Coopy.hx", line_number: 46, class_name: "coopy.Coopy", method_name: "randomTests"})
501
+ compare = ::Coopy::Compare.new
502
+ d1 = ::Coopy::ViewedDatum.get_simple_view(::Coopy::SimpleCell.new(10))
503
+ d2 = ::Coopy::ViewedDatum.get_simple_view(::Coopy::SimpleCell.new(10))
504
+ d3 = ::Coopy::ViewedDatum.get_simple_view(::Coopy::SimpleCell.new(20))
505
+ report = ::Coopy::Report.new
506
+ compare.compare(d1,d2,d3,report)
507
+ ::Haxe::Log._trace.call("report is " + _hx_str(report.to_s),{ file_name: "Coopy.hx", line_number: 54, class_name: "coopy.Coopy", method_name: "randomTests"})
508
+ d2 = ::Coopy::ViewedDatum.get_simple_view(::Coopy::SimpleCell.new(50))
509
+ report.clear
510
+ compare.compare(d1,d2,d3,report)
511
+ ::Haxe::Log._trace.call("report is " + _hx_str(report.to_s),{ file_name: "Coopy.hx", line_number: 58, class_name: "coopy.Coopy", method_name: "randomTests"})
512
+ d2 = ::Coopy::ViewedDatum.get_simple_view(::Coopy::SimpleCell.new(20))
513
+ report.clear
514
+ compare.compare(d1,d2,d3,report)
515
+ ::Haxe::Log._trace.call("report is " + _hx_str(report.to_s),{ file_name: "Coopy.hx", line_number: 62, class_name: "coopy.Coopy", method_name: "randomTests"})
516
+ d1 = ::Coopy::ViewedDatum.get_simple_view(::Coopy::SimpleCell.new(20))
517
+ report.clear
518
+ compare.compare(d1,d2,d3,report)
519
+ ::Haxe::Log._trace.call("report is " + _hx_str(report.to_s),{ file_name: "Coopy.hx", line_number: 66, class_name: "coopy.Coopy", method_name: "randomTests"})
520
+ comp = ::Coopy::TableComparisonState.new
521
+ ct = ::Coopy::CompareTable.new
522
+ comp.a = st
523
+ comp.b = st
524
+ ct.attach(comp)
525
+ ::Haxe::Log._trace.call("comparing tables",{ file_name: "Coopy.hx", line_number: 74, class_name: "coopy.Coopy", method_name: "randomTests"})
526
+ t1 = ::Coopy::SimpleTable.new(3,2)
527
+ t2 = ::Coopy::SimpleTable.new(3,2)
528
+ t3 = ::Coopy::SimpleTable.new(3,2)
529
+ dt1 = ::Coopy::ViewedDatum.new(t1,::Coopy::SimpleView.new)
530
+ dt2 = ::Coopy::ViewedDatum.new(t2,::Coopy::SimpleView.new)
531
+ dt3 = ::Coopy::ViewedDatum.new(t3,::Coopy::SimpleView.new)
532
+ compare.compare(dt1,dt2,dt3,report)
533
+ ::Haxe::Log._trace.call("report is " + _hx_str(report.to_s),{ file_name: "Coopy.hx", line_number: 82, class_name: "coopy.Coopy", method_name: "randomTests"})
534
+ t3.set_cell(1,1,::Coopy::SimpleCell.new("hello"))
535
+ compare.compare(dt1,dt2,dt3,report)
536
+ ::Haxe::Log._trace.call("report is " + _hx_str(report.to_s),{ file_name: "Coopy.hx", line_number: 85, class_name: "coopy.Coopy", method_name: "randomTests"})
537
+ t1.set_cell(1,1,::Coopy::SimpleCell.new("hello"))
538
+ compare.compare(dt1,dt2,dt3,report)
539
+ ::Haxe::Log._trace.call("report is " + _hx_str(report.to_s),{ file_name: "Coopy.hx", line_number: 88, class_name: "coopy.Coopy", method_name: "randomTests"})
540
+ v = ::Coopy::Viterbi.new
541
+ td = ::Coopy::TableDiff.new(nil,nil)
542
+ idx = ::Coopy::Index.new
543
+ dr = ::Coopy::DiffRender.new
544
+ cf = ::Coopy::CompareFlags.new
545
+ hp = ::Coopy::HighlightPatch.new(nil,nil)
546
+ csv = ::Coopy::Csv.new
547
+ tm = ::Coopy::TableModifier.new(nil)
548
+ return 0
549
+ end
550
+
551
+ def Coopy.cell_for(x)
552
+ return nil if x == nil
553
+ return ::Coopy::SimpleCell.new(x)
554
+ end
555
+
556
+ def Coopy.json_to_table(json)
557
+ output = nil
558
+ begin
559
+ _g = 0
560
+ _g1 = Reflect.fields(json)
561
+ while(_g < _g1.length)
562
+ name = _g1[_g]
563
+ _g+=1
564
+ t = Reflect.field(json,name)
565
+ columns = Reflect.field(t,"columns")
566
+ next if columns == nil
567
+ rows = Reflect.field(t,"rows")
568
+ next if rows == nil
569
+ output = ::Coopy::SimpleTable.new(columns.length,rows.length)
570
+ has_hash = false
571
+ has_hash_known = false
572
+ begin
573
+ _g3 = 0
574
+ _g2 = rows.length
575
+ while(_g3 < _g2)
576
+ i = _g3
577
+ _g3+=1
578
+ row = rows[i]
579
+ if !has_hash_known
580
+ has_hash = true if Reflect.fields(row).length == columns.length
581
+ has_hash_known = true
582
+ end
583
+ if !has_hash
584
+ lst = row
585
+ begin
586
+ _g5 = 0
587
+ _g4 = columns.length
588
+ while(_g5 < _g4)
589
+ j = _g5
590
+ _g5+=1
591
+ val = lst[j]
592
+ output.set_cell(j,i,::Coopy::Coopy.cell_for(val))
593
+ end
594
+ end
595
+ else
596
+ _g51 = 0
597
+ _g41 = columns.length
598
+ while(_g51 < _g41)
599
+ j1 = _g51
600
+ _g51+=1
601
+ val1 = Reflect.field(row,columns[j1])
602
+ output.set_cell(j1,i,::Coopy::Coopy.cell_for(val1))
603
+ end
604
+ end
605
+ end
606
+ end
607
+ end
608
+ end
609
+ output.trim_blank if output != nil
610
+ return output
611
+ end
612
+
613
+ public
614
+
426
615
  def Coopy.main
427
616
  io = ::Coopy::TableIO.new
428
- return ::Coopy::Coopy.coopyhx(io)
617
+ coopy1 = ::Coopy::Coopy.new
618
+ return coopy1.coopyhx(io)
429
619
  end
430
620
 
431
621
  def Coopy.show(t)
@@ -452,7 +642,7 @@ module Coopy
452
642
  txt += "\n"
453
643
  end
454
644
  end
455
- ::Haxe::Log._trace.call(txt,{ file_name: "Coopy.hx", line_number: 432, class_name: "coopy.Coopy", method_name: "show"})
645
+ ::Haxe::Log._trace.call(txt,{ file_name: "Coopy.hx", line_number: 615, class_name: "coopy.Coopy", method_name: "show"})
456
646
  end
457
647
 
458
648
  def Coopy.jsonify(t)
@@ -28,6 +28,24 @@ module Coopy
28
28
  HxSys.stderr.write_string(txt)
29
29
  end
30
30
 
31
+ def command(cmd,args)
32
+ begin
33
+ return HxSys.command(cmd,args)
34
+ rescue => e
35
+ return 1
36
+ end
37
+ return 1
38
+ end
39
+
40
+ def async
41
+ return false
42
+ end
43
+
44
+ def exists(path)
45
+ return File.exist?(path)
46
+ return false
47
+ end
48
+
31
49
  end
32
50
 
33
51
  end
data/lib/lib/sys.rb CHANGED
@@ -7,6 +7,52 @@
7
7
  return ARGV
8
8
  end
9
9
 
10
+ # protected - in ruby this doesn't play well with static/inline methods
11
+
12
+ def HxSys.escape_argument(arg)
13
+ ok = true
14
+ begin
15
+ _g1 = 0
16
+ _g = arg.length
17
+ while(_g1 < _g)
18
+ i = _g1
19
+ _g1+=1
20
+ _g2 = (arg[i].ord rescue nil)
21
+ case(_g2)
22
+ when 32,34
23
+ ok = false
24
+ when 0,13,10
25
+ arg = arg[0,i]
26
+ end if _g2 != nil
27
+ end
28
+ end
29
+ return arg if ok
30
+ return "\"" + _hx_str(arg.split("\"").join("\\\"")) + "\""
31
+ end
32
+
33
+ public
34
+
35
+ def HxSys.command(cmd,args = nil)
36
+ if args != nil
37
+ cmd = HxSys.escape_argument(cmd)
38
+ begin
39
+ _g = 0
40
+ while(_g < args.length)
41
+ a = args[_g]
42
+ _g+=1
43
+ cmd += " " + _hx_str(HxSys.escape_argument(a))
44
+ end
45
+ end
46
+ end
47
+ result = nil
48
+ if system(cmd)
49
+ result = 0
50
+ else
51
+ result = 1
52
+ end
53
+ return result
54
+ end
55
+
10
56
  def HxSys.stdout
11
57
  return ::Sys::Io::FileOutput.new(STDOUT)
12
58
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daff
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.5
4
+ version: 1.1.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-07-10 00:00:00.000000000 Z
13
+ date: 2014-07-11 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: Diff and patch tables
16
16
  email:
@@ -117,8 +117,8 @@ summary: ! '[![Build Status](https://travis-ci.org/paulfitz/daff.svg?branch=mast
117
117
  for comparing tables that share a common origin, in other words multiple versions
118
118
  of the "same" table. For a live demo, see: > http://paulfitz.github.com/daff/ Download
119
119
  the code for your preferred language here: > https://github.com/paulfitz/daff/releases For
120
- certain languages you can use the command-line: ````sh npm install daff # node/javascript
121
- pip3 install daff # python3 gem install daff # ruby ```` Or use the library
120
+ certain languages you can use the command-line: ````sh npm install daff -g # node/javascript
121
+ pip3 install daff # python3 gem install daff # ruby ```` Or use the library
122
122
  to view csv diffs on github via a chrome extension: > https://github.com/theodi/csvhub The
123
123
  diff format used by `daff` is specified here: > http://dataprotocols.org/tabular-diff-format/ This
124
124
  library is a stripped down version of the coopy toolbox (see http://share.find.coop). To