rails-data-explorer 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 97a1736026323867194e064be61c520d93faeae5
4
- data.tar.gz: 73a2d84730255fad42699c4a1b8b6ded248296b0
3
+ metadata.gz: 5b417c02b65c9c3f0fed2ddb85c5f6e992671aea
4
+ data.tar.gz: b0ff6ff26221174cf12ba739f5a6029ac636a0d1
5
5
  SHA512:
6
- metadata.gz: db1654f07bff7cd93caf4498e75ea4360f8291da035e77513694ff5615e3a395fbd08d223f3a29f97898c88a0848ceb64fb2909ff2ddd7cc664ff8fb5ec36a07
7
- data.tar.gz: 60713884e311d17d48e8c221f62fc1d47649407f1eef47e1f2356c163cf71268df168092126d36e5e28d2a1ce89262e00940ea61c77a5fe463222eda9be18acc
6
+ metadata.gz: 7badacd27cd2ed6059094d5aba6027918e342437c79ae938504b451c6572632c42d0abf1817c0ea7dc0e0c3083f037dd11acd455ab6e23784349908faf5a0c00
7
+ data.tar.gz: 597a4a2857756a8226582d69b3a2154ea1708e2c19a396a2cc94f2947d63a8126a8517b7242923d9b328384730bde98b3172a10a472ef8bc35d1d52d08daae20
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ there seems a huge inefficiency in RailsDataExplorer#build_exploration_from_data_series_specs
2
+ where we iterate over the entire data collection for every exploration.
3
+
4
+
5
+ ### 0.2.3
6
+
7
+ * Don't show all explorations by default. Takes too long when having 100
8
+ explorations to render. Instead show univariate explorations by default
9
+ and bivariate explorations on demand.
10
+
1
11
  ### 0.2.2
2
12
 
3
13
  * Fixed file inclusion bug that prevented loading of Gem
@@ -5,6 +5,8 @@ require 'descriptive-statistics'
5
5
  require 'distribution'
6
6
  require 'interpolate'
7
7
 
8
+ require 'rails-data-explorer/action_view_extension'
9
+
8
10
  require 'rails-data-explorer/engine'
9
11
 
10
12
  require 'rails_data_explorer'
@@ -1,11 +1,193 @@
1
+ # -*- coding: utf-8 -*-
1
2
  #
2
3
  # Adds view helpers to ActionView
3
4
  #
4
5
  class RailsDataExplorer
5
6
  module ActionViewExtension
6
7
 
7
- def render_explorations(explorations)
8
- explorations.map { |e| e.render }
8
+ # Renders the entire RailsDataExplorer view
9
+ # @param rails_data_explorer [RailsDataExplorer]
10
+ def rails_data_explorer(rde)
11
+ content_tag(:div, class: 'rails-data-explorer') do
12
+ [
13
+ rde_toc(rde.data_series_names, rde.explorations_with_charts_available),
14
+ rde_explorations_with_charts(rde.explorations_with_charts_to_render),
15
+ ].join.html_safe
16
+ end
17
+ end
18
+
19
+ # Returns a url that can be used to reset the Filterrific params
20
+ def reset_filterrific_url(opts = {})
21
+ url_for(
22
+ { filterrific: { reset_filterrific: true } }.merge(opts)
23
+ )
24
+ end
25
+
26
+ protected
27
+
28
+ # @param ds_names [Array<String>] the names of the data_series
29
+ # @param explorations [Array<Exploration>]
30
+ def rde_toc(ds_names, explorations)
31
+ reversed_ds_names = ds_names.reverse
32
+ num_cols = 2 + ds_names.length
33
+ content_tag(:div, class: 'rde panel panel-primary') do
34
+ content_tag(:div, class: 'panel-heading') do
35
+ %(<a name="rails_data_explorer-toc"></a>).html_safe +
36
+ content_tag(:h2, "List of data explorations", class: 'rde-exploration-title panel-title')
37
+ end +
38
+ content_tag(:div, class: 'panel-body') do
39
+ content_tag(:table, class: 'table rde_toc-matrix') do
40
+ # render header row for analysis types
41
+ content_tag(:tr) do
42
+ content_tag(:th, 'Univariate', colspan: '2') +
43
+ content_tag(:th, 'Bivariate', colspan: ds_names.length)
44
+ end +
45
+ # render uni-/bi-variate analysis column headers (with reversed data_series names)
46
+ content_tag(:tr) do
47
+ content_tag(
48
+ :td,
49
+ link_to(
50
+ 'All Univariates ⬇',
51
+ url_for(
52
+ rde: {
53
+ univariate: ds_names.each_with_index.inject({}) { |m, (e, idx)|
54
+ m[idx] = [e]
55
+ m
56
+ }
57
+ },
58
+ anchor: 'rails_data_explorer-toc',
59
+ ),
60
+ class: 'btn btn-default btn-xs'
61
+ ),
62
+ colspan: 2
63
+ ) +
64
+ reversed_ds_names.map { |ds_name|
65
+ content_tag(:th, ds_name, class: 'rde_toc-col_header')
66
+ }.join.html_safe
67
+ end +
68
+ # iterate over data_series
69
+ ds_names.map { |ds_name|
70
+ content_tag(:tr) do
71
+ uv_expl = explorations.detect { |e|
72
+ e.dom_id == RailsDataExplorer::Exploration.compute_dom_id(
73
+ [ds_name]
74
+ )
75
+ }
76
+ encountered_bv_with_self = false
77
+ # cell with name
78
+ content_tag(
79
+ :th,
80
+ ds_name.truncate(12),
81
+ class: 'rde_toc-row_header',
82
+ title: ds_name
83
+ ) +
84
+ # cell with link to univariate analysis
85
+ if uv_expl
86
+ if uv_expl.render_charts?
87
+ # Link to anchor on current page (chart is currently rendered)
88
+ content_tag(
89
+ :td,
90
+ link_to(
91
+ '⬅',
92
+ "##{ uv_expl.dom_id }",
93
+ class: 'btn btn-default btn-xs'
94
+ ),
95
+ class: 'rde_toc-currently_rendered',
96
+ )
97
+ else
98
+ # Load new page
99
+ content_tag(
100
+ :td,
101
+ link_to(
102
+ '⬅',
103
+ url_for(
104
+ rde: { univariate: { '1' => uv_expl.data_series_names }},
105
+ anchor: uv_expl.dom_id
106
+ ),
107
+ class: 'btn btn-default btn-xs'
108
+ ),
109
+ class: 'rde_toc-available_not_rendered'
110
+ )
111
+ end
112
+ else
113
+ # show that no exploration exists
114
+ content_tag(:td, 'N/A', class: 'rde_toc-not_available')
115
+ end +
116
+ # iterate over reversed data_series names
117
+ reversed_ds_names.map { |r_ds_name|
118
+ bv_expl = explorations.detect { |e|
119
+ e.dom_id == RailsDataExplorer::Exploration.compute_dom_id(
120
+ [ds_name, r_ds_name]
121
+ )
122
+ }
123
+ if encountered_bv_with_self
124
+ # blank cell
125
+ '<td class="rde_toc-oso_diagonal"></td>'.html_safe
126
+ elsif ds_name == r_ds_name
127
+ # intersection with self
128
+ encountered_bv_with_self = true
129
+ params_counter = '0'
130
+ # Link to anchor on new page (chart is currently not rendered)
131
+ content_tag(
132
+ :td,
133
+ link_to(
134
+ image_tag('rails-data-explorer/multiple_bivariate_small.png'),
135
+ url_for(
136
+ rde: {
137
+ univariate: { '1' => [r_ds_name] },
138
+ bivariate: ds_names.each_with_object({}) { |e,m|
139
+ next if r_ds_name == e # skip bivariate with self
140
+ m[params_counter.succ!] = [r_ds_name, e]
141
+ }
142
+ },
143
+ anchor: 'rails_data_explorer-toc',
144
+ ),
145
+ class: 'btn btn-default btn-xs'
146
+ ),
147
+ class: 'rde_toc-available_not_rendered'
148
+ )
149
+ elsif bv_expl
150
+ # bivariate analysis exists
151
+ if bv_expl.render_charts?
152
+ # Link to anchor on current page (chart is currently rendered)
153
+ content_tag(
154
+ :td,
155
+ link_to(
156
+ 'X',
157
+ "##{ bv_expl.dom_id }",
158
+ class: 'btn btn-default btn-xs'
159
+ ),
160
+ class: 'rde_toc-currently_rendered',
161
+ )
162
+ else
163
+ # Link to anchor on new page (chart is currently not rendered)
164
+ content_tag(
165
+ :td,
166
+ link_to(
167
+ 'X',
168
+ url_for(
169
+ rde: { bivariate: { '1' => bv_expl.data_series_names }},
170
+ anchor: bv_expl.dom_id
171
+ ),
172
+ class: 'btn btn-default btn-xs'
173
+ ),
174
+ class: 'rde_toc-available_not_rendered'
175
+ )
176
+ end
177
+ else
178
+ # show that no exploration exists
179
+ content_tag(:td, 'N/A', class: 'rde_toc-not_available')
180
+ end
181
+ }.join.html_safe
182
+ end
183
+ }.join.html_safe
184
+ end
185
+ end
186
+ end
187
+ end
188
+
189
+ def rde_explorations_with_charts(explorations)
190
+ explorations.map { |e| e.render }.join.html_safe
9
191
  end
10
192
 
11
193
  end
@@ -127,5 +127,9 @@ class RailsDataExplorer
127
127
  r << %(#{ ' ' * (indent-1) }>\n)
128
128
  end
129
129
 
130
+ def data_series_names
131
+ data_series.map { |e| e.name }
132
+ end
133
+
130
134
  end
131
135
  end
@@ -6,19 +6,25 @@ class RailsDataExplorer
6
6
  # It's an engine so that we can add javascript and image assets
7
7
  # to the asset pipeline.
8
8
 
9
- # initializer "rails-data-explorer.active_record_extension" do |app|
10
- # require 'rails-data-explorer/active_record_extension'
11
- # class ::ActiveRecord::Base
12
- # extend RailsDataExplorer::ActiveRecordExtension::ClassMethods
13
- # end
9
+ isolate_namespace RailsDataExplorer
10
+
11
+ # ActiveSupport.on_load :action_controller do
12
+ # include RailsDataExplorer::ActionControllerExtension
14
13
  # end
15
14
 
16
- # initializer "rails-data-explorer.action_view_extension" do |app|
17
- # require 'rails-data-explorer/action_view_extension'
18
- # class ::ActionView::Base
19
- # include RailsDataExplorer::ActionViewExtension
20
- # end
15
+ ActiveSupport.on_load :action_view do
16
+ include RailsDataExplorer::ActionViewExtension
17
+ end
18
+
19
+ # ActiveSupport.on_load :active_record do
20
+ # extend RailsDataExplorer::ActiveRecordExtension
21
21
  # end
22
22
 
23
+ initializer "filterrific" do |app|
24
+ app.config.assets.precompile += %w(
25
+ multiple_bivariate_small.png
26
+ )
27
+ end
28
+
23
29
  end
24
30
  end
@@ -6,22 +6,32 @@ class RailsDataExplorer
6
6
 
7
7
  attr_accessor :charts, :data_set, :title
8
8
 
9
+ delegate :data_series_names, to: :data_set, prefix: false
9
10
  delegate :number_of_values, to: :data_set, prefix: false
10
11
 
12
+ # Computes a dom_id for data_series_names
13
+ # @param data_series_names [Array<String>]
14
+ # @return [String]
15
+ def self.compute_dom_id(data_series_names)
16
+ "rde-exploration-#{ data_series_names.sort.map { |e| e.parameterize('') }.join('-') }"
17
+ end
18
+
11
19
  # Initializes a new visualization.
12
- # @param[String] _title will be printed at top of visualization
13
- # @param[Array] data_set_or_array can be a number of things:
20
+ # @param _title [String] will be printed at top of visualization
21
+ # @param data_set_or_array [Array] can be a number of things:
14
22
  # * Array<Scalar> - for single data series, uni-variate options are applied.
15
23
  # * Array<Hash> - for multiple data series, bi/multi-variate options are applied.
16
24
  # * DataSet - For finer grained control.
17
- # @param[Array<Chart, String, Symbol>, optional] chart_specs
25
+ # @param render_charts [Boolean] set to true to render charts for this exploration
26
+ # @param chart_specs [Array<Chart, String, Symbol>, optional]
18
27
  # The list of charts to include. Defaults to all applicable charts for the
19
28
  # given data_set_or_array.
20
29
  # Charts can be provided as Array of Strings, Symbols, or Chart classes
21
30
  # (can be mixed).
22
- def initialize(_title, data_set_or_array, chart_specs=nil)
31
+ def initialize(_title, data_set_or_array, render_charts, chart_specs=nil)
23
32
  @title = _title
24
33
  @data_set = initialize_data_set(data_set_or_array)
34
+ @render_charts = render_charts
25
35
  @charts = initialize_charts(chart_specs)
26
36
  end
27
37
 
@@ -41,8 +51,13 @@ class RailsDataExplorer
41
51
  end.html_safe
42
52
  end
43
53
 
54
+ # Returns true if charts for this exploration are to be rendered.
55
+ def render_charts?
56
+ @render_charts
57
+ end
58
+
44
59
  def dom_id
45
- "rde-exploration-#{ object_id }"
60
+ self.class.compute_dom_id(data_series_names)
46
61
  end
47
62
 
48
63
  def inspect(indent=1, recursive=1000)
@@ -74,6 +89,7 @@ class RailsDataExplorer
74
89
 
75
90
  def initialize_charts(chart_specs)
76
91
  if chart_specs.present?
92
+ raise "Handle chart_specs: #{ chart_specs.inspect }"
77
93
  chart_specs.map { |chart_spec|
78
94
  case chart_spec
79
95
  when Chart
@@ -94,7 +110,7 @@ class RailsDataExplorer
94
110
  DataSet.new(data_set_or_array, @title)
95
111
  when DataSet
96
112
  # use as is
97
- _data_set
113
+ data_set_or_array
98
114
  else
99
115
  raise(
100
116
  ArgumentError.new(
@@ -4,70 +4,107 @@ class RailsDataExplorer
4
4
  include ActionView::Helpers::TagHelper
5
5
 
6
6
  attr_reader :explorations
7
-
8
- def initialize(data_collection, data_series_specs)
7
+ attr_reader :data_series_names
8
+
9
+ # Top level initialization. This is what you normally should use.
10
+ # @param data_collection [Array<Array>] Outer array is the container, inner
11
+ # array represents each record (row of data).
12
+ # @param data_series_specs [Array<Hash>] One Hash for each data series.
13
+ # @param explorations_to_render [Hash]
14
+ # {
15
+ # "univariate" => {
16
+ # "1" => ["Hour of day"],
17
+ # },
18
+ # "bivariate" => {
19
+ # "1" => ["Context", "Release (major)"],
20
+ # "2" => ["Year", "Timezone"],
21
+ # }
22
+ # }
23
+ def initialize(data_collection, data_series_specs, explorations_to_render)
9
24
  @explorations = []
10
- univariate = []
11
- bivariate = {}
12
- multivariate = {}
25
+ charts = {
26
+ univariate: [],
27
+ bivariate: {},
28
+ multivariate: {}
29
+ }
30
+ @data_series_names = data_series_specs.map { |e| e[:name] }
31
+ # Default to all univariate explorations
32
+ explorations_to_render = (
33
+ explorations_to_render || @data_series_names.inject({ univariate: {}}) { |m,e|
34
+ m[:univariate][e] = [e]
35
+ m
36
+ }
37
+ ).symbolize_keys
13
38
 
39
+ # Build list of all available explorations (rendered and not rendered),
40
+ # grouped by type_of_analysis
14
41
  data_series_specs.each do |data_series_spec|
15
- ds_spec = {
16
- univariate: true,
17
- bivariate: true,
18
- }.merge(data_series_spec)
19
- univariate << ds_spec.dup if ds_spec[:univariate]
20
-
21
- if ds_spec[:bivariate]
22
- [*ds_spec[:bivariate]].each { |group_key|
23
- group_key = group_key.to_s
24
- bivariate[group_key] ||= []
25
- bivariate[group_key] << ds_spec.dup
26
- }
27
- end
28
42
 
29
- if ds_spec[:multivariate]
30
- [*ds_spec[:multivariate]].each { |group_key|
43
+ charts[:univariate] << data_series_spec.dup
44
+
45
+ charts[:bivariate]['rde-default'] ||= []
46
+ charts[:bivariate]['rde-default'] << data_series_spec.dup
47
+
48
+ # No defaults for multivariate yet... Have to be specified manually via
49
+ # data_series specs
50
+ if data_series_spec[:multivariate]
51
+ [*data_series_spec[:multivariate]].each { |group_key|
31
52
  group_key = group_key.to_s
32
- multivariate[group_key] ||= []
33
- multivariate[group_key] << ds_spec.dup
53
+ charts[:multivariate][group_key] ||= []
54
+ charts[:multivariate][group_key] << data_series_spec.dup
34
55
  }
35
56
  end
57
+
36
58
  end
37
59
 
38
- univariate.uniq.compact.each { |data_series_spec|
60
+ charts[:univariate].uniq.compact.each { |data_series_spec|
39
61
  @explorations << Exploration.new(
40
62
  data_series_spec[:name],
41
63
  data_collection.map(&data_series_spec[:data_method]),
64
+ render_exploration_for?(
65
+ explorations_to_render,
66
+ :univariate,
67
+ [data_series_spec[:name]]
68
+ )
42
69
  )
43
70
  }
44
71
 
45
- bivariate.each { |group_key, bv_data_series_specs|
72
+ charts[:bivariate].each { |group_key, bv_data_series_specs|
46
73
  next unless group_key # skip if key is falsey
47
74
  bv_data_series_specs.uniq.compact.combination(2) { |ds_specs_pair|
48
75
  @explorations << build_exploration_from_data_series_specs(
49
76
  data_collection,
50
- ds_specs_pair
77
+ ds_specs_pair,
78
+ render_exploration_for?(
79
+ explorations_to_render,
80
+ :bivariate,
81
+ ds_specs_pair.map { |e| e[:name] }
82
+ )
51
83
  )
52
84
  }
53
85
  }
54
86
 
55
- multivariate.each { |group_key, mv_data_series_specs|
87
+ charts[:multivariate].each { |group_key, mv_data_series_specs|
56
88
  next unless group_key # skip key `false` or `nil`
57
89
  ds_specs = mv_data_series_specs.uniq.compact
58
90
  @explorations << build_exploration_from_data_series_specs(
59
91
  data_collection,
60
- ds_specs
92
+ ds_specs,
93
+ true # always render multivariate since they are specified manually
61
94
  )
62
95
  }
63
96
  end
64
97
 
65
- def render
66
- expls = separate_explorations_with_and_without_charts
67
- r = render_toc(expls[:with])
68
- r << render_charts(expls[:with])
69
- r << render_explorations_without_charts(expls[:without])
70
- r
98
+ def explorations_with_charts_available
99
+ explorations.find_all { |e| e.charts.any? }
100
+ end
101
+
102
+ def explorations_with_charts_to_render
103
+ explorations_with_charts_available.find_all { |e| e.render_charts? }
104
+ end
105
+
106
+ def explorations_with_no_charts_available
107
+ explorations.find_all { |e| e.charts.empty? }
71
108
  end
72
109
 
73
110
  def number_of_values
@@ -76,7 +113,7 @@ class RailsDataExplorer
76
113
 
77
114
  private
78
115
 
79
- def build_exploration_from_data_series_specs(data_collection, ds_specs)
116
+ def build_exploration_from_data_series_specs(data_collection, ds_specs, render_charts)
80
117
  Exploration.new(
81
118
  ds_specs.map { |e| e[:name] }.sort.join(' vs. '),
82
119
  ds_specs.map { |ds_spec|
@@ -84,65 +121,33 @@ private
84
121
  name: ds_spec[:name],
85
122
  values: data_collection.map(&ds_spec[:data_method])
86
123
  }
87
- }
124
+ },
125
+ render_charts
88
126
  )
89
127
  end
90
128
 
91
- def render_toc(expls)
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')
97
- end +
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
115
- end
116
- end
117
- end
118
- end
119
-
120
- def render_charts(expls)
121
- expls.map { |e| e.render }.join.html_safe
122
- end
123
-
124
- def render_explorations_without_charts(expls)
125
- return '' if expls.empty?
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')
129
- end +
130
- content_tag(:div, class: 'panel-body') do
131
- content_tag(:p, "There are no charts available for the following explorations:") +
132
- content_tag(:ul) do
133
- expls.map { |expl|
134
- content_tag(:li, expl.title).html_safe
135
- }.join.html_safe
136
- end
137
- end
129
+ # Returns true if data_series with data_series_names should have charts for
130
+ # explorations with type_of_analysis rendered.
131
+ # @param explorations_to_render [Hash]
132
+ # {:bivariate=>{"rde-exploration-context-year"=>["Context", "Year"]}}
133
+ # @param type_of_analysis [Symbol] one of :univariate, :bivariate, :multivariate
134
+ # @param data_series_names [Array<String>] names of data_series to return answer for
135
+ # @return [Boolean]
136
+ def render_exploration_for?(explorations_to_render, type_of_analysis, data_series_names)
137
+ case type_of_analysis
138
+ when :univariate
139
+ # Return true if a :univariate exploration exists that contains data_series_names
140
+ (explorations_to_render[:univariate] || []).any? { |dom_id, ds_names|
141
+ data_series_names.sort == ds_names.sort
142
+ }
143
+ when :bivariate
144
+ # Return true if a :bivariate exploration exists that contains data_series_names
145
+ (explorations_to_render[:bivariate] || []).any? { |dom_id, ds_names|
146
+ data_series_names.sort == ds_names.sort
147
+ }
148
+ else
149
+ raise "Handle this type_of_analysis: #{ type_of_analysis.inspect }"
138
150
  end
139
151
  end
140
152
 
141
- def separate_explorations_with_and_without_charts
142
- explorations.inject({ with: [], without: [] }) { |m, e|
143
- m[e.charts.any? ? :with : :without] << e
144
- m
145
- }
146
- end
147
-
148
153
  end
@@ -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.2.2'
6
+ gem.version = '0.2.3'
7
7
  gem.platform = Gem::Platform::RUBY
8
8
 
9
9
  gem.authors = ['Jo Hund']
@@ -40,3 +40,35 @@ td.rde-numerical {
40
40
  line-height: normal;
41
41
  text-align: right;
42
42
  }
43
+
44
+ table.rde_toc-matrix.table td {
45
+ text-align: center;
46
+ vertical-align: middle;
47
+ }
48
+
49
+ table.rde_toc-matrix.table th {
50
+ font-weight: normal;
51
+ }
52
+
53
+ th.rde_toc-row_header {
54
+ white-space: nowrap;
55
+ overflow-x: hidden;
56
+ }
57
+
58
+ th.rde_toc-col_header {
59
+ text-align: center;
60
+ }
61
+
62
+ td.rde_toc-available_not_rendered {
63
+ }
64
+
65
+ td.rde_toc-currently_rendered {
66
+ background-color: #cfc;
67
+ }
68
+
69
+ td.rde_toc-not_available {
70
+ color: #999;
71
+ }
72
+
73
+ td.rde_toc-oso_diagonal {
74
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-data-explorer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jo Hund
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-30 00:00:00.000000000 Z
11
+ date: 2015-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: color
@@ -163,6 +163,7 @@ files:
163
163
  - MIT-LICENSE
164
164
  - README.md
165
165
  - Rakefile
166
+ - app/assets/images/rails-data-explorer/multiple_bivariate_small.png
166
167
  - doc/how_to/release.md
167
168
  - doc/how_to/trouble_when_packaging_assets.md
168
169
  - doc/rails-data-explorer-screenshot.png