colander 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/{.rbenv-version → .ruby-version.example} +0 -0
- data/Gemfile +2 -0
- data/README.md +1 -1
- data/lib/colander/parser/base.rb +1 -1
- data/lib/colander/version.rb +1 -1
- data/spec/base_spec.rb +4 -4
- data/spec/colander_spec.rb +25 -21
- data/spec/fixtures/plain.csv +2 -1
- data/spec/plain_spec.rb +8 -2
- data/spec/xls_spec.rb +9 -9
- data/spec/xlsx_spec.rb +2 -2
- metadata +39 -18
data/.gitignore
CHANGED
File without changes
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Colander [![Build Status](https://secure.travis-ci.org/mynewsdesk/colander.png?branch=master)](http://travis-ci.org/mynewsdesk/colander)
|
1
|
+
Colander [![Build Status](https://secure.travis-ci.org/mynewsdesk/colander.png?branch=master)](http://travis-ci.org/mynewsdesk/colander) [![Gem Version](https://badge.fury.io/rb/colander.png)](http://badge.fury.io/rb/colander)
|
2
2
|
==============
|
3
3
|
Colander is a gem to collect emails from various file formats.
|
4
4
|
|
data/lib/colander/parser/base.rb
CHANGED
data/lib/colander/version.rb
CHANGED
data/spec/base_spec.rb
CHANGED
@@ -2,9 +2,9 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Colander::Parser::Base do
|
4
4
|
describe "#emails" do
|
5
|
-
it "
|
5
|
+
it "responds to email" do
|
6
6
|
Colander::Parser::Base.any_instance.stub(:parse)
|
7
|
-
Colander::Parser::Base.new("foo/bar").
|
7
|
+
expect(Colander::Parser::Base.new("foo/bar")).to respond_to :emails
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
@@ -13,8 +13,8 @@ describe Colander::Parser::Base do
|
|
13
13
|
Dir.entries(sample_dir).each do |file_name|
|
14
14
|
sample = File.join(sample_dir, file_name)
|
15
15
|
next unless File.file?(sample)
|
16
|
-
it "
|
17
|
-
Colander.parse(sample).emails.
|
16
|
+
it "is able to parse the sample #{file_name}" do
|
17
|
+
expect(Colander.parse(sample).emails).to be_an(Array)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
data/spec/colander_spec.rb
CHANGED
@@ -2,44 +2,48 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Colander do
|
4
4
|
describe ".parse" do
|
5
|
-
it "
|
6
|
-
|
5
|
+
it "raises error if no file path is passed" do
|
6
|
+
expect {
|
7
7
|
Colander.parse
|
8
|
-
}.
|
8
|
+
}.to raise_error
|
9
9
|
end
|
10
10
|
|
11
|
-
it "
|
12
|
-
|
11
|
+
it "raises error if the file couldn't be found" do
|
12
|
+
expect {
|
13
|
+
Colander.parse("/path/to/hell.csv")
|
14
|
+
}.to raise_error
|
15
|
+
end
|
16
|
+
|
17
|
+
it "raises error if file is unsupported" do
|
18
|
+
expect {
|
13
19
|
Colander.parse("foo.bar")
|
14
|
-
}.
|
20
|
+
}.to raise_error
|
15
21
|
end
|
16
22
|
|
17
|
-
it "
|
18
|
-
|
19
|
-
Colander.parse("/
|
20
|
-
}.
|
23
|
+
it "does not raise error if a file path is passed" do
|
24
|
+
expect {
|
25
|
+
Colander.parse("spec/fixtures/plain.csv")
|
26
|
+
}.to_not raise_error
|
21
27
|
end
|
22
28
|
|
23
29
|
it "accepts an option file name and returns correct parser" do
|
24
|
-
Colander::Parser::Xls
|
25
|
-
Colander.parse("/file/path", "apa.xls").should be_a Colander::Parser::Xls
|
30
|
+
expect(Colander.parse("spec/fixtures/new-format.xlsx")).to be_a Colander::Parser::Xls
|
26
31
|
end
|
27
32
|
|
28
|
-
it "
|
29
|
-
path = "/
|
30
|
-
Colander::Parser::Xls
|
31
|
-
Colander.parse(path).should be_a Colander::Parser::Xls
|
33
|
+
it "recognizes a xls file and return correct parser" do
|
34
|
+
path = "spec/fixtures/new-format.xlsx"
|
35
|
+
expect(Colander.parse(path)).to be_a Colander::Parser::Xls
|
32
36
|
end
|
33
37
|
|
34
|
-
it "
|
38
|
+
it "recognizes a xlsx file and return correct parser" do
|
35
39
|
path = "/foo/apa.xlsx"
|
36
40
|
Colander::Parser::Xlsx.any_instance.stub(:parse)
|
37
|
-
Colander.parse(path).
|
41
|
+
expect(Colander.parse(path)).to be_a Colander::Parser::Xlsx
|
38
42
|
end
|
39
43
|
|
40
|
-
it "
|
41
|
-
Colander::Parser::Xlsx.
|
42
|
-
Colander.parse("/foo/
|
44
|
+
it "invokes parse method on the parser" do
|
45
|
+
expect_any_instance_of(Colander::Parser::Xlsx).to receive(:parse)
|
46
|
+
Colander.parse("/foo/apa.xlsx")
|
43
47
|
end
|
44
48
|
end
|
45
49
|
end
|
data/spec/fixtures/plain.csv
CHANGED
data/spec/plain_spec.rb
CHANGED
@@ -5,13 +5,19 @@ describe Colander::Parser::Plain do
|
|
5
5
|
it "retreives emails from an csv file" do
|
6
6
|
parser = Colander::Parser::Plain.new("spec/fixtures/plain.csv")
|
7
7
|
parser.parse
|
8
|
-
parser.emails.sort.
|
8
|
+
expect(parser.emails.sort).to eq ["jonas.forsberg@mynewsdesk.com", "alfred.pennyworth@gotham.travel", "peter.forsberg@xhockeypro.com"].sort
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'supports top-level-domains of all sizes' do
|
12
|
+
parser = Colander::Parser::Plain.new("spec/fixtures/plain.csv")
|
13
|
+
parser.parse
|
14
|
+
expect(parser.emails.sort).to eq ["jonas.forsberg@mynewsdesk.com", "alfred.pennyworth@gotham.travel", "peter.forsberg@xhockeypro.com"].sort
|
9
15
|
end
|
10
16
|
|
11
17
|
it "retreives emails from an txt file" do
|
12
18
|
parser = Colander::Parser::Plain.new("spec/fixtures/text.txt")
|
13
19
|
parser.parse
|
14
|
-
parser.emails.sort.
|
20
|
+
expect(parser.emails.sort).to eq ["jonas.forsberg@mynewsdesk.com", "kristian.hellquist@mynewsdesk.com", "richard@mynewsdesk.com"].sort
|
15
21
|
end
|
16
22
|
|
17
23
|
end
|
data/spec/xls_spec.rb
CHANGED
@@ -4,40 +4,40 @@ describe Colander::Parser::Xls do
|
|
4
4
|
describe "#parse" do
|
5
5
|
it "stores found emails" do
|
6
6
|
parser = Colander::Parser::Xls.new("file/path")
|
7
|
-
parser.
|
7
|
+
expect(parser).to receive(:parse_file).and_return("bruce@wayne.com")
|
8
8
|
parser.parse
|
9
|
-
parser.emails.sort.
|
9
|
+
expect(parser.emails.sort).to eq ["bruce@wayne.com"]
|
10
10
|
end
|
11
11
|
|
12
12
|
it "raises exception if file is invalid" do
|
13
13
|
parser = Colander::Parser::Xls.new("./#{__FILE__}")
|
14
|
-
|
14
|
+
expect {
|
15
15
|
parser.parse
|
16
|
-
}.
|
16
|
+
}.to raise_error
|
17
17
|
end
|
18
18
|
|
19
19
|
it "wraps errors and returns InvalidFile" do
|
20
20
|
parser = Colander::Parser::Xls.new("file/path")
|
21
|
-
parser.
|
21
|
+
expect(parser).to receive(:parse_file).and_raise(RuntimeError.new("FUUU"))
|
22
22
|
expect {
|
23
23
|
parser.parse
|
24
|
-
}.to raise_error
|
24
|
+
}.to raise_error
|
25
25
|
end
|
26
26
|
|
27
27
|
it "retreives emails from an 95-excel spreadsheet" do
|
28
28
|
parser = Colander::Parser::Xls.new("spec/fixtures/excel95.xls")
|
29
29
|
parser.parse
|
30
|
-
parser.emails.sort.
|
30
|
+
expect(parser.emails.sort).to eq ["markus.nordin@mynewsdesk.com", "markus@hej.se", "sven@bertil.se", "Adam.A@hotmail.com", "apa@elabs.se", "liam@neeson.net", "david@mynewsdesk.com"].sort
|
31
31
|
end
|
32
32
|
it "retreives emails from an xls spreadsheet" do
|
33
33
|
parser = Colander::Parser::Xls.new("spec/fixtures/old-format.xls")
|
34
34
|
parser.parse
|
35
|
-
parser.emails.sort.
|
35
|
+
expect(parser.emails.sort).to eq ["markus.nordin@mynewsdesk.com", "markus@hej.se", "sven@bertil.se", "Adam.A@hotmail.com", "apa@elabs.se", "liam@neeson.net", "david@mynewsdesk.com"].sort
|
36
36
|
end
|
37
37
|
it "retreives emails from an 95-excel spreadsheet without file suffix" do
|
38
38
|
parser = Colander::Parser::Xls.new("spec/fixtures/excel95-without-file-suffix")
|
39
39
|
parser.parse
|
40
|
-
parser.emails.sort.
|
40
|
+
expect(parser.emails.sort).to eq ["markus.nordin@mynewsdesk.com", "markus@hej.se", "sven@bertil.se", "Adam.A@hotmail.com", "apa@elabs.se", "liam@neeson.net", "david@mynewsdesk.com"].sort
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
data/spec/xlsx_spec.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
describe Colander::Parser::Xlsx do
|
3
3
|
it "is subclass of Colander::Parser::Xls" do
|
4
|
-
Colander::Parser::Xlsx.new("foo/bar").
|
4
|
+
expect(Colander::Parser::Xlsx.new("foo/bar")).to be_a Colander::Parser::Xls
|
5
5
|
end
|
6
6
|
|
7
7
|
describe "#parse" do
|
8
8
|
it "retreives emails from an xlsx spreadsheet" do
|
9
9
|
parser = Colander::Parser::Xlsx.new("spec/fixtures/new-format.xlsx")
|
10
10
|
parser.parse
|
11
|
-
parser.emails.sort.
|
11
|
+
expect(parser.emails.sort).to eq ["markus.nordin@mynewsdesk.com", "markus@hej.se", "sven@bertil.se", "Adam.A@hotmail.com", "apa@elabs.se", "liam@neeson.net", "david@mynewsdesk.com"].sort
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: colander
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.1
|
5
4
|
prerelease:
|
5
|
+
version: 0.2.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kristian Hellquist
|
@@ -10,41 +10,56 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2013-11-27 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
+
prerelease: false
|
16
17
|
name: zip
|
17
|
-
|
18
|
+
type: :runtime
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ~>
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 2.0.2
|
18
24
|
none: false
|
25
|
+
requirement: !ruby/object:Gem::Requirement
|
19
26
|
requirements:
|
20
27
|
- - ~>
|
21
28
|
- !ruby/object:Gem::Version
|
22
29
|
version: 2.0.2
|
23
|
-
|
24
|
-
prerelease: false
|
25
|
-
version_requirements: *70363883863640
|
30
|
+
none: false
|
26
31
|
- !ruby/object:Gem::Dependency
|
32
|
+
prerelease: false
|
27
33
|
name: rspec
|
28
|
-
|
34
|
+
type: :development
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ! '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
29
40
|
none: false
|
41
|
+
requirement: !ruby/object:Gem::Requirement
|
30
42
|
requirements:
|
31
43
|
- - ! '>='
|
32
44
|
- !ruby/object:Gem::Version
|
33
45
|
version: '0'
|
34
|
-
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: *70363883863220
|
46
|
+
none: false
|
37
47
|
- !ruby/object:Gem::Dependency
|
48
|
+
prerelease: false
|
38
49
|
name: pry
|
39
|
-
|
50
|
+
type: :development
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
40
56
|
none: false
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
41
58
|
requirements:
|
42
59
|
- - ! '>='
|
43
60
|
- !ruby/object:Gem::Version
|
44
61
|
version: '0'
|
45
|
-
|
46
|
-
prerelease: false
|
47
|
-
version_requirements: *70363883862760
|
62
|
+
none: false
|
48
63
|
description: Exctract an array of emails from various file formats (xls, xlsx, csv,
|
49
64
|
txt)
|
50
65
|
email:
|
@@ -54,7 +69,7 @@ extensions: []
|
|
54
69
|
extra_rdoc_files: []
|
55
70
|
files:
|
56
71
|
- .gitignore
|
57
|
-
- .
|
72
|
+
- .ruby-version.example
|
58
73
|
- .rvmrc
|
59
74
|
- .travis.yml
|
60
75
|
- Gemfile
|
@@ -89,20 +104,26 @@ rdoc_options: []
|
|
89
104
|
require_paths:
|
90
105
|
- lib
|
91
106
|
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
-
none: false
|
93
107
|
requirements:
|
94
108
|
- - ! '>='
|
95
109
|
- !ruby/object:Gem::Version
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
hash: 3478533411363888682
|
96
113
|
version: '0'
|
97
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
114
|
none: false
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
116
|
requirements:
|
100
117
|
- - ! '>='
|
101
118
|
- !ruby/object:Gem::Version
|
119
|
+
segments:
|
120
|
+
- 0
|
121
|
+
hash: 3478533411363888682
|
102
122
|
version: '0'
|
123
|
+
none: false
|
103
124
|
requirements: []
|
104
125
|
rubyforge_project:
|
105
|
-
rubygems_version: 1.8.
|
126
|
+
rubygems_version: 1.8.23
|
106
127
|
signing_key:
|
107
128
|
specification_version: 3
|
108
129
|
summary: Exctract an array of emails from various file formats
|