csvash 1.0.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +12 -11
- data/lib/csvash/version.rb +1 -1
- data/lib/csvash.rb +7 -4
- data/lib/generators/initializer/templates/csvash.rb +3 -0
- data/test/fixtures/example_comma.csv +5 -0
- data/test/modelifying_test.rb +11 -0
- metadata +4 -2
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Csvash
|
2
2
|
|
3
|
-
|
3
|
+
Got tired of parsing CSV files to your Models, or exporting into it?
|
4
|
+
Csvash automates that process for you. It handles your CSV extraction by mapping the document headers with your model properties and automagically creating new filled instances.
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
@@ -16,7 +17,7 @@ And then execute:
|
|
16
17
|
$ bundle
|
17
18
|
```
|
18
19
|
|
19
|
-
|
20
|
+
Not using Rails? install it yourself with:
|
20
21
|
|
21
22
|
```
|
22
23
|
$ gem install csvash
|
@@ -30,30 +31,27 @@ First of all you have to require it in your file:
|
|
30
31
|
require 'csvash'
|
31
32
|
```
|
32
33
|
|
33
|
-
|
34
|
+
In order to import from a CSV file you can pass the path where the file is allocated and a class:
|
34
35
|
|
35
36
|
```ruby
|
36
|
-
Csvash.
|
37
|
+
Csvash.modelify_and_import '/path/of/your/file.csv', User
|
37
38
|
```
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
In order to export, you can pass the desired path and CSV filename. Finally, you can pass a collection of already filled objects from a specific class you can pass the array:
|
40
|
+
However, to export you can pass the desired path and CSV filename. Finally, you can pass a collection of already filled objects from a specific class:
|
42
41
|
|
43
42
|
```ruby
|
44
43
|
Csvash.modelify_and_export '/path/to/file.csv', collection
|
45
44
|
```
|
46
45
|
|
47
46
|
_Where **collection** is an array of User objects, for example_
|
47
|
+
_* The path and its directories are created automatically_
|
48
48
|
|
49
|
-
|
49
|
+
To get just a collection of hashes containing the csv data you can call:
|
50
50
|
|
51
51
|
```ruby
|
52
|
-
Csvash.
|
52
|
+
Csvash.hashify '/path/of/your/file.csv'
|
53
53
|
```
|
54
54
|
|
55
|
-
_* The path and its directories are created automatically_
|
56
|
-
|
57
55
|
##Options
|
58
56
|
|
59
57
|
There are some behavior options that can be changed with its initializer. To create it just type:
|
@@ -67,6 +65,9 @@ These are the avaiable options
|
|
67
65
|
```ruby
|
68
66
|
# If set to true it will only retain fields that matches the class to be filled. Default is false.
|
69
67
|
# config.mass_assignment_safe = true
|
68
|
+
|
69
|
+
# Defines the default column separator to be used. Default is ';'
|
70
|
+
# column_separator = ';'
|
70
71
|
```
|
71
72
|
|
72
73
|
## Contributing
|
data/lib/csvash/version.rb
CHANGED
data/lib/csvash.rb
CHANGED
@@ -2,8 +2,11 @@ require 'csvash/version'
|
|
2
2
|
require 'csv'
|
3
3
|
|
4
4
|
module Csvash
|
5
|
-
class << self
|
6
|
-
|
5
|
+
class << self
|
6
|
+
attr_accessor :mass_assignment_safe, :column_separator
|
7
|
+
end
|
8
|
+
self.mass_assignment_safe = false
|
9
|
+
self.column_separator = ";"
|
7
10
|
|
8
11
|
def self.setup
|
9
12
|
yield self
|
@@ -34,7 +37,7 @@ private
|
|
34
37
|
collection = []
|
35
38
|
first_line = true
|
36
39
|
|
37
|
-
CSV.foreach(path, :encoding => "ISO-8859-1:UTF-8", :col_sep =>
|
40
|
+
CSV.foreach(path, :encoding => "ISO-8859-1:UTF-8", :col_sep => self.column_separator) do |line|
|
38
41
|
if first_line
|
39
42
|
# getting colum names and turning them into symbols
|
40
43
|
cols = line.map! { |c| c.downcase.to_sym }
|
@@ -58,7 +61,7 @@ private
|
|
58
61
|
unless collection.empty?
|
59
62
|
headers = retrieve_headers collection
|
60
63
|
begin
|
61
|
-
CSV.open(file, 'wb', :col_sep =>
|
64
|
+
CSV.open(file, 'wb', :col_sep => self.column_separator) do |csv|
|
62
65
|
csv << headers
|
63
66
|
collection.each do |item|
|
64
67
|
csv << retrieve_fields(item, headers)
|
data/test/modelifying_test.rb
CHANGED
@@ -7,6 +7,12 @@ include TestHelper
|
|
7
7
|
|
8
8
|
describe 'Modelifying' do
|
9
9
|
describe "import" do
|
10
|
+
before :each do
|
11
|
+
Csvash.setup do |config|
|
12
|
+
config.mass_assignment_safe = false
|
13
|
+
config.column_separator = ";"
|
14
|
+
end
|
15
|
+
end
|
10
16
|
it "passing the class" do
|
11
17
|
cars_extracted = Csvash.modelify_and_import fetch_fixture_path('example.csv'), Car
|
12
18
|
car = Car.new(
|
@@ -25,6 +31,11 @@ describe 'Modelifying' do
|
|
25
31
|
Csvash.setup { |config| config.mass_assignment_safe = true }
|
26
32
|
cars_extracted = Csvash.modelify_and_import fetch_fixture_path('example_mass_assignment.csv'), Car
|
27
33
|
end
|
34
|
+
|
35
|
+
it "Changing default column separator" do
|
36
|
+
Csvash.setup { |config| config.column_separator = "," }
|
37
|
+
cars_extracted = Csvash.modelify_and_import fetch_fixture_path('example_comma.csv'), Car
|
38
|
+
end
|
28
39
|
end
|
29
40
|
describe "export" do
|
30
41
|
before :each do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: csvash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-10-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
@@ -56,6 +56,7 @@ files:
|
|
56
56
|
- test/.DS_Store
|
57
57
|
- test/fixtures/.DS_Store
|
58
58
|
- test/fixtures/example.csv
|
59
|
+
- test/fixtures/example_comma.csv
|
59
60
|
- test/fixtures/example_mass_assignment.csv
|
60
61
|
- test/fixtures/example_values.txt
|
61
62
|
- test/hashifying_test.rb
|
@@ -91,6 +92,7 @@ test_files:
|
|
91
92
|
- test/.DS_Store
|
92
93
|
- test/fixtures/.DS_Store
|
93
94
|
- test/fixtures/example.csv
|
95
|
+
- test/fixtures/example_comma.csv
|
94
96
|
- test/fixtures/example_mass_assignment.csv
|
95
97
|
- test/fixtures/example_values.txt
|
96
98
|
- test/hashifying_test.rb
|