active_record_csv 0.1.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/.gemtest +0 -0
- data/.gitignore +4 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/README.rdoc +50 -0
- data/Rakefile +9 -0
- data/active_record_csv.gemspec +29 -0
- data/lib/active_record_csv.rb +17 -0
- data/lib/active_record_csv/version.rb +3 -0
- data/spec/active_record_csv_spec.rb +15 -0
- data/spec/schema.rb +11 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/support/fixtures/movies.csv +3 -0
- data/spec/support/macros.rb +22 -0
- data/spec/support/models/movie.rb +11 -0
- metadata +141 -0
data/.gemtest
ADDED
File without changes
|
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm ruby-1.9.2-p0@active_record_csv
|
data/Gemfile
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
= ActiveRecord CSV
|
2
|
+
|
3
|
+
This gem aids in ActiveRecord export/import of CSV files.
|
4
|
+
It depends on the active_record_to_csv gem for export and
|
5
|
+
it depends on the orm_from_csv gem to help in importing.
|
6
|
+
|
7
|
+
== Usage
|
8
|
+
|
9
|
+
=== Export
|
10
|
+
|
11
|
+
File.new('movies.csv', 'w') { |f| f.write Movie.to_csv }
|
12
|
+
|
13
|
+
See Download section below for an easy way to integrate this gem for downloading CSV files.
|
14
|
+
|
15
|
+
=== Import
|
16
|
+
|
17
|
+
# To import from a csv file:
|
18
|
+
Movie.from_csv!(csv_file)
|
19
|
+
# To create objects but not save them yet:
|
20
|
+
Movie.from_csv(csv_file) # without bang!
|
21
|
+
|
22
|
+
=== Download
|
23
|
+
|
24
|
+
If you want your Rails app to download CSV files, try something like this:
|
25
|
+
|
26
|
+
# app/controllers/movies_controllers.rb
|
27
|
+
class MoviesController < ApplicationController
|
28
|
+
respond_to :csv, :html
|
29
|
+
|
30
|
+
def index
|
31
|
+
@movies = Movie.scoped # Movie.all behaves differently when to_csv is called on it.
|
32
|
+
respond_with(@movies)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
# config/initializers/renderers.rb
|
38
|
+
ActionController::Renderers.add :csv do |object, options|
|
39
|
+
self.content_type ||= Mime::CSV
|
40
|
+
filename = "#{options[:filename] || object.first.class.name.pluralize}.csv"
|
41
|
+
send_data(object.to_csv, :filename => filename, :type => Mime::CSV, :disposition => "attachment")
|
42
|
+
end
|
43
|
+
|
44
|
+
Now '/movies.csv' will download a CSV file from the browser.
|
45
|
+
|
46
|
+
== Compatibility
|
47
|
+
|
48
|
+
Tested with ActiveRecord 3.0.5.
|
49
|
+
|
50
|
+
http://gem-testers.org/gems/active_record_csv
|
data/Rakefile
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "active_record_csv/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "active_record_csv"
|
7
|
+
s.version = ActiveRecordCSV::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Jared Ning"]
|
10
|
+
s.email = ["jared@redningja.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{Simple CSV import/export for ActiveRecord}
|
13
|
+
s.description = %q{Simple CSV import/export for ActiveRecord}
|
14
|
+
|
15
|
+
s.rubyforge_project = "active_record_csv"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_dependency 'activerecord', '>= 3.0.0'
|
23
|
+
s.add_dependency 'active_record_to_csv', '0.1.3'
|
24
|
+
s.add_dependency 'orm_from_csv', '0.1.0'
|
25
|
+
|
26
|
+
s.add_development_dependency 'database_cleaner', '0.6.4'
|
27
|
+
s.add_development_dependency 'rspec', '2.5.0'
|
28
|
+
s.add_development_dependency 'sqlite3-ruby', '1.2.5'
|
29
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'active_record_to_csv'
|
2
|
+
require 'orm_from_csv'
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
module ActiveRecordCSV
|
6
|
+
|
7
|
+
# Instantiate new objects from CSV and save each one.
|
8
|
+
def from_csv!(file)
|
9
|
+
from_csv(file).each do |object|
|
10
|
+
object.save!
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
ActiveRecord::Base.extend ORMFromCSV
|
15
|
+
ActiveRecord::Base.extend ActiveRecordCSV
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ORMFromCSV do
|
4
|
+
|
5
|
+
it 'should import from CSV' do
|
6
|
+
Movie.from_csv!(csv_file)
|
7
|
+
Movie.all.map(&:csv_attributes).should =~ expected_attributes_from_movies_csv
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should import from CSV file and export exactly the same content' do
|
11
|
+
Movie.from_csv!(csv_file)
|
12
|
+
Movie.to_csv.should eq(content_of(csv_file))
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
data/spec/schema.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'sqlite3'
|
2
|
+
|
3
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
4
|
+
|
5
|
+
ActiveRecord::Schema.define do
|
6
|
+
create_table :movies, :force => true do |t|
|
7
|
+
t.string :title
|
8
|
+
t.integer :director_id
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'database_cleaner'
|
3
|
+
|
4
|
+
require File.join(Pathname(__FILE__).dirname.expand_path, '../lib/active_record_csv')
|
5
|
+
|
6
|
+
# load schema.
|
7
|
+
require 'schema'
|
8
|
+
|
9
|
+
DatabaseCleaner.strategy = :truncation
|
10
|
+
|
11
|
+
# require support .rb files.
|
12
|
+
Dir[File.expand_path("../support/**/*.rb", __FILE__)].each {|f| require f}
|
13
|
+
|
14
|
+
RSpec.configure do |config|
|
15
|
+
config.include Macros
|
16
|
+
config.before do
|
17
|
+
DatabaseCleaner.clean
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Macros
|
2
|
+
|
3
|
+
def content_of(file)
|
4
|
+
file.read
|
5
|
+
end
|
6
|
+
|
7
|
+
def fixtures_file(file_name)
|
8
|
+
File.open(File.join(Pathname(__FILE__).dirname.expand_path, 'fixtures', file_name))
|
9
|
+
end
|
10
|
+
|
11
|
+
def csv_file
|
12
|
+
fixtures_file('movies.csv')
|
13
|
+
end
|
14
|
+
|
15
|
+
def expected_attributes_from_movies_csv
|
16
|
+
expected_attributes = [
|
17
|
+
{'title' => 'Black Swan', 'director_id' => 0},
|
18
|
+
{'title' => 'Inception', 'director_id' => 1},
|
19
|
+
]
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: active_record_csv
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jared Ning
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-03-01 00:00:00 -06:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: activerecord
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 3.0.0
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: active_record_to_csv
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - "="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 0.1.3
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: orm_from_csv
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - "="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.1.0
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: database_cleaner
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - "="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 0.6.4
|
58
|
+
type: :development
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: rspec
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - "="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.5.0
|
69
|
+
type: :development
|
70
|
+
version_requirements: *id005
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: sqlite3-ruby
|
73
|
+
prerelease: false
|
74
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - "="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 1.2.5
|
80
|
+
type: :development
|
81
|
+
version_requirements: *id006
|
82
|
+
description: Simple CSV import/export for ActiveRecord
|
83
|
+
email:
|
84
|
+
- jared@redningja.com
|
85
|
+
executables: []
|
86
|
+
|
87
|
+
extensions: []
|
88
|
+
|
89
|
+
extra_rdoc_files: []
|
90
|
+
|
91
|
+
files:
|
92
|
+
- .gemtest
|
93
|
+
- .gitignore
|
94
|
+
- .rvmrc
|
95
|
+
- Gemfile
|
96
|
+
- README.rdoc
|
97
|
+
- Rakefile
|
98
|
+
- active_record_csv.gemspec
|
99
|
+
- lib/active_record_csv.rb
|
100
|
+
- lib/active_record_csv/version.rb
|
101
|
+
- spec/active_record_csv_spec.rb
|
102
|
+
- spec/schema.rb
|
103
|
+
- spec/spec_helper.rb
|
104
|
+
- spec/support/fixtures/movies.csv
|
105
|
+
- spec/support/macros.rb
|
106
|
+
- spec/support/models/movie.rb
|
107
|
+
has_rdoc: true
|
108
|
+
homepage: ""
|
109
|
+
licenses: []
|
110
|
+
|
111
|
+
post_install_message:
|
112
|
+
rdoc_options: []
|
113
|
+
|
114
|
+
require_paths:
|
115
|
+
- lib
|
116
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: "0"
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: "0"
|
128
|
+
requirements: []
|
129
|
+
|
130
|
+
rubyforge_project: active_record_csv
|
131
|
+
rubygems_version: 1.5.2
|
132
|
+
signing_key:
|
133
|
+
specification_version: 3
|
134
|
+
summary: Simple CSV import/export for ActiveRecord
|
135
|
+
test_files:
|
136
|
+
- spec/active_record_csv_spec.rb
|
137
|
+
- spec/schema.rb
|
138
|
+
- spec/spec_helper.rb
|
139
|
+
- spec/support/fixtures/movies.csv
|
140
|
+
- spec/support/macros.rb
|
141
|
+
- spec/support/models/movie.rb
|