colander 0.2.1 → 0.2.2
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/.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 [](http://travis-ci.org/mynewsdesk/colander)
|
1
|
+
Colander [](http://travis-ci.org/mynewsdesk/colander) [](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
|