derailed-ziya 2.0.8 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (263) hide show
  1. data/Manifest.txt +240 -432
  2. data/README.txt +104 -97
  3. data/Rakefile +3 -2
  4. data/bin/ziyafy +33 -10
  5. data/examples/charts/basic_chart.rb +47 -0
  6. data/{charts → examples/charts/public/charts}/AC_RunActiveContent.js +0 -0
  7. data/{charts → examples/charts/public/charts}/charts.swf +0 -0
  8. data/{charts → examples/charts/public/charts}/charts_library/ar3d.swf +0 -0
  9. data/{charts → examples/charts/public/charts}/charts_library/arno.swf +0 -0
  10. data/{charts → examples/charts/public/charts}/charts_library/ars3.swf +0 -0
  11. data/{charts → examples/charts/public/charts}/charts_library/arst.swf +0 -0
  12. data/{charts → examples/charts/public/charts}/charts_library/brfl.swf +0 -0
  13. data/{charts → examples/charts/public/charts}/charts_library/brno.swf +0 -0
  14. data/{charts → examples/charts/public/charts}/charts_library/brst.swf +0 -0
  15. data/{charts → examples/charts/public/charts}/charts_library/buno.swf +0 -0
  16. data/{charts → examples/charts/public/charts}/charts_library/cl3d.swf +0 -0
  17. data/{charts → examples/charts/public/charts}/charts_library/clfl.swf +0 -0
  18. data/{charts → examples/charts/public/charts}/charts_library/clim.swf +0 -0
  19. data/{charts → examples/charts/public/charts}/charts_library/clno.swf +0 -0
  20. data/{charts → examples/charts/public/charts}/charts_library/clp3.swf +0 -0
  21. data/{charts → examples/charts/public/charts}/charts_library/cls3.swf +0 -0
  22. data/{charts → examples/charts/public/charts}/charts_library/clst.swf +0 -0
  23. data/{charts → examples/charts/public/charts}/charts_library/cnno.swf +0 -0
  24. data/{charts → examples/charts/public/charts}/charts_library/dono.swf +0 -0
  25. data/{charts → examples/charts/public/charts}/charts_library/lnno.swf +0 -0
  26. data/{charts → examples/charts/public/charts}/charts_library/mxno.swf +0 -0
  27. data/{charts → examples/charts/public/charts}/charts_library/pi3d.swf +0 -0
  28. data/{charts → examples/charts/public/charts}/charts_library/piim.swf +0 -0
  29. data/{charts → examples/charts/public/charts}/charts_library/pino.swf +0 -0
  30. data/{charts → examples/charts/public/charts}/charts_library/pono.swf +0 -0
  31. data/{charts → examples/charts/public/charts}/charts_library/scno.swf +0 -0
  32. data/{charts → examples/charts/public/charts}/full_screen.swf +0 -0
  33. data/{charts → examples/charts/public/charts}/scripts/output_jpg.php +0 -0
  34. data/{charts → examples/charts/public/charts}/sliders/black.swf +0 -0
  35. data/{charts → examples/charts/public/charts}/sliders/preview_handle_1.swf +0 -0
  36. data/{charts → examples/charts/public/charts}/sliders/preview_handle_2.swf +0 -0
  37. data/examples/charts/public/charts/themes/cool_theme/column_chart.yml +150 -0
  38. data/{charts → examples/charts/public/charts}/themes/readme.txt +0 -0
  39. data/examples/charts/views/index.erb +12 -0
  40. data/examples/maps/basic_map.rb +72 -0
  41. data/examples/maps/helpers/map_helper.rb +15 -0
  42. data/examples/maps/models/confidential_herpes_report.rb +78 -0
  43. data/examples/maps/public/javascripts/jquery-1.3.2.js +4376 -0
  44. data/examples/maps/public/map.xml +336 -0
  45. data/examples/maps/public/maps/js/Exception.js +45 -0
  46. data/examples/maps/public/maps/js/FlashProxy.js +72 -0
  47. data/examples/maps/public/maps/js/FlashSerializer.js +165 -0
  48. data/examples/maps/public/maps/js/FlashTag.js +111 -0
  49. data/examples/maps/public/maps/js/JavaScriptFlashGateway.js +455 -0
  50. data/examples/maps/public/maps/js/JavaScriptFlashGateway.swf +0 -0
  51. data/examples/maps/public/maps/map_library/australia.swf +0 -0
  52. data/examples/maps/public/maps/map_library/belgium.swf +0 -0
  53. data/examples/maps/public/maps/map_library/brazil.swf +0 -0
  54. data/examples/maps/public/maps/map_library/canada.swf +0 -0
  55. data/examples/maps/public/maps/map_library/europe.swf +0 -0
  56. data/examples/maps/public/maps/map_library/france.swf +0 -0
  57. data/examples/maps/public/maps/map_library/germany.swf +0 -0
  58. data/examples/maps/public/maps/map_library/italy.swf +0 -0
  59. data/examples/maps/public/maps/map_library/mexico.swf +0 -0
  60. data/examples/maps/public/maps/map_library/sweden.swf +0 -0
  61. data/examples/maps/public/maps/map_library/uk_ireland.swf +0 -0
  62. data/examples/maps/public/maps/map_library/us.swf +0 -0
  63. data/examples/maps/public/maps/map_library/us_canada.swf +0 -0
  64. data/examples/maps/public/maps/map_library/world.swf +0 -0
  65. data/examples/maps/public/maps/themes/default/base_map.yml +27 -0
  66. data/examples/maps/public/maps/themes/default/us_map.yml +20 -0
  67. data/examples/maps/public/maps/themes/default/us_map_2.yml +17 -0
  68. data/examples/maps/public/maps/themes/readme.txt +13 -0
  69. data/examples/maps/public/stylesheets/map.css +16 -0
  70. data/examples/maps/views/index.erb +26 -0
  71. data/examples/maps/views/layout.erb +21 -0
  72. data/lib/ziya/charts/base.rb +15 -14
  73. data/lib/ziya/{components → charts/support}/area.rb +2 -2
  74. data/lib/ziya/{components → charts/support}/axis_category.rb +1 -1
  75. data/lib/ziya/{components → charts/support}/axis_ticks.rb +1 -1
  76. data/lib/ziya/{components → charts/support}/axis_value.rb +1 -1
  77. data/lib/ziya/{components → charts/support}/base.rb +9 -21
  78. data/lib/ziya/{components → charts/support}/bevel.rb +1 -1
  79. data/lib/ziya/{components → charts/support}/blur.rb +1 -1
  80. data/lib/ziya/{components → charts/support}/button.rb +1 -1
  81. data/lib/ziya/{components → charts/support}/chart_border.rb +1 -1
  82. data/lib/ziya/{components → charts/support}/chart_grid_h.rb +1 -1
  83. data/lib/ziya/{components → charts/support}/chart_grid_v.rb +1 -1
  84. data/lib/ziya/{components → charts/support}/chart_guide.rb +1 -1
  85. data/lib/ziya/{components → charts/support}/chart_label.rb +1 -1
  86. data/lib/ziya/{components → charts/support}/chart_note.rb +1 -1
  87. data/lib/ziya/{components → charts/support}/chart_pref.rb +1 -1
  88. data/lib/ziya/{components → charts/support}/chart_rect.rb +1 -1
  89. data/lib/ziya/{components → charts/support}/chart_transition.rb +1 -1
  90. data/lib/ziya/{components → charts/support}/circle.rb +1 -1
  91. data/lib/ziya/{components → charts/support}/context_menu.rb +1 -3
  92. data/lib/ziya/{components → charts/support}/draw.rb +31 -8
  93. data/lib/ziya/{components → charts/support}/draw_base.rb +1 -1
  94. data/lib/ziya/{components → charts/support}/filter.rb +1 -1
  95. data/lib/ziya/{components → charts/support}/flash_to_javascript.rb +1 -3
  96. data/lib/ziya/{components → charts/support}/glow.rb +1 -1
  97. data/lib/ziya/{components → charts/support}/image.rb +1 -1
  98. data/lib/ziya/{components → charts/support}/legend.rb +1 -1
  99. data/lib/ziya/{components → charts/support}/line.rb +1 -1
  100. data/lib/ziya/{components → charts/support}/link.rb +1 -1
  101. data/lib/ziya/{components → charts/support}/link_data.rb +1 -1
  102. data/lib/ziya/{components → charts/support}/rect.rb +1 -1
  103. data/lib/ziya/{components → charts/support}/scroll.rb +1 -3
  104. data/lib/ziya/{components → charts/support}/series.rb +1 -3
  105. data/lib/ziya/{components → charts/support}/series_color.rb +1 -1
  106. data/lib/ziya/{components → charts/support}/series_explode.rb +1 -1
  107. data/lib/ziya/{components → charts/support}/shadow.rb +1 -1
  108. data/lib/ziya/{components → charts/support}/text.rb +9 -1
  109. data/lib/ziya/{components → charts/support}/tooltip.rb +1 -1
  110. data/lib/ziya/{components → charts/support}/update.rb +1 -1
  111. data/lib/ziya/core_ext/string.rb +31 -0
  112. data/lib/ziya/gauges/base.rb +17 -12
  113. data/lib/ziya/gauges/support/base.rb +4 -12
  114. data/lib/ziya/gauges/support/radial_numbers.rb +1 -1
  115. data/lib/ziya/html_helpers/base.rb +91 -0
  116. data/lib/ziya/html_helpers/charts.rb +200 -0
  117. data/lib/ziya/html_helpers/gauges.rb +90 -0
  118. data/lib/ziya/html_helpers/maps.rb +74 -0
  119. data/lib/ziya/html_helpers.rb +1 -0
  120. data/lib/ziya/maps/australia.rb +9 -0
  121. data/lib/ziya/maps/base.rb +409 -0
  122. data/lib/ziya/maps/belgium.rb +7 -0
  123. data/lib/ziya/maps/brazil.rb +7 -0
  124. data/lib/ziya/maps/canada.rb +7 -0
  125. data/lib/ziya/maps/europe.rb +7 -0
  126. data/lib/ziya/maps/france.rb +7 -0
  127. data/lib/ziya/maps/geocode.rb +18 -0
  128. data/lib/ziya/maps/germany.rb +7 -0
  129. data/lib/ziya/maps/italy.rb +7 -0
  130. data/lib/ziya/maps/mexico.rb +7 -0
  131. data/lib/ziya/maps/support/arc.rb +7 -0
  132. data/lib/ziya/maps/support/arc_color.rb +7 -0
  133. data/lib/ziya/maps/support/arc_range.rb +7 -0
  134. data/lib/ziya/maps/support/background_color.rb +7 -0
  135. data/lib/ziya/maps/support/base.rb +34 -0
  136. data/lib/ziya/maps/support/default_color.rb +7 -0
  137. data/lib/ziya/maps/support/default_point.rb +7 -0
  138. data/lib/ziya/maps/support/first_zoom.rb +7 -0
  139. data/lib/ziya/maps/support/heat_range.rb +35 -0
  140. data/lib/ziya/maps/support/hover.rb +7 -0
  141. data/lib/ziya/maps/support/line.rb +7 -0
  142. data/lib/ziya/maps/support/line_color.rb +7 -0
  143. data/lib/ziya/maps/support/line_range.rb +7 -0
  144. data/lib/ziya/maps/support/outline_color.rb +7 -0
  145. data/lib/ziya/maps/support/point.rb +8 -0
  146. data/lib/ziya/maps/support/point_range.rb +7 -0
  147. data/lib/ziya/maps/support/range.rb +31 -0
  148. data/lib/ziya/maps/support/ranges.rb +18 -0
  149. data/lib/ziya/maps/support/region.rb +7 -0
  150. data/lib/ziya/maps/support/scale_points.rb +7 -0
  151. data/lib/ziya/maps/support/show_name.rb +7 -0
  152. data/lib/ziya/maps/support/state.rb +7 -0
  153. data/lib/ziya/maps/support/state_info_icon.rb +7 -0
  154. data/lib/ziya/maps/support/zoom_mode.rb +7 -0
  155. data/lib/ziya/maps/support/zoom_out_button.rb +7 -0
  156. data/lib/ziya/maps/support/zoom_out_scale.rb +7 -0
  157. data/lib/ziya/maps/sweden.rb +7 -0
  158. data/lib/ziya/maps/uk.rb +7 -0
  159. data/lib/ziya/maps/us.rb +7 -0
  160. data/lib/ziya/maps/world.rb +7 -0
  161. data/lib/ziya/version.rb +3 -3
  162. data/lib/ziya/yaml_helpers/base.rb +20 -0
  163. data/lib/ziya/yaml_helpers/charts.rb +49 -0
  164. data/lib/ziya/yaml_helpers/gauges.rb +33 -0
  165. data/lib/ziya/yaml_helpers/maps.rb +17 -0
  166. data/lib/ziya/yaml_helpers.rb +1 -0
  167. data/lib/ziya.rb +20 -11
  168. data/resources/charts/AC_RunActiveContent.js +292 -0
  169. data/resources/charts/charts.swf +0 -0
  170. data/resources/charts/charts_library/ar3d.swf +0 -0
  171. data/resources/charts/charts_library/arno.swf +0 -0
  172. data/resources/charts/charts_library/ars3.swf +0 -0
  173. data/resources/charts/charts_library/arst.swf +0 -0
  174. data/resources/charts/charts_library/brfl.swf +0 -0
  175. data/resources/charts/charts_library/brno.swf +0 -0
  176. data/resources/charts/charts_library/brst.swf +0 -0
  177. data/resources/charts/charts_library/buno.swf +0 -0
  178. data/resources/charts/charts_library/cl3d.swf +0 -0
  179. data/resources/charts/charts_library/clfl.swf +0 -0
  180. data/resources/charts/charts_library/clim.swf +0 -0
  181. data/resources/charts/charts_library/clno.swf +0 -0
  182. data/resources/charts/charts_library/clp3.swf +0 -0
  183. data/resources/charts/charts_library/cls3.swf +0 -0
  184. data/resources/charts/charts_library/clst.swf +0 -0
  185. data/resources/charts/charts_library/cnno.swf +0 -0
  186. data/resources/charts/charts_library/dono.swf +0 -0
  187. data/resources/charts/charts_library/lnno.swf +0 -0
  188. data/resources/charts/charts_library/mxno.swf +0 -0
  189. data/resources/charts/charts_library/pi3d.swf +0 -0
  190. data/resources/charts/charts_library/piim.swf +0 -0
  191. data/resources/charts/charts_library/pino.swf +0 -0
  192. data/resources/charts/charts_library/pono.swf +0 -0
  193. data/resources/charts/charts_library/scno.swf +0 -0
  194. data/resources/charts/full_screen.swf +0 -0
  195. data/resources/charts/scripts/output_jpg.php +23 -0
  196. data/resources/charts/sliders/black.swf +0 -0
  197. data/resources/charts/sliders/preview_handle_1.swf +0 -0
  198. data/resources/charts/sliders/preview_handle_2.swf +0 -0
  199. data/resources/charts/themes/readme.txt +13 -0
  200. data/{gauges → resources/gauges}/designs/circle.yml +0 -0
  201. data/{gauges → resources/gauges}/designs/signal.yml +0 -0
  202. data/{gauges → resources/gauges}/designs/thermo.yml +0 -0
  203. data/{gauges → resources/gauges}/designs/title.yml +0 -0
  204. data/{gauges → resources/gauges}/gauge.swf +0 -0
  205. data/resources/maps/js/Exception.js +45 -0
  206. data/resources/maps/js/FlashProxy.js +72 -0
  207. data/resources/maps/js/FlashSerializer.js +165 -0
  208. data/resources/maps/js/FlashTag.js +111 -0
  209. data/resources/maps/js/JavaScriptFlashGateway.js +455 -0
  210. data/resources/maps/js/JavaScriptFlashGateway.swf +0 -0
  211. data/resources/maps/map_library/australia.swf +0 -0
  212. data/resources/maps/map_library/belgium.swf +0 -0
  213. data/resources/maps/map_library/brazil.swf +0 -0
  214. data/resources/maps/map_library/canada.swf +0 -0
  215. data/resources/maps/map_library/europe.swf +0 -0
  216. data/resources/maps/map_library/france.swf +0 -0
  217. data/resources/maps/map_library/germany.swf +0 -0
  218. data/resources/maps/map_library/italy.swf +0 -0
  219. data/resources/maps/map_library/mexico.swf +0 -0
  220. data/resources/maps/map_library/sweden.swf +0 -0
  221. data/resources/maps/map_library/uk_ireland.swf +0 -0
  222. data/resources/maps/map_library/us.swf +0 -0
  223. data/resources/maps/map_library/us_canada.swf +0 -0
  224. data/resources/maps/map_library/world.swf +0 -0
  225. data/resources/maps/themes/readme.txt +13 -0
  226. data/spec/charts/base_spec.rb +2 -2
  227. data/spec/charts/chart_type_spec.rb +3 -4
  228. data/spec/{components → charts/support}/area_spec.rb +8 -8
  229. data/spec/charts/support/draw_spec.rb +41 -0
  230. data/spec/{components → charts/support}/filter_spec.rb +6 -6
  231. data/spec/{components → charts/support}/link_spec.rb +6 -6
  232. data/spec/{components → charts/support}/series.rb +4 -4
  233. data/spec/{components → charts/support}/series_color_spec.rb +4 -4
  234. data/spec/{components → charts/support}/series_explode.rb +4 -4
  235. data/spec/{components → charts/support}/series_explode_spec.rb +4 -4
  236. data/spec/core_ext/string_spec.rb +40 -0
  237. data/spec/gauges/base_spec.rb +1 -1
  238. data/spec/html_helpers/base_spec.rb +50 -0
  239. data/spec/html_helpers/charts_spec.rb +23 -0
  240. data/spec/html_helpers/gauges_spec.rb +16 -0
  241. data/spec/html_helpers/maps_spec.rb +20 -0
  242. data/spec/maps/base_spec.rb +82 -0
  243. data/spec/maps/support/default_color_spec.rb +29 -0
  244. data/spec/maps/support/heat_range_spec.rb +29 -0
  245. data/spec/maps/us_spec.rb +12 -0
  246. data/spec/maps/world_spec.rb +18 -0
  247. data/spec/spec_helper.rb +5 -4
  248. data/spec/themes/maps/base_map.yml +81 -0
  249. data/spec/themes/maps/us_map.yml +6 -0
  250. data/spec/themes/maps/world_map.yml +6 -0
  251. data/spec/themes/maps/world_ov_map.yml +6 -0
  252. data/spec/{helpers/base_helper_spec.rb → yaml_helpers/charts_spec.rb} +10 -13
  253. data/spec/yaml_helpers/gauges_spec.rb +15 -0
  254. data/spec/ziya_helper_spec.rb +118 -116
  255. data/tasks/gem.rake +1 -1
  256. data/tasks/setup.rb +1 -1
  257. data/ziya.gemspec +39 -0
  258. metadata +259 -438
  259. data/lib/ziya/helpers/base_helper.rb +0 -91
  260. data/lib/ziya/utils/text.rb +0 -39
  261. data/lib/ziya/ziya_helper.rb +0 -362
  262. data/spec/components/draw_spec.rb +0 -37
  263. data/spec/utils/text_spec.rb +0 -33
@@ -0,0 +1,9 @@
1
+ require 'ziya/maps/base'
2
+
3
+ module Ziya::Maps
4
+ class Australia < Ziya::Maps::Base
5
+ def initialize( id=nil )
6
+ super( :australia, id )
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,409 @@
1
+ # -----------------------------------------------------------------------------
2
+ # == Ziya::Maps::Base
3
+ #
4
+ # Maps mother ship
5
+ #
6
+ # Author:: Fernand Galiana
7
+ # Date:: Jan 01 2009
8
+ # -----------------------------------------------------------------------------
9
+ require 'ziya/yaml_helpers/maps'
10
+ require 'ziya/html_helpers/maps'
11
+
12
+ module Ziya::Maps
13
+ class Base
14
+ include Ziya::YamlHelpers::Maps, Ziya::HtmlHelpers::Maps
15
+
16
+ # =========================================================================
17
+ protected
18
+ def self.map_types
19
+ @map_types ||= [
20
+ :australia,
21
+ :belgium,
22
+ :brazil,
23
+ :canada,
24
+ :europe,
25
+ :france,
26
+ :germany,
27
+ :italy,
28
+ :mexico,
29
+ :sweden,
30
+ :uk_ireland,
31
+ :us,
32
+ :us_canada,
33
+ :world ]
34
+ end
35
+
36
+ # defines the various map components
37
+ def self.declare_components # :nodoc:
38
+ @components =
39
+ [
40
+ :arc,
41
+ :arc_color,
42
+ :arc_range,
43
+ :background_color,
44
+ :default_color,
45
+ :default_point,
46
+ :first_zoom,
47
+ :hover,
48
+ :heat_range,
49
+ :line,
50
+ :line_color,
51
+ :line_range,
52
+ :outline_color,
53
+ :point,
54
+ :point_range,
55
+ :ranges,
56
+ :range,
57
+ :region,
58
+ :scale_points,
59
+ :show_name,
60
+ :state,
61
+ :state_info_icon,
62
+ :zoom_mode,
63
+ :zoom_out_button,
64
+ :zoom_out_scale
65
+ ]
66
+ @components.each { |a| attr_accessor a }
67
+ end
68
+ declare_components
69
+
70
+
71
+ # =========================================================================
72
+ public
73
+
74
+ attr_accessor :id, :theme, :options # :nodoc:
75
+ attr_reader :map_type # :nodoc:
76
+
77
+ # create a new map.
78
+ # <tt>chart_id</tt> -- the name of the map stylesheet.
79
+ # NOTE: If map_id is specified the framework will attempt to load the map styles
80
+ # from public/maps/themes/theme_name/map_id.yml
81
+ def initialize( map_type, map_id=nil ) # :nodoc:
82
+ raise "Invalid map type '#{map_type.inspect}'" unless Ziya::Maps::Base.map_types.include?( map_type )
83
+ @id = map_id
84
+ @options = @series = @points = @arcs = @lines = {}
85
+ @line_colors = @range_colors = @point_colors = @arc_colors = {}
86
+ @theme = default_theme
87
+ @map_type = map_type
88
+ initialize_components
89
+ load_helpers( Ziya.helpers_dir ) if Ziya.helpers_dir
90
+ end
91
+
92
+ # class component accessor...
93
+ def self.components # :nodoc:
94
+ @components
95
+ end
96
+
97
+ # default ZiYa theme
98
+ def default_theme # :nodoc:
99
+ File.join( Ziya.map_themes_dir, %w[default] )
100
+ end
101
+
102
+ # load up ERB style helpers
103
+ def load_helpers( helper_dir ) # :nodoc:
104
+ Dir.foreach(helper_dir) do |helper_file|
105
+ next unless helper_file =~ /^([a-z][a-z_]*_helper).rb$/
106
+ Ziya.logger.debug( ">>> ZiYa loading custom helper `#{$1}" )
107
+ # check rails env for autoloader ?
108
+ if defined?(RAILS_ROOT)
109
+ require_dependency File.join(helper_dir, $1)
110
+ else
111
+ require File.join(helper_dir, $1)
112
+ end
113
+ helper_module_name = "Ziya::" + $1.gsub(/(^|_)(.)/) { $2.upcase }
114
+ # helper_module_name = $1.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
115
+ # if Ziya::Helpers.const_defined?(helper_module_name)
116
+ Ziya.logger.debug( "Include module #{helper_module_name}")
117
+ Ziya::Maps::Base.class_eval("include #{helper_module_name}")
118
+ # end
119
+ end
120
+ end
121
+
122
+ # Add chart components to a given chart.
123
+ #
124
+ # The <tt>args</tt> must contain certain keys for the chart
125
+ # to be displayed correctly.
126
+ #
127
+ # === Directives
128
+ # * <tt>:series</tt> -- Specifies the data points for the map. This must be a hash
129
+ # of region, data pairs. Where the data is also a hash of attributes such as
130
+ # :name, :data, :hover, :url and :target.
131
+ # * <tt>:range_colors</tt> -- Specifies the map of ranges of data values from the
132
+ # series to a color on the map. The range may be an exact value such as 10 or an
133
+ # actual range in the form of 1 - 10. The color must be an hexadecimal value of the
134
+ # form 'ff00ff'.
135
+ # * <tt>:point_colors</tt> -- Specifies a map of valid color ranges to color the points
136
+ # on the map. Valid key/value pairs are a number or range for the key and an
137
+ # associated color.
138
+ # * <tt>:arc_colors</tt> -- Specifies a map of valid color ranges to color the arcs
139
+ # on the map. Valid key/value pairs are a number or range for the key and an
140
+ # associated color.
141
+ # * <tt>:line_colors</tt> -- Specifies a map of valid color ranges to color the lines
142
+ # on the map. Valid key/value pairs are a number or range for the key and an
143
+ # associated color.
144
+ # * <tt>:lines</tt> -- Specifies a map of lines to plot on the map. These are key/value pairs.
145
+ # The value represent the name of the line to be displayed. The value is a hash of attributes
146
+ # as follows: :start, the geocode location of the point, :stop, the geocode location of the arc to end at
147
+ # :stroke, the thickness of the line and :data for the range value of the arc.
148
+ # * <tt>:arcs</tt> -- Specifies a map of arcs to plot on the map. These are key/value pairs.
149
+ # The value represent the name of the arc to be displayed. The value is a hash of attributes
150
+ # as follows: :start, the geocode location of the point, :stop, the geocode location of the arc to end at
151
+ # and :data for the range value of the arc.
152
+ # * <tt>:points</tt> -- Specifies a map of points to plot on the map. These are key/value pairs.
153
+ # The value represent the name of the point to be displayed. The value is a hash of attributes
154
+ # as follows: :loc for the geocode location of the point and :data for the range value of the point.
155
+ # * <tt>:theme</tt> -- Specify the use of a given named theme. The named theme must
156
+ # reside in a directory named equaly under your application public/charts/themes.
157
+ #
158
+ # === Examples
159
+ # Colorize colorado and california on a US map
160
+ # my_map.add( :series, { :CO => { :name => "Colorado", :data => 1 }, :CA => { :name => "California", :data => 2 } )
161
+ def add( *args )
162
+ # TODO Validation categories = series, series = labels, etc...
163
+ directive = args.shift
164
+ case directive
165
+ when :series
166
+ if args.first.is_a?( Hash )
167
+ points = args.shift || {}
168
+ raise ArgumentError, "Must specify an hash of data points" if points.empty?
169
+ @series = points
170
+ else
171
+ raise ArgumentError, "Must specify an hash of data points"
172
+ end
173
+ when :range_colors
174
+ @range_colors = args.shift || {}
175
+ raise ArgumentError, "You must specify a hash of data range/color pairs" if @range_colors.empty?
176
+ when :lines
177
+ @lines = args.shift || {}
178
+ raise ArgumentError, "You must specify a hash of lines attributes" if @lines.empty?
179
+ when :line_colors
180
+ @line_colors = args.shift || {}
181
+ raise ArgumentError, "You must specify a hash of line range/color pairs" if @line_colors.empty?
182
+ when :arcs
183
+ @arcs = args.shift || {}
184
+ raise ArgumentError, "You must specify a hash of arcs attributes" if @arcs.empty?
185
+ when :arc_colors
186
+ @arc_colors = args.shift || {}
187
+ raise ArgumentError, "You must specify a hash of arc range/color pairs" if @arc_colors.empty?
188
+ when :points
189
+ @points = args.shift || {}
190
+ raise ArgumentError, "You must specify a hash of points attributes" if @points.empty?
191
+ when :point_colors
192
+ @point_colors = args.shift || {}
193
+ raise ArgumentError, "You must specify a hash of point range/color pairs" if @point_colors.empty?
194
+ when :user_data
195
+ key = args.first.is_a?(Symbol) ? args.shift : ""
196
+ raise ArgumentError, "Must specify a key" if key.to_s.empty?
197
+ value = args.shift
198
+ # raise ArgumentError, "Must specify a value" if value.empty?
199
+ @options[key] = value
200
+ when :theme
201
+ theme = args.first.is_a?(String) ? args.shift : ""
202
+ raise ArgumentError, "Must specify a theme name" if theme.to_s.empty?
203
+ @theme = "#{Ziya.map_themes_dir}/#{theme}"
204
+ else raise ArgumentError, "Invalid directive must be one of " +
205
+ ":series, :theme, :user_data"
206
+ end
207
+ end
208
+
209
+ # spews the map specification to a string
210
+ def to_s
211
+ @xml = Builder::XmlMarkup.new
212
+ # Forces utf8 encoding on xml stream
213
+ @xml.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
214
+ if map_type == :us
215
+ @xml.us_states do
216
+ setup_lnf
217
+ setup_series
218
+ end
219
+ else
220
+ @xml.countrydata do
221
+ setup_lnf
222
+ setup_series
223
+ end
224
+ end
225
+ @xml.to_s.gsub( /<to_s\/>/, '' )
226
+ end
227
+ # dumps the map design to xml for client side consumption
228
+ alias to_xml to_s
229
+
230
+ # =========================================================================
231
+ private
232
+
233
+ # inflate object state based on object hierarchy
234
+ def setup_state( state )
235
+ override = self.class.name == state.class.name
236
+ Base.components.each do |comp|
237
+ instance_eval "#{comp}.merge( state.#{comp}, override ) unless state.#{comp}.nil?"
238
+ end
239
+ end
240
+
241
+ # load yaml file associated with class if any
242
+ def inflate( clazz, theme, instance=nil )
243
+ class_name = clazz.to_s.gsub( /Ziya::Maps/, '' ).underscore.gsub( /\//, '' )
244
+ class_name += '_map' unless class_name.match( /.?_map$/ )
245
+ begin
246
+ file_name = "#{theme}/#{class_name}"
247
+ file_name = "#{theme}/#{instance}" unless instance.nil?
248
+ Ziya.logger.debug ">>> Ziya attempt to load map stylesheet file '#{file_name}"
249
+ yml = IO.read( "#{file_name}.yml" )
250
+ processed = erb_render( yml )
251
+ # puts ">>> Processed yaml", processed
252
+ load = YAML::load( processed )
253
+ Ziya.logger.debug ">>> ZiYa [loading map styles] -- #{file_name}.yml"
254
+ # puts load.inspect
255
+ return load
256
+ rescue SystemCallError => boom
257
+ Ziya.logger.debug "ERROR #{boom}"
258
+ ; # ignore if no style file...
259
+ rescue => bang
260
+ Ziya.logger.debug ">>> ZiYa -- Error encountered loading map file `#{file_name} -- #{bang}"
261
+ bang.backtrace.each { |l| Ziya.logger.debug( l ) }
262
+ end
263
+ nil
264
+ end
265
+
266
+ # parse erb template if any
267
+ def erb_render(fixture_content)
268
+ b = binding
269
+ ERB.new(fixture_content).result b
270
+ end
271
+
272
+ # lay down the map data points and color ranges
273
+ def setup_series
274
+ @series.keys.sort{ |a,b| a.to_s <=> b.to_s }.each do |s|
275
+ hash = @series[s]
276
+ @xml.state( :id => s ) do |xml|
277
+ hash.keys.sort{ |a,b| a.to_s <=> b.to_s}.each do |k|
278
+ self.class.module_eval "xml.#{k}( '#{hash[k]}' )"
279
+ end
280
+ end
281
+ end
282
+
283
+ # lay down points if any?
284
+ @points.keys.sort.each do |name|
285
+ @xml.state( :id => "point" ) do |xml|
286
+ xml.name( name )
287
+ @points[name].keys.sort { |a,b| a.to_s <=> b.to_s }.each do |attr|
288
+ self.class.module_eval "xml.#{attr}( '#{@points[name][attr]}' )"
289
+ end
290
+ end
291
+ end
292
+
293
+ # lay down points if any?
294
+ @lines.keys.sort.each do |name|
295
+ @xml.state( :id => "line" ) do |xml|
296
+ xml.name( name )
297
+ @lines[name].keys.sort { |a,b| a.to_s <=> b.to_s }.each do |attr|
298
+ self.class.module_eval "xml.#{attr}( '#{@lines[name][attr]}' )"
299
+ end
300
+ end
301
+ end
302
+
303
+ @arcs.keys.sort.each do |name|
304
+ @xml.state( :id => "arc" ) do |xml|
305
+ xml.name( name )
306
+ @arcs[name].keys.sort { |a,b| a.to_s <=> b.to_s }.each do |attr|
307
+ self.class.module_eval "xml.#{attr}( '#{@arcs[name][attr]}' )"
308
+ end
309
+ end
310
+ end
311
+
312
+ # lay down range colors if any
313
+ unless @range_colors.empty?
314
+ @range_colors.each_pair do |range, color|
315
+ @xml.state( :id => 'range' ) do
316
+ @xml.data( range )
317
+ @xml.color( color )
318
+ end
319
+ end
320
+ end
321
+
322
+ # lay down point range colors if any
323
+ unless @point_colors.empty?
324
+ @point_colors.each_pair do |range, color|
325
+ @xml.state( :id => 'point_range' ) do
326
+ @xml.data( range )
327
+ @xml.color( color )
328
+ end
329
+ end
330
+ end
331
+
332
+ # lay down line range colors if any
333
+ unless @line_colors.empty?
334
+ @line_colors.each_pair do |range, color|
335
+ @xml.state( :id => 'line_range' ) do
336
+ @xml.data( range )
337
+ @xml.color( color )
338
+ end
339
+ end
340
+ end
341
+
342
+ # lay down arc range colors if any
343
+ unless @arc_colors.empty?
344
+ @arc_colors.each_pair do |range, color|
345
+ @xml.state( :id => 'arc_range' ) do
346
+ @xml.data( range )
347
+ @xml.color( color )
348
+ end
349
+ end
350
+ end
351
+
352
+ end
353
+
354
+ # walk up class hierarchy to find chart inheritance classes
355
+ def ancestors
356
+ ancestors = self.class.ancestors.reverse
357
+ allow = false
358
+ ancestors.map do |k|
359
+ allow = true if k == Ziya::Maps::Base
360
+ k if allow
361
+ end.compact!
362
+ end
363
+
364
+ # load up look and feel data
365
+ def load_lnf
366
+ unless @partial
367
+ ancestors.each do |super_class|
368
+ # Load class instance prefs
369
+ if ( super_class == self.class )
370
+ o = inflate( super_class, theme )
371
+ setup_state( o ) unless o.nil?
372
+ # Now load instance prefs if any
373
+ unless id.nil?
374
+ o = inflate( super_class, theme, id )
375
+ setup_state( o ) unless o.nil?
376
+ end
377
+ # Otherwise load parent prefs...
378
+ else
379
+ o = inflate( super_class, theme, nil )
380
+ setup_state( o ) unless o.nil?
381
+ end
382
+ end
383
+ end
384
+ # Additional styles specified ? if so load them
385
+ unless @options[:styles].nil?
386
+ o = YAML::load( erb_render( @options[:styles] ) )
387
+ setup_state( o ) unless o.nil?
388
+ end
389
+ end
390
+
391
+ # generates xml for look and feel data
392
+ def setup_lnf
393
+ load_lnf
394
+ Base.components.sort { |a,b| a.to_s <=> b.to_s }.each do |comp|
395
+ next unless self.send( comp ).configured?
396
+ instance_eval "#{comp}.flatten( @xml )"
397
+ end
398
+ end
399
+
400
+ # load up the allowable map components
401
+ def initialize_components
402
+ # Setup instance vars
403
+ Base.components.each do |comp|
404
+ instance_var = lambda { |v| self.instance_eval{ instance_variable_set "@#{comp}", v } }
405
+ instance_var.call(Ziya::Maps::Support.const_get( comp.to_s.classify ).new)
406
+ end
407
+ end
408
+ end
409
+ end
@@ -0,0 +1,7 @@
1
+ module Ziya::Maps
2
+ class Belgium < Ziya::Maps::Base
3
+ def initialize( id=nil )
4
+ super( :belgium, id )
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Ziya::Maps
2
+ class Brazil < Ziya::Maps::Base
3
+ def initialize( id=nil )
4
+ super( :brazil, id )
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Ziya::Maps
2
+ class Canada < Ziya::Maps::Base
3
+ def initialize( id=nil )
4
+ super( :canada, id )
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Ziya::Maps
2
+ class Europe < Ziya::Maps::Base
3
+ def initialize( id=nil )
4
+ super( :europe, id )
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Ziya::Maps
2
+ class France < Ziya::Maps::Base
3
+ def initialize( id=nil )
4
+ super( :france, id )
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+ # -----------------------------------------------------------------------------
2
+ # Geocode representations
3
+ #
4
+ # Author: Fernand
5
+ # -----------------------------------------------------------------------------
6
+ module Ziya::Maps
7
+ class Geocode
8
+ attr_reader :long, :lat
9
+
10
+ def initialize( lat, long )
11
+ @lat, @long = lat, long
12
+ end
13
+
14
+ def to_s
15
+ "#{lat},#{long}"
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ module Ziya::Maps
2
+ class Germany < Ziya::Maps::Base
3
+ def initialize( id=nil )
4
+ super( :germany, id )
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Ziya::Maps
2
+ class Italy < Ziya::Maps::Base
3
+ def initialize( id=nil )
4
+ super( :italy, id )
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Ziya::Maps
2
+ class Mexico < Ziya::Maps::Base
3
+ def initialize( id=nil )
4
+ super( :mexico, id )
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'ziya/maps/support/base'
2
+
3
+ module Ziya::Maps::Support
4
+ class Arc < Base
5
+ has_attribute :name, :start, :stop, :stroke, :data
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'ziya/maps/support/base'
2
+
3
+ module Ziya::Maps::Support
4
+ class ArcColor < Base
5
+ has_attribute :color, :opacity
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'ziya/maps/support/base'
2
+
3
+ module Ziya::Maps::Support
4
+ class ArcRange < Base
5
+ has_attribute :color, :data
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'ziya/maps/support/base'
2
+
3
+ module Ziya::Maps::Support
4
+ class BackgroundColor < Base
5
+ has_attribute :color, :opacity
6
+ end
7
+ end
@@ -0,0 +1,34 @@
1
+ require 'ziya/yaml_helpers/gauges'
2
+
3
+ module Ziya::Maps::Support
4
+ class Base < Ziya::Charts::Support::Base
5
+ include Ziya::YamlHelpers::Gauges
6
+
7
+ # flatten component to xml
8
+ def flatten( xml )
9
+ xml.state( :id => to_component_id ) do |b|
10
+ options.keys.sort { |a,b| a.to_s <=> b.to_s }.each{ |k| self.class.module_eval "xml.#{k}( '#{options[k]}' )" }
11
+ end
12
+ end
13
+
14
+ # -----------------------------------------------------------------------
15
+ # converts component to yaml style component for yaml parser consumption
16
+ def to_comp_yaml( indent_multiplier=1 )
17
+ buff = []
18
+ tab = indent( indent_multiplier )
19
+ buff << "#{dial( self.class.name.demodulize, name )}"
20
+ options.each_pair do |k,v|
21
+ buff << "#{tab}#{k}: #{v}" if options[k] and !options[k].to_s.empty?
22
+ end
23
+ buff.join( "\n" )
24
+ end
25
+
26
+ protected
27
+
28
+ # converts class name to underscore name
29
+ def to_component_id
30
+ class_name = self.class.name.underscore.split( "/" ).last
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,7 @@
1
+ require 'ziya/maps/support/base'
2
+
3
+ module Ziya::Maps::Support
4
+ class DefaultColor < Base
5
+ has_attribute :color, :opacity
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'ziya/maps/support/base'
2
+
3
+ module Ziya::Maps::Support
4
+ class DefaultPoint < Base
5
+ has_attribute :color, :size, :src, :opacity
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'ziya/maps/support/base'
2
+
3
+ module Ziya::Maps::Support
4
+ class FirstZoom < Base
5
+ has_attribute :data
6
+ end
7
+ end
@@ -0,0 +1,35 @@
1
+ require 'ziya/maps/support/base'
2
+ require 'color'
3
+
4
+ module Ziya::Maps::Support
5
+ class HeatRange < Base
6
+ has_attribute :base_color, :min, :max, :step, :color_step, :color_method
7
+
8
+ def flatten( xml )
9
+ ranges = compute_ranges
10
+ ranges.each_pair do |range, color|
11
+ xml.state( :id => 'range' ) do
12
+ xml.data( range )
13
+ xml.color( color )
14
+ end
15
+ end
16
+ end
17
+
18
+ # -------------------------------------------------------------------------
19
+ private
20
+
21
+ # Compute heat color ranges
22
+ def compute_ranges
23
+ ranges = {}
24
+ color = Color::RGB.from_html( base_color )
25
+ current = min
26
+
27
+ while current < max do
28
+ ranges["#{current} - #{current+step-1}" ] = color.html.gsub( /#/, '' )
29
+ color = color.send( color_method || :darken_by, color_step )
30
+ current += step
31
+ end
32
+ ranges
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,7 @@
1
+ require 'ziya/maps/support/base'
2
+
3
+ module Ziya::Maps::Support
4
+ class Hover < Base
5
+ has_attribute :font_size, :font_color, :background_color
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'ziya/maps/support/base'
2
+
3
+ module Ziya::Maps::Support
4
+ class Line < Base
5
+ has_attribute :name, :start, :stop, :stroke, :data
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'ziya/maps/support/base'
2
+
3
+ module Ziya::Maps::Support
4
+ class LineColor < Base
5
+ has_attribute :color, :opacity
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'ziya/maps/support/base'
2
+
3
+ module Ziya::Maps::Support
4
+ class LineRange < Base
5
+ has_attribute :color, :data
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'ziya/maps/support/base'
2
+
3
+ module Ziya::Maps::Support
4
+ class OutlineColor < Base
5
+ has_attribute :color, :opacity
6
+ end
7
+ end