dmarc 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/.travis.yml +15 -5
- data/ChangeLog.md +13 -1
- data/Gemfile +5 -0
- data/README.md +43 -2
- data/dmarc.gemspec +1 -0
- data/lib/dmarc.rb +1 -0
- data/lib/dmarc/dmarc.rb +30 -0
- data/lib/dmarc/exceptions.rb +3 -16
- data/lib/dmarc/parser.rb +29 -17
- data/lib/dmarc/record.rb +190 -17
- data/lib/dmarc/version.rb +1 -1
- data/spec/dmarc_spec.rb +24 -0
- data/spec/parser_spec.rb +285 -239
- data/spec/record_spec.rb +91 -35
- data/spec/spec_helper.rb +3 -0
- metadata +18 -15
data/spec/record_spec.rb
CHANGED
@@ -2,58 +2,72 @@ require 'spec_helper'
|
|
2
2
|
require 'dmarc/record'
|
3
3
|
|
4
4
|
describe Record do
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
describe '#initialize' do
|
6
|
+
let(:attributes) do
|
7
|
+
{
|
8
|
+
v: :DMARC1,
|
9
|
+
p: :none,
|
10
|
+
adkim: :r
|
11
|
+
}
|
8
12
|
end
|
9
13
|
|
10
|
-
|
11
|
-
|
14
|
+
subject { described_class.new(attributes) }
|
15
|
+
|
16
|
+
it 'assigns the fields to its properties' do
|
17
|
+
expect(subject.v).to be :DMARC1
|
18
|
+
expect(subject.p).to be :none
|
19
|
+
expect(subject.adkim).to be :r
|
12
20
|
end
|
13
21
|
|
14
|
-
it '
|
15
|
-
expect(subject.
|
22
|
+
it 'gives "sp" the same value as "p" if undefined' do
|
23
|
+
expect(subject.sp).to be :none
|
16
24
|
end
|
25
|
+
end
|
17
26
|
|
18
|
-
|
19
|
-
|
27
|
+
context 'with default values' do
|
28
|
+
describe "#adkim" do
|
29
|
+
it "should return :r" do
|
30
|
+
expect(subject.adkim).to be == :r
|
31
|
+
end
|
20
32
|
end
|
21
33
|
|
22
|
-
|
23
|
-
|
34
|
+
describe "#aspf" do
|
35
|
+
it "should return :r" do
|
36
|
+
expect(subject.aspf).to be == :r
|
37
|
+
end
|
24
38
|
end
|
25
39
|
|
26
|
-
|
27
|
-
|
40
|
+
describe "#fo" do
|
41
|
+
it "should return ['0']" do
|
42
|
+
expect(subject.fo).to be == ['0']
|
43
|
+
end
|
28
44
|
end
|
29
|
-
end
|
30
45
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
p: 'none',
|
36
|
-
adkim: 'r'
|
37
|
-
}
|
46
|
+
describe "#pct" do
|
47
|
+
it "should return 100" do
|
48
|
+
expect(subject.pct).to be == 100
|
49
|
+
end
|
38
50
|
end
|
39
51
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
expect(rec.adkim).to eq('r')
|
52
|
+
describe "#rf" do
|
53
|
+
it "should return afrf" do
|
54
|
+
expect(subject.rf).to be == :afrf
|
55
|
+
end
|
45
56
|
end
|
46
57
|
|
47
|
-
|
48
|
-
|
49
|
-
|
58
|
+
describe "#ri" do
|
59
|
+
it "should return 86400" do
|
60
|
+
expect(subject.ri).to be == 86400
|
61
|
+
end
|
50
62
|
end
|
51
63
|
end
|
52
64
|
|
53
|
-
describe '.
|
65
|
+
describe '.parse' do
|
66
|
+
subject { described_class }
|
67
|
+
|
54
68
|
context 'with a valid record' do
|
55
69
|
it 'parse and returns a record' do
|
56
|
-
rec =
|
70
|
+
rec = subject.parse('v=DMARC1; p=quarantine')
|
57
71
|
|
58
72
|
expect(rec).to be_a Record
|
59
73
|
expect(rec.p).to eq :quarantine
|
@@ -62,11 +76,53 @@ describe Record do
|
|
62
76
|
|
63
77
|
context 'with an invalid record' do
|
64
78
|
it 'raises an InvalidRecord error' do
|
65
|
-
expect {
|
66
|
-
|
67
|
-
|
68
|
-
|
79
|
+
expect {
|
80
|
+
subject.parse('v=XXXXXXXXXX')
|
81
|
+
}.to raise_error(InvalidRecord)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe ".query" do
|
87
|
+
subject { described_class }
|
88
|
+
|
89
|
+
context "when given a domain" do
|
90
|
+
let(:domain) { 'google.com' }
|
91
|
+
|
92
|
+
it "should query and parse the DMARC record" do
|
93
|
+
record = subject.query(domain)
|
94
|
+
|
95
|
+
expect(record).to be_kind_of(Record)
|
96
|
+
expect(record.v).to be == :DMARC1
|
69
97
|
end
|
70
98
|
end
|
99
|
+
|
100
|
+
context "when given a bad domain" do
|
101
|
+
it "should raise a DNS error" do
|
102
|
+
expect(subject.query('foobar.com')).to be_nil
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe "#to_s" do
|
108
|
+
let(:v) { :DMARC1 }
|
109
|
+
let(:p) { :reject }
|
110
|
+
let(:rua) { [URI.parse('mailto:d@rua.agari.com')] }
|
111
|
+
let(:ruf) { [URI.parse('mailto:d@rua.agari.com')] }
|
112
|
+
let(:fo) { %w[0 1 d] }
|
113
|
+
|
114
|
+
subject do
|
115
|
+
described_class.new(
|
116
|
+
v: v,
|
117
|
+
p: p,
|
118
|
+
rua: rua,
|
119
|
+
ruf: ruf,
|
120
|
+
fo: fo
|
121
|
+
)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should convert the record to a String" do
|
125
|
+
expect(subject.to_s).to be == "v=#{v}; p=#{p}; rua=#{rua[0]}; ruf=#{ruf[0]}; fo=#{fo[0]}:#{fo[1]}:#{fo[2]}"
|
126
|
+
end
|
71
127
|
end
|
72
128
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dmarc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Davis Gallinghouse
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parslet
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.5'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.5'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.0'
|
41
41
|
description: DMARC Record Parser
|
@@ -45,11 +45,11 @@ executables: []
|
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
-
- .document
|
49
|
-
- .gitignore
|
50
|
-
- .rspec
|
51
|
-
- .travis.yml
|
52
|
-
- .yardopts
|
48
|
+
- ".document"
|
49
|
+
- ".gitignore"
|
50
|
+
- ".rspec"
|
51
|
+
- ".travis.yml"
|
52
|
+
- ".yardopts"
|
53
53
|
- ChangeLog.md
|
54
54
|
- Gemfile
|
55
55
|
- LICENSE.txt
|
@@ -57,11 +57,13 @@ files:
|
|
57
57
|
- Rakefile
|
58
58
|
- dmarc.gemspec
|
59
59
|
- lib/dmarc.rb
|
60
|
+
- lib/dmarc/dmarc.rb
|
60
61
|
- lib/dmarc/exceptions.rb
|
61
62
|
- lib/dmarc/parser.rb
|
62
63
|
- lib/dmarc/record.rb
|
63
64
|
- lib/dmarc/version.rb
|
64
65
|
- spec/data/alexa.csv
|
66
|
+
- spec/dmarc_spec.rb
|
65
67
|
- spec/parser_spec.rb
|
66
68
|
- spec/record_spec.rb
|
67
69
|
- spec/spec_helper.rb
|
@@ -76,22 +78,23 @@ require_paths:
|
|
76
78
|
- lib
|
77
79
|
required_ruby_version: !ruby/object:Gem::Requirement
|
78
80
|
requirements:
|
79
|
-
- -
|
81
|
+
- - ">="
|
80
82
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
83
|
+
version: 1.9.1
|
82
84
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
85
|
requirements:
|
84
|
-
- -
|
86
|
+
- - ">="
|
85
87
|
- !ruby/object:Gem::Version
|
86
88
|
version: '0'
|
87
89
|
requirements: []
|
88
90
|
rubyforge_project:
|
89
|
-
rubygems_version: 2.
|
91
|
+
rubygems_version: 2.4.7
|
90
92
|
signing_key:
|
91
93
|
specification_version: 4
|
92
94
|
summary: DMARC Record Parser
|
93
95
|
test_files:
|
94
96
|
- spec/data/alexa.csv
|
97
|
+
- spec/dmarc_spec.rb
|
95
98
|
- spec/parser_spec.rb
|
96
99
|
- spec/record_spec.rb
|
97
100
|
- spec/spec_helper.rb
|