blazer_xlsx 3.0.6 → 3.0.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4309fcc7bc80c9b7d6ff7bdc8fa3dc93533b178835c05025e3969cf2a5dd3526
4
- data.tar.gz: 723244fd829079c8a26a215343af2da7a3ff712cc7d0982d303f907591ae6158
3
+ metadata.gz: 5028ca491b2786dd3d421258bb044d35c4d8ea3bafa76a13412ce97c97b7e345
4
+ data.tar.gz: ebb2f929232d742569000d3ee4973a6fd955b0b5c41e60a8b1927e743fa57f69
5
5
  SHA512:
6
- metadata.gz: 88dd7fb66ff8cae7ad3a158506d7e7fe6140c9a763016974d7feb6c49b63138f85c3054f16069417266c36b9c205c918fd5c78265375095fade173faa82ba0dd
7
- data.tar.gz: 663d107a09f63ac46902d373591b3d5679bd4ebf71bb83a481870ef73f7fbdc6b55f8509993850cea1b4e7f5a3c86fd5b3dce4575a55172053bf7b5295e0ae5d
6
+ metadata.gz: 946dd43ae310c7243ae38acc8d72e0eb641e91b5a4612d9891db135222386426c82288c64874a2e7c40d1afa75cb67dae72c15dda2bb0ae3957f8c7a0850840b
7
+ data.tar.gz: a4f595cbd4497e43fcd696a65a231fc29e5a8ad32f81157864999f3e4a947e930d333d4f0f21e96d8d036fd2d3325e2cf2df29c98342331026a137eec31f23c8
data/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ## 3.0.4 (unreleased)
2
2
 
3
- - Fixed error with MySQL and binary data
3
+ - Improved CSP support
4
4
 
5
5
  ## 3.0.3 (2024-01-10)
6
6
 
data/README.md CHANGED
@@ -1026,51 +1026,6 @@ override_csp: true
1026
1026
 
1027
1027
  Maps now use Mapbox GL JS v1 instead of Mapbox.js, which affects Mapbox billing.
1028
1028
 
1029
- ### 2.6
1030
-
1031
- Custom adapters now need to specify how to quote variables in queries (there is no longer a default)
1032
-
1033
- ```ruby
1034
- class FooAdapter < Blazer::Adapters::BaseAdapter
1035
- def quoting
1036
- :backslash_escape # single quote strings and convert ' to \' and \ to \\
1037
- # or
1038
- :single_quote_escape # single quote strings and convert ' to ''
1039
- # or
1040
- ->(value) { ... } # custom method
1041
- end
1042
- end
1043
- ```
1044
-
1045
- ### 2.3
1046
-
1047
- To archive queries, create a migration
1048
-
1049
- ```sh
1050
- rails g migration add_status_to_blazer_queries
1051
- ```
1052
-
1053
- with:
1054
-
1055
- ```ruby
1056
- add_column :blazer_queries, :status, :string
1057
- Blazer::Query.update_all(status: "active")
1058
- ```
1059
-
1060
- ### 2.0
1061
-
1062
- To use Slack notifications, create a migration
1063
-
1064
- ```sh
1065
- rails g migration add_slack_channels_to_blazer_checks
1066
- ```
1067
-
1068
- with:
1069
-
1070
- ```ruby
1071
- add_column :blazer_checks, :slack_channels, :text
1072
- ```
1073
-
1074
1029
  ## History
1075
1030
 
1076
1031
  View the [changelog](https://github.com/ankane/blazer/blob/master/CHANGELOG.md)
@@ -71,9 +71,9 @@ module Blazer
71
71
  if smart_var_data_source
72
72
  query = smart_var_data_source.smart_variables[var]
73
73
 
74
- if query.is_a? Hash
75
- smart_var = query.map { |k,v| [v, k] }
76
- elsif query.is_a? Array
74
+ if query.is_a?(Hash)
75
+ smart_var = query.map { |k, v| [v, k] }
76
+ elsif query.is_a?(Array)
77
77
  smart_var = query.map { |v| [v, v] }
78
78
  elsif query
79
79
  result = smart_var_data_source.run_statement(query)
@@ -1,6 +1,6 @@
1
1
  <% if @bind_vars.any? %>
2
2
  <% var_params = request.query_parameters %>
3
- <script>
3
+ <%= javascript_tag nonce: true do %>
4
4
  <%= blazer_js_var "timeZone", Blazer.time_zone.tzinfo.name %>
5
5
  var now = moment.tz(timeZone)
6
6
  var format = "YYYY-MM-DD"
@@ -8,7 +8,7 @@
8
8
  function toDate(time) {
9
9
  return moment.tz(time.format(format), timeZone)
10
10
  }
11
- </script>
11
+ <% end %>
12
12
  <form id="bind" method="get" action="<%= action %>" class="form-inline" style="margin-bottom: 15px;">
13
13
  <% date_vars = ["start_time", "end_time"] %>
14
14
  <% if (date_vars - @bind_vars).empty? %>
@@ -21,11 +21,11 @@
21
21
  <%= label_tag var, var %>
22
22
  <% if (data = @smart_vars[var]) %>
23
23
  <%= select_tag var, options_for_select([[nil, nil]] + data, selected: var_params[var]), style: "margin-right: 20px; width: 200px; display: none;" %>
24
- <script>
24
+ <%= javascript_tag nonce: true do %>
25
25
  $("#<%= var %>").selectize({
26
26
  create: true
27
27
  });
28
- </script>
28
+ <% end %>
29
29
  <% elsif var.end_with?("_at") || var == "start_time" || var == "end_time" %>
30
30
  <%= hidden_field_tag var, var_params[var] %>
31
31
 
@@ -35,7 +35,7 @@
35
35
  </div>
36
36
  </div>
37
37
 
38
- <script>
38
+ <%= javascript_tag nonce: true do %>
39
39
  (function() {
40
40
  var input = $("#<%= var %>")
41
41
  var datePicker = $("#<%= var %>-select")
@@ -57,7 +57,7 @@
57
57
  datePicker.find("span").html(toDate(picker.startDate).format("MMMM D, YYYY"))
58
58
  }
59
59
  })()
60
- </script>
60
+ <% end %>
61
61
  <% else %>
62
62
  <%= text_field_tag var, var_params[var], style: "width: 120px; margin-right: 20px;", autofocus: i == 0 && !var.end_with?("_at") && !var_params[var], class: "form-control" %>
63
63
  <% end %>
@@ -75,7 +75,7 @@
75
75
  </div>
76
76
  </div>
77
77
 
78
- <script>
78
+ <%= javascript_tag nonce: true do %>
79
79
  function dateStr(daysAgo) {
80
80
  return now.clone().subtract(daysAgo || 0, "days").format(format)
81
81
  }
@@ -119,7 +119,7 @@
119
119
  $("#reportrange").trigger("apply.daterangepicker", picker)
120
120
  submitIfCompleted($("#start_time").closest("form"))
121
121
  }
122
- </script>
122
+ <% end %>
123
123
  <% end %>
124
124
 
125
125
  <input type="submit" class="btn btn-success" value="Run" style="vertical-align: top;" />
@@ -12,12 +12,12 @@
12
12
  <div class="hide">
13
13
  <%= f.select :query_id, [], {include_blank: true} %>
14
14
  </div>
15
- <script>
15
+ <%= javascript_tag nonce: true do %>
16
16
  <%= blazer_js_var "queries", Blazer::Query.active.named.order(:name).select("id, name").map { |q| {text: q.name, value: q.id} } %>
17
17
  <%= blazer_js_var "items", [@check.query_id].compact %>
18
18
 
19
19
  $("#check_query_id").selectize({options: queries, items: items, highlight: false, maxOptions: 100}).parents(".hide").removeClass("hide");
20
- </script>
20
+ <% end %>
21
21
  </div>
22
22
 
23
23
  <% if @check.respond_to?(:check_type) %>
@@ -28,9 +28,9 @@
28
28
  <% check_options << ["Anomaly (most recent data point)", "anomaly"] if Blazer.anomaly_checks %>
29
29
  <%= f.select :check_type, check_options %>
30
30
  </div>
31
- <script>
31
+ <%= javascript_tag nonce: true do %>
32
32
  $("#check_check_type").selectize({}).parent().removeClass("hide");
33
- </script>
33
+ <% end %>
34
34
  </div>
35
35
  <% elsif @check.respond_to?(:invert) %>
36
36
  <div class="form-group">
@@ -38,9 +38,9 @@
38
38
  <div class="hide">
39
39
  <%= f.select :invert, [["Any results (bad data)", false], ["No results (missing data)", true]] %>
40
40
  </div>
41
- <script>
41
+ <%= javascript_tag nonce: true do %>
42
42
  $("#check_invert").selectize({}).parent().removeClass("hide");
43
- </script>
43
+ <% end %>
44
44
  </div>
45
45
  <% end %>
46
46
 
@@ -50,9 +50,9 @@
50
50
  <div class="hide">
51
51
  <%= f.select :schedule, Blazer.check_schedules.map { |v| [v, v] } %>
52
52
  </div>
53
- <script>
53
+ <%= javascript_tag nonce: true do %>
54
54
  $("#check_schedule").selectize({}).parent().removeClass("hide");
55
- </script>
55
+ <% end %>
56
56
  </div>
57
57
  <% end %>
58
58
 
@@ -62,11 +62,11 @@
62
62
  </tbody>
63
63
  </table>
64
64
 
65
- <script>
65
+ <%= javascript_tag nonce: true do %>
66
66
  $("#search").on("keyup", function() {
67
67
  var value = $(this).val().toLowerCase()
68
68
  $("#checks tbody tr").filter( function() {
69
69
  $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
70
70
  })
71
71
  }).focus()
72
- </script>
72
+ <% end %>
@@ -30,7 +30,7 @@
30
30
  </p>
31
31
  <% end %>
32
32
 
33
- <script>
33
+ <%= javascript_tag nonce: true do %>
34
34
  <%= blazer_js_var "queries", Blazer::Query.active.named.order(:name).select("id, name").map { |q| {text: q.name, value: q.id} } %>
35
35
  <%= blazer_js_var "dashboardQueries", @queries || @dashboard.dashboard_queries.order(:position).map(&:query) %>
36
36
 
@@ -79,4 +79,4 @@
79
79
  app.queries.splice(e.newIndex, 0, app.queries.splice(e.oldIndex, 1)[0])
80
80
  }
81
81
  })
82
- </script>
82
+ <% end %>
@@ -38,7 +38,7 @@
38
38
  <p class="text-muted">Loading...</p>
39
39
  </div>
40
40
  </div>
41
- <script>
41
+ <%= javascript_tag nonce: true do %>
42
42
  <% data = {statement: query.statement, query_id: query.id, data_source: query.data_source, variables: variable_params(query), only_chart: true} %>
43
43
  <% data.merge!(cohort_period: params[:cohort_period]) if params[:cohort_period] %>
44
44
  <%= blazer_js_var "data", data %>
@@ -49,5 +49,5 @@
49
49
  }, function (message) {
50
50
  $("#chart-<%= i %>").addClass("query-error").html(message)
51
51
  });
52
- </script>
52
+ <% end %>
53
53
  <% end %>
@@ -68,7 +68,7 @@
68
68
  </div>
69
69
  </div>
70
70
 
71
- <script>
71
+ <%= javascript_tag nonce: true do %>
72
72
  <%= blazer_js_var "variableParams", @variable_params %>
73
73
  <%= blazer_js_var "previewStatement", Blazer.data_sources.to_h { |k, v| [k, (v.preview_statement rescue "")] } %>
74
74
 
@@ -252,4 +252,4 @@
252
252
  })
253
253
  app.config.compilerOptions.whitespace = "preserve"
254
254
  app.mount("#app")
255
- </script>
255
+ <% end %>
@@ -56,7 +56,7 @@
56
56
  <p v-if="more" class="text-muted">Loading...</p>
57
57
  </div>
58
58
 
59
- <script>
59
+ <%= javascript_tag nonce: true do %>
60
60
  <%= blazer_js_var "dashboards", @dashboards %>
61
61
  <%= blazer_js_var "queries", @queries %>
62
62
  <%= blazer_js_var "more", @more %>
@@ -166,4 +166,4 @@
166
166
  })
167
167
  app.config.compilerOptions.whitespace = "preserve"
168
168
  app.mount("#queries")
169
- </script>
169
+ <% end %>
@@ -75,21 +75,21 @@
75
75
  <% if @markers.any? %>
76
76
  <% map_id = SecureRandom.hex %>
77
77
  <%= content_tag :div, nil, id: map_id, style: "height: #{@only_chart ? 300 : 500}px;" %>
78
- <script>
78
+ <%= javascript_tag nonce: true do %>
79
79
  <%= blazer_js_var "mapboxAccessToken", Blazer.mapbox_access_token %>
80
80
  <%= blazer_js_var "markers", @markers %>
81
81
  <%= blazer_js_var "mapId", map_id %>
82
82
  new Mapkick.Map(mapId, markers, {accessToken: mapboxAccessToken, tooltips: {hover: false, html: true}});
83
- </script>
83
+ <% end %>
84
84
  <% elsif @geojson.any? %>
85
85
  <% map_id = SecureRandom.hex %>
86
86
  <%= content_tag :div, nil, id: map_id, style: "height: #{@only_chart ? 300 : 500}px;" %>
87
- <script>
87
+ <%= javascript_tag nonce: true do %>
88
88
  <%= blazer_js_var "mapboxAccessToken", Blazer.mapbox_access_token %>
89
89
  <%= blazer_js_var "geojson", @geojson %>
90
90
  <%= blazer_js_var "mapId", map_id %>
91
91
  new Mapkick.AreaMap(mapId, geojson, {accessToken: mapboxAccessToken, tooltips: {hover: false, html: true}});
92
- </script>
92
+ <% end %>
93
93
  <% elsif chart_type == "line" %>
94
94
  <% chart_data = @columns[1..-1].each_with_index.map{ |k, i| {name: blazer_series_name(k), data: @rows.map{ |r| [r[0], r[i + 1]] }, library: series_library[i]} } %>
95
95
  <%= line_chart chart_data, **chart_options %>
@@ -28,7 +28,7 @@
28
28
  </table>
29
29
  <% end %>
30
30
 
31
- <script>
31
+ <%= javascript_tag nonce: true do %>
32
32
  $("#search").on("keyup", function() {
33
33
  var value = $(this).val().toLowerCase()
34
34
  $(".schema-table").filter(function() {
@@ -52,4 +52,4 @@
52
52
  $(this).toggle(found)
53
53
  })
54
54
  }).focus()
55
- </script>
55
+ <% end %>
@@ -46,7 +46,7 @@
46
46
  <p class="text-muted">Loading...</p>
47
47
  </div>
48
48
 
49
- <script>
49
+ <%= javascript_tag nonce: true do %>
50
50
  function showRun(data) {
51
51
  $("#results").html(data)
52
52
  $("#results table").stupidtable(stupidtableCustomSettings).stickyTableHeaders({fixedOffset: 60})
@@ -59,14 +59,14 @@
59
59
  <%= blazer_js_var "data", @run_data %>
60
60
 
61
61
  runQuery(data, showRun, showError)
62
- </script>
62
+ <% end %>
63
63
  <% end %>
64
64
 
65
- <script>
65
+ <%= javascript_tag nonce: true do %>
66
66
  // do not highlight really long queries
67
67
  // this can lead to performance issues
68
68
  var code = $("#code code")
69
69
  if (code.text().length < 10000) {
70
70
  hljs.highlightElement(code.get(0))
71
71
  }
72
- </script>
72
+ <% end %>
@@ -45,11 +45,11 @@
45
45
  </tbody>
46
46
  </table>
47
47
 
48
- <script>
48
+ <%= javascript_tag nonce: true do %>
49
49
  $("#search").on("keyup", function() {
50
50
  var value = $(this).val().toLowerCase()
51
51
  $("#uploads tbody tr").filter( function() {
52
52
  $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
53
53
  })
54
54
  }).focus()
55
- </script>
55
+ <% end %>
@@ -7,18 +7,18 @@
7
7
  <%= favicon_link_tag "blazer/favicon.png" %>
8
8
  <% if defined?(Propshaft::Railtie) %>
9
9
  <%= stylesheet_link_tag "blazer/bootstrap-propshaft", "blazer/bootstrap", "blazer/selectize", "blazer/github", "blazer/daterangepicker", "blazer/application" %>
10
- <%= javascript_include_tag "blazer/jquery", "blazer/rails-ujs", "blazer/stupidtable", "blazer/stupidtable-custom-settings", "blazer/jquery.stickytableheaders", "blazer/selectize", "blazer/highlight.min", "blazer/moment", "blazer/moment-timezone-with-data", "blazer/daterangepicker", "blazer/chart.umd", "blazer/chartjs-adapter-date-fns.bundle", "blazer/chartkick", "blazer/mapkick.bundle", "blazer/ace/ace", "blazer/ace/ext-language_tools", "blazer/ace/theme-twilight", "blazer/ace/mode-sql", "blazer/ace/snippets/text", "blazer/ace/snippets/sql", "blazer/Sortable", "blazer/bootstrap", "blazer/vue.global.prod", "blazer/routes", "blazer/queries", "blazer/fuzzysearch", "blazer/application" %>
10
+ <%= javascript_include_tag "blazer/jquery", "blazer/rails-ujs", "blazer/stupidtable", "blazer/stupidtable-custom-settings", "blazer/jquery.stickytableheaders", "blazer/selectize", "blazer/highlight.min", "blazer/moment", "blazer/moment-timezone-with-data", "blazer/daterangepicker", "blazer/chart.umd", "blazer/chartjs-adapter-date-fns.bundle", "blazer/chartkick", "blazer/mapkick.bundle", "blazer/ace/ace", "blazer/ace/ext-language_tools", "blazer/ace/theme-twilight", "blazer/ace/mode-sql", "blazer/ace/snippets/text", "blazer/ace/snippets/sql", "blazer/Sortable", "blazer/bootstrap", "blazer/vue.global.prod", "blazer/routes", "blazer/queries", "blazer/fuzzysearch", "blazer/application", nonce: true %>
11
11
  <% else %>
12
12
  <%= stylesheet_link_tag "blazer/application" %>
13
- <%= javascript_include_tag "blazer/application" %>
13
+ <%= javascript_include_tag "blazer/application", nonce: true %>
14
14
  <% end %>
15
- <script>
15
+ <%= javascript_tag nonce: true do %>
16
16
  <%= blazer_js_var "rootPath", root_path %>
17
- </script>
17
+ <% end %>
18
18
  <%= csrf_meta_tags %>
19
19
  </head>
20
20
  <body>
21
- <div class="container">
21
+ <div class="container" style="margin-left:40px">
22
22
  <%= yield %>
23
23
  </div>
24
24
  </body>
@@ -33,7 +33,7 @@ module Blazer
33
33
  # use token so we fetch cached results after query is run
34
34
  client_request_token: request_token,
35
35
  query_execution_context: {
36
- database: database,
36
+ database: database
37
37
  }
38
38
  }
39
39
 
@@ -45,7 +45,7 @@ module Blazer
45
45
  port: uri.port,
46
46
  username: uri.user,
47
47
  password: uri.password,
48
- database: uri.path.sub(/\A\//, ""),
48
+ database: uri.path.delete_prefix("/"),
49
49
  mode: uri.scheme.to_sym
50
50
  )
51
51
  end
@@ -39,10 +39,10 @@ module Blazer
39
39
  def client
40
40
  @client ||= begin
41
41
  uri = URI.parse(settings["url"])
42
- query = uri.query ? CGI::parse(uri.query) : {}
42
+ query = uri.query ? CGI.parse(uri.query) : {}
43
43
  Presto::Client.new(
44
44
  server: "#{uri.host}:#{uri.port}",
45
- catalog: uri.path.to_s.sub(/\A\//, ""),
45
+ catalog: uri.path.to_s.delete_prefix("/"),
46
46
  schema: query["schema"] || "public",
47
47
  user: uri.user,
48
48
  http_debug: false
@@ -46,20 +46,6 @@ module Blazer
46
46
  if adapter_name == "Trilogy"
47
47
  columns.map! { |k| k.dup.force_encoding(Encoding::UTF_8) }
48
48
  end
49
-
50
- # fix for binary data
51
- if mysql?
52
- rows =
53
- rows.map do |row|
54
- row.map do |v|
55
- if v.is_a?(String) && v.encoding == Encoding::BINARY
56
- "0x#{v.unpack1("H*").upcase}"
57
- else
58
- v
59
- end
60
- end
61
- end
62
- end
63
49
  rescue => e
64
50
  error = e.message.sub(/.+ERROR: /, "")
65
51
  error = Blazer::TIMEOUT_MESSAGE if Blazer::TIMEOUT_ERRORS.any? { |e| error.include?(e) }
@@ -164,7 +150,7 @@ module Blazer
164
150
  def cohort_analysis_statement(statement, period:, days:)
165
151
  raise "Cohort analysis not supported" unless supports_cohort_analysis?
166
152
 
167
- cohort_column = statement =~ /\bcohort_time\b/ ? "cohort_time" : "conversion_time"
153
+ cohort_column = statement.match?(/\bcohort_time\b/) ? "cohort_time" : "conversion_time"
168
154
  tzname = Blazer.time_zone.tzinfo.name
169
155
 
170
156
  if mysql?
@@ -107,7 +107,7 @@ module Blazer
107
107
  end
108
108
 
109
109
  unless result
110
- comment = "blazer"
110
+ comment = "blazer".dup
111
111
  if options[:user].respond_to?(:id)
112
112
  comment << ",user_id:#{options[:user].id}"
113
113
  end
data/lib/blazer/result.rb CHANGED
@@ -131,7 +131,7 @@ module Blazer
131
131
 
132
132
  if chart_type == "line"
133
133
  columns[1..-1].each_with_index.each do |k, i|
134
- series << {name: k, data: rows.map{ |r| [r[0], r[i + 1]] }}
134
+ series << {name: k, data: rows.map { |r| [r[0], r[i + 1]] }}
135
135
  end
136
136
  else
137
137
  rows.group_by { |r| v = r[1]; (smart_values[columns[1]] || {})[v.to_s] || v }.each_with_index.map do |(name, v), i|
@@ -33,9 +33,9 @@ module Blazer
33
33
  end
34
34
 
35
35
  unless value.is_a?(ActiveSupport::TimeWithZone)
36
- if value =~ /\A\d+\z/
36
+ if value.match?(/\A\d+\z/)
37
37
  value = value.to_i
38
- elsif value =~ /\A\d+\.\d+\z/
38
+ elsif value.match?(/\A\d+\.\d+\z/)
39
39
  value = value.to_f
40
40
  end
41
41
  end
@@ -1,3 +1,3 @@
1
1
  module Blazer
2
- VERSION = "3.0.6"
2
+ VERSION = '3.0.8'
3
3
  end
@@ -0,0 +1 @@
1
+ require "blazer"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blazer_xlsx
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.6
4
+ version: 3.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Caio Garcia
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-22 00:00:00.000000000 Z
11
+ date: 2024-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -94,8 +94,8 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description:
98
- email:
97
+ description:
98
+ email:
99
99
  executables: []
100
100
  extensions: []
101
101
  extra_rdoc_files: []
@@ -220,6 +220,7 @@ files:
220
220
  - lib/blazer/slack_notifier.rb
221
221
  - lib/blazer/statement.rb
222
222
  - lib/blazer/version.rb
223
+ - lib/blazer_xlsx.rb
223
224
  - lib/generators/blazer/install_generator.rb
224
225
  - lib/generators/blazer/templates/config.yml.tt
225
226
  - lib/generators/blazer/templates/install.rb.tt
@@ -249,7 +250,7 @@ files:
249
250
  homepage: https://github.com/CaioGarcia1/blazer_xlsx
250
251
  licenses: []
251
252
  metadata: {}
252
- post_install_message:
253
+ post_install_message:
253
254
  rdoc_options: []
254
255
  require_paths:
255
256
  - lib
@@ -264,8 +265,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
264
265
  - !ruby/object:Gem::Version
265
266
  version: '0'
266
267
  requirements: []
267
- rubygems_version: 3.5.6
268
- signing_key:
268
+ rubygems_version: 3.4.1
269
+ signing_key:
269
270
  specification_version: 4
270
271
  summary: Blazer fork that adds support for exporting to XLSX
271
272
  test_files: []