activeadmin-exporter 0.0.2

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: d41bab04aa0559e53eec7455e8faaa02ebfa5a38
4
+ data.tar.gz: c1a6ccc6419428f41e5b0baf9a5a5bc46dd4c7f8
5
+ SHA512:
6
+ metadata.gz: 0d1b11b2a104c5b43081e0715917ca93b643b0ea053513095ebefc6be5078fa7d71997449154edc8730fdc0f3b0380a16f259d3c6706f7f6fe6de725bd9706e3
7
+ data.tar.gz: 740e76c53b2da615dae32579b761a8064f70d28c63a0a73891d873a749fc5dacc9678c3ec19537b3d8b62dad2e8cf431af62201e0ae414a46603e0875a73b32b
data/.gitignore ADDED
@@ -0,0 +1,54 @@
1
+ # Created by .ignore support plugin (hsz.mobi)
2
+ ### Ruby template
3
+ *.gem
4
+ *.rbc
5
+ /.config
6
+ /coverage/
7
+ /InstalledFiles
8
+ /pkg/
9
+ /spec/reports/
10
+ /spec/examples.txt
11
+ /test/tmp/
12
+ /test/version_tmp/
13
+ /tmp/
14
+
15
+ # Used by dotenv library to load environment variables.
16
+ # .env
17
+
18
+ ## Specific to RubyMotion:
19
+ .dat*
20
+ .repl_history
21
+ build/
22
+ *.bridgesupport
23
+ build-iPhoneOS/
24
+ build-iPhoneSimulator/
25
+
26
+ ## Specific to RubyMotion (use of CocoaPods):
27
+ #
28
+ # We recommend against adding the Pods directory to your .gitignore. However
29
+ # you should judge for yourself, the pros and cons are mentioned at:
30
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
31
+ #
32
+ # vendor/Pods/
33
+
34
+ ## Documentation cache and generated files:
35
+ /.yardoc/
36
+ /_yardoc/
37
+ /doc/
38
+ /rdoc/
39
+
40
+ ## Environment normalization:
41
+ /.bundle/
42
+ /vendor/bundle
43
+ /lib/bundler/man/
44
+
45
+ # for a library or gem, you might want to ignore these files since the code is
46
+ # intended to run in multiple environments; otherwise, check them in:
47
+ # Gemfile.lock
48
+ # .ruby-version
49
+ # .ruby-gemset
50
+
51
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
52
+ .rvmrc
53
+
54
+ /.idea/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in activeadmin_exporter.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # ActiveAdmin Exporter
2
+
3
+ Allows to asynchronously pack export result in ZIP and send it to email.
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ desc "Run specs"
5
+ RSpec::Core::RakeTask.new
6
+
7
+ desc 'Default: run specs.'
8
+ task :default => :spec
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/active_admin/exporter/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = 'activeadmin-exporter'
6
+ gem.version = ActiveAdmin::Exporter::VERSION
7
+ gem.authors = ['Nikita Anistratenko']
8
+ gem.email = ['steverovsky@gmail.com']
9
+ gem.description = %q{ActiveAdmin plugin for expanding export possibilities.}
10
+ gem.summary = %q{Allows to asynchronously pack export result in ZIP and send it to email.}
11
+ gem.homepage = "https://github.com/steverovsky/activeadmin-exporter"
12
+
13
+ gem.files = `git ls-files`.split("\n")
14
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ gem.require_paths = ['lib']
17
+
18
+ gem.add_runtime_dependency 'activeadmin'
19
+ gem.add_runtime_dependency 'sidekiq'
20
+ gem.add_runtime_dependency 'rubyzip'
21
+ end
@@ -0,0 +1,20 @@
1
+ require 'active_admin'
2
+ require 'active_admin/exporter/build_download_format_links'
3
+ require 'active_admin/exporter/version'
4
+ require 'active_admin/exporter/resource_controller_extension'
5
+ require 'active_admin/exporter/exporter_mailer'
6
+ require 'active_admin/exporter/railtie'
7
+ require 'rubygems'
8
+ require 'zip'
9
+
10
+ module ActiveAdmin
11
+ module Exporter
12
+ def self.from_email_address=(address)
13
+ @from_email_address = address
14
+ end
15
+
16
+ def self.from_email_address
17
+ @from_email_address || 'admin@example.com'
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,10 @@
1
+ module ActiveAdmin
2
+ module Exporter
3
+ module BuildDownloadFormatLinks
4
+ def self.included(base)
5
+ base.send(:alias_method, :build_download_format_links_without_email, :build_download_format_links)
6
+ base.send(:alias_method, :build_download_format_links, :build_download_format_links_with_email)
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,46 @@
1
+ module ActiveAdmin
2
+ module Exporter
3
+ class ExporterMailer < ActionMailer::Base
4
+ def csv_export(recipient_email, class_name, params_json)
5
+ params = JSON.parse(params_json)
6
+ controller = class_name.constantize.new
7
+ controller.send('params=', params)
8
+
9
+ config = controller.send(:active_admin_config)
10
+ csv_filename = controller.send(:csv_filename)
11
+ zip_filename = csv_filename.sub('.csv', '.zip')
12
+
13
+ def controller.find_collection(options = {})
14
+ options[:only] = [
15
+ :sorting,
16
+ :filtering,
17
+ :scoping,
18
+ :includes,
19
+ :pagination,
20
+ :collection_decorator
21
+ ]
22
+
23
+ collection = scoped_collection
24
+ collection_applies(options).each do |applyer|
25
+ collection = send("apply_#{applyer}", collection)
26
+ end
27
+ collection
28
+ end
29
+
30
+ zip = Zip::OutputStream.write_buffer do |zio|
31
+ zio.put_next_entry(csv_filename)
32
+ config.csv_builder.build(controller, zio)
33
+ end
34
+
35
+ attachments[zip_filename] = zip.string
36
+
37
+ mail(
38
+ to: recipient_email,
39
+ subject: zip_filename,
40
+ body: 'See attached.',
41
+ from: ActiveAdmin::Exporter.from_email_address
42
+ )
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,20 @@
1
+ module ActiveAdmin
2
+ module Exporter
3
+ class Railtie < ::Rails::Railtie
4
+ config.after_initialize do
5
+ begin
6
+ if Mime::Type.lookup_by_extension(:email).nil?
7
+ Mime::Type.register 'application/email_export', :email, []
8
+ end
9
+ rescue NameError
10
+ # noop
11
+ end
12
+
13
+ ActiveAdmin::ResourceController.class_eval do
14
+ include ActiveAdmin::Exporter::ResourceControllerExtension
15
+ end
16
+ ActiveAdmin::Views::PaginatedCollection.add_format :email
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,30 @@
1
+ module ActiveAdmin
2
+ module Exporter
3
+ module ResourceControllerExtension
4
+ def self.included(base)
5
+ base.send(:alias_method, :index_without_email, :index)
6
+ base.send(:alias_method, :index, :index_with_email)
7
+
8
+ base.send(:respond_to, :email)
9
+ end
10
+
11
+ def index_with_email
12
+ index_without_email do |format|
13
+ format.email do
14
+ current_user_method = active_admin_config.namespace.application.current_user_method
15
+ recipient_email = send(current_user_method).email
16
+ class_name = self.class.to_s
17
+
18
+ ActiveAdmin::Exporter::ExporterMailer.csv_export(
19
+ recipient_email,
20
+ class_name,
21
+ params.to_json
22
+ ).deliver_later
23
+
24
+ redirect_back(fallback_location: root_path, notice: "CSV export emailed to #{recipient_email}!")
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,5 @@
1
+ module ActiveAdmin
2
+ module Exporter
3
+ VERSION = '0.0.2'
4
+ end
5
+ end
@@ -0,0 +1,2 @@
1
+ require 'active_admin/exporter/version.rb'
2
+ require 'active_admin/exporter.rb'
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: activeadmin-exporter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Nikita Anistratenko
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-12-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activeadmin
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sidekiq
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubyzip
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: ActiveAdmin plugin for expanding export possibilities.
56
+ email:
57
+ - steverovsky@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - README.md
65
+ - Rakefile
66
+ - activeadmin-exporter.gemspec
67
+ - lib/active_admin/exporter.rb
68
+ - lib/active_admin/exporter/build_download_format_links.rb
69
+ - lib/active_admin/exporter/exporter_mailer.rb
70
+ - lib/active_admin/exporter/railtie.rb
71
+ - lib/active_admin/exporter/resource_controller_extension.rb
72
+ - lib/active_admin/exporter/version.rb
73
+ - lib/activeadmin-exporter.rb
74
+ homepage: https://github.com/steverovsky/activeadmin-exporter
75
+ licenses: []
76
+ metadata: {}
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubyforge_project:
93
+ rubygems_version: 2.6.11
94
+ signing_key:
95
+ specification_version: 4
96
+ summary: Allows to asynchronously pack export result in ZIP and send it to email.
97
+ test_files: []