active_scaffold_export_vho 3.0.0
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.
- data/.document +5 -0
- data/LICENSE.txt +20 -0
- data/README +5 -0
- data/Rakefile +55 -0
- data/frontends/default/images/export.png +0 -0
- data/frontends/default/stylesheets/export-stylesheet-ie.css +6 -0
- data/frontends/default/stylesheets/export-stylesheet.css +27 -0
- data/frontends/default/views/_export.csv.erb +17 -0
- data/frontends/default/views/_export_form_body.html.erb +28 -0
- data/frontends/default/views/_show_export.html.erb +7 -0
- data/frontends/default/views/show_export.html.erb +5 -0
- data/init.rb +9 -0
- data/lib/active_scaffold/actions/export.rb +91 -0
- data/lib/active_scaffold/config/export.rb +76 -0
- data/lib/active_scaffold/helpers/export_helpers.rb +76 -0
- data/lib/active_scaffold_export/config/core.rb +17 -0
- data/lib/active_scaffold_export/version.rb +9 -0
- data/lib/active_scaffold_export.rb +39 -0
- data/lib/active_scaffold_export_vho.rb +2 -0
- metadata +160 -0
data/.document
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 vhochstein
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'rake'
|
11
|
+
|
12
|
+
require 'jeweler'
|
13
|
+
require './lib/active_scaffold_export/version.rb'
|
14
|
+
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
+
gem.name = "active_scaffold_export_vho"
|
18
|
+
gem.version = ActiveScaffoldExport::Version::STRING
|
19
|
+
gem.homepage = "http://github.com/vhochstein/active_scaffold_export"
|
20
|
+
gem.license = "MIT"
|
21
|
+
gem.summary = %Q{Exporting Records with ActiveScaffold}
|
22
|
+
gem.description = %Q{Exporting Records with ActiveScaffold}
|
23
|
+
gem.email = "activescaffold@googlegroups.com"
|
24
|
+
gem.authors = ["Volker Hochstein"]
|
25
|
+
gem.add_runtime_dependency 'active_scaffold_vho', '~> 3.0'
|
26
|
+
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
27
|
+
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
28
|
+
# gem.add_runtime_dependency 'jabber4r', '> 0.1'
|
29
|
+
# gem.add_development_dependency 'rspec', '> 1.2.3'
|
30
|
+
end
|
31
|
+
Jeweler::RubygemsDotOrgTasks.new
|
32
|
+
|
33
|
+
require 'rake/testtask'
|
34
|
+
Rake::TestTask.new(:test) do |test|
|
35
|
+
test.libs << 'lib' << 'test'
|
36
|
+
test.pattern = 'test/**/test_*.rb'
|
37
|
+
test.verbose = true
|
38
|
+
end
|
39
|
+
|
40
|
+
require 'rcov/rcovtask'
|
41
|
+
Rcov::RcovTask.new do |test|
|
42
|
+
test.libs << 'test'
|
43
|
+
test.pattern = 'test/**/test_*.rb'
|
44
|
+
test.verbose = true
|
45
|
+
end
|
46
|
+
|
47
|
+
task :default => :test
|
48
|
+
|
49
|
+
require 'rake/rdoctask'
|
50
|
+
Rake::RDocTask.new do |rdoc|
|
51
|
+
rdoc.rdoc_dir = 'rdoc'
|
52
|
+
rdoc.title = "active_scaffold_export #{ActiveScaffoldExport::Version::STRING}"
|
53
|
+
rdoc.rdoc_files.include('README*')
|
54
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
55
|
+
end
|
Binary file
|
@@ -0,0 +1,27 @@
|
|
1
|
+
.active-scaffold-header div.actions a.show_export {
|
2
|
+
background-image: url(../../../images/active_scaffold/default/export.png);
|
3
|
+
background-position: 1px 50%;
|
4
|
+
background-repeat: no-repeat;
|
5
|
+
padding-left: 19px;
|
6
|
+
}
|
7
|
+
.active-scaffold div.show_export-view h3 {
|
8
|
+
font-weight: bold;
|
9
|
+
}
|
10
|
+
.active-scaffold div.show_export-view div.separator {
|
11
|
+
clear: both;
|
12
|
+
padding: .5em;
|
13
|
+
}
|
14
|
+
.active-scaffold div.show_export-view div.options div.separator {
|
15
|
+
padding: 0;
|
16
|
+
}
|
17
|
+
.active-scaffold div.show_export-view div.options div.checkbox-wrapper {
|
18
|
+
margin-bottom: .5em;
|
19
|
+
}
|
20
|
+
.active-scaffold div.show_export-view div div.checkbox-wrapper {
|
21
|
+
min-width: 20%;
|
22
|
+
margin-bottom: .25em;
|
23
|
+
float: left;
|
24
|
+
}
|
25
|
+
.active-scaffold div.show_export-view label #delimiter {
|
26
|
+
font-family: monospace;
|
27
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<%
|
2
|
+
fcsv_options = {
|
3
|
+
:row_sep => "\n",
|
4
|
+
:col_sep => params[:delimiter],
|
5
|
+
:force_quotes => @export_config.force_quotes,
|
6
|
+
:headers => @export_columns.collect { |column| format_export_column_header_name(column) }
|
7
|
+
}
|
8
|
+
|
9
|
+
data = FasterCSV.generate(fcsv_options) do |csv|
|
10
|
+
csv << fcsv_options[:headers] unless params[:skip_header] == 'true'
|
11
|
+
@records.each do |record|
|
12
|
+
csv << @export_columns.collect { |column|
|
13
|
+
get_export_column_value(record, column)
|
14
|
+
}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
-%><%= data.html_safe -%>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<% export_config = active_scaffold_config.export %>
|
2
|
+
<div class="columns checkbox-list">
|
3
|
+
<% export_config.columns.each do |column| -%>
|
4
|
+
<div class="column checkbox-wrapper">
|
5
|
+
<%= content_tag(:label, check_box_tag("export_columns[#{column.name}]", 1, !export_config.default_deselected_columns.include?(column.name)) + " #{column.label}".html_safe) %>
|
6
|
+
</div>
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
</div>
|
10
|
+
<div class="separator"></div>
|
11
|
+
<h3><%=as_('Options')%></h3>
|
12
|
+
<div class="options checkbox-list">
|
13
|
+
<div class="option checkbox-wrapper">
|
14
|
+
<%= content_tag(:label, check_box_tag('skip_header', 1, export_config.default_skip_header) + " #{as_('Omit Header')}".html_safe) %>
|
15
|
+
</div>
|
16
|
+
<div class="option checkbox-wrapper">
|
17
|
+
<%= content_tag(:label, text_field_tag('delimiter', export_config.default_delimiter, :size => 1, :maxlength => 1) + " #{as_('Delimiter')}".html_safe) %>
|
18
|
+
</div>
|
19
|
+
<div class="separator"></div>
|
20
|
+
<div class="option checkbox-wrapper">
|
21
|
+
<%= content_tag(:label, radio_button_tag('full_download', false, !export_config.default_full_download) + " #{as_('This Page')}".html_safe) if export_config.allow_full_download %>
|
22
|
+
</div>
|
23
|
+
<div class="option checkbox-wrapper">
|
24
|
+
<%= content_tag(:label, radio_button_tag('full_download', true, export_config.default_full_download) + " #{as_('All Pages')}".html_safe) if export_config.allow_full_download %>
|
25
|
+
</div>
|
26
|
+
|
27
|
+
</div>
|
28
|
+
<div class="separator"></div>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<%= render :partial => "base_form", :locals => {:xhr => false,
|
2
|
+
:form_action => :export,
|
3
|
+
:url_options => params_for(:action => :export, :format => 'csv'),
|
4
|
+
:method => :get,
|
5
|
+
:cancel_link => true,
|
6
|
+
:headline => as_('Columns to Export'),
|
7
|
+
:body_partial => 'export_form_body'} %>
|
data/init.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
module ActiveScaffold::Actions
|
2
|
+
module Export
|
3
|
+
def self.included(base)
|
4
|
+
base.before_filter :export_authorized?, :only => [:export]
|
5
|
+
base.before_filter :init_session_var
|
6
|
+
|
7
|
+
as_export_plugin_path = File.join(ActiveScaffold::Config::Export.plugin_directory, 'frontends', 'default' , 'views')
|
8
|
+
|
9
|
+
base.add_active_scaffold_path as_export_plugin_path
|
10
|
+
end
|
11
|
+
|
12
|
+
def init_session_var
|
13
|
+
session[:search] = params[:search] if !params[:search].nil? || params[:commit] == as_('Search')
|
14
|
+
end
|
15
|
+
|
16
|
+
# display the customization form or skip directly to export
|
17
|
+
def show_export
|
18
|
+
export_config = active_scaffold_config.export
|
19
|
+
respond_to do |wants|
|
20
|
+
wants.html do
|
21
|
+
render(:partial => 'show_export', :layout => true)
|
22
|
+
end
|
23
|
+
wants.js do
|
24
|
+
render(:partial => 'show_export', :layout => false)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# if invoked directly, will use default configuration
|
30
|
+
def export
|
31
|
+
export_config = active_scaffold_config.export
|
32
|
+
if params[:export_columns].nil?
|
33
|
+
export_columns = {}
|
34
|
+
export_config.columns.each { |col|
|
35
|
+
export_columns[col.name.to_sym] = 1
|
36
|
+
}
|
37
|
+
options = {
|
38
|
+
:export_columns => export_columns,
|
39
|
+
:full_download => export_config.default_full_download.to_s,
|
40
|
+
:delimiter => export_config.default_delimiter,
|
41
|
+
:skip_header => export_config.default_skip_header.to_s
|
42
|
+
}
|
43
|
+
params.merge!(options)
|
44
|
+
end
|
45
|
+
|
46
|
+
find_items_for_export
|
47
|
+
|
48
|
+
response.headers['Content-Disposition'] = "attachment; filename=#{export_file_name}"
|
49
|
+
render :partial => 'export', :layout => false, :content_type => Mime::CSV, :status => response_status
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
|
54
|
+
# The actual algorithm to do the export
|
55
|
+
def find_items_for_export
|
56
|
+
export_config = active_scaffold_config.export
|
57
|
+
export_columns = export_config.columns.reject { |col| params[:export_columns][col.name.to_sym].nil? }
|
58
|
+
|
59
|
+
includes_for_export_columns = export_columns.collect{ |col| col.includes }.flatten.uniq.compact
|
60
|
+
self.active_scaffold_includes.concat includes_for_export_columns
|
61
|
+
|
62
|
+
find_options = { :sorting => active_scaffold_config.list.user.sorting }
|
63
|
+
params[:search] = session[:search]
|
64
|
+
do_search rescue nil
|
65
|
+
params[:segment_id] = session[:segment_id]
|
66
|
+
do_segment_search rescue nil
|
67
|
+
unless params[:full_download] == 'true'
|
68
|
+
find_options.merge!({
|
69
|
+
:per_page => active_scaffold_config.list.user.per_page,
|
70
|
+
:page => active_scaffold_config.list.user.page
|
71
|
+
})
|
72
|
+
end
|
73
|
+
|
74
|
+
@export_config = export_config
|
75
|
+
@export_columns = export_columns
|
76
|
+
@records = find_page(find_options).items
|
77
|
+
end
|
78
|
+
|
79
|
+
# The default name of the downloaded file.
|
80
|
+
# You may override the method to specify your own file name generation.
|
81
|
+
def export_file_name
|
82
|
+
"#{self.controller_name}.csv"
|
83
|
+
end
|
84
|
+
|
85
|
+
# The default security delegates to ActiveRecordPermissions.
|
86
|
+
# You may override the method to customize.
|
87
|
+
def export_authorized?
|
88
|
+
authorized_for?(:action => :read)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module ActiveScaffold::Config
|
2
|
+
class Export < ActiveScaffold::Config::Form
|
3
|
+
self.crud_type = :read
|
4
|
+
|
5
|
+
def initialize(core_config)
|
6
|
+
@core = core_config
|
7
|
+
end
|
8
|
+
|
9
|
+
# global level configuration
|
10
|
+
# --------------------------
|
11
|
+
# the ActionLink for this action
|
12
|
+
cattr_accessor :link
|
13
|
+
@@link = ActiveScaffold::DataStructures::ActionLink.new('show_export', :label => :export, :type => :collection, :security_method => :export_authorized?)
|
14
|
+
|
15
|
+
# configures where the plugin itself is located. there is no instance version of this.
|
16
|
+
cattr_accessor :plugin_directory
|
17
|
+
@@plugin_directory = File.expand_path(__FILE__).match(%{(^.*)/lib/active_scaffold/config/export.rb})[1]
|
18
|
+
|
19
|
+
|
20
|
+
# instance-level configuration
|
21
|
+
# ----------------------------
|
22
|
+
|
23
|
+
attr_writer :link
|
24
|
+
def link
|
25
|
+
@link ||= if show_form
|
26
|
+
self.class.link.clone
|
27
|
+
else
|
28
|
+
ActiveScaffold::DataStructures::ActionLink.new('export', :label => :export, :type => :collection, :inline => false, :security_method => :export_authorized?)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
attr_writer :show_form, :allow_full_download, :force_quotes, :default_full_download, :default_delimiter, :default_skip_header, :default_deselected_columns
|
33
|
+
def show_form
|
34
|
+
self.show_form = @core.export_show_form if @show_form.nil?
|
35
|
+
@show_form
|
36
|
+
end
|
37
|
+
def allow_full_download
|
38
|
+
self.allow_full_download = @core.export_allow_full_download if @allow_full_download.nil?
|
39
|
+
@allow_full_download
|
40
|
+
end
|
41
|
+
def force_quotes
|
42
|
+
self.force_quotes = @core.export_force_quotes if @force_quotes.nil?
|
43
|
+
@force_quotes
|
44
|
+
end
|
45
|
+
def default_full_download
|
46
|
+
self.default_full_download = @core.export_default_full_download if @default_full_download.nil?
|
47
|
+
@default_full_download
|
48
|
+
end
|
49
|
+
def default_delimiter
|
50
|
+
self.default_delimiter = @core.export_default_delimiter if @default_delimiter.nil?
|
51
|
+
@default_delimiter
|
52
|
+
end
|
53
|
+
def default_skip_header
|
54
|
+
self.default_skip_header = @core.export_default_skip_header if @default_skip_header.nil?
|
55
|
+
@default_skip_header
|
56
|
+
end
|
57
|
+
def default_deselected_columns
|
58
|
+
self.default_deselected_columns = [] if @default_deselected_columns.nil?
|
59
|
+
@default_deselected_columns
|
60
|
+
end
|
61
|
+
|
62
|
+
# provides access to the list of columns specifically meant for this action to use
|
63
|
+
def columns
|
64
|
+
self.columns = @core.columns._inheritable unless @columns
|
65
|
+
@columns
|
66
|
+
end
|
67
|
+
def columns=(val)
|
68
|
+
@columns = ActiveScaffold::DataStructures::ActionColumns.new(*val)
|
69
|
+
@columns.action = self
|
70
|
+
end
|
71
|
+
|
72
|
+
def multipart?
|
73
|
+
false
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module ActiveScaffold
|
2
|
+
module Helpers
|
3
|
+
# Helpers that assist with the rendering of a Export Column
|
4
|
+
module ExportHelpers
|
5
|
+
def self.included(base)
|
6
|
+
base.alias_method_chain :active_scaffold_stylesheets, :export
|
7
|
+
base.alias_method_chain :active_scaffold_ie_stylesheets, :export
|
8
|
+
end
|
9
|
+
|
10
|
+
# Provides stylesheets to include with +stylesheet_link_tag+
|
11
|
+
def active_scaffold_stylesheets_with_export(frontend = :default)
|
12
|
+
active_scaffold_stylesheets_without_export.to_a << ActiveScaffold::Config::Core.asset_path("export-stylesheet.css", frontend)
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
# Provides stylesheets for IE to include with +stylesheet_link_tag+
|
17
|
+
def active_scaffold_ie_stylesheets_with_export(frontend = :default)
|
18
|
+
active_scaffold_ie_stylesheets_without_export.to_a << ActiveScaffold::Config::Core.asset_path("export-stylesheet-ie.css", frontend)
|
19
|
+
end
|
20
|
+
|
21
|
+
## individual columns can be overridden by defining
|
22
|
+
# a helper method <column_name>_export_column(record)
|
23
|
+
# You can customize the output of all columns by
|
24
|
+
# overriding the following helper methods:
|
25
|
+
# format_export_column(raw_value)
|
26
|
+
# format_singular_association_export_column(association_record)
|
27
|
+
# format_plural_association_export_column(association_records)
|
28
|
+
def get_export_column_value(record, column)
|
29
|
+
if export_column_override? column
|
30
|
+
send(export_column_override(column), record)
|
31
|
+
else
|
32
|
+
raw_value = record.send(column.name)
|
33
|
+
|
34
|
+
if column.association.nil? or column_empty?(raw_value)
|
35
|
+
format_export_column(raw_value)
|
36
|
+
else
|
37
|
+
case column.association.macro
|
38
|
+
when :has_one, :belongs_to
|
39
|
+
format_singular_association_export_column(raw_value)
|
40
|
+
when :has_many, :has_and_belongs_to_many
|
41
|
+
format_plural_association_export_column(raw_value)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def export_column_override(column)
|
48
|
+
"#{column.name.to_s.gsub('?', '')}_export_column" # parse out any question marks (see issue 227)
|
49
|
+
end
|
50
|
+
|
51
|
+
def export_column_override?(column)
|
52
|
+
respond_to?(export_column_override(column))
|
53
|
+
end
|
54
|
+
|
55
|
+
def format_export_column(raw_value)
|
56
|
+
format_value(raw_value)
|
57
|
+
end
|
58
|
+
|
59
|
+
def format_singular_association_export_column(association_record)
|
60
|
+
format_value(association_record.to_label)
|
61
|
+
end
|
62
|
+
|
63
|
+
def format_plural_association_export_column(association_records)
|
64
|
+
firsts = association_records.first(4).collect { |v| v.to_label }
|
65
|
+
firsts[3] = ' ' if firsts.length == 4
|
66
|
+
format_value(firsts.join(','))
|
67
|
+
end
|
68
|
+
|
69
|
+
## This helper can be overridden to change the way that the headers
|
70
|
+
# are formatted. For instance, you might want column.name.to_s.humanize
|
71
|
+
def format_export_column_header_name(column)
|
72
|
+
column.name.to_s
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Need to open the AS module carefully due to Rails 2.3 lazy loading
|
2
|
+
ActiveScaffold::Config::Core.class_eval do
|
3
|
+
# For some note obvious reasons, the class variables need to be defined
|
4
|
+
# *before* the cattr !!
|
5
|
+
@@export_show_form = true
|
6
|
+
@@export_allow_full_download = true
|
7
|
+
@@export_default_full_download = true
|
8
|
+
@@export_force_quotes = false
|
9
|
+
@@export_default_skip_header = false
|
10
|
+
@@export_default_delimiter = ','
|
11
|
+
cattr_accessor :export_show_form, :export_allow_full_download,
|
12
|
+
:export_force_quotes, :export_default_full_download,
|
13
|
+
:export_default_delimiter, :export_default_skip_header
|
14
|
+
|
15
|
+
ActionDispatch::Routing::ACTIVE_SCAFFOLD_CORE_ROUTING[:collection][:show_export] = :get
|
16
|
+
ActionDispatch::Routing::ACTIVE_SCAFFOLD_CORE_ROUTING[:collection][:export] = :get
|
17
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
ActiveScaffold rescue throw "should have included ActiveScaffold plug in first. Please make sure that this plug-in comes alphabetically after the ActiveScaffold plug-in"
|
2
|
+
|
3
|
+
# Load our overrides
|
4
|
+
require "#{File.dirname(__FILE__)}/active_scaffold_export/config/core.rb"
|
5
|
+
|
6
|
+
module ActiveScaffoldExport
|
7
|
+
def self.root
|
8
|
+
File.dirname(__FILE__) + "/.."
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module ActiveScaffold
|
13
|
+
module Actions
|
14
|
+
ActiveScaffold.autoload_subdir('actions', self, File.dirname(__FILE__))
|
15
|
+
end
|
16
|
+
|
17
|
+
module Config
|
18
|
+
ActiveScaffold.autoload_subdir('config', self, File.dirname(__FILE__))
|
19
|
+
end
|
20
|
+
|
21
|
+
module Helpers
|
22
|
+
ActiveScaffold.autoload_subdir('helpers', self, File.dirname(__FILE__))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
ActionView::Base.send(:include, ActiveScaffold::Helpers::ExportHelpers)
|
27
|
+
|
28
|
+
|
29
|
+
##
|
30
|
+
## Run the install assets script, too, just to make sure
|
31
|
+
## But at least rescue the action in production
|
32
|
+
##
|
33
|
+
Rails::Application.initializer("active_scaffold_export.install_assets", :after => "active_scaffold.install_assets") do
|
34
|
+
begin
|
35
|
+
ActiveScaffoldAssets.copy_to_public(ActiveScaffoldExport.root)
|
36
|
+
rescue
|
37
|
+
raise $! unless Rails.env == 'production'
|
38
|
+
end
|
39
|
+
end unless defined?(ACTIVE_SCAFFOLD_EXPORT_INSTALLED) && ACTIVE_SCAFFOLD_EXPORT_INSTALLED == :plugin
|
metadata
ADDED
@@ -0,0 +1,160 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: active_scaffold_export_vho
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 7
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 3.0.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Volker Hochstein
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-01-26 00:00:00 +01:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
prerelease: false
|
23
|
+
name: shoulda
|
24
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
requirement: *id001
|
34
|
+
type: :development
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
prerelease: false
|
37
|
+
name: bundler
|
38
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 23
|
44
|
+
segments:
|
45
|
+
- 1
|
46
|
+
- 0
|
47
|
+
- 0
|
48
|
+
version: 1.0.0
|
49
|
+
requirement: *id002
|
50
|
+
type: :development
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
prerelease: false
|
53
|
+
name: jeweler
|
54
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ~>
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 7
|
60
|
+
segments:
|
61
|
+
- 1
|
62
|
+
- 5
|
63
|
+
- 2
|
64
|
+
version: 1.5.2
|
65
|
+
requirement: *id003
|
66
|
+
type: :development
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
prerelease: false
|
69
|
+
name: rcov
|
70
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 3
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
version: "0"
|
79
|
+
requirement: *id004
|
80
|
+
type: :development
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
prerelease: false
|
83
|
+
name: active_scaffold_vho
|
84
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
hash: 7
|
90
|
+
segments:
|
91
|
+
- 3
|
92
|
+
- 0
|
93
|
+
version: "3.0"
|
94
|
+
requirement: *id005
|
95
|
+
type: :runtime
|
96
|
+
description: Exporting Records with ActiveScaffold
|
97
|
+
email: activescaffold@googlegroups.com
|
98
|
+
executables: []
|
99
|
+
|
100
|
+
extensions: []
|
101
|
+
|
102
|
+
extra_rdoc_files:
|
103
|
+
- LICENSE.txt
|
104
|
+
- README
|
105
|
+
files:
|
106
|
+
- .document
|
107
|
+
- LICENSE.txt
|
108
|
+
- README
|
109
|
+
- Rakefile
|
110
|
+
- frontends/default/images/export.png
|
111
|
+
- frontends/default/stylesheets/export-stylesheet-ie.css
|
112
|
+
- frontends/default/stylesheets/export-stylesheet.css
|
113
|
+
- frontends/default/views/_export.csv.erb
|
114
|
+
- frontends/default/views/_export_form_body.html.erb
|
115
|
+
- frontends/default/views/_show_export.html.erb
|
116
|
+
- frontends/default/views/show_export.html.erb
|
117
|
+
- init.rb
|
118
|
+
- lib/active_scaffold/actions/export.rb
|
119
|
+
- lib/active_scaffold/config/export.rb
|
120
|
+
- lib/active_scaffold/helpers/export_helpers.rb
|
121
|
+
- lib/active_scaffold_export.rb
|
122
|
+
- lib/active_scaffold_export/config/core.rb
|
123
|
+
- lib/active_scaffold_export/version.rb
|
124
|
+
- lib/active_scaffold_export_vho.rb
|
125
|
+
has_rdoc: true
|
126
|
+
homepage: http://github.com/vhochstein/active_scaffold_export
|
127
|
+
licenses:
|
128
|
+
- MIT
|
129
|
+
post_install_message:
|
130
|
+
rdoc_options: []
|
131
|
+
|
132
|
+
require_paths:
|
133
|
+
- lib
|
134
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
135
|
+
none: false
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
hash: 3
|
140
|
+
segments:
|
141
|
+
- 0
|
142
|
+
version: "0"
|
143
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
|
+
none: false
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
hash: 3
|
149
|
+
segments:
|
150
|
+
- 0
|
151
|
+
version: "0"
|
152
|
+
requirements: []
|
153
|
+
|
154
|
+
rubyforge_project:
|
155
|
+
rubygems_version: 1.3.7
|
156
|
+
signing_key:
|
157
|
+
specification_version: 3
|
158
|
+
summary: Exporting Records with ActiveScaffold
|
159
|
+
test_files: []
|
160
|
+
|