administrate_exportable 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 55c0bdfe3b210474339bc39070f7610646c0b2c3
4
+ data.tar.gz: 3569c8037f32ed5196b81805abbf322a7a3c61cd
5
+ SHA512:
6
+ metadata.gz: 947b15a467c2c1dfa1d51c7a4b08409963a0123f22deb148883aa7d0029e7f8d8bbad1525e106c53d4e9dfafa6f1e4e70e189d0f14a9db7cc5290fd30f6f2e28
7
+ data.tar.gz: 27bb3cf01b756f046adfaa451f93a8e180231bb6658ae1bdf390e8ee7c2cab2da2dca268a980b0a91aff764a5e4c3e68845fa0ddb94e618de5e7908ad768a171
data/.gitignore ADDED
@@ -0,0 +1,20 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
12
+
13
+
14
+ # Ignore the default SQLite database.
15
+ spec/dummy/db/*.sqlite3
16
+ spec/dummy/db/*.sqlite3-journal
17
+
18
+ # Ignore all logfiles and tempfiles.
19
+ spec/dummy/log/*
20
+ spec/dummy/tmp/*
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.4.2
5
+ before_install: gem install bundler -v 1.16.0
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ eval_gemfile File.join(File.dirname(__FILE__), "spec/dummy/Gemfile")
data/Gemfile.lock ADDED
@@ -0,0 +1,220 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ administrate_exportable (0.1.0)
5
+ administrate (> 0.10.0)
6
+ rails (>= 4.2, < 6.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actioncable (5.2.1)
12
+ actionpack (= 5.2.1)
13
+ nio4r (~> 2.0)
14
+ websocket-driver (>= 0.6.1)
15
+ actionmailer (5.2.1)
16
+ actionpack (= 5.2.1)
17
+ actionview (= 5.2.1)
18
+ activejob (= 5.2.1)
19
+ mail (~> 2.5, >= 2.5.4)
20
+ rails-dom-testing (~> 2.0)
21
+ actionpack (5.2.1)
22
+ actionview (= 5.2.1)
23
+ activesupport (= 5.2.1)
24
+ rack (~> 2.0)
25
+ rack-test (>= 0.6.3)
26
+ rails-dom-testing (~> 2.0)
27
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
28
+ actionview (5.2.1)
29
+ activesupport (= 5.2.1)
30
+ builder (~> 3.1)
31
+ erubi (~> 1.4)
32
+ rails-dom-testing (~> 2.0)
33
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
34
+ activejob (5.2.1)
35
+ activesupport (= 5.2.1)
36
+ globalid (>= 0.3.6)
37
+ activemodel (5.2.1)
38
+ activesupport (= 5.2.1)
39
+ activerecord (5.2.1)
40
+ activemodel (= 5.2.1)
41
+ activesupport (= 5.2.1)
42
+ arel (>= 9.0)
43
+ activestorage (5.2.1)
44
+ actionpack (= 5.2.1)
45
+ activerecord (= 5.2.1)
46
+ marcel (~> 0.3.1)
47
+ activesupport (5.2.1)
48
+ concurrent-ruby (~> 1.0, >= 1.0.2)
49
+ i18n (>= 0.7, < 2)
50
+ minitest (~> 5.1)
51
+ tzinfo (~> 1.1)
52
+ administrate (0.11.0)
53
+ actionpack (>= 4.2, < 6.0)
54
+ actionview (>= 4.2, < 6.0)
55
+ activerecord (>= 4.2, < 6.0)
56
+ autoprefixer-rails (>= 6.0)
57
+ datetime_picker_rails (~> 0.0.7)
58
+ jquery-rails (>= 4.0)
59
+ kaminari (>= 1.0)
60
+ momentjs-rails (~> 2.8)
61
+ sass-rails (~> 5.0)
62
+ selectize-rails (~> 0.6)
63
+ administrate-field-enumerate (0.0.1)
64
+ administrate
65
+ enumerate_it
66
+ rails (>= 4.2, < 6.0)
67
+ arel (9.0.0)
68
+ autoprefixer-rails (9.3.1)
69
+ execjs
70
+ builder (3.2.3)
71
+ byebug (10.0.2)
72
+ coderay (1.1.2)
73
+ concurrent-ruby (1.1.3)
74
+ crass (1.0.4)
75
+ datetime_picker_rails (0.0.7)
76
+ momentjs-rails (>= 2.8.1)
77
+ diff-lcs (1.3)
78
+ enumerate_it (1.7.0)
79
+ activesupport (>= 3.0.0)
80
+ erubi (1.7.1)
81
+ execjs (2.7.0)
82
+ ffi (1.9.25)
83
+ globalid (0.4.1)
84
+ activesupport (>= 4.2.0)
85
+ i18n (1.1.1)
86
+ concurrent-ruby (~> 1.0)
87
+ jquery-rails (4.3.3)
88
+ rails-dom-testing (>= 1, < 3)
89
+ railties (>= 4.2.0)
90
+ thor (>= 0.14, < 2.0)
91
+ kaminari (1.1.1)
92
+ activesupport (>= 4.1.0)
93
+ kaminari-actionview (= 1.1.1)
94
+ kaminari-activerecord (= 1.1.1)
95
+ kaminari-core (= 1.1.1)
96
+ kaminari-actionview (1.1.1)
97
+ actionview
98
+ kaminari-core (= 1.1.1)
99
+ kaminari-activerecord (1.1.1)
100
+ activerecord
101
+ kaminari-core (= 1.1.1)
102
+ kaminari-core (1.1.1)
103
+ loofah (2.2.3)
104
+ crass (~> 1.0.2)
105
+ nokogiri (>= 1.5.9)
106
+ mail (2.7.1)
107
+ mini_mime (>= 0.1.1)
108
+ marcel (0.3.3)
109
+ mimemagic (~> 0.3.2)
110
+ method_source (0.9.2)
111
+ mimemagic (0.3.2)
112
+ mini_mime (1.0.1)
113
+ mini_portile2 (2.3.0)
114
+ minitest (5.11.3)
115
+ momentjs-rails (2.20.1)
116
+ railties (>= 3.1)
117
+ nio4r (2.3.1)
118
+ nokogiri (1.8.5)
119
+ mini_portile2 (~> 2.3.0)
120
+ pry (0.12.2)
121
+ coderay (~> 1.1.0)
122
+ method_source (~> 0.9.0)
123
+ pry-byebug (3.6.0)
124
+ byebug (~> 10.0)
125
+ pry (~> 0.10)
126
+ rack (2.0.6)
127
+ rack-test (1.1.0)
128
+ rack (>= 1.0, < 3)
129
+ rails (5.2.1)
130
+ actioncable (= 5.2.1)
131
+ actionmailer (= 5.2.1)
132
+ actionpack (= 5.2.1)
133
+ actionview (= 5.2.1)
134
+ activejob (= 5.2.1)
135
+ activemodel (= 5.2.1)
136
+ activerecord (= 5.2.1)
137
+ activestorage (= 5.2.1)
138
+ activesupport (= 5.2.1)
139
+ bundler (>= 1.3.0)
140
+ railties (= 5.2.1)
141
+ sprockets-rails (>= 2.0.0)
142
+ rails-dom-testing (2.0.3)
143
+ activesupport (>= 4.2.0)
144
+ nokogiri (>= 1.6)
145
+ rails-html-sanitizer (1.0.4)
146
+ loofah (~> 2.2, >= 2.2.2)
147
+ railties (5.2.1)
148
+ actionpack (= 5.2.1)
149
+ activesupport (= 5.2.1)
150
+ method_source
151
+ rake (>= 0.8.7)
152
+ thor (>= 0.19.0, < 2.0)
153
+ rake (10.5.0)
154
+ rb-fsevent (0.10.3)
155
+ rb-inotify (0.9.10)
156
+ ffi (>= 0.5.0, < 2)
157
+ rspec-core (3.8.0)
158
+ rspec-support (~> 3.8.0)
159
+ rspec-expectations (3.8.2)
160
+ diff-lcs (>= 1.2.0, < 2.0)
161
+ rspec-support (~> 3.8.0)
162
+ rspec-mocks (3.8.0)
163
+ diff-lcs (>= 1.2.0, < 2.0)
164
+ rspec-support (~> 3.8.0)
165
+ rspec-rails (3.8.1)
166
+ actionpack (>= 3.0)
167
+ activesupport (>= 3.0)
168
+ railties (>= 3.0)
169
+ rspec-core (~> 3.8.0)
170
+ rspec-expectations (~> 3.8.0)
171
+ rspec-mocks (~> 3.8.0)
172
+ rspec-support (~> 3.8.0)
173
+ rspec-support (3.8.0)
174
+ sass (3.7.2)
175
+ sass-listen (~> 4.0.0)
176
+ sass-listen (4.0.0)
177
+ rb-fsevent (~> 0.9, >= 0.9.4)
178
+ rb-inotify (~> 0.9, >= 0.9.7)
179
+ sass-rails (5.0.7)
180
+ railties (>= 4.0.0, < 6)
181
+ sass (~> 3.1)
182
+ sprockets (>= 2.8, < 4.0)
183
+ sprockets-rails (>= 2.0, < 4.0)
184
+ tilt (>= 1.1, < 3)
185
+ selectize-rails (0.12.6)
186
+ sprockets (3.7.2)
187
+ concurrent-ruby (~> 1.0)
188
+ rack (> 1, < 3)
189
+ sprockets-rails (3.2.1)
190
+ actionpack (>= 4.0)
191
+ activesupport (>= 4.0)
192
+ sprockets (>= 3.0.0)
193
+ sqlite3 (1.3.13)
194
+ thor (0.20.3)
195
+ thread_safe (0.3.6)
196
+ tilt (2.0.8)
197
+ tzinfo (1.2.5)
198
+ thread_safe (~> 0.1)
199
+ websocket-driver (0.7.0)
200
+ websocket-extensions (>= 0.1.0)
201
+ websocket-extensions (0.1.3)
202
+
203
+ PLATFORMS
204
+ ruby
205
+
206
+ DEPENDENCIES
207
+ administrate
208
+ administrate-field-enumerate
209
+ administrate_exportable!
210
+ byebug
211
+ pry-byebug
212
+ rails (~> 5.2.1)
213
+ rspec-rails (~> 3.8)
214
+ sqlite3
215
+
216
+ RUBY VERSION
217
+ ruby 2.4.2p198
218
+
219
+ BUNDLED WITH
220
+ 1.17.1
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 Jônatas Rancan de Souza
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,92 @@
1
+ ## Installation
2
+
3
+ Add this line to your application's Gemfile:
4
+
5
+ ```ruby
6
+ gem 'administrate_exportable'
7
+ ```
8
+
9
+ And then execute:
10
+
11
+ $ bundle
12
+
13
+ Or install it yourself as:
14
+
15
+ $ gem install administrate_exportable
16
+
17
+ ## Usage
18
+
19
+ For each resource you want to be exportable, add the following line to the their respective Administrate controller.
20
+ ```ruby
21
+ include AdministrateExportable::Exporter
22
+ ```
23
+ and the following line in the `db/routes.rb` file, correctly nested on resources
24
+ ```ruby
25
+ get :export, on: :collection
26
+ ```
27
+
28
+ Example:
29
+ ```ruby
30
+ namespace :admin do
31
+ resources :organizations do
32
+ get :export, on: :collection
33
+ end
34
+ ....
35
+ ```
36
+
37
+ By default all the attributes from `ATTRIBUTE_TYPES` will be exported. If you want to exclude an attribute, you can use the option: `export: false`.
38
+
39
+ Example:
40
+ ```ruby
41
+ class BusinessDashboard < Administrate::BaseDashboard
42
+ ATTRIBUTE_TYPES = {
43
+ id: Field::Number.with_options(export: false),
44
+ name: Field::String,
45
+ description: Field::Text,
46
+ ...
47
+ ```
48
+
49
+ For the default field types from Administrate, we export the values you got from the partial `views/fields/index`. And if it is a custom field, we just run `field.to_s`.
50
+ But if you want to specify the value to be exported, you can use the option `transform_on_export`, to pass a `Proc` that receives the `field`.
51
+ Example:
52
+ ```ruby
53
+ ATTRIBUTE_TYPES = {
54
+ created_at: Field::DateTime.with_options(transform_on_export: -> (field) { field.data.strftime("%F") })
55
+ ```
56
+
57
+ By default the gem adds the Export button to the view `views/admin/application/index.html.erb`. But if you have your own Administrate `index` views, you can add the link manually:
58
+ ```ruby
59
+ link_to 'Export', [:export, namespace, page.resource_path], class: 'button'
60
+ ```
61
+
62
+ Example:
63
+
64
+ ```rails
65
+ ....
66
+ <div>
67
+ <%= link_to(
68
+ t(
69
+ "administrate.actions.new_resource",
70
+ name: page.resource_name.titleize.downcase
71
+ ),
72
+ [:new, namespace, page.resource_path],
73
+ class: "button",
74
+ ) if valid_action?(:new) && show_action?(:new, new_resource) %>
75
+ <%= link_to 'Export', [:export, namespace, page.resource_path], class: 'button' %>
76
+ </div>
77
+ ....
78
+ ```
79
+
80
+ ## Development
81
+
82
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
83
+
84
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
85
+
86
+ ## Contributing
87
+
88
+ Bug reports and pull requests are welcome on GitHub at https://github.com/SourceLabsLLC/administrate_exportable.
89
+
90
+ ## License
91
+
92
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,37 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "administrate_exportable/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "administrate_exportable"
8
+ spec.version = AdministrateExportable::VERSION
9
+ spec.authors = ["Jônatas Rancan", "Andrei Bondarev"]
10
+ spec.email = ["hello@sourcelabs.io"]
11
+ spec.homepage = 'https://github.com/SourceLabsLLC/administrate_exportable'
12
+ spec.summary = "Simple plugin to add CSV export feature to Administrate"
13
+ spec.description = spec.summary
14
+ spec.license = "MIT"
15
+
16
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
18
+ # if spec.respond_to?(:metadata)
19
+ # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
20
+ # else
21
+ # raise "RubyGems 2.0 or newer is required to protect against " \
22
+ # "public gem pushes."
23
+ # end
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
26
+ f.match(%r{^(test|spec|features)/})
27
+ end
28
+ spec.bindir = "exe"
29
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
+ spec.require_paths = ["lib"]
31
+
32
+ spec.add_development_dependency "bundler", "~> 1.16"
33
+ spec.add_development_dependency "rake", "~> 10.0"
34
+ spec.add_development_dependency "rspec", "~> 3.0"
35
+ spec.add_dependency 'administrate','> 0.10.0'
36
+ spec.add_dependency 'rails', '>= 4.2', '< 6.0'
37
+ end
@@ -0,0 +1,67 @@
1
+ <%#
2
+ # Index
3
+ This view is the template for the index page.
4
+ It is responsible for rendering the search bar, header and pagination.
5
+ It renders the `_table` partial to display details about the resources.
6
+ ## Local variables:
7
+ - `page`:
8
+ An instance of [Administrate::Page::Collection][1].
9
+ Contains helper methods to help display a table,
10
+ and knows which attributes should be displayed in the resource's table.
11
+ - `resources`:
12
+ An instance of `ActiveRecord::Relation` containing the resources
13
+ that match the user's search criteria.
14
+ By default, these resources are passed to the table partial to be displayed.
15
+ - `search_term`:
16
+ A string containing the term the user has searched for, if any.
17
+ - `show_search_bar`:
18
+ A boolean that determines if the search bar should be shown.
19
+ [1]: http://www.rubydoc.info/gems/administrate/Administrate/Page/Collection
20
+ %>
21
+
22
+ <% content_for(:title) do %>
23
+ <%= display_resource_name(page.resource_name) %>
24
+ <% end %>
25
+
26
+ <header class="main-content__header" role="banner">
27
+ <h1 class="main-content__page-title" id="page-title">
28
+ <%= content_for(:title) %>
29
+ </h1>
30
+
31
+ <% if show_search_bar %>
32
+ <%= render(
33
+ "search",
34
+ search_term: search_term,
35
+ resource_name: display_resource_name(page.resource_name)
36
+ ) %>
37
+ <% end %>
38
+
39
+ <div>
40
+ <%= link_to(
41
+ t(
42
+ "administrate.actions.new_resource",
43
+ name: page.resource_name.titleize.downcase
44
+ ),
45
+ [:new, namespace, page.resource_path],
46
+ class: "button",
47
+ ) if valid_action?(:new) && show_action?(:new, new_resource) %>
48
+ <%= link_to(
49
+ 'Export',
50
+ [:export, namespace, page.resource_name.to_s.pluralize, { format: :csv }],
51
+ class: 'button'
52
+ ) if valid_action?(:export) %>
53
+ </div>
54
+ </header>
55
+
56
+ <section class="main-content__body main-content__body--flush">
57
+ <%= render(
58
+ "collection",
59
+ collection_presenter: page,
60
+ collection_field_name: resource_name,
61
+ page: page,
62
+ resources: resources,
63
+ table_title: "page-title"
64
+ ) %>
65
+
66
+ <%= paginate resources %>
67
+ </section>
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "administrate_exportable"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,8 @@
1
+ require "administrate_exportable/version"
2
+ require "administrate_exportable/exporter_service"
3
+ require "administrate_exportable/exporter"
4
+
5
+ module AdministrateExportable
6
+ class Engine < ::Rails::Engine
7
+ end
8
+ end
@@ -0,0 +1,21 @@
1
+ module AdministrateExportable
2
+ module Exporter
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ exportable
7
+ end
8
+
9
+ class_methods do
10
+ def exportable
11
+ define_method(:export) do
12
+ csv_data = ExporterService.csv(dashboard, resource_class)
13
+
14
+ respond_to do |format|
15
+ format.csv { send_data csv_data, filename: "#{resource_name.to_s.pluralize}-#{Date.today}.csv" }
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,91 @@
1
+ require 'csv'
2
+
3
+ module AdministrateExportable
4
+ class ExporterService
5
+ def self.csv(dashboard, resource_class)
6
+ new(dashboard, resource_class).csv
7
+ end
8
+
9
+ def initialize(dashboard, resource_class)
10
+ @dashboard = dashboard
11
+ @resource_class = resource_class
12
+ end
13
+
14
+ def csv
15
+ CSV.generate(headers: true) do |csv|
16
+
17
+ csv << headers
18
+
19
+ collection.find_each do |record|
20
+ csv << attributes_to_export.map do |attribute_key, attribute_type|
21
+ record_attribute(record, attribute_key, attribute_type)
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :dashboard, :resource_class, :sanitizer
30
+
31
+ def record_attribute(record, attribute_key, attribute_type)
32
+ field = attribute_type.new(attribute_key, record.send(attribute_key), 'index', resource: record)
33
+ transform_on_export = attribute_type.respond_to?(:options) && attribute_type.options[:transform_on_export]
34
+
35
+ if transform_on_export.is_a? Proc
36
+ return transform_on_export.call(field)
37
+ end
38
+
39
+ case field.class.to_s
40
+ when Administrate::Field::BelongsTo.to_s, Administrate::Field::HasOne.to_s, Administrate::Field::Polymorphic.to_s
41
+ field.display_associated_resource if field.data
42
+ when Administrate::Field::HasMany.to_s
43
+ field.data.count if field.data
44
+ when Administrate::Field::DateTime.to_s
45
+ field.datetime if field.data
46
+ when Administrate::Field::Email.to_s, Administrate::Field::Select.to_s
47
+ field.data
48
+ when Administrate::Field::Password.to_s, Administrate::Field::String.to_s, Administrate::Field::Text.to_s
49
+ field.truncate
50
+ when Administrate::Field::Time.to_s
51
+ field.data.strftime("%I:%M%p").to_s if field.data
52
+ else
53
+ field.to_s
54
+ end
55
+ end
56
+
57
+ def headers
58
+ attributes_to_export.map do |attribute_key, _|
59
+ attr_key = attribute_key.to_s
60
+
61
+ if attr_key.include?('_id')
62
+ attr_key
63
+ else
64
+ I18n.t(
65
+ "helpers.label.#{resource_class.name}.#{attr_key}",
66
+ default: attr_key,
67
+ ).titleize
68
+ end
69
+ end
70
+ end
71
+
72
+ def attributes_to_export
73
+ @attributes_to_export ||= begin
74
+ dashboard.class::ATTRIBUTE_TYPES.select do |attribute_key, attribute_type|
75
+ attribute_options = attribute_type.try(:options)
76
+
77
+ !attribute_options || attribute_options[:export] != false
78
+ end
79
+ end
80
+ end
81
+
82
+ def collection
83
+ relation = resource_class.default_scoped
84
+ resource_includes = dashboard.association_includes
85
+
86
+ return relation if resource_includes.empty?
87
+
88
+ relation.includes(*resource_includes)
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,3 @@
1
+ module AdministrateExportable
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,137 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: administrate_exportable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jônatas Rancan
8
+ - Andrei Bondarev
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2018-11-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.16'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.16'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '10.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '10.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '3.0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '3.0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: administrate
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">"
61
+ - !ruby/object:Gem::Version
62
+ version: 0.10.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">"
68
+ - !ruby/object:Gem::Version
69
+ version: 0.10.0
70
+ - !ruby/object:Gem::Dependency
71
+ name: rails
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '4.2'
77
+ - - "<"
78
+ - !ruby/object:Gem::Version
79
+ version: '6.0'
80
+ type: :runtime
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '4.2'
87
+ - - "<"
88
+ - !ruby/object:Gem::Version
89
+ version: '6.0'
90
+ description: Simple plugin to add CSV export feature to Administrate
91
+ email:
92
+ - hello@sourcelabs.io
93
+ executables: []
94
+ extensions: []
95
+ extra_rdoc_files: []
96
+ files:
97
+ - ".gitignore"
98
+ - ".rspec"
99
+ - ".travis.yml"
100
+ - Gemfile
101
+ - Gemfile.lock
102
+ - LICENSE.txt
103
+ - README.md
104
+ - Rakefile
105
+ - administrate_exportable.gemspec
106
+ - app/views/admin/application/index.html.erb
107
+ - bin/console
108
+ - bin/setup
109
+ - lib/administrate_exportable.rb
110
+ - lib/administrate_exportable/exporter.rb
111
+ - lib/administrate_exportable/exporter_service.rb
112
+ - lib/administrate_exportable/version.rb
113
+ homepage: https://github.com/SourceLabsLLC/administrate_exportable
114
+ licenses:
115
+ - MIT
116
+ metadata: {}
117
+ post_install_message:
118
+ rdoc_options: []
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ requirements: []
132
+ rubyforge_project:
133
+ rubygems_version: 2.6.13
134
+ signing_key:
135
+ specification_version: 4
136
+ summary: Simple plugin to add CSV export feature to Administrate
137
+ test_files: []