verso 0.0.2 → 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.
Files changed (63) hide show
  1. data/.gitignore +2 -0
  2. data/README.md +10 -22
  3. data/lib/verso.rb +10 -2
  4. data/lib/verso/base.rb +50 -0
  5. data/lib/verso/cluster.rb +55 -25
  6. data/lib/verso/cluster_list.rb +15 -10
  7. data/lib/verso/correlation_list.rb +30 -40
  8. data/lib/verso/course.rb +106 -43
  9. data/lib/verso/course_list.rb +57 -21
  10. data/lib/verso/credential.rb +94 -20
  11. data/lib/verso/credential_list.rb +30 -15
  12. data/lib/verso/duty_area.rb +23 -10
  13. data/lib/verso/edition_list.rb +18 -10
  14. data/lib/verso/emphasis.rb +26 -12
  15. data/lib/verso/emphasis_list.rb +18 -10
  16. data/lib/verso/examination_list.rb +28 -12
  17. data/lib/verso/extra.rb +34 -32
  18. data/lib/verso/extras_list.rb +28 -12
  19. data/lib/verso/frontmatter.rb +43 -11
  20. data/lib/verso/hash.rb +19 -0
  21. data/lib/verso/http_gettable.rb +31 -0
  22. data/lib/verso/occupation.rb +36 -14
  23. data/lib/verso/occupation_data.rb +35 -14
  24. data/lib/verso/occupation_list.rb +23 -20
  25. data/lib/verso/pathway.rb +32 -14
  26. data/lib/verso/program_area.rb +42 -21
  27. data/lib/verso/program_area_list.rb +15 -11
  28. data/lib/verso/standard.rb +45 -23
  29. data/lib/verso/standards_list.rb +41 -30
  30. data/lib/verso/task.rb +52 -17
  31. data/lib/verso/task_list.rb +40 -17
  32. data/lib/verso/version.rb +1 -1
  33. data/spec/cluster_list_spec.rb +78 -5
  34. data/spec/cluster_spec.rb +106 -9
  35. data/spec/correlation_list_spec.rb +108 -50
  36. data/spec/course_list_spec.rb +112 -23
  37. data/spec/course_spec.rb +321 -127
  38. data/spec/credential_list_spec.rb +83 -52
  39. data/spec/credential_spec.rb +358 -19
  40. data/spec/duty_area_spec.rb +47 -17
  41. data/spec/edition_list_spec.rb +90 -4
  42. data/spec/emphasis_list_spec.rb +75 -11
  43. data/spec/emphasis_spec.rb +37 -21
  44. data/spec/examination_list_spec.rb +146 -20
  45. data/spec/extra_spec.rb +61 -22
  46. data/spec/extras_list_spec.rb +80 -17
  47. data/spec/frontmatter_spec.rb +141 -6
  48. data/spec/hash_spec.rb +49 -0
  49. data/spec/occupation_data_spec.rb +31 -13
  50. data/spec/occupation_list_spec.rb +88 -15
  51. data/spec/occupation_spec.rb +72 -28
  52. data/spec/pathway_spec.rb +47 -27
  53. data/spec/program_area_list_spec.rb +78 -4
  54. data/spec/program_area_spec.rb +70 -22
  55. data/spec/standard_spec.rb +94 -36
  56. data/spec/standards_list_spec.rb +130 -36
  57. data/spec/task_list_spec.rb +160 -51
  58. data/spec/task_spec.rb +120 -33
  59. data/verso.gemspec +3 -1
  60. metadata +41 -17
  61. data/lib/verso/http_get.rb +0 -9
  62. data/lib/verso/sol_correlation_list.rb +0 -53
  63. data/spec/sol_correlation_list_spec.rb +0 -74
@@ -1,21 +1,94 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Verso::OccupationList do
4
+ use_vcr_cassette :record => :new_episodes
5
+
6
+ describe 'array-like behavior' do
7
+ before(:each) do
8
+ @occupations = Verso::OccupationList.new(:text => "teacher")
9
+ end
10
+
11
+ describe '#[]' do
12
+ it 'responds' do
13
+ @occupations.should respond_to(:[])
14
+ end
15
+
16
+ it 'gets a Verso::OccupationData object' do
17
+ @occupations[10].should be_a(Verso::OccupationData)
18
+ end
19
+ end
20
+
21
+ describe '#each' do
22
+ it 'responds' do
23
+ @occupations.should respond_to(:each)
24
+ end
25
+
26
+ it 'yields' do
27
+ expect { |b| @occupations.each("foo", &b).to yield_control }
28
+ end
29
+
30
+ it 'yields Verso::OccupationData objects' do
31
+ @occupations.each { |c| c.should be_a(Verso::OccupationData) }
32
+ end
33
+ end
34
+
35
+ describe '#empty?' do
36
+ it 'responds' do
37
+ @occupations.should respond_to(:empty?)
38
+ end
39
+
40
+ it 'is not empty' do
41
+ @occupations.should_not be_empty
42
+ end
43
+ end
44
+
45
+ describe '#last' do
46
+ it 'responds' do
47
+ @occupations.should respond_to(:last)
48
+ end
49
+
50
+ it 'is a Verso::OccupationData object' do
51
+ @occupations.last.should be_a(Verso::OccupationData)
52
+ end
53
+ end
54
+
55
+ describe '#length' do
56
+ it 'responds' do
57
+ @occupations.should respond_to(:length)
58
+ end
59
+
60
+ it 'is a Fixnum' do
61
+ @occupations.length.should be_a(Fixnum)
62
+ end
63
+ end
64
+
65
+ describe '#first' do
66
+ it 'responds' do
67
+ @occupations.should respond_to(:first)
68
+ end
69
+
70
+ it 'is a Verso::OccupationData object' do
71
+ @occupations.first.should be_a(Verso::OccupationData)
72
+ end
73
+ end
74
+
75
+ describe '#count' do
76
+ it 'responds' do
77
+ @occupations.should respond_to(:count)
78
+ end
79
+
80
+ it 'is a Fixnum' do
81
+ @occupations.count.should be_a(Fixnum)
82
+ end
83
+ end
84
+ end
85
+
86
+ it 'returns an empty array if the search is empty' do
87
+ Verso::OccupationList.new.should be_empty
88
+ end
89
+
4
90
  it "searches by text" do
5
- Net::HTTP.should_receive(:get).
6
- with('api.cteresource.org', '/occupations?text=teacher', 80).
7
- and_return(
8
- JSON.pretty_generate(
9
- { :occupation_data => [{
10
- :cluster => { :title => "Education and Training" },
11
- :pathway => { :title => "Teaching and Training" },
12
- :occupations => [
13
- { :title => "Elementary School Teacher" }
14
- ]
15
- }] }
16
- )
17
- )
18
- results = Verso::OccupationList.new(:text => "teacher")
19
- results.first.occupations.first.title.should eq("Elementary School Teacher")
91
+ results = Verso::OccupationList.new(:text => "golf")
92
+ results.first.occupations.first.title.should match(/Turf/)
20
93
  end
21
94
  end
@@ -1,41 +1,85 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Verso::Occupation do
4
- before do
5
- @raw_occupation = { "id" => 2966,
6
- "title" => "Agricultural Commodity Broker",
7
- "pathway" => { "title" => "Agriculture" } }
8
- @occupation = Verso::Occupation.new(@raw_occupation)
4
+ use_vcr_cassette :record => :new_episodes
5
+
6
+ before(:each) do
7
+ @occ = Verso::OccupationList.new(:text => "golf").first.occupations.first
9
8
  end
10
9
 
11
- it 'should respond to #title' do
12
- @occupation.title.should eq("Agricultural Commodity Broker")
10
+ describe '#description' do
11
+ it 'responds' do
12
+ @occ.should respond_to(:description)
13
+ end
14
+
15
+ it 'is a String' do
16
+ @occ.description.should be_a(String)
17
+ end
18
+
19
+ it 'is HTML' do
20
+ @occ.description.should match(/<\/.+>/)
21
+ end
13
22
  end
14
23
 
15
- it 'should respond to #id' do
16
- @occupation.id.should eq(2966)
24
+ describe '#id' do
25
+ it 'responds' do
26
+ @occ.should respond_to(:id)
27
+ end
28
+
29
+ it 'is a Fixnum' do
30
+ @occ.id.should be_a(Fixnum)
31
+ end
32
+
33
+ it 'is not the same as #object_id' do
34
+ @occ.id.should_not == @occ.object_id
35
+ end
17
36
  end
18
37
 
19
- it 'should respond to #pathway' do
20
- @occupation.pathway.title.should eq("Agriculture")
38
+ describe '#pathway' do
39
+ it 'responds' do
40
+ @occ.should respond_to(:pathway)
41
+ end
42
+
43
+ it 'is a Verso::Pathway' do
44
+ @occ.pathway.should be_a(Verso::Pathway)
45
+ end
21
46
  end
22
47
 
23
- it 'should respond to #related_courses' do
24
- Net::HTTP.
25
- should_receive(:get).
26
- with('api.cteresource.org', "/occupations/2966", 80).
27
- and_return(
28
- JSON.pretty_generate(
29
- :occupation => {
30
- :id => 2966,
31
- :title => "Agricultural Commodity Broker",
32
- :related_courses => [
33
- { :code => "8050",
34
- :title => "Agricultural Education--Preparation" }
35
- ]
36
- }
37
- )
38
- )
39
- @occupation.related_courses.first.code.should eq("8050")
48
+ describe '#preparations' do
49
+ it 'responds' do
50
+ @occ.should respond_to(:preparations)
51
+ end
52
+
53
+ it 'is an Array' do
54
+ @occ.preparations.should be_a(Array)
55
+ end
56
+
57
+ it 'is an Array of Strings' do
58
+ @occ.preparations.first.should be_a(String)
59
+ end
60
+ end
61
+
62
+ describe '#related_courses' do
63
+ it 'responds' do
64
+ @occ.should respond_to(:related_courses)
65
+ end
66
+
67
+ it 'is an Array' do
68
+ @occ.related_courses.should be_a(Array)
69
+ end
70
+
71
+ it 'is an Array of Verso::Course objects' do
72
+ @occ.related_courses.first.should be_a(Verso::Course)
73
+ end
74
+ end
75
+
76
+ describe '#title' do
77
+ it 'responds' do
78
+ @occ.should respond_to(:title)
79
+ end
80
+
81
+ it 'is a String' do
82
+ @occ.title.should be_a(String)
83
+ end
40
84
  end
41
85
  end
@@ -1,41 +1,61 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Verso::Pathway do
4
+ use_vcr_cassette :record => :new_episodes
5
+
4
6
  before do
5
- @raw_cluster = { "title" => "Agriculture, Food, and Natural Resources",
6
- "id" => 49 }
7
- @raw_pathway = { "title" => "Agribusiness Systems", "id" => 306 ,
8
- "cluster" => @raw_cluster }
9
- @pathway = Verso::Pathway.new(@raw_pathway)
7
+ @pathway = Verso::ClusterList.new.first.pathways.first
10
8
  end
11
9
 
12
- it 'should respond to #title' do
13
- @pathway.title.should eq('Agribusiness Systems')
10
+ describe '#cluster' do
11
+ it 'responds' do
12
+ @pathway.should respond_to(:cluster)
13
+ end
14
+
15
+ it 'is a Verso::Cluster' do
16
+ @pathway.cluster.should be_a(Verso::Cluster)
17
+ end
14
18
  end
15
19
 
16
- it 'should respond to #cluster' do
17
- @pathway.cluster.id.should eq(49)
20
+ describe '#description' do
21
+ it 'responds' do
22
+ @pathway.should respond_to(:description)
23
+ end
24
+
25
+ it 'is a String' do
26
+ @pathway.description.should be_a(String)
27
+ end
28
+
29
+ it 'is HTML' do
30
+ @pathway.description.should match(/<\/.+>/)
31
+ end
18
32
  end
19
33
 
20
- it 'should respond to #id' do
21
- @pathway.id.should eq(306)
34
+ describe '#id' do
35
+ it 'responds' do
36
+ @pathway.should respond_to(:id)
37
+ end
38
+
39
+ it 'is a Fixnum' do
40
+ @pathway.id.should be_a(Fixnum)
41
+ end
42
+
43
+ it 'is not the same as #object_id' do
44
+ @pathway.id.should_not == @pathway.object_id
45
+ end
22
46
  end
23
47
 
24
- it 'should respond to #occupations' do
25
- Net::HTTP.
26
- should_receive(:get).
27
- with('api.cteresource.org', "/pathways/306", 80).
28
- and_return(
29
- JSON.pretty_generate(
30
- :pathway => {
31
- :id => 306,
32
- :title => "Agribusiness Systems",
33
- :occupations => [
34
- { :id => 2966, :title => "Agricultural Commodity Broker" }
35
- ]
36
- }
37
- )
38
- )
39
- @pathway.occupations.first.title.should eq('Agricultural Commodity Broker')
48
+ describe '#occupations' do
49
+ it 'responds' do
50
+ @pathway.should respond_to(:occupations)
51
+ end
52
+
53
+ it 'is an Array' do
54
+ @pathway.occupations.should be_a(Array)
55
+ end
56
+
57
+ it 'is an Array containing Verso::Occupation objects' do
58
+ @pathway.occupations.first.should be_a(Verso::Occupation)
59
+ end
40
60
  end
41
61
  end
@@ -3,9 +3,83 @@ require 'spec_helper'
3
3
  describe Verso::ProgramAreaList do
4
4
  use_vcr_cassette :record => :new_episodes
5
5
 
6
- it 'responds to #first, #last' do
7
- list = Verso::ProgramAreaList.new
8
- list.first.title.should eq("Academic")
9
- list.last.title.should eq("Trade and Industrial Education")
6
+ before do
7
+ @list = Verso::ProgramAreaList.new
8
+ end
9
+
10
+ describe '#[]' do
11
+ it 'responds' do
12
+ @list.should respond_to(:[])
13
+ end
14
+
15
+ it 'is a Verso::ProgramArea object' do
16
+ @list[3].should be_a(Verso::ProgramArea)
17
+ end
18
+ end
19
+
20
+ describe '#each' do
21
+ it 'responds' do
22
+ @list.should respond_to(:each)
23
+ end
24
+
25
+ it 'yields' do
26
+ expect { |b| @list.each("foo", &b).to yield_control }
27
+ end
28
+
29
+ it 'yields Verso::ProgramArea objects' do
30
+ @list.each do |c|
31
+ c.should be_a(Verso::ProgramArea)
32
+ end
33
+ end
34
+ end
35
+
36
+ describe '#empty?' do
37
+ it 'responds' do
38
+ @list.should respond_to(:empty?)
39
+ end
40
+
41
+ it 'is not empty' do
42
+ @list.should_not be_empty
43
+ end
44
+ end
45
+
46
+ describe '#last' do
47
+ it 'responds' do
48
+ @list.should respond_to(:last)
49
+ end
50
+
51
+ it 'is a Verso::ProgramArea object' do
52
+ @list.last.should be_a(Verso::ProgramArea)
53
+ end
54
+ end
55
+
56
+ describe '#length' do
57
+ it 'responds' do
58
+ @list.should respond_to(:length)
59
+ end
60
+
61
+ it 'is a Fixnum' do
62
+ @list.length.should be_a(Fixnum)
63
+ end
64
+ end
65
+
66
+ describe '#first' do
67
+ it 'responds' do
68
+ @list.should respond_to(:first)
69
+ end
70
+
71
+ it 'is a Verso::ProgramArea object' do
72
+ @list.first.should be_a(Verso::ProgramArea)
73
+ end
74
+ end
75
+
76
+ describe '#count' do
77
+ it 'responds' do
78
+ @list.should respond_to(:count)
79
+ end
80
+
81
+ it 'is a Fixnum' do
82
+ @list.count.should be_a(Fixnum)
83
+ end
10
84
  end
11
85
  end
@@ -1,39 +1,87 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Verso::ProgramArea do
4
+ use_vcr_cassette :record => :new_episodes
5
+
4
6
  before do
5
7
  @pa = Verso::ProgramArea.new("title" => "Career Connections")
6
8
  end
7
9
 
8
- it 'should respond to description' do
9
- @pa.description.should eq("")
10
+ describe '#courses' do
11
+ it 'responds' do
12
+ @pa.should respond_to(:courses)
13
+ end
14
+
15
+ it 'is an Array' do
16
+ @pa.courses.should be_a(Array)
17
+ end
18
+
19
+ it 'is an Array of Verso::Course objects' do
20
+ @pa.courses.first.should be_a(Verso::Course)
21
+ end
22
+ end
23
+
24
+ describe '#deprecated' do
25
+ it 'responds' do
26
+ @pa.should respond_to(:deprecated)
27
+ end
28
+
29
+ it 'is Boolean' do
30
+ @pa.deprecated.to_s.should match(/true|false/)
31
+ end
32
+ end
33
+
34
+ describe '#description' do
35
+ it 'responds' do
36
+ @pa.should respond_to(:description)
37
+ end
38
+
39
+ it 'is a String' do
40
+ @pa.description.should be_a(String)
41
+ end
10
42
  end
11
43
 
12
- it 'should respond to title' do
13
- @pa.title.should eq("Career Connections")
44
+ describe '#section_overview' do
45
+ it 'responds' do
46
+ @pa.should respond_to(:section_overview)
47
+ end
48
+
49
+ it 'is a String' do
50
+ @pa.section_overview.should be_a(String)
51
+ end
52
+
53
+ it 'is HTML' do
54
+ @pa.section_overview.should match(/<\/.+>/)
55
+ end
14
56
  end
15
57
 
16
- it 'should respond to slug' do
17
- @pa.slug.should eq('career-connections')
58
+ describe '#slug' do
59
+ it 'responds' do
60
+ @pa.should respond_to(:slug)
61
+ end
62
+
63
+ it 'is a string' do
64
+ @pa.slug.should be_a(String)
65
+ end
66
+
67
+ it 'looks like the title' do
68
+ @pa.slug.should == 'career-connections'
69
+ end
18
70
  end
19
71
 
20
- it 'should respond to courses' do
21
- @course = double("Course", :title => "a course", :edition => "1998",
22
- :code => "9999")
23
- Verso::CourseList.should_receive(:new).
24
- with(:program_area => "career connections").
25
- and_return([@course])
26
- @pa.courses.should eq([@course])
72
+ describe '#title' do
73
+ it 'responds' do
74
+ @pa.should respond_to(:title)
75
+ end
76
+
77
+ it 'is a String' do
78
+ @pa.title.should be_a(String)
79
+ end
27
80
  end
28
81
 
29
- it 'should respond to deprecated' do
30
- @pa.stub(:http_get).
31
- and_return(
32
- { "program_areas" => [ {
33
- "title" => "Career Connections",
34
- "deprecated" => false
35
- } ] }.to_json
36
- )
37
- @pa.deprecated.should eq(false)
82
+ describe '#version_date' do
83
+ it 'responds' do
84
+ @pa.should respond_to(:version_date)
85
+ end
38
86
  end
39
87
  end