Class: GViz::Data
- Inherits:
-
Object
- Object
- GViz::Data
- Defined in:
- lib/g_viz/data.rb
Class Method Summary collapse
Instance Method Summary collapse
- #columns ⇒ Object
- #data_name ⇒ Object
- #import_data_types ⇒ Object
-
#initialize(data, map) ⇒ Data
constructor
A new instance of Data.
- #rows_hash(prune = false) ⇒ Object
- #size ⇒ Object
- #to_json ⇒ Object
Constructor Details
#initialize(data, map) ⇒ Data
Returns a new instance of Data.
4 5 6 7 8 9 |
# File 'lib/g_viz/data.rb', line 4 def initialize(data, map) @map = map @data = data @data_type = {} import_data_types end |
Class Method Details
.google_data_type(value) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/g_viz/data.rb', line 60 def google_data_type(value) if value.is_a?(Numeric) data_type = 'number' elsif value.is_a?(Date) data_type = 'date' elsif value.is_a?(DateTime) || value.is_a?(Time) data_type = 'datetime' elsif value.respond_to?(:to_s) if !value.match(/[^0-9.]/) data_type = 'number' else if (a = Date._parse(value)).size >= 3 if a.size >= 5 data_type = 'datetime' else data_type = 'date' end else data_type = 'string' end end end data_type end |
.ruby_to_js(type, value, prune = false) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/g_viz/data.rb', line 85 def ruby_to_js(type, value, prune = false) return nil if value.nil? && prune return "" if value == "" || value.nil? if type == 'string' value = "#{value}" elsif type == 'date' value = Date.parse(value.to_s) elsif type == 'datetime' value = DateTime.parse(value.to_s) elsif type == 'number' value = value.to_s.match(/\./) ? value.to_f : value.to_i end return value end |
Instance Method Details
#columns ⇒ Object
27 28 29 30 31 |
# File 'lib/g_viz/data.rb', line 27 def columns data = @map.map do |k, v| [@data_type[k], k] end end |
#data_name ⇒ Object
55 56 57 |
# File 'lib/g_viz/data.rb', line 55 def data_name "data_#{@data.object_id}" end |
#import_data_types ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/g_viz/data.rb', line 11 def import_data_types found_data_types = Set.new @data.each do |x| break if found_data_types.size == @map.size @map.each do |k, v| next if found_data_types.member?(k) if x[k] @data_type[k] = self.class.google_data_type(x[k]) found_data_types.add([k,v]) end end end # if there is no data that responds to a mapped value, remove that mapping @map -= (@map - found_data_types.to_a) end |
#rows_hash(prune = false) ⇒ Object
37 38 39 40 41 42 43 44 |
# File 'lib/g_viz/data.rb', line 37 def rows_hash(prune = false) @data.map do |value| @map.inject({}) do |maps, (k, v)| maps[k] = self.class.ruby_to_js(@data_type[k], value[k], prune) maps end end end |
#size ⇒ Object
33 34 35 |
# File 'lib/g_viz/data.rb', line 33 def size @data.size end |
#to_json ⇒ Object
46 47 48 49 50 51 52 53 |
# File 'lib/g_viz/data.rb', line 46 def to_json @json ||= begin { :columns => columns.inject({}){|hash, (k,v)| hash[v] = k; hash}, :data => rows_hash }.to_json end end |