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 ADDED
@@ -0,0 +1,8 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.libs << 'test'
5
+ end
6
+
7
+ desc "Run tests"
8
+ task :default => :test
@@ -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
@@ -0,0 +1,3 @@
1
+ module ToCsvRails
2
+ VERSION = "0.1"
3
+ end
@@ -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
@@ -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: []