csv_rails 0.6.0 → 0.6.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/README.rdoc +11 -0
- data/lib/csv_rails/array.rb +12 -2
- data/lib/csv_rails/version.rb +1 -1
- data/lib/csv_rails.rb +9 -4
- data/test/csv_rails/active_record_test.rb +4 -0
- data/test/csv_rails/array_test.rb +12 -0
- data/test/dummy/app/controllers/users_controller.rb +1 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +14 -0
- data/test/dummy/log/test.log +8796 -0
- data/test/dummy/test/functional/users_controller_test.rb +7 -2
- metadata +32 -11
data/README.rdoc
CHANGED
@@ -91,6 +91,17 @@ If you do not use :header option, header is using :fields and I18n transfer.
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
+
And you can use tsv. Both tsv and csv can accept row_sep option.
|
95
|
+
|
96
|
+
# app/controllers/user_controller.rb
|
97
|
+
def index
|
98
|
+
@users = User.all
|
99
|
+
respond_to do |format|
|
100
|
+
format.csv{ render csv: @users, :row_sep => "\r\n" }
|
101
|
+
format.tsv{ render tsv: @users, :row_sep => "\r\n" }
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
94
105
|
You also use i18n_scope option
|
95
106
|
# config/locales/ja.yml
|
96
107
|
ja:
|
data/lib/csv_rails/array.rb
CHANGED
@@ -11,7 +11,9 @@ module CsvRails
|
|
11
11
|
# * <tt>:without_header</tt> - total_count
|
12
12
|
# * <tt>:encoding</tt> - encoding
|
13
13
|
# * <tt>:i18n_scope</tt> - i18n scope
|
14
|
-
|
14
|
+
|
15
|
+
def separated_values(sep, opts)
|
16
|
+
row_sep = opts.delete(:row_sep) || :auto
|
15
17
|
klass = first.class
|
16
18
|
fields = if opts[:fields]
|
17
19
|
opts.delete(:fields)
|
@@ -33,7 +35,7 @@ module CsvRails
|
|
33
35
|
I18n.t(defaults.shift, :default => defaults)
|
34
36
|
}
|
35
37
|
end
|
36
|
-
csv = CSV.generate do |_csv|
|
38
|
+
csv = CSV.generate(:col_sep => sep, :row_sep => row_sep) do |_csv|
|
37
39
|
_csv << header if header && !opts[:without_header]
|
38
40
|
each do |element|
|
39
41
|
_csv << element.to_csv_ary(fields, opts)
|
@@ -41,5 +43,13 @@ module CsvRails
|
|
41
43
|
end
|
42
44
|
opts[:encoding] ? csv.encode(opts[:encoding]) : csv
|
43
45
|
end
|
46
|
+
|
47
|
+
def to_csv(opts={})
|
48
|
+
separated_values(",", opts)
|
49
|
+
end
|
50
|
+
|
51
|
+
def to_tsv(opts={})
|
52
|
+
separated_values("\t", opts)
|
53
|
+
end
|
44
54
|
end
|
45
55
|
end
|
data/lib/csv_rails/version.rb
CHANGED
data/lib/csv_rails.rb
CHANGED
@@ -13,8 +13,13 @@ if defined?(Mongoid)
|
|
13
13
|
Mongoid::Document.send(:include, CsvRails::Mongoid)
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
Mime::Type.register "text/tsv", :tsv
|
17
|
+
|
18
|
+
[:csv, :tsv].each do |format|
|
19
|
+
ActionController::Renderers.add format do |obj, options|
|
20
|
+
filename = options[:filename] || File.basename(request.path)
|
21
|
+
send_data obj.send("to_#{format}", options), :type => Mime.const_get(format.to_s.upcase),
|
22
|
+
:disposition => "attachment; filename=#{filename}.#{format}"
|
23
|
+
end
|
20
24
|
end
|
25
|
+
|
@@ -93,4 +93,8 @@ class CsvRails::ActiveRecordTest < ActiveSupport::TestCase
|
|
93
93
|
test ".to_csv with association using as_csv" do
|
94
94
|
assert_equal @group.created_at_as_csv, User.includes(:groups).to_csv(:fields => [:"groups.first.created_at"], :without_header => true).chomp
|
95
95
|
end
|
96
|
+
|
97
|
+
test ".to_csv with row_sep option" do
|
98
|
+
assert_match /\r\n/, User.all.to_csv(:row_sep => "\r\n")
|
99
|
+
end
|
96
100
|
end
|
@@ -29,6 +29,12 @@ class CsvRails::ArrayTest < ActiveSupport::TestCase
|
|
29
29
|
assert_equal fields.join(','), [].to_csv(:fields => fields).chomp
|
30
30
|
end
|
31
31
|
|
32
|
+
test ".to_tsv not stored i18n" do
|
33
|
+
fields = [:sum, :max]
|
34
|
+
assert_equal fields.join("\t"), [].to_tsv(:fields => fields).chomp
|
35
|
+
end
|
36
|
+
|
37
|
+
|
32
38
|
test ".to_csv accept encoding" do
|
33
39
|
name = "名前"
|
34
40
|
assert_equal name.encode('SJIS'), [].to_csv(:header => [name], :encoding => 'SJIS').chomp
|
@@ -49,4 +55,10 @@ class CsvRails::ArrayTest < ActiveSupport::TestCase
|
|
49
55
|
|
50
56
|
assert_equal " type,\"\",タイトル,本文\n#{post._type},#{post._id},#{post.title},\"#{post.body}\"\n", [post].to_csv
|
51
57
|
end
|
58
|
+
|
59
|
+
test ".to_tsv only it includes Mongoid instance" do
|
60
|
+
post = Post.create(:title => 'this is csv_rails', :body => "line\nline\nline\n")
|
61
|
+
|
62
|
+
assert_equal " type\t\"\"\tタイトル\t本文\n#{post._type}\t#{post._id}\t#{post.title}\t\"#{post.body}\"\n", [post].to_tsv
|
63
|
+
end
|
52
64
|
end
|
@@ -4,6 +4,7 @@ class UsersController < ApplicationController
|
|
4
4
|
respond_to do |format|
|
5
5
|
format.html
|
6
6
|
format.csv { render csv: @users, fields: [:id, :name, :age, :"groups.first.name"], without_header: true }
|
7
|
+
format.tsv { render tsv: @users, fields: [:id, :name, :age, :"groups.first.name"], without_header: true }
|
7
8
|
end
|
8
9
|
end
|
9
10
|
|
data/test/dummy/db/test.sqlite3
CHANGED
Binary file
|
@@ -1672,3 +1672,17 @@ Started GET "/users/sjis.csv" for 127.0.0.1 at 2012-03-28 18:56:29 +0900
|
|
1672
1672
|
Rendered text template (0.0ms)
|
1673
1673
|
Sent data (1.5ms)
|
1674
1674
|
Completed 200 OK in 401ms (Views: 186.9ms | ActiveRecord: 18.8ms)
|
1675
|
+
MONGODB [DEBUG] Logging level is currently :debug which could negatively impact client-side performance. You should set your logging level no lower than :info in production.
|
1676
|
+
MONGODB (0ms) admin['$cmd'].find({:ismaster=>1}).limit(-1)
|
1677
|
+
[1m[36m (0.1ms)[0m [1mSELECT "schema_migrations"."version" FROM "schema_migrations" [0m
|
1678
|
+
[1m[35m (0.4ms)[0m select sqlite_version(*)
|
1679
|
+
[1m[36m (23.4ms)[0m [1mCREATE TABLE "groups" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "created_at" datetime, "updated_at" datetime) [0m
|
1680
|
+
[1m[35m (17.2ms)[0m CREATE TABLE "memberships" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "user_id" integer, "group_id" integer, "created_at" datetime, "updated_at" datetime)
|
1681
|
+
[1m[36m (17.3ms)[0m [1mCREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "age" integer, "secret" varchar(255), "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) [0m
|
1682
|
+
[1m[35m (17.5ms)[0m CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL)
|
1683
|
+
[1m[36m (0.1ms)[0m [1mPRAGMA index_list("schema_migrations")[0m
|
1684
|
+
[1m[35m (17.6ms)[0m CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
|
1685
|
+
[1m[36m (0.1ms)[0m [1mSELECT version FROM "schema_migrations"[0m
|
1686
|
+
[1m[35m (17.4ms)[0m INSERT INTO "schema_migrations" (version) VALUES ('20120328072740')
|
1687
|
+
[1m[36m (17.3ms)[0m [1mINSERT INTO "schema_migrations" (version) VALUES ('20120323112247')[0m
|
1688
|
+
[1m[35m (17.3ms)[0m INSERT INTO "schema_migrations" (version) VALUES ('20120328072253')
|