rails-data-explorer 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +10 -0
  3. data/README.md +18 -0
  4. data/doc/how_to/release.md +2 -5
  5. data/lib/rails-data-explorer-no-rails.rb +1 -0
  6. data/lib/rails-data-explorer.rb +5 -0
  7. data/lib/rails-data-explorer/chart.rb +11 -11
  8. data/lib/rails-data-explorer/chart/box_plot_group.rb +10 -3
  9. data/lib/rails-data-explorer/chart/contingency_table.rb +58 -45
  10. data/lib/rails-data-explorer/chart/descriptive_statistics_table.rb +2 -2
  11. data/lib/rails-data-explorer/chart/histogram_categorical.rb +10 -4
  12. data/lib/rails-data-explorer/chart/histogram_quantitative.rb +12 -5
  13. data/lib/rails-data-explorer/chart/histogram_temporal.rb +6 -0
  14. data/lib/rails-data-explorer/chart/parallel_coordinates.rb +4 -4
  15. data/lib/rails-data-explorer/chart/parallel_set.rb +3 -3
  16. data/lib/rails-data-explorer/chart/stacked_bar_chart_categorical_percent.rb +3 -3
  17. data/lib/rails-data-explorer/constants.rb +5 -0
  18. data/lib/rails-data-explorer/data_series.rb +20 -14
  19. data/lib/rails-data-explorer/data_set.rb +4 -0
  20. data/lib/rails-data-explorer/data_type/categorical.rb +84 -72
  21. data/lib/rails-data-explorer/data_type/quantitative.rb +46 -48
  22. data/lib/rails-data-explorer/data_type/quantitative/temporal.rb +23 -17
  23. data/lib/rails-data-explorer/exploration.rb +20 -4
  24. data/lib/rails-data-explorer/statistics/rng_category.rb +1 -1
  25. data/lib/rails-data-explorer/utils/data_binner.rb +20 -10
  26. data/lib/rails-data-explorer/utils/data_quantizer.rb +6 -6
  27. data/lib/rails-data-explorer/utils/rde_table.rb +62 -0
  28. data/lib/rails_data_explorer.rb +35 -20
  29. data/rails-data-explorer.gemspec +1 -1
  30. data/spec/rails-data-explorer/exploration_spec.rb +4 -4
  31. data/spec/rails-data-explorer/utils/data_binner_spec.rb +3 -3
  32. metadata +30 -50
@@ -6,10 +6,10 @@ class RailsDataExplorer
6
6
  def all_available_chart_types
7
7
  [
8
8
  {
9
- :chart_class => Chart::HistogramTemporal,
10
- :chart_roles => [:x],
11
- :dimensions_count_min => 1,
12
- :dimensions_count_max => 1
9
+ chart_class: Chart::HistogramTemporal,
10
+ chart_roles: [:x],
11
+ dimensions_count_min: 1,
12
+ dimensions_count_max: 1
13
13
  },
14
14
  {
15
15
  chart_class: Chart::DescriptiveStatisticsTable,
@@ -22,6 +22,12 @@ class RailsDataExplorer
22
22
  chart_roles: [:dimension],
23
23
  dimensions_count_min: 3,
24
24
  },
25
+ # {
26
+ # chart_class: Chart::StackedHistogramTemporal,
27
+ # chart_roles: [:x],
28
+ # dimensions_count_min: 2,
29
+ # dimensions_count_max: 2,
30
+ # },
25
31
  ].freeze
26
32
  end
27
33
 
@@ -29,24 +35,24 @@ class RailsDataExplorer
29
35
  non_nil_values = values.find_all { |e| !e.nil? }
30
36
  ruby_formatter = Proc.new { |v| v.nil? ? '' : v.strftime('%a, %b %e, %Y, %l:%M:%S %p %Z') }
31
37
  [
32
- { :label => 'Min', :value => non_nil_values.min, :ruby_formatter => ruby_formatter },
33
- { :label => 'Max', :value => non_nil_values.max, :ruby_formatter => ruby_formatter },
34
- { :label => 'Count', :value => values.length, :ruby_formatter => Proc.new { |e| number_with_delimiter(e) } },
38
+ { label: 'Min', value: non_nil_values.min, ruby_formatter: ruby_formatter },
39
+ { label: 'Max', value: non_nil_values.max, ruby_formatter: ruby_formatter },
40
+ { label: 'Count', value: values.length, ruby_formatter: Proc.new { |e| number_with_delimiter(e) } },
35
41
  ]
36
42
  end
37
43
 
38
- # Returns an OpenStruct that describes a statistics table.
44
+ # Returns an object that describes a statistics table.
39
45
  def descriptive_statistics_table(values)
40
46
  desc_stats = descriptive_statistics(values)
41
- table = OpenStruct.new(
42
- :rows => desc_stats.map { |stat|
43
- OpenStruct.new(
44
- :css_class => 'rde-row-values',
45
- :tag => :tr,
46
- :cells => [
47
- OpenStruct.new(:value => stat[:label], :tag => :th, :css_class => 'rde-row_header'),
48
- OpenStruct.new(:value => stat[:value], :ruby_formatter => stat[:ruby_formatter], :tag => :td, :css_class => 'rde-cell-value'),
49
- ]
47
+ table = Utils::RdeTable.new(
48
+ desc_stats.map { |stat|
49
+ Utils::RdeTableRow.new(
50
+ :tr,
51
+ [
52
+ Utils::RdeTableCell.new(:th, stat[:label], css_class: 'rde-row_header'),
53
+ Utils::RdeTableCell.new(:td, stat[:value], ruby_formatter: stat[:ruby_formatter], css_class: 'rde-cell-value'),
54
+ ],
55
+ css_class: 'rde-row-values',
50
56
  )
51
57
  }
52
58
  )
@@ -6,6 +6,8 @@ class RailsDataExplorer
6
6
 
7
7
  attr_accessor :charts, :data_set, :title
8
8
 
9
+ delegate :number_of_values, to: :data_set, prefix: false
10
+
9
11
  # Initializes a new visualization.
10
12
  # @param[String] _title will be printed at top of visualization
11
13
  # @param[Array] data_set_or_array can be a number of things:
@@ -24,11 +26,12 @@ class RailsDataExplorer
24
26
  end
25
27
 
26
28
  def render
27
- content_tag(:div, :class => 'rde-exploration panel panel-default', :id => dom_id) do
28
- content_tag(:div, :class => 'panel-heading') do
29
- content_tag(:h2, @title, :class => 'rde-exploration-title panel-title')
29
+ content_tag(:div, class: 'rde-exploration panel panel-default', id: dom_id) do
30
+ content_tag(:div, class: 'panel-heading') do
31
+ %(<span style="float: right;"><a href="#rails_data_explorer-toc">Top</a></span>).html_safe +
32
+ content_tag(:h2, @title, class: 'rde-exploration-title panel-title')
30
33
  end +
31
- content_tag(:div, :class => 'panel-body') do
34
+ content_tag(:div, class: 'panel-body') do
32
35
  if @charts.any?
33
36
  @charts.map { |e| e.render }.join.html_safe
34
37
  else
@@ -54,6 +57,19 @@ class RailsDataExplorer
54
57
  r << %(#{ ' ' * (indent-1) }>\n)
55
58
  end
56
59
 
60
+ def type_of_analysis
61
+ case @data_set.dimensions_count
62
+ when 0
63
+ '[No data given]'
64
+ when 1
65
+ 'Univariate'
66
+ when 2
67
+ 'Bivariate'
68
+ else
69
+ 'Multivariate'
70
+ end
71
+ end
72
+
57
73
  private
58
74
 
59
75
  def initialize_charts(chart_specs)
@@ -27,7 +27,7 @@ class RailsDataExplorer
27
27
  running_sum = 0
28
28
  @categories.each_with_index { |e, idx|
29
29
  running_sum += @category_probabilities[idx]
30
- category_order << { :category => e, :threshold => running_sum }
30
+ category_order << { category: e, threshold: running_sum }
31
31
  }
32
32
  category_order
33
33
  end
@@ -10,18 +10,28 @@ class RailsDataExplorer
10
10
  module Utils
11
11
  class DataBinner
12
12
 
13
- def initialize(*args)
13
+ # @param[Hash] threshold_specs a hash with a key value pair for each threshold
14
+ # The key is the label to use, and the value is a Numeric threshold.
15
+ # Adds one more bin for values greater than the highest threshold.
16
+ # Example: { '0' => 0, '1' => 1, '2' => 2, '3..10' => 10, '11..100' => 100 }
17
+ # Will generate the following output:
18
+ # -1 => '0'
19
+ # 0 => '0'
20
+ # 0.1 => '1'
21
+ # 4 => '3..10'
22
+ # 10 => '3..10'
23
+ # 10.1 => '3..10'
24
+ # 1000 => '> 100'
25
+ def initialize(threshold_specs)
14
26
  @max = -Float::INFINITY
15
- @bin_specs = [*args].compact.uniq.sort.map { |e|
16
- case e
17
- when Numeric
18
- @max = [@max, e].max
19
- { :label => "#{ e.to_s } or less", :lte => e }
20
- else
21
- raise "Handle this bin_spec: #{ e.inspect }"
22
- end
27
+ @bin_specs = threshold_specs.to_a.sort { |(k_a, v_a), (k_b, v_b)|
28
+ v_a <=> v_b
29
+ }.map { |(label, threshold)|
30
+ raise "Invalid threshold: #{ threshold.inspect }" unless threshold.is_a?(Numeric)
31
+ @max = [@max, threshold].max
32
+ { label: label, lte: threshold }
23
33
  }
24
- @bin_specs << { :label => "> #{ @max }", :gt => @max }
34
+ @bin_specs << { label: "> #{ @max }", gt: @max }
25
35
  end
26
36
 
27
37
  def bin(value)
@@ -8,10 +8,10 @@ class RailsDataExplorer
8
8
 
9
9
  def initialize(data_series, options = {})
10
10
  @options = {
11
- :nice => true,
12
- :type => 'midtread', # 'midtread' or 'midrise'
13
- :number_of_bins => 100, # assuming 800px wide chart, 8px per bin
14
- :delta => nil,
11
+ nice: true,
12
+ type: 'midtread', # 'midtread' or 'midrise'
13
+ number_of_bins: 100, # assuming 800px wide chart, 8px per bin
14
+ delta: nil,
15
15
  }.merge(options)
16
16
  @data_series = data_series
17
17
  @number_of_bins = @options[:number_of_bins]
@@ -22,7 +22,7 @@ class RailsDataExplorer
22
22
  # Compute boundaries
23
23
  if @options[:nice]
24
24
  range = @data_series.max_val - @data_series.min_val
25
- rounding_factor = 10.0 ** Math.log10(range).floor
25
+ rounding_factor = 10.0 ** Math.log10([range, GREATER_ZERO].max).floor
26
26
  @min_val = (@data_series.min_val / rounding_factor).floor * rounding_factor
27
27
  @max_val = (@data_series.max_val / rounding_factor).ceil * rounding_factor
28
28
  else
@@ -51,7 +51,7 @@ class RailsDataExplorer
51
51
  }
52
52
  when 'midtread'
53
53
  @data_series.values.map { |e|
54
- index_of_quantized_value = ((e - @min_val) / @delta).round
54
+ index_of_quantized_value = ((e - @min_val) / [@delta, GREATER_ZERO].max).round
55
55
  (
56
56
  (index_of_quantized_value * @delta) +
57
57
  @min_val
@@ -0,0 +1,62 @@
1
+ # Defines classes to describe tables:
2
+ # rde_table.rows
3
+ # rde_row.css_class
4
+ # rde_row.tag
5
+ # rde_row.cells
6
+ # rde_cell.css_class
7
+ # rde_cell.ruby_formatter
8
+ # rde_cell.style
9
+ # rde_cell.tag
10
+ # rde_cell.title
11
+ # rde_cell.value
12
+
13
+ class RailsDataExplorer
14
+ module Utils
15
+
16
+ class RdeTable
17
+
18
+ attr_accessor :rows
19
+
20
+ def initialize(rows)
21
+ @rows = rows
22
+ end
23
+
24
+ end
25
+
26
+
27
+ class RdeTableRow
28
+
29
+ attr_accessor :cells
30
+ attr_accessor :css_class
31
+ attr_accessor :tag
32
+
33
+ def initialize(tag, cells, opts = {})
34
+ @tag = tag
35
+ @cells =cells
36
+ @css_class = opts[:css_class]
37
+ end
38
+
39
+ end
40
+
41
+ class RdeTableCell
42
+
43
+ attr_accessor :tag
44
+ attr_accessor :value
45
+ attr_accessor :css_class
46
+ attr_accessor :ruby_formatter
47
+ attr_accessor :style
48
+ attr_accessor :title
49
+
50
+ def initialize(tag, value, opts = {})
51
+ @tag = tag
52
+ @value = value
53
+ @css_class = opts[:css_class]
54
+ @ruby_formatter = opts[:ruby_formatter]
55
+ @style = opts[:style]
56
+ @title = opts[:title]
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+ end
@@ -13,8 +13,8 @@ class RailsDataExplorer
13
13
 
14
14
  data_series_specs.each do |data_series_spec|
15
15
  ds_spec = {
16
- :univariate => true,
17
- :bivariate => true,
16
+ univariate: true,
17
+ bivariate: true,
18
18
  }.merge(data_series_spec)
19
19
  univariate << ds_spec.dup if ds_spec[:univariate]
20
20
 
@@ -70,6 +70,10 @@ class RailsDataExplorer
70
70
  r
71
71
  end
72
72
 
73
+ def number_of_values
74
+ explorations.first.number_of_values
75
+ end
76
+
73
77
  private
74
78
 
75
79
  def build_exploration_from_data_series_specs(data_collection, ds_specs)
@@ -77,26 +81,37 @@ private
77
81
  ds_specs.map { |e| e[:name] }.sort.join(' vs. '),
78
82
  ds_specs.map { |ds_spec|
79
83
  {
80
- :name => ds_spec[:name],
81
- :values => data_collection.map(&ds_spec[:data_method])
84
+ name: ds_spec[:name],
85
+ values: data_collection.map(&ds_spec[:data_method])
82
86
  }
83
87
  }
84
88
  )
85
89
  end
86
90
 
87
91
  def render_toc(expls)
88
- content_tag(:div, :class => 'rde panel panel-primary') do
89
- content_tag(:div, :class => 'panel-heading') do
90
- content_tag(:h2, "Table of contents", :class => 'rde-exploration-title panel-title')
92
+ grouped_by_analysis = expls.group_by { |e| e.type_of_analysis }
93
+ content_tag(:div, class: 'rde panel panel-primary') do
94
+ content_tag(:div, class: 'panel-heading') do
95
+ %(<a name="rails_data_explorer-toc"></a>).html_safe +
96
+ content_tag(:h2, "List of data explorations", class: 'rde-exploration-title panel-title')
91
97
  end +
92
- content_tag(:div, :class => 'panel-body') do
93
- content_tag(:ul, :class => 'rde-table_of_contents') do
94
- expls.map { |expl|
95
- content_tag(
96
- :li,
97
- %(<a href="##{ expl.dom_id }">#{ expl.title }</a>).html_safe
98
- )
99
- }.join.html_safe
98
+ content_tag(:div, class: 'panel-body') do
99
+ content_tag(:table, class: 'table') do
100
+ content_tag(:tr) do
101
+ grouped_by_analysis.map { |(label, exps)|
102
+ content_tag(:td, style: "width: 30%;") do
103
+ content_tag(:h3, label) +
104
+ content_tag(:ol, class: 'rde-table_of_contents') do
105
+ exps.map { |expl|
106
+ content_tag(
107
+ :li,
108
+ %(<a href="##{ expl.dom_id }">#{ expl.title }</a>).html_safe
109
+ )
110
+ }.join.html_safe
111
+ end
112
+ end
113
+ }.join.html_safe
114
+ end
100
115
  end
101
116
  end
102
117
  end
@@ -108,11 +123,11 @@ private
108
123
 
109
124
  def render_explorations_without_charts(expls)
110
125
  return '' if expls.empty?
111
- content_tag(:div, :class => 'rde panel panel-default') do
112
- content_tag(:div, :class => 'panel-heading') do
113
- content_tag(:h2, "Explorations without charts", :class => 'rde-exploration-title panel-title')
126
+ content_tag(:div, class: 'rde panel panel-default') do
127
+ content_tag(:div, class: 'panel-heading') do
128
+ content_tag(:h2, "Explorations without charts", class: 'rde-exploration-title panel-title')
114
129
  end +
115
- content_tag(:div, :class => 'panel-body') do
130
+ content_tag(:div, class: 'panel-body') do
116
131
  content_tag(:p, "There are no charts available for the following explorations:") +
117
132
  content_tag(:ul) do
118
133
  expls.map { |expl|
@@ -124,7 +139,7 @@ private
124
139
  end
125
140
 
126
141
  def separate_explorations_with_and_without_charts
127
- explorations.inject({ :with => [], :without => [] }) { |m, e|
142
+ explorations.inject({ with: [], without: [] }) { |m, e|
128
143
  m[e.charts.any? ? :with : :without] << e
129
144
  m
130
145
  }
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.name = 'rails-data-explorer'
6
- gem.version = '0.1.0'
6
+ gem.version = '0.2.0'
7
7
  gem.platform = Gem::Platform::RUBY
8
8
 
9
9
  gem.authors = ['Jo Hund']
@@ -23,19 +23,19 @@ class RailsDataExplorer
23
23
  [
24
24
  [
25
25
  ['Univariate Integer data', [nil, 1, 2, 3]],
26
- { :has_charts => ['histogram-quantitative', 'descriptive-statistics-table'] }
26
+ { has_charts: ['histogram-quantitative', 'descriptive-statistics-table'] }
27
27
  ],
28
28
  [
29
29
  ['Univariate Decimal data', [nil, 1.0, 2.0, 3.0]],
30
- { :has_charts => ['histogram-quantitative', 'descriptive-statistics-table'] }
30
+ { has_charts: ['histogram-quantitative', 'descriptive-statistics-table'] }
31
31
  ],
32
32
  [
33
33
  ['Univariate Temporal data', [nil, Time.now]],
34
- { :has_charts => ['histogram-temporal', 'descriptive-statistics-table'] }
34
+ { has_charts: ['histogram-temporal', 'descriptive-statistics-table'] }
35
35
  ],
36
36
  [
37
37
  ['Univariate Categorical data', [nil, 'a', 'b', 'c']],
38
- { :has_charts => ['histogram-categorical', 'pie-chart', 'descriptive-statistics-table'] }
38
+ { has_charts: ['histogram-categorical', 'pie-chart', 'descriptive-statistics-table'] }
39
39
  ],
40
40
  ].each { |(args, xpect_options)|
41
41
  title, data_set_or_array, chart_specs = args
@@ -9,14 +9,14 @@ class RailsDataExplorer
9
9
  [
10
10
  [
11
11
  '1',
12
- [1,2,3],
12
+ { '1 or less' => 1, '2' => 2, '3' => 3 },
13
13
  [0,1,2,3,4],
14
- ["1 or less", "1 or less", "2 or less", "3 or less", "> 3"]
14
+ ['1 or less', '1 or less', '2', '3', '> 3']
15
15
  ],
16
16
  ].each do |(name, bin_specs, vals, xpect)|
17
17
 
18
18
  it "bins #{ name }" do
19
- db = DataBinner.new(*bin_specs)
19
+ db = DataBinner.new(bin_specs)
20
20
  vals.map{ |e| db.bin(e) }.must_equal xpect
21
21
  end
22
22
 
metadata CHANGED
@@ -1,174 +1,153 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-data-explorer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jo Hund
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-04-21 00:00:00.000000000 Z
11
+ date: 2015-01-28 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: color
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: descriptive-statistics
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: distribution
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: interpolate
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ">="
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: actionview
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - ">="
84
74
  - !ruby/object:Gem::Version
85
75
  version: 3.0.0
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - ">="
92
81
  - !ruby/object:Gem::Version
93
82
  version: 3.0.0
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: bundler
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - ">="
100
88
  - !ruby/object:Gem::Version
101
89
  version: 1.0.0
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - ">="
108
95
  - !ruby/object:Gem::Version
109
96
  version: 1.0.0
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: minitest
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - ">="
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - ">="
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: minitest-spec-expect
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ! '>='
115
+ - - ">="
132
116
  - !ruby/object:Gem::Version
133
117
  version: '0'
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ! '>='
122
+ - - ">="
140
123
  - !ruby/object:Gem::Version
141
124
  version: '0'
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: rake
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - ! '>='
129
+ - - ">="
148
130
  - !ruby/object:Gem::Version
149
131
  version: '0'
150
132
  type: :development
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - ! '>='
136
+ - - ">="
156
137
  - !ruby/object:Gem::Version
157
138
  version: '0'
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: yui-compressor
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
- - - ! '>='
143
+ - - ">="
164
144
  - !ruby/object:Gem::Version
165
145
  version: '0'
166
146
  type: :development
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
- - - ! '>='
150
+ - - ">="
172
151
  - !ruby/object:Gem::Version
173
152
  version: '0'
174
153
  description: rails-data-explorer is a Rails Engine plugin that makes it easy to explore
@@ -178,7 +157,7 @@ executables: []
178
157
  extensions: []
179
158
  extra_rdoc_files: []
180
159
  files:
181
- - .gitignore
160
+ - ".gitignore"
182
161
  - CHANGELOG.md
183
162
  - Gemfile
184
163
  - MIT-LICENSE
@@ -206,6 +185,7 @@ files:
206
185
  - lib/rails-data-explorer/chart/scatterplot.rb
207
186
  - lib/rails-data-explorer/chart/scatterplot_matrix.rb
208
187
  - lib/rails-data-explorer/chart/stacked_bar_chart_categorical_percent.rb
188
+ - lib/rails-data-explorer/constants.rb
209
189
  - lib/rails-data-explorer/data_series.rb
210
190
  - lib/rails-data-explorer/data_set.rb
211
191
  - lib/rails-data-explorer/data_type.rb
@@ -225,6 +205,7 @@ files:
225
205
  - lib/rails-data-explorer/utils/data_binner.rb
226
206
  - lib/rails-data-explorer/utils/data_encoder.rb
227
207
  - lib/rails-data-explorer/utils/data_quantizer.rb
208
+ - lib/rails-data-explorer/utils/rde_table.rb
228
209
  - lib/rails-data-explorer/utils/value_formatter.rb
229
210
  - lib/rails_data_explorer.rb
230
211
  - rails-data-explorer.gemspec
@@ -255,27 +236,26 @@ files:
255
236
  homepage: http://rails-data-explorer.clearcove.ca
256
237
  licenses:
257
238
  - MIT
239
+ metadata: {}
258
240
  post_install_message:
259
241
  rdoc_options: []
260
242
  require_paths:
261
243
  - lib
262
244
  required_ruby_version: !ruby/object:Gem::Requirement
263
- none: false
264
245
  requirements:
265
- - - ! '>='
246
+ - - ">="
266
247
  - !ruby/object:Gem::Version
267
248
  version: '0'
268
249
  required_rubygems_version: !ruby/object:Gem::Requirement
269
- none: false
270
250
  requirements:
271
- - - ! '>='
251
+ - - ">="
272
252
  - !ruby/object:Gem::Version
273
253
  version: '0'
274
254
  requirements: []
275
255
  rubyforge_project:
276
- rubygems_version: 1.8.25
256
+ rubygems_version: 2.2.2
277
257
  signing_key:
278
- specification_version: 3
258
+ specification_version: 4
279
259
  summary: A Rails engine plugin for exploring data in your app with charts and statistics.
280
260
  test_files:
281
261
  - spec/helper.rb