sovren 0.0.3
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 +15 -0
- data/.gitignore +19 -0
- data/Gemfile +14 -0
- data/LICENSE.txt +22 -0
- data/README.md +41 -0
- data/Rakefile +7 -0
- data/lib/sovren.rb +30 -0
- data/lib/sovren/achievement.rb +16 -0
- data/lib/sovren/association.rb +17 -0
- data/lib/sovren/certification.rb +18 -0
- data/lib/sovren/client.rb +45 -0
- data/lib/sovren/competency.rb +18 -0
- data/lib/sovren/contact_information.rb +33 -0
- data/lib/sovren/education.rb +30 -0
- data/lib/sovren/employment.rb +29 -0
- data/lib/sovren/language.rb +31 -0
- data/lib/sovren/military.rb +19 -0
- data/lib/sovren/patent.rb +19 -0
- data/lib/sovren/publication.rb +35 -0
- data/lib/sovren/reference.rb +18 -0
- data/lib/sovren/resume.rb +28 -0
- data/lib/sovren/version.rb +3 -0
- data/sovren.gemspec +30 -0
- data/spec/sovren/achievement_spec.rb +24 -0
- data/spec/sovren/association_spec.rb +25 -0
- data/spec/sovren/certification_spec.rb +26 -0
- data/spec/sovren/client_spec.rb +28 -0
- data/spec/sovren/competency_spec.rb +26 -0
- data/spec/sovren/contact_information_spec.rb +73 -0
- data/spec/sovren/education_spec.rb +48 -0
- data/spec/sovren/employment_spec.rb +45 -0
- data/spec/sovren/language_spec.rb +27 -0
- data/spec/sovren/military_spec.rb +29 -0
- data/spec/sovren/patent_spec.rb +27 -0
- data/spec/sovren/publication_spec.rb +70 -0
- data/spec/sovren/reference_spec.rb +34 -0
- data/spec/sovren/resume_spec.rb +42 -0
- data/spec/sovren_spec.rb +4 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/support/ResumeSample.doc +0 -0
- data/spec/support/_resume.xml +970 -0
- data/spec/support/achievements.xml +5 -0
- data/spec/support/associations.xml +8 -0
- data/spec/support/certifications.xml +23 -0
- data/spec/support/competencies.xml +353 -0
- data/spec/support/competencies_sparse.xml +3 -0
- data/spec/support/contact_information.xml +69 -0
- data/spec/support/contact_information_sparse.xml +10 -0
- data/spec/support/education.xml +81 -0
- data/spec/support/education_sparse.xml +10 -0
- data/spec/support/employment.xml +179 -0
- data/spec/support/employment_sparse.xml +11 -0
- data/spec/support/languages.xml +23 -0
- data/spec/support/military.xml +19 -0
- data/spec/support/patents.xml +14 -0
- data/spec/support/publications.xml +60 -0
- data/spec/support/references.xml +36 -0
- data/spec/support/resume.json +466 -0
- data/spec/support/resume.xml +1072 -0
- data/spec/support/speaking_events.xml +7 -0
- data/spec/vcr/parsed_resume.yml +3695 -0
- metadata +215 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
module Sovren
|
2
|
+
class Publication
|
3
|
+
attr_accessor :type, :title, :role, :publication_date, :journal_or_serial_name, :volume, :issue, :page_number, :abstract, :copyright_date, :copyright_text, :edition, :isbn, :publisher_name, :publisher_location, :event_name, :conference_date, :conference_location, :comments, :number_of_pages
|
4
|
+
|
5
|
+
def self.parse(publications)
|
6
|
+
return Array.new if publications.nil?
|
7
|
+
result = publications.css('Article,Book,ConferencePaper,OtherPublication').collect do |item|
|
8
|
+
c = Publication.new
|
9
|
+
c.type = item.name == "OtherPublication" ? item['type'] : item.name
|
10
|
+
c.title = item.css('Title').text
|
11
|
+
c.role = item.css('Name').first['role'] rescue nil
|
12
|
+
c.publication_date = item.css('PublicationDate').css('YearMonth,Year').first.text rescue nil
|
13
|
+
c.journal_or_serial_name = item.css('JournalOrSerialName').text
|
14
|
+
c.volume = item.css('Volume').text
|
15
|
+
c.issue = item.css('Issue').text
|
16
|
+
c.page_number = item.css('PageNumber').text
|
17
|
+
c.abstract = item.css('Abstract').text
|
18
|
+
c.copyright_date = item.css('Copyright CopyrightDates OriginalDate Year, Copyright CopyrightDates OriginalDate YearMonth').first.text rescue nil
|
19
|
+
c.copyright_text = item.css('Copyright CopyrightText').first.text rescue nil
|
20
|
+
c.edition = item.css('Edition').text
|
21
|
+
c.isbn = item.css('ISBN').text
|
22
|
+
c.publisher_name = item.css('PublisherName').text
|
23
|
+
c.publisher_location = item.css('PublisherLocation').text
|
24
|
+
c.event_name = item.css('EventName').text
|
25
|
+
c.conference_date = Date.parse(item.css('ConferenceDate AnyDate').text) rescue nil
|
26
|
+
c.conference_location = item.css('ConferenceLocation').text
|
27
|
+
c.comments = item.css('Comments').text
|
28
|
+
c.number_of_pages = item.css('NumberOfPages').text.to_i rescue nil
|
29
|
+
c
|
30
|
+
end
|
31
|
+
result
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Sovren
|
2
|
+
class Reference
|
3
|
+
attr_accessor :name, :title, :email, :phone_number
|
4
|
+
|
5
|
+
def self.parse(references)
|
6
|
+
return Array.new if references.nil?
|
7
|
+
result = references.css('Reference').collect do |item|
|
8
|
+
r = Reference.new
|
9
|
+
r.name = item.css('PersonName FormattedName').text
|
10
|
+
r.title = item.css('PositionTitle').text
|
11
|
+
r.email = item.css('ContactMethod InternetEmailAddress').first.text rescue nil
|
12
|
+
r.phone_number = item.css('ContactMethod Telephone FormattedNumber').first.text rescue nil
|
13
|
+
r
|
14
|
+
end
|
15
|
+
result
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Sovren
|
4
|
+
class Resume
|
5
|
+
attr_accessor :executive_summary, :objective, :contact_information, :education_history, :employment_history, :certifications, :competencies, :achievements, :associations, :languages, :military_history, :patent_history, :publication_history, :references
|
6
|
+
|
7
|
+
def self.parse(resume)
|
8
|
+
parsed_resume = Nokogiri::XML.parse(resume)
|
9
|
+
resume = self.new
|
10
|
+
resume.executive_summary = parsed_resume.css('ExecutiveSummary').text
|
11
|
+
resume.objective = parsed_resume.css('Objective').text
|
12
|
+
resume.contact_information = ContactInformation.parse(parsed_resume.css('ContactInfo').first)
|
13
|
+
resume.education_history = Education.parse(parsed_resume.css('EducationHistory').first)
|
14
|
+
resume.employment_history = Employment.parse(parsed_resume.css('EmploymentHistory').first)
|
15
|
+
resume.certifications = Certification.parse(parsed_resume.css('LicensesAndCertifications').first)
|
16
|
+
resume.competencies = Competency.parse(parsed_resume.css('Qualifications').first)
|
17
|
+
resume.achievements = Achievement.parse(parsed_resume.css('Achievements').first)
|
18
|
+
resume.associations = Association.parse(parsed_resume.css('Associations').first)
|
19
|
+
resume.languages = Language.parse(parsed_resume.css('Languages').first)
|
20
|
+
resume.military_history = Military.parse(parsed_resume.css('MilitaryHistory').first)
|
21
|
+
resume.patent_history = Patent.parse(parsed_resume.css('PatentHistory').first)
|
22
|
+
resume.publication_history = Publication.parse(parsed_resume.css('PublicationHistory').first)
|
23
|
+
resume.references = Reference.parse(parsed_resume.css('References').first)
|
24
|
+
resume
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
data/sovren.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'sovren/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "sovren"
|
8
|
+
spec.version = Sovren::VERSION
|
9
|
+
spec.authors = ["Eric Fleming"]
|
10
|
+
spec.email = ["efleming@gmail.com"]
|
11
|
+
spec.description = "This is a gem used for parsing resumes using the Sovren resume parser service."
|
12
|
+
spec.summary = "This is a gem used for parsing resumes using the Sovren resume parser service."
|
13
|
+
spec.homepage = "http://github.com/efleming/sovren"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.required_ruby_version = '>= 1.9.2'
|
22
|
+
|
23
|
+
spec.add_dependency "savon", "~> 2.2.0"
|
24
|
+
spec.add_dependency "httpclient", "~> 2.3.3"
|
25
|
+
spec.add_dependency "nokogiri", "~> 1.5.9"
|
26
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
27
|
+
spec.add_development_dependency "rake"
|
28
|
+
|
29
|
+
spec.requirements << "Access to a sovren resume parser server."
|
30
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sovren::Achievement do
|
4
|
+
use_natural_assertions
|
5
|
+
|
6
|
+
context ".parse" do
|
7
|
+
context "a full resume" do
|
8
|
+
Given(:raw_xml) { File.read(File.expand_path(File.dirname(__FILE__) + '/../support/achievements.xml')) }
|
9
|
+
Given(:xml) { Nokogiri::XML.parse(raw_xml) }
|
10
|
+
|
11
|
+
When(:result) { Sovren::Achievement.parse(xml) }
|
12
|
+
|
13
|
+
Then { result.length == 1 }
|
14
|
+
Then { result.first.description == "Awarded Medal of Merit by the Royal Society of Forensics, 2005" }
|
15
|
+
end
|
16
|
+
|
17
|
+
context "no achievements" do
|
18
|
+
When(:result) { Sovren::Achievement.parse(nil) }
|
19
|
+
|
20
|
+
Then { result == Array.new }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sovren::Association do
|
4
|
+
use_natural_assertions
|
5
|
+
|
6
|
+
context ".parse" do
|
7
|
+
context "a full resume" do
|
8
|
+
Given(:raw_xml) { File.read(File.expand_path(File.dirname(__FILE__) + '/../support/associations.xml')) }
|
9
|
+
Given(:xml) { Nokogiri::XML.parse(raw_xml) }
|
10
|
+
|
11
|
+
When(:result) { Sovren::Association.parse(xml) }
|
12
|
+
|
13
|
+
Then { result.length == 1 }
|
14
|
+
Then { result.first.name == "Association of Retired Military Document Examiners" }
|
15
|
+
Then { result.first.role == "Member" }
|
16
|
+
end
|
17
|
+
|
18
|
+
context "no associations" do
|
19
|
+
When(:result) { Sovren::Association.parse(nil) }
|
20
|
+
|
21
|
+
Then { result == Array.new }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sovren::Certification do
|
4
|
+
use_natural_assertions
|
5
|
+
|
6
|
+
context ".parse" do
|
7
|
+
context "a full resume" do
|
8
|
+
Given(:raw_xml) { File.read(File.expand_path(File.dirname(__FILE__) + '/../support/certifications.xml')) }
|
9
|
+
Given(:xml) { Nokogiri::XML.parse(raw_xml) }
|
10
|
+
|
11
|
+
When(:result) { Sovren::Certification.parse(xml) }
|
12
|
+
|
13
|
+
Then { result.length == 4 }
|
14
|
+
Then { result[2].name == "Sun Secure Global Desktop (Tarantella) System Administration" }
|
15
|
+
Then { result[2].description == "certification" }
|
16
|
+
Then { result[2].effective_date == Date.new(2001,9,1) }
|
17
|
+
end
|
18
|
+
|
19
|
+
context "no competencies" do
|
20
|
+
When(:result) { Sovren::Certification.parse(nil) }
|
21
|
+
|
22
|
+
Then { result == Array.new }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sovren::Client do
|
4
|
+
Given(:sovren_client) { Sovren::Client.new(endpoint: "foo1", username: "foo2", password: "foo3") }
|
5
|
+
|
6
|
+
context 'init' do
|
7
|
+
Then { sovren_client.should_not be_nil }
|
8
|
+
end
|
9
|
+
|
10
|
+
context '.config' do
|
11
|
+
Then { sovren_client.should respond_to :endpoint }
|
12
|
+
Then { sovren_client.endpoint == "foo1" }
|
13
|
+
Then { sovren_client.should respond_to :username }
|
14
|
+
Then { sovren_client.username == "foo2" }
|
15
|
+
Then { sovren_client.should respond_to :password }
|
16
|
+
Then { sovren_client.password == "foo3" }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'parsing' do
|
20
|
+
Given(:sovren_client) { Sovren::Client.new(endpoint: "http://www.foo.com/") }
|
21
|
+
Given(:resume) { File.read(File.expand_path(File.dirname(__FILE__) + '/../support/ResumeSample.doc')) }
|
22
|
+
|
23
|
+
context ".parse", vcr: {cassette_name: 'parsed_resume'} do
|
24
|
+
When(:result) { sovren_client.parse(resume) }
|
25
|
+
Then { result.class.should == Sovren::Resume }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sovren::Competency do
|
4
|
+
use_natural_assertions
|
5
|
+
|
6
|
+
context ".parse" do
|
7
|
+
context "a full resume" do
|
8
|
+
Given(:raw_xml) { File.read(File.expand_path(File.dirname(__FILE__) + '/../support/competencies.xml')) }
|
9
|
+
Given(:xml) { Nokogiri::XML.parse(raw_xml) }
|
10
|
+
|
11
|
+
When(:result) { Sovren::Competency.parse(xml) }
|
12
|
+
|
13
|
+
Then { result.length == 50 }
|
14
|
+
Then { result.first.name == "MARKETING" }
|
15
|
+
Then { result.first.months == 158 }
|
16
|
+
Then { result.first.last_used_date == Date.new(2013,4,29) }
|
17
|
+
end
|
18
|
+
|
19
|
+
context "no competencies" do
|
20
|
+
When(:result) { Sovren::Competency.parse(nil) }
|
21
|
+
|
22
|
+
Then { result == Array.new }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sovren::ContactInformation do
|
4
|
+
use_natural_assertions
|
5
|
+
|
6
|
+
Given(:contact_information) { Sovren::ContactInformation.new }
|
7
|
+
|
8
|
+
Then { contact_information.should respond_to :first_name }
|
9
|
+
Then { contact_information.should respond_to :middle_name }
|
10
|
+
Then { contact_information.should respond_to :last_name }
|
11
|
+
Then { contact_information.should respond_to :generation }
|
12
|
+
|
13
|
+
Then { contact_information.should respond_to :address_line_1 }
|
14
|
+
Then { contact_information.should respond_to :address_line_2 }
|
15
|
+
Then { contact_information.should respond_to :city }
|
16
|
+
Then { contact_information.should respond_to :state }
|
17
|
+
Then { contact_information.should respond_to :country }
|
18
|
+
Then { contact_information.should respond_to :postal_code }
|
19
|
+
|
20
|
+
Then { contact_information.should respond_to :home_phone }
|
21
|
+
Then { contact_information.should respond_to :mobile_phone }
|
22
|
+
|
23
|
+
Then { contact_information.should respond_to :email }
|
24
|
+
Then { contact_information.should respond_to :website }
|
25
|
+
|
26
|
+
context ".parse" do
|
27
|
+
context "a full resume" do
|
28
|
+
Given(:raw_xml) { File.read(File.expand_path(File.dirname(__FILE__) + '/../support/contact_information.xml')) }
|
29
|
+
Given(:xml) { Nokogiri::XML.parse(raw_xml) }
|
30
|
+
|
31
|
+
When(:result) { Sovren::ContactInformation.parse(xml) }
|
32
|
+
|
33
|
+
Then { result.first_name == "John" }
|
34
|
+
Then { result.middle_name == "F." }
|
35
|
+
Then { result.last_name == "Adams" }
|
36
|
+
Then { result.generation == "III" }
|
37
|
+
Then { result.aristocratic_title == "Duke" }
|
38
|
+
Then { result.form_of_address == "Mr." }
|
39
|
+
Then { result.qualification == "M.D." }
|
40
|
+
|
41
|
+
Then { result.address_line_1 == "930 Via Mil Cumbres" }
|
42
|
+
Then { result.address_line_2 == "Unit 119" }
|
43
|
+
Then { result.city == "Solana Beach" }
|
44
|
+
Then { result.state == "CA" }
|
45
|
+
Then { result.postal_code == "92075" }
|
46
|
+
Then { result.country == "US" }
|
47
|
+
|
48
|
+
Then { result.home_phone == "(858) 555-1000" }
|
49
|
+
Then { result.mobile_phone == "(858) 555-1001" }
|
50
|
+
|
51
|
+
Then { result.website == "http://www.linkedin.com/in/johnadams" }
|
52
|
+
Then { result.email == "johnadams@yamoo.com" }
|
53
|
+
end
|
54
|
+
|
55
|
+
context "a sparse resume" do
|
56
|
+
Given(:raw_xml) { File.read(File.expand_path(File.dirname(__FILE__) + '/../support/contact_information_sparse.xml')) }
|
57
|
+
Given(:xml) { Nokogiri::XML.parse(raw_xml) }
|
58
|
+
|
59
|
+
When(:result) { Sovren::ContactInformation.parse(xml) }
|
60
|
+
|
61
|
+
Then { result.first_name == "John" }
|
62
|
+
Then { result.last_name == "Adams" }
|
63
|
+
Then { result.email == "johnadams@yamoo.com" }
|
64
|
+
end
|
65
|
+
|
66
|
+
context "no contact info" do
|
67
|
+
When(:result) { Sovren::ContactInformation.parse(nil) }
|
68
|
+
|
69
|
+
Then { result == Array.new }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sovren::Education do
|
4
|
+
use_natural_assertions
|
5
|
+
|
6
|
+
context ".graduated?" do
|
7
|
+
When(:education) {Sovren::Education.new}
|
8
|
+
Then { education.graduated? == false }
|
9
|
+
end
|
10
|
+
|
11
|
+
context ".parse" do
|
12
|
+
context "a full list of experience" do
|
13
|
+
Given(:raw_education_xml) { File.read(File.expand_path(File.dirname(__FILE__) + '/../support/education.xml')) }
|
14
|
+
Given(:education_xml) { Nokogiri::XML.parse(raw_education_xml) }
|
15
|
+
|
16
|
+
When(:result) { Sovren::Education.parse(education_xml) }
|
17
|
+
|
18
|
+
Then { result.length == 2 }
|
19
|
+
Then { result.first.school_name == "California State University" }
|
20
|
+
Then { result.first.city == "Chico"}
|
21
|
+
Then { result.first.state == "CA"}
|
22
|
+
Then { result.first.country == "US"}
|
23
|
+
Then { result.first.major == "Business Administration" }
|
24
|
+
Then { result.first.minor == "" }
|
25
|
+
Then { result.first.degree_type == "bachelors" }
|
26
|
+
Then { result.first.degree_name == "B.S." }
|
27
|
+
Then { result.first.gpa == 3.66 }
|
28
|
+
Then { result.first.gpa_out_of == 4.00 }
|
29
|
+
Then { result.first.start_date == Date.new(1996,1,1) }
|
30
|
+
Then { result.first.end_date == Date.new(1999,1,1) }
|
31
|
+
Then { result.first.graduated == true }
|
32
|
+
Then { result.first.graduated? == true }
|
33
|
+
end
|
34
|
+
|
35
|
+
context "very little experience information" do
|
36
|
+
Given(:raw_education_xml) { File.read(File.expand_path(File.dirname(__FILE__) + '/../support/education_sparse.xml')) }
|
37
|
+
Given(:education_xml) { Nokogiri::XML.parse(raw_education_xml) }
|
38
|
+
|
39
|
+
When(:result) { Sovren::Education.parse(education_xml) }
|
40
|
+
|
41
|
+
Then { result.length == 1 }
|
42
|
+
Then { result.first.school_name == "California State University" }
|
43
|
+
Then { result.first.degree_type == "bachelors" }
|
44
|
+
Then { result.first.degree_name == "B.S." }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sovren::Employment do
|
4
|
+
use_natural_assertions
|
5
|
+
|
6
|
+
context ".current_employer?" do
|
7
|
+
When(:employment) {Sovren::Employment.new}
|
8
|
+
Then { employment.current_employer? == false }
|
9
|
+
end
|
10
|
+
|
11
|
+
context ".parse" do
|
12
|
+
context "a full resume" do
|
13
|
+
Given(:raw_employment_xml) { File.read(File.expand_path(File.dirname(__FILE__) + '/../support/employment.xml')) }
|
14
|
+
Given(:employment_xml) { Nokogiri::XML.parse(raw_employment_xml) }
|
15
|
+
|
16
|
+
When(:result) { Sovren::Employment.parse(employment_xml) }
|
17
|
+
|
18
|
+
Then { result.length == 4 }
|
19
|
+
Then { result.first.employer == "Technical Difference" }
|
20
|
+
Then { result.first.division == nil }
|
21
|
+
Then { result.first.title == "Director of Web Applications Development" }
|
22
|
+
Then { result.first.city == "Encinitas"}
|
23
|
+
Then { result.first.state == "CA"}
|
24
|
+
Then { result.first.country == "US"}
|
25
|
+
Then { result.first.description.length == 694 }
|
26
|
+
Then { result.first.start_date == Date.new(2004,10,01) }
|
27
|
+
Then { result.first.end_date == nil }
|
28
|
+
Then { result.first.current_employer == true }
|
29
|
+
Then { result.first.current_employer? == true }
|
30
|
+
end
|
31
|
+
|
32
|
+
context "a sparse resume" do
|
33
|
+
Given(:raw_employment_xml) { File.read(File.expand_path(File.dirname(__FILE__) + '/../support/employment_sparse.xml')) }
|
34
|
+
Given(:employment_xml) { Nokogiri::XML.parse(raw_employment_xml) }
|
35
|
+
|
36
|
+
When(:result) { Sovren::Employment.parse(employment_xml) }
|
37
|
+
|
38
|
+
Then { result.length == 1 }
|
39
|
+
Then { result.first.employer == "Technical Difference" }
|
40
|
+
Then { result.first.title == "Director of Web Applications Development" }
|
41
|
+
Then { result.first.current_employer? == false }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sovren::Language do
|
4
|
+
use_natural_assertions
|
5
|
+
|
6
|
+
context ".parse" do
|
7
|
+
context "a full resume" do
|
8
|
+
Given(:raw_xml) { File.read(File.expand_path(File.dirname(__FILE__) + '/../support/languages.xml')) }
|
9
|
+
Given(:xml) { Nokogiri::XML.parse(raw_xml) }
|
10
|
+
|
11
|
+
When(:result) { Sovren::Language.parse(xml) }
|
12
|
+
|
13
|
+
Then { result.length == 3 }
|
14
|
+
Then { result.first.language_code == "ps" }
|
15
|
+
Then { result.first.read? == true }
|
16
|
+
Then { result.first.speak? == true }
|
17
|
+
Then { result.first.write? == true }
|
18
|
+
end
|
19
|
+
|
20
|
+
context "no languages" do
|
21
|
+
When(:result) { Sovren::Language.parse(nil) }
|
22
|
+
|
23
|
+
Then { result == Array.new }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|