gooby 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (224) hide show
  1. data/README +242 -0
  2. data/bin/example_usage.rb +38 -0
  3. data/bin/tests_gen.rb +16 -0
  4. data/data/20050305_corporate_cup_hm.csv +251 -0
  5. data/data/20050305_corporate_cup_hm.xml +2208 -0
  6. data/data/20050430_nashville_marathon.csv +1208 -0
  7. data/data/20050430_nashville_marathon.xml +10043 -0
  8. data/data/20051119_dowd_ymca_hm.csv +251 -0
  9. data/data/20051119_dowd_ymca_hm.xml +2210 -0
  10. data/data/20051124_hyatt_turkey_trot_8K.csv +321 -0
  11. data/data/20051124_hyatt_turkey_trot_8K.xml +2651 -0
  12. data/data/2007_03_03.tcx +6207 -0
  13. data/data/forerunner_2007.xml +259014 -0
  14. data/data/geo_data.txt +171 -0
  15. data/data/phx.csv +1280 -0
  16. data/data/phx.xml +10620 -0
  17. data/data/run_2007_01_01_16_38_27.xml +2020 -0
  18. data/data/run_2007_01_06_15_27_31.xml +2020 -0
  19. data/data/run_2007_01_10_12_25_47.xml +820 -0
  20. data/data/run_2007_01_10_22_44_54.csv +112 -0
  21. data/data/run_2007_01_10_22_44_54.xml +908 -0
  22. data/data/run_2007_01_11_10_48_45.xml +1292 -0
  23. data/data/run_2007_01_13_15_37_06.xml +1964 -0
  24. data/data/run_2007_01_14_15_46_02.xml +1368 -0
  25. data/data/run_2007_01_15_14_01_48.xml +1868 -0
  26. data/data/run_2007_01_20_16_22_05.xml +1702 -0
  27. data/data/run_2007_01_27_17_32_13.xml +3626 -0
  28. data/data/run_2007_01_28_19_14_52.xml +2538 -0
  29. data/data/run_2007_02_03_14_30_20.xml +2016 -0
  30. data/data/run_2007_02_04_18_02_30.xml +1476 -0
  31. data/data/run_2007_02_17_16_29_35.xml +1236 -0
  32. data/data/run_2007_02_19_14_44_33.xml +1816 -0
  33. data/data/run_2007_02_23_15_53_55.xml +36 -0
  34. data/data/run_2007_02_23_15_55_20.xml +1296 -0
  35. data/data/run_2007_02_24_15_01_35.csv +484 -0
  36. data/data/run_2007_02_24_15_01_35.xml +3884 -0
  37. data/data/test1.txt +4 -0
  38. data/img/gicons/blank.png +0 -0
  39. data/img/gicons/dd-end.png +0 -0
  40. data/img/gicons/dd-start.png +0 -0
  41. data/img/gicons/marker.png +0 -0
  42. data/img/gicons/marker0.png +0 -0
  43. data/img/gicons/marker00.png +0 -0
  44. data/img/gicons/marker01.png +0 -0
  45. data/img/gicons/marker02.png +0 -0
  46. data/img/gicons/marker03.png +0 -0
  47. data/img/gicons/marker04.png +0 -0
  48. data/img/gicons/marker05.png +0 -0
  49. data/img/gicons/marker06.png +0 -0
  50. data/img/gicons/marker07.png +0 -0
  51. data/img/gicons/marker08.png +0 -0
  52. data/img/gicons/marker09.png +0 -0
  53. data/img/gicons/marker1.png +0 -0
  54. data/img/gicons/marker10.png +0 -0
  55. data/img/gicons/marker11.png +0 -0
  56. data/img/gicons/marker12.png +0 -0
  57. data/img/gicons/marker13.png +0 -0
  58. data/img/gicons/marker14.png +0 -0
  59. data/img/gicons/marker15.png +0 -0
  60. data/img/gicons/marker16.png +0 -0
  61. data/img/gicons/marker17.png +0 -0
  62. data/img/gicons/marker18.png +0 -0
  63. data/img/gicons/marker19.png +0 -0
  64. data/img/gicons/marker2.png +0 -0
  65. data/img/gicons/marker20.png +0 -0
  66. data/img/gicons/marker21.png +0 -0
  67. data/img/gicons/marker22.png +0 -0
  68. data/img/gicons/marker23.png +0 -0
  69. data/img/gicons/marker24.png +0 -0
  70. data/img/gicons/marker25.png +0 -0
  71. data/img/gicons/marker26.png +0 -0
  72. data/img/gicons/marker27.png +0 -0
  73. data/img/gicons/marker28.png +0 -0
  74. data/img/gicons/marker29.png +0 -0
  75. data/img/gicons/marker3.png +0 -0
  76. data/img/gicons/marker30.png +0 -0
  77. data/img/gicons/marker31.png +0 -0
  78. data/img/gicons/marker32.png +0 -0
  79. data/img/gicons/marker33.png +0 -0
  80. data/img/gicons/marker34.png +0 -0
  81. data/img/gicons/marker35.png +0 -0
  82. data/img/gicons/marker36.png +0 -0
  83. data/img/gicons/marker37.png +0 -0
  84. data/img/gicons/marker38.png +0 -0
  85. data/img/gicons/marker39.png +0 -0
  86. data/img/gicons/marker4.png +0 -0
  87. data/img/gicons/marker40.png +0 -0
  88. data/img/gicons/marker41.png +0 -0
  89. data/img/gicons/marker42.png +0 -0
  90. data/img/gicons/marker43.png +0 -0
  91. data/img/gicons/marker44.png +0 -0
  92. data/img/gicons/marker45.png +0 -0
  93. data/img/gicons/marker46.png +0 -0
  94. data/img/gicons/marker47.png +0 -0
  95. data/img/gicons/marker48.png +0 -0
  96. data/img/gicons/marker49.png +0 -0
  97. data/img/gicons/marker5.png +0 -0
  98. data/img/gicons/marker50.png +0 -0
  99. data/img/gicons/marker51.png +0 -0
  100. data/img/gicons/marker52.png +0 -0
  101. data/img/gicons/marker53.png +0 -0
  102. data/img/gicons/marker54.png +0 -0
  103. data/img/gicons/marker55.png +0 -0
  104. data/img/gicons/marker56.png +0 -0
  105. data/img/gicons/marker57.png +0 -0
  106. data/img/gicons/marker58.png +0 -0
  107. data/img/gicons/marker59.png +0 -0
  108. data/img/gicons/marker6.png +0 -0
  109. data/img/gicons/marker60.png +0 -0
  110. data/img/gicons/marker61.png +0 -0
  111. data/img/gicons/marker62.png +0 -0
  112. data/img/gicons/marker63.png +0 -0
  113. data/img/gicons/marker64.png +0 -0
  114. data/img/gicons/marker65.png +0 -0
  115. data/img/gicons/marker66.png +0 -0
  116. data/img/gicons/marker67.png +0 -0
  117. data/img/gicons/marker68.png +0 -0
  118. data/img/gicons/marker69.png +0 -0
  119. data/img/gicons/marker7.png +0 -0
  120. data/img/gicons/marker70.png +0 -0
  121. data/img/gicons/marker71.png +0 -0
  122. data/img/gicons/marker72.png +0 -0
  123. data/img/gicons/marker73.png +0 -0
  124. data/img/gicons/marker74.png +0 -0
  125. data/img/gicons/marker75.png +0 -0
  126. data/img/gicons/marker76.png +0 -0
  127. data/img/gicons/marker77.png +0 -0
  128. data/img/gicons/marker78.png +0 -0
  129. data/img/gicons/marker79.png +0 -0
  130. data/img/gicons/marker8.png +0 -0
  131. data/img/gicons/marker80.png +0 -0
  132. data/img/gicons/marker81.png +0 -0
  133. data/img/gicons/marker82.png +0 -0
  134. data/img/gicons/marker83.png +0 -0
  135. data/img/gicons/marker84.png +0 -0
  136. data/img/gicons/marker85.png +0 -0
  137. data/img/gicons/marker86.png +0 -0
  138. data/img/gicons/marker87.png +0 -0
  139. data/img/gicons/marker88.png +0 -0
  140. data/img/gicons/marker89.png +0 -0
  141. data/img/gicons/marker9.png +0 -0
  142. data/img/gicons/marker90.png +0 -0
  143. data/img/gicons/marker91.png +0 -0
  144. data/img/gicons/marker92.png +0 -0
  145. data/img/gicons/marker93.png +0 -0
  146. data/img/gicons/marker94.png +0 -0
  147. data/img/gicons/marker95.png +0 -0
  148. data/img/gicons/marker96.png +0 -0
  149. data/img/gicons/marker97.png +0 -0
  150. data/img/gicons/marker98.png +0 -0
  151. data/img/gicons/marker99.png +0 -0
  152. data/img/gicons/markerA.png +0 -0
  153. data/img/gicons/markerB.png +0 -0
  154. data/img/gicons/markerC.png +0 -0
  155. data/img/gicons/markerD.png +0 -0
  156. data/img/gicons/markerE.png +0 -0
  157. data/img/gicons/markerF.png +0 -0
  158. data/img/gicons/markerG.png +0 -0
  159. data/img/gicons/markerH.png +0 -0
  160. data/img/gicons/markerI.png +0 -0
  161. data/img/gicons/markerJ.png +0 -0
  162. data/img/gicons/mm_20_red.png +0 -0
  163. data/img/gicons/mm_20_shadow.png +0 -0
  164. data/img/gicons/readme.txt +11 -0
  165. data/img/gicons/shadow50.png +0 -0
  166. data/lib/gooby/cls_counter_hash.rb +78 -0
  167. data/lib/gooby/cls_delim_line.rb +35 -0
  168. data/lib/gooby/cls_dttm.rb +79 -0
  169. data/lib/gooby/cls_duration.rb +79 -0
  170. data/lib/gooby/cls_forerunner_xml_parser.rb +178 -0
  171. data/lib/gooby/cls_forerunner_xml_splitter.rb +109 -0
  172. data/lib/gooby/cls_geo_data.rb +181 -0
  173. data/lib/gooby/cls_gooby_command.rb +35 -0
  174. data/lib/gooby/cls_gooby_object.rb +18 -0
  175. data/lib/gooby/cls_google_map_generator.rb +363 -0
  176. data/lib/gooby/cls_history.rb +33 -0
  177. data/lib/gooby/cls_lap.rb +22 -0
  178. data/lib/gooby/cls_line.rb +75 -0
  179. data/lib/gooby/cls_options.rb +67 -0
  180. data/lib/gooby/cls_position.rb +44 -0
  181. data/lib/gooby/cls_run.rb +194 -0
  182. data/lib/gooby/cls_simple_xml_parser.rb +41 -0
  183. data/lib/gooby/cls_test_regen.rb +182 -0
  184. data/lib/gooby/cls_track.rb +47 -0
  185. data/lib/gooby/cls_trackpoint.rb +200 -0
  186. data/lib/gooby/mod_introspect.rb +26 -0
  187. data/lib/gooby/mod_io.rb +58 -0
  188. data/lib/gooby/mod_project_info.rb +80 -0
  189. data/lib/gooby/mod_string.rb +19 -0
  190. data/lib/gooby/mod_test_helper.rb +15 -0
  191. data/lib/gooby.rb +2265 -0
  192. data/pkg/code_header.txt +21 -0
  193. data/pkg/pkg.rb +236 -0
  194. data/pkg/test_header.txt +19 -0
  195. data/samples/20041113_richmond_marathon.html +532 -0
  196. data/samples/20050305_corporate_cup_hm.html +448 -0
  197. data/samples/20050430_nashville_marathon.html +530 -0
  198. data/samples/gps_point_capture.html +54 -0
  199. data/samples/phoenix_marathon.html +542 -0
  200. data/samples/run_2007_01_10_22_44_54.html +201 -0
  201. data/samples/run_2007_02_24_15_01_35.html +298 -0
  202. data/tests/tc_cls_counter_hash.rb +107 -0
  203. data/tests/tc_cls_delim_line.rb +74 -0
  204. data/tests/tc_cls_dttm.rb +131 -0
  205. data/tests/tc_cls_duration.rb +51 -0
  206. data/tests/tc_cls_forerunner_xml_parser.rb +70 -0
  207. data/tests/tc_cls_geo_data.xxx +71 -0
  208. data/tests/tc_cls_gooby_object.rb +26 -0
  209. data/tests/tc_cls_google_map_generator.rb +109 -0
  210. data/tests/tc_cls_history.rb +46 -0
  211. data/tests/tc_cls_lap.rb +38 -0
  212. data/tests/tc_cls_line.rb +110 -0
  213. data/tests/tc_cls_options.rb +79 -0
  214. data/tests/tc_cls_position.rb +66 -0
  215. data/tests/tc_cls_run.rb +142 -0
  216. data/tests/tc_cls_simple_xml_parser.rb +50 -0
  217. data/tests/tc_cls_track.rb +70 -0
  218. data/tests/tc_cls_trackpoint.rb +145 -0
  219. data/tests/tc_mod_introspect.rb +32 -0
  220. data/tests/tc_mod_io.rb +53 -0
  221. data/tests/tc_mod_project_info.rb +79 -0
  222. data/tests/tc_mod_string.rb +58 -0
  223. data/tests/ts_gooby.rb +1237 -0
  224. metadata +270 -0
data/data/test1.txt ADDED
@@ -0,0 +1,4 @@
1
+ This is just a file
2
+ containing some
3
+
4
+ test data.
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,11 @@
1
+
2
+ Please do NOT use the 'joakim-systems' URL for these images on your site,
3
+ copy them to your webserver instead!
4
+
5
+ See the following URLs where icons were be obtained.
6
+
7
+ http://www.google.com/mapfiles/dd-start.png
8
+ http://www.google.com/mapfiles/dd-end.png
9
+ http://www.google.com/mapfiles/marker[A..J].png
10
+
11
+ http://mapki.com/index.php?title=Icon_Image_Sets
Binary file
@@ -0,0 +1,78 @@
1
+ module Gooby
2
+
3
+ =begin rdoc
4
+ This class wrappers a Hash object and provides increment/decrement functionality
5
+ for a given key. It is used to sum the number of things (i.e. - xml tags) in a
6
+ collection.
7
+ =end
8
+
9
+ class CounterHash < GoobyObject
10
+
11
+ def initialize
12
+ @hash = Hash.new(0)
13
+ end
14
+
15
+ # Return the Integer count for the given key; zero default.
16
+ def value(key)
17
+ (@hash.has_key?(key)) ? @hash[key] : 0
18
+ end
19
+
20
+ # Increment the count for the given key.
21
+ def increment(key)
22
+ if key == nil
23
+ return
24
+ end
25
+ if (@hash.has_key?(key))
26
+ val = @hash[key]
27
+ @hash[key] = val + 1
28
+ else
29
+ @hash[key] = 1
30
+ end
31
+ end
32
+
33
+ # Decrement the count for the given key.
34
+ def decrement(key)
35
+ if key == nil
36
+ return
37
+ end
38
+ if (@hash.has_key?(key))
39
+ val = @hash[key]
40
+ @hash[key] = val - 1
41
+ else
42
+ @hash[key] = -1
43
+ end
44
+ end
45
+
46
+ # Return an Array of the sorted keys.
47
+ def sorted_keys
48
+ @hash.keys.sort
49
+ end
50
+
51
+ # Return a String containing all key=val pairs.
52
+ def to_s
53
+ s = "CHash:"
54
+ sorted_keys.each { |key|
55
+ val = @hash[key]
56
+ s << " key: [#{key}] val: [#{val}]"
57
+ }
58
+ s
59
+ end
60
+
61
+ # Return an XML String containing all key=val pairs, optionally aligned.
62
+ def to_xml(aligned=false)
63
+ s = "<CHash>"
64
+ sorted_keys.each { |key|
65
+ val = @hash[key]
66
+ (aligned) ? s << "\n " : s << ''
67
+ s << " <entry key='#{key}' value='#{val}'/>"
68
+ }
69
+ if aligned
70
+ s << "\n "
71
+ end
72
+ s << " </CHash>"
73
+ s
74
+ end
75
+
76
+ end
77
+
78
+ end # end of module
@@ -0,0 +1,35 @@
1
+ module Gooby
2
+
3
+ =begin rdoc
4
+ Instances of this class represent a delimited line of text, such as csv.
5
+ =end
6
+
7
+ class DelimLine < GoobyObject
8
+
9
+ attr_reader :line, :trim, :delim, :tokens
10
+
11
+ def initialize(line, trim=true, delim=default_delimiter)
12
+ @line = line
13
+ @trim = trim
14
+ @delim = delim
15
+ @tokens = @line.split(@delim)
16
+ if trim
17
+ @tokens.each { | token | token.strip! }
18
+ end
19
+ end
20
+
21
+ def as_trackpoint(num_idx, lat_idx, lng_idx, alt_idx, dttm_idx)
22
+ Trackpoint.new(@tokens[num_idx], @tokens[lat_idx], @tokens[lng_idx], @tokens[alt_idx], @tokens[dttm_idx])
23
+ end
24
+
25
+ def is_comment?
26
+ @line.strip.match('^#') ? true : false
27
+ end
28
+
29
+ def to_s
30
+ "DelimLine: length: #{@line.size} trim: #{@trim} delim: #{@delim} tokens: #{@tokens.size}"
31
+ end
32
+
33
+ end
34
+
35
+ end # end of module
@@ -0,0 +1,79 @@
1
+ module Gooby
2
+
3
+ =begin rdoc
4
+ Instances of this class represent a Date and Time as parsed from a value
5
+ such as '2006-01-15T13:41:40Z' in an XML file produced by a GPS device.
6
+ It wrappers both a DateTime and Time object.
7
+ =end
8
+
9
+ class DtTm < GoobyObject
10
+
11
+ attr_accessor :rawdata, :dateTime, :time, :valid
12
+
13
+ # Constructor; arg is a String like '2006-01-15T13:41:40Z'.
14
+ def initialize(raw)
15
+ if raw
16
+ @rawdata = raw.strip
17
+ if @rawdata.size > 18
18
+ @dateTime = DateTime.parse(@rawdata[0..18])
19
+ @time = Time.parse(@dateTime.to_s)
20
+ @valid = true
21
+ else
22
+ @valid = false
23
+ end
24
+ else
25
+ @rawdata = ''
26
+ @valid = false
27
+ end
28
+ end
29
+
30
+ public
31
+
32
+ # Return @time.to_i
33
+ def to_i()
34
+ (@time) ? @time.to_i : invalid_time
35
+ end
36
+
37
+ # Calculates and returns diff between another instance.
38
+ def seconds_diff(anotherDtTm)
39
+ if anotherDtTm
40
+ to_i - anotherDtTm.to_i
41
+ else
42
+ invalid_time
43
+ end
44
+ end
45
+
46
+ def yyyy_mm_dd
47
+ @time.strftime("%Y-%m-%d")
48
+ end
49
+
50
+ def yyyy_mm_dd_hh_mm_ss
51
+ @time.strftime("%Y-%m-%d %H:%M:%S")
52
+ end
53
+
54
+ def hh_mm_ss
55
+ @time.strftime("%H:%M:%S")
56
+ end
57
+
58
+ # Calculate and return time diff in 'hh:mm:ss' format.
59
+ def hhmmss_diff(anotherDtTm)
60
+ if anotherDtTm
61
+ t = @time - (anotherDtTm.to_i)
62
+ t.strftime("%H:%M:%S")
63
+ else
64
+ '??:??:??'
65
+ end
66
+ end
67
+
68
+ def to_s
69
+ "#{@rawdata}"
70
+ end
71
+
72
+ # Return a String with state values for debugging.
73
+ def print_string
74
+ "DtTm: #{yyyy_mm_dd_hh_mm_ss} #{to_i} #{@rawdata}"
75
+ end
76
+
77
+ end
78
+
79
+ end # end of module
@@ -0,0 +1,79 @@
1
+ module Gooby
2
+
3
+ =begin rdoc
4
+ Instances of this class represent the contents of a Forerunner extract
5
+ <Duration> tag, such as:
6
+ <Duration>PT507.870S</Duration>
7
+ =end
8
+
9
+ class Duration < GoobyObject
10
+
11
+ attr_accessor :rawdata, :seconds, :minutes, :mmss
12
+
13
+ # Constructor; arg is a String like 'PT507.870S'.
14
+ def initialize(raw)
15
+ if raw
16
+ @rawdata = scrub(raw)
17
+ @seconds = @rawdata.to_f
18
+ @minutes = @seconds / 60
19
+ @base_min = @minutes.floor
20
+ @frac_min = @minutes - @base_min
21
+ @frac_sec = @frac_min * 60
22
+
23
+ @mmss = ''
24
+ if (@base_min < 10)
25
+ @mmss << "0#{@base_min}:"
26
+ else
27
+ @mmss << "#{@base_min}:"
28
+ end
29
+ if (@frac_sec < 10)
30
+ @mmss << "0#{@frac_sec}"
31
+ else
32
+ @mmss << "#{@frac_sec}"
33
+ end
34
+ if (@mmss.size > 8)
35
+ @mmss = @mmss[0..8]
36
+ end
37
+ else
38
+ @rawdata = ''
39
+ @seconds = invalidDistance
40
+ @minutes = invalidMinutes
41
+ @mmss = '??:??.?'
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def scrub(raw)
48
+ if (raw)
49
+ raw.strip!
50
+ newStr = ''
51
+ raw.each_byte { | b |
52
+ if ((b >= 48) && (b <= 57))
53
+ newStr << b
54
+ end
55
+ if (b == 46)
56
+ newStr << b
57
+ end
58
+ }
59
+ return newStr
60
+ else
61
+ ''
62
+ end
63
+ end
64
+
65
+ public
66
+
67
+ def to_s
68
+ "#{@mmss}"
69
+ end
70
+
71
+ # Return a String with state values for debugging.
72
+ def print_string
73
+ "Duration: #{@rawdata} sec: #{@seconds} min: #{@minutes} mmss: #{@mmss} bm: #{@base_min} fm: #{@frac_min} fs: #{@frac_sec}"
74
+ end
75
+
76
+ end
77
+
78
+ end # end of module
79
+