tramway-export 0.1.6.1 → 0.2

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
  SHA256:
3
- metadata.gz: df0d13ef84947e8919fa668afdfbe92cb23bb45a7a12155b920a5c1308e0cf60
4
- data.tar.gz: 9c5f6ef10e38796e12b6a0aa1a979e916be768e1e164c594a1d425e98e1198fb
3
+ metadata.gz: 8629ca9795a930ddd76a2838536e4dca3d116a21fded0978ad8278b366e0d9d3
4
+ data.tar.gz: 178e67ebb1b2cce89b9ab863190151dedb5e93aa8924c019c0e0fc1042d96a81
5
5
  SHA512:
6
- metadata.gz: 0c79b3327dd4f2f0f24079e88d62bdb61a259d10145aa03e7ba2ecc1e69fe66be1b6e73086cb76718a0c8830e928dc38a949c78b4c8703e2ac9f3505e55cd2ed
7
- data.tar.gz: 63d6ed73d3d4d5b6c33dce060b7b7442462e36a29e2ec1542656252e7f8d79ca1f1e15ed47eb6a7f045fe61f1be286fc34b87ca7307b8f88a20abd8fbca4a774
6
+ metadata.gz: b6501955c42631a2607883c0a6ddd44443646ce35f090d4dface449d496906bf045ef7fdae7bd227b81c95230cea6c4e0088c3a1906c0bfdc16a1adac1e7d033
7
+ data.tar.gz: b8ec8841c5c3a493a54509030ed17c9b063c7922f58c4aad2900de771a82a26bcf1ebee6ace7acd39fd42aab55114e6f710d5c7215f61a44e211f4ac2ead63c2
@@ -3,7 +3,7 @@
3
3
  require 'xls_exporter'
4
4
 
5
5
  class Tramway::Export::ExportsController < Tramway::Admin::ApplicationController
6
- def show
6
+ def index
7
7
  scope = params[:scope].present? ? params[:scope] : :all
8
8
  model_class = model_class_name(params[:model])
9
9
  xls_decorator_class = xls_decorator_class_name(params[:model])
@@ -28,9 +28,48 @@ class Tramway::Export::ExportsController < Tramway::Admin::ApplicationController
28
28
  send_data stream.string, content_type: 'application/xls', filename: xls_decorator_class.filename
29
29
  end
30
30
 
31
+ def show
32
+ head(:unprocessable_entity) && return unless available?
33
+
34
+ model_class = model_class_name(params[:model])
35
+ xls_collection_decorator_class = xls_collection_decorator_class_name(params[:model], params[:collection])
36
+ records = model_class.find(params[:id]).send(params[:collection]).active.order(id: :desc)
37
+ records = records.send "#{current_admin.role}_scope", current_admin.id
38
+ records = xls_collection_decorator_class.decorate records
39
+
40
+ columns = xls_collection_decorator_class.columns + records.map(&:flexible_columns).flatten.uniq do |hash|
41
+ hash&.keys&.first
42
+ end
43
+
44
+ book = ::XlsExporter.export do
45
+ default_style horizontal_align: :center, vertical_align: :center, text_wrap: true
46
+
47
+ add_sheet xls_collection_decorator_class.sheet_name
48
+
49
+ export_models records, *columns
50
+ end
51
+ stream = StringIO.new
52
+ book.write stream
53
+ send_data stream.string, content_type: 'application/xls', filename: xls_collection_decorator_class.filename
54
+ end
55
+
31
56
  private
32
57
 
33
58
  def xls_decorator_class_name(model_name)
34
59
  "#{model_name}XlsDecorator".constantize
35
60
  end
61
+
62
+ def xls_collection_decorator_class_name(model_name, collection)
63
+ "#{model_name}::#{collection.camelize}XlsDecorator".constantize
64
+ end
65
+
66
+ def available?
67
+ if params[:collection].present?
68
+ ::Tramway::Export.exportable_model?(params[:model], project: @application.name) && Tramway::Export.exportable_models(project: @application.name)&.map do |config|
69
+ config.is_a?(Hash) && config.values.first.map(&:to_s).include?(params[:collection])
70
+ end&.include?(true)
71
+ else
72
+ ::Tramway::Export.exportable_model?(params[:model], project: @application.name)
73
+ end
74
+ end
36
75
  end
@@ -4,6 +4,9 @@ module Tramway
4
4
  module Export
5
5
  module Xls
6
6
  class ApplicationDecorator < Tramway::Export::ApplicationDecorator
7
+ def flexible_columns
8
+ []
9
+ end
7
10
  end
8
11
  end
9
12
  end
data/config/routes.rb CHANGED
@@ -1,9 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  Tramway::Export::Engine.routes.draw do
4
- resources :exports, only: [] do
5
- collection do
6
- get :show
7
- end
8
- end
4
+ resources :exports, only: [ :show, :index ]
9
5
  end
@@ -7,17 +7,20 @@ module Tramway
7
7
  class << self
8
8
  def set_exportable_models(*models, project:)
9
9
  @exportable_models ||= {}
10
- @exportable_models[project] ||= []
11
- @exportable_models[project] += models
10
+ @exportable_models[project.to_sym] ||= []
11
+ @exportable_models[project.to_sym] += models
12
+ end
13
+
14
+ def exportable_models(project:)
15
+ @exportable_models[project.to_sym]
12
16
  end
13
17
 
14
18
  def exportable_model?(model_class, project:)
15
19
  return false unless project.present?
16
20
 
17
- @exportable_models[project.to_sym]&.include? model_class
21
+ @exportable_models[project.to_sym]&.include?(model_class) ||
22
+ @exportable_models[project.to_sym].map { |config| config.is_a?(Hash) && config.keys.first.to_s == model_class.to_s }.include?(true)
18
23
  end
19
-
20
- attr_reader :exportable_models
21
24
  end
22
25
  end
23
26
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Tramway
4
4
  module Export
5
- VERSION = '0.1.6.1'
5
+ VERSION = '0.2'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tramway-export
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6.1
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Kalashnikov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-01 00:00:00.000000000 Z
11
+ date: 2021-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xls_exporter
@@ -69,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  requirements: []
72
- rubygems_version: 3.1.2
72
+ rubygems_version: 3.1.4
73
73
  signing_key:
74
74
  specification_version: 4
75
75
  summary: Rails engine for exporting data