to_csv_rails 0.1
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/Rakefile +8 -0
- data/lib/to_csv_rails/array.rb +28 -0
- data/lib/to_csv_rails/version.rb +3 -0
- data/lib/to_csv_rails.rb +17 -0
- data/test/test_csv.rb +54 -0
- data/test/test_helper.rb +17 -0
- data/to_csv_rails.gemspec +17 -0
- metadata +54 -0
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
class Array
|
2
|
+
def to_csv(options = {})
|
3
|
+
return '' unless self.any?
|
4
|
+
|
5
|
+
columns = self.first.attributes.keys.map(&:to_sym)
|
6
|
+
|
7
|
+
if options[:only]
|
8
|
+
columns.delete_if{|column| !options[:only].include?(column)}
|
9
|
+
end
|
10
|
+
|
11
|
+
if options[:except]
|
12
|
+
columns.delete_if{|column| options[:except].include?(column)}
|
13
|
+
end
|
14
|
+
|
15
|
+
columns += Array(options[:methods])
|
16
|
+
|
17
|
+
output = CSV_HANDLER.generate(Hash.new(options[:csv_options])) do |csv|
|
18
|
+
|
19
|
+
csv << options[:headers] unless options[:headers].nil?
|
20
|
+
|
21
|
+
self.each do |row|
|
22
|
+
csv << columns.collect{|column| row.send(column) }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
output
|
27
|
+
end
|
28
|
+
end
|
data/lib/to_csv_rails.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
|
2
|
+
if RUBY_VERSION >= '1.9'
|
3
|
+
require 'csv'
|
4
|
+
CSV_HANDLER = CSV
|
5
|
+
else
|
6
|
+
begin
|
7
|
+
gem 'fastercsv'
|
8
|
+
require 'fastercsv'
|
9
|
+
|
10
|
+
CSV_HANDLER = FasterCSV
|
11
|
+
rescue LoadError => e
|
12
|
+
raise "Error : FasterCSV not installed, please run: gem install fastercsv"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
require "to_csv_rails/version"
|
17
|
+
require "to_csv_rails/array.rb"
|
data/test/test_csv.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CsvTest < Test::Unit::TestCase
|
4
|
+
def teardown
|
5
|
+
User.destroy_all
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_simple_export
|
9
|
+
user1 = User.create! :name => 'User 1', :email => 'user1@email.com'
|
10
|
+
user2 = User.create! :name => 'User 2', :email => 'user2@email.com'
|
11
|
+
|
12
|
+
data = User.all
|
13
|
+
|
14
|
+
assert_equal data.to_csv_rails,
|
15
|
+
"#{user1.id},User 1,user1@email.com\n#{user2.id},User 2,user2@email.com\n"
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_export_with_empty_data
|
19
|
+
data = User.all
|
20
|
+
|
21
|
+
assert_equal data.to_csv_rails,
|
22
|
+
""
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_export_with_only_option
|
26
|
+
User.create! :name => 'User 1', :email => 'user1@email.com'
|
27
|
+
User.create! :name => 'User 2', :email => 'user2@email.com'
|
28
|
+
|
29
|
+
data = User.all
|
30
|
+
|
31
|
+
assert_equal data.to_csv_rails(:only => [:name]),
|
32
|
+
"User 1\nUser 2\n"
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_export_with_except_option
|
36
|
+
User.create! :name => 'User 1', :email => 'user1@email.com'
|
37
|
+
User.create! :name => 'User 2', :email => 'user2@email.com'
|
38
|
+
|
39
|
+
data = User.all
|
40
|
+
|
41
|
+
assert_equal data.to_csv_rails(:except => [:id, :name]),
|
42
|
+
"user1@email.com\nuser2@email.com\n"
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_export_with_headers_option
|
46
|
+
user1 = User.create! :name => 'User 1', :email => 'user1@email.com'
|
47
|
+
user2 = User.create! :name => 'User 2', :email => 'user2@email.com'
|
48
|
+
|
49
|
+
data = User.all
|
50
|
+
|
51
|
+
assert_equal data.to_csv_rails(:headers => [:id, :name, :email]),
|
52
|
+
"id,name,email\n#{user1.id},User 1,user1@email.com\n#{user2.id},User 2,user2@email.com\n"
|
53
|
+
end
|
54
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'active_record'
|
3
|
+
require 'test/unit'
|
4
|
+
require 'to_csv_rails'
|
5
|
+
|
6
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
7
|
+
|
8
|
+
ActiveRecord::Schema.define(:version => 1) do
|
9
|
+
create_table :users do |t|
|
10
|
+
t.string :name
|
11
|
+
t.string :email
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class User < ActiveRecord::Base
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
require "to_csv_rails/version"
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "to_csv_rails"
|
6
|
+
s.version = ToCsvRails::VERSION
|
7
|
+
s.authors = ["Fernando Morgenstern"]
|
8
|
+
s.email = ["contato@fernandomarcelo.com"]
|
9
|
+
s.homepage = "http://fernandomarcelo.com/"
|
10
|
+
s.summary = %q{An to_csv implementation for Rails framework}
|
11
|
+
s.description = %q{An to_csv implementation focused on making it easier for Rails developers to export data to CSV format.}
|
12
|
+
s.files = Dir['**/*'].select{|f| File.file?(f)}
|
13
|
+
|
14
|
+
if RUBY_VERSION < "1.9.0"
|
15
|
+
s.add_dependency('fastercsv')
|
16
|
+
end
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: to_csv_rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Fernando Morgenstern
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-29 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: An to_csv implementation focused on making it easier for Rails developers
|
15
|
+
to export data to CSV format.
|
16
|
+
email:
|
17
|
+
- contato@fernandomarcelo.com
|
18
|
+
executables: []
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- lib/to_csv_rails/array.rb
|
23
|
+
- lib/to_csv_rails/version.rb
|
24
|
+
- lib/to_csv_rails.rb
|
25
|
+
- Rakefile
|
26
|
+
- test/test_csv.rb
|
27
|
+
- test/test_helper.rb
|
28
|
+
- to_csv_rails-0.1.gem
|
29
|
+
- to_csv_rails.gemspec
|
30
|
+
homepage: http://fernandomarcelo.com/
|
31
|
+
licenses: []
|
32
|
+
post_install_message:
|
33
|
+
rdoc_options: []
|
34
|
+
require_paths:
|
35
|
+
- lib
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ! '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
requirements: []
|
49
|
+
rubyforge_project:
|
50
|
+
rubygems_version: 1.8.24
|
51
|
+
signing_key:
|
52
|
+
specification_version: 3
|
53
|
+
summary: An to_csv implementation for Rails framework
|
54
|
+
test_files: []
|