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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +10 -0
- data/README.md +18 -0
- data/doc/how_to/release.md +2 -5
- data/lib/rails-data-explorer-no-rails.rb +1 -0
- data/lib/rails-data-explorer.rb +5 -0
- data/lib/rails-data-explorer/chart.rb +11 -11
- data/lib/rails-data-explorer/chart/box_plot_group.rb +10 -3
- data/lib/rails-data-explorer/chart/contingency_table.rb +58 -45
- data/lib/rails-data-explorer/chart/descriptive_statistics_table.rb +2 -2
- data/lib/rails-data-explorer/chart/histogram_categorical.rb +10 -4
- data/lib/rails-data-explorer/chart/histogram_quantitative.rb +12 -5
- data/lib/rails-data-explorer/chart/histogram_temporal.rb +6 -0
- data/lib/rails-data-explorer/chart/parallel_coordinates.rb +4 -4
- data/lib/rails-data-explorer/chart/parallel_set.rb +3 -3
- data/lib/rails-data-explorer/chart/stacked_bar_chart_categorical_percent.rb +3 -3
- data/lib/rails-data-explorer/constants.rb +5 -0
- data/lib/rails-data-explorer/data_series.rb +20 -14
- data/lib/rails-data-explorer/data_set.rb +4 -0
- data/lib/rails-data-explorer/data_type/categorical.rb +84 -72
- data/lib/rails-data-explorer/data_type/quantitative.rb +46 -48
- data/lib/rails-data-explorer/data_type/quantitative/temporal.rb +23 -17
- data/lib/rails-data-explorer/exploration.rb +20 -4
- data/lib/rails-data-explorer/statistics/rng_category.rb +1 -1
- data/lib/rails-data-explorer/utils/data_binner.rb +20 -10
- data/lib/rails-data-explorer/utils/data_quantizer.rb +6 -6
- data/lib/rails-data-explorer/utils/rde_table.rb +62 -0
- data/lib/rails_data_explorer.rb +35 -20
- data/rails-data-explorer.gemspec +1 -1
- data/spec/rails-data-explorer/exploration_spec.rb +4 -4
- data/spec/rails-data-explorer/utils/data_binner_spec.rb +3 -3
- metadata +30 -50
@@ -6,10 +6,10 @@ class RailsDataExplorer
|
|
6
6
|
def all_available_chart_types
|
7
7
|
[
|
8
8
|
{
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
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
|
-
{ :
|
33
|
-
{ :
|
34
|
-
{ :
|
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
|
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 =
|
42
|
-
|
43
|
-
|
44
|
-
:
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
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, :
|
28
|
-
content_tag(:div, :
|
29
|
-
|
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, :
|
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 << { :
|
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
|
-
|
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 =
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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 << { :
|
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
|
-
:
|
12
|
-
:
|
13
|
-
:
|
14
|
-
:
|
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
|
data/lib/rails_data_explorer.rb
CHANGED
@@ -13,8 +13,8 @@ class RailsDataExplorer
|
|
13
13
|
|
14
14
|
data_series_specs.each do |data_series_spec|
|
15
15
|
ds_spec = {
|
16
|
-
:
|
17
|
-
:
|
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
|
-
:
|
81
|
-
:
|
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
|
-
|
89
|
-
|
90
|
-
|
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, :
|
93
|
-
content_tag(:
|
94
|
-
|
95
|
-
|
96
|
-
:
|
97
|
-
|
98
|
-
|
99
|
-
|
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, :
|
112
|
-
content_tag(:div, :
|
113
|
-
content_tag(:h2, "Explorations without charts", :
|
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, :
|
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({ :
|
142
|
+
explorations.inject({ with: [], without: [] }) { |m, e|
|
128
143
|
m[e.charts.any? ? :with : :without] << e
|
129
144
|
m
|
130
145
|
}
|
data/rails-data-explorer.gemspec
CHANGED
@@ -23,19 +23,19 @@ class RailsDataExplorer
|
|
23
23
|
[
|
24
24
|
[
|
25
25
|
['Univariate Integer data', [nil, 1, 2, 3]],
|
26
|
-
{ :
|
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
|
-
{ :
|
30
|
+
{ has_charts: ['histogram-quantitative', 'descriptive-statistics-table'] }
|
31
31
|
],
|
32
32
|
[
|
33
33
|
['Univariate Temporal data', [nil, Time.now]],
|
34
|
-
{ :
|
34
|
+
{ has_charts: ['histogram-temporal', 'descriptive-statistics-table'] }
|
35
35
|
],
|
36
36
|
[
|
37
37
|
['Univariate Categorical data', [nil, 'a', 'b', 'c']],
|
38
|
-
{ :
|
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
|
-
|
12
|
+
{ '1 or less' => 1, '2' => 2, '3' => 3 },
|
13
13
|
[0,1,2,3,4],
|
14
|
-
[
|
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(
|
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.
|
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:
|
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:
|
256
|
+
rubygems_version: 2.2.2
|
277
257
|
signing_key:
|
278
|
-
specification_version:
|
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
|