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 ADDED
File without changes
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm ruby-1.9.2-p0@active_record_csv
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in active_record_csv.gemspec
4
+ gemspec
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,9 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ task :default => :test
5
+
6
+ desc 'Run rspec tests'
7
+ task :test do
8
+ sh 'rspec spec/'
9
+ end
@@ -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,3 @@
1
+ module ActiveRecordCSV
2
+ VERSION = "0.1.0"
3
+ 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
@@ -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,3 @@
1
+ title,director_id
2
+ Black Swan,0
3
+ Inception,1
@@ -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
@@ -0,0 +1,11 @@
1
+ class Movie < ActiveRecord::Base
2
+
3
+ def csv_attributes
4
+ attributes.keep_if { |field, value| self.class.csv_fields.include?(field) }
5
+ end
6
+
7
+ def self.csv_fields
8
+ @csv_fields ||= ['title', 'director_id']
9
+ end
10
+
11
+ 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