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