rails-data-explorer 0.1.0 → 0.2.0

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.
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