lbp 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/lbp.rb +6 -6
- data/lib/lbp/article.rb +36 -0
- data/lib/lbp/expression.rb +59 -114
- data/lib/lbp/expression_type.rb +5 -0
- data/lib/lbp/file.rb +65 -37
- data/lib/lbp/manifestation.rb +5 -17
- data/lib/lbp/resource.rb +76 -50
- data/lib/lbp/resource_identifier.rb +40 -0
- data/lib/lbp/transcription.rb +16 -10
- data/lib/lbp/translation.rb +4 -0
- data/lib/lbp/version.rb +1 -1
- data/lib/lbp/work_group.rb +16 -0
- data/spec/article_spec.rb +23 -0
- data/spec/config_globals.rb +14 -15
- data/spec/expression_spec.rb +62 -34
- data/spec/file_spec.rb +55 -34
- data/spec/manifestation_spec.rb +16 -0
- data/spec/resource_identifier_spec.rb +53 -0
- data/spec/resource_spec.rb +22 -42
- data/spec/transcription_spec.rb +9 -4
- data/spec/work_group_spec.rb +29 -0
- metadata +14 -1
data/lib/lbp/manifestation.rb
CHANGED
@@ -11,24 +11,12 @@ module Lbp
|
|
11
11
|
|
12
12
|
#inherits initialization from Resource
|
13
13
|
|
14
|
-
def
|
15
|
-
|
16
|
-
transcriptions = results.map {|m| m[:o].to_s}
|
17
|
-
return transcriptions
|
14
|
+
def transcriptions
|
15
|
+
values("http://scta.info/property/hasTranscription")
|
18
16
|
end
|
19
|
-
def
|
20
|
-
|
21
|
-
|
22
|
-
# maybe we need a helper function that does this once
|
23
|
-
unless self.results.count == 0
|
24
|
-
transcriptionUrl = self.results.dup.filter(:p => RDF::URI("http://scta.info/property/hasCanonicalTranscription")).first[:o].to_s
|
25
|
-
return transcriptionUrl
|
26
|
-
end
|
27
|
-
end
|
28
|
-
def canonicalTranscription
|
29
|
-
url = self.canonicalTranscriptionUrl
|
30
|
-
transcriptionObj = Transcription.new(url)
|
31
|
-
return transcriptionObj
|
17
|
+
def canonical_transcription
|
18
|
+
value("http://scta.info/property/hasCanonicalTranscription")
|
19
|
+
|
32
20
|
end
|
33
21
|
end
|
34
22
|
end
|
data/lib/lbp/resource.rb
CHANGED
@@ -8,65 +8,91 @@ require 'lbp'
|
|
8
8
|
|
9
9
|
module Lbp
|
10
10
|
class Resource
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
@resource_shortId = resource_id.split("resource/").last
|
27
|
-
# finally, it looks for results using the shortId
|
28
|
-
else
|
29
|
-
@query = Query.new();
|
30
|
-
@results = @query.subject_with_short_id(resource_id)
|
31
|
-
@resource_url = "http://scta.info/resource/" + resource_id
|
32
|
-
@resource_shortId = resource_id
|
11
|
+
class << self
|
12
|
+
def find(resource_id)
|
13
|
+
#adding the to_s method allows a resource to be created
|
14
|
+
#by passing in an RDF::URL object as well as the url string.
|
15
|
+
if resource_id.to_s.include? "http"
|
16
|
+
query = Query.new
|
17
|
+
results = query.subject("<" + resource_id.to_s + ">")
|
18
|
+
resource_url = resource_id.to_s
|
19
|
+
create(resource_url, results)
|
20
|
+
else
|
21
|
+
query = Query.new
|
22
|
+
results = query.subject_with_short_id(resource_id)
|
23
|
+
resource_url = "http://scta.info/resource/" + resource_id
|
24
|
+
create(resource_url, results)
|
25
|
+
end
|
33
26
|
end
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
return Manifestation.new(@results)
|
47
|
-
elsif self.type_shortId == "transcription"
|
48
|
-
return Transcription.new(@results)
|
49
|
-
else
|
50
|
-
puts "no subclass to conver to"
|
51
|
-
return self
|
27
|
+
def create(resource_url, results)
|
28
|
+
type = results.dup.filter(:p => RDF::URI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type")).first[:o].to_s.split("/").last
|
29
|
+
klass = if type == "workGroup"
|
30
|
+
Lbp.const_get("WorkGroup")
|
31
|
+
elsif type == "expressionType"
|
32
|
+
Lbp.const_get("ExpressionType")
|
33
|
+
else
|
34
|
+
Lbp.const_get(type.capitalize)
|
35
|
+
end
|
36
|
+
klass.new(resource_url, results)
|
37
|
+
rescue NameError
|
38
|
+
Resource.new(resource_url, results)
|
52
39
|
end
|
53
40
|
end
|
54
|
-
|
55
|
-
|
41
|
+
|
42
|
+
# end class level methods
|
43
|
+
|
44
|
+
attr_reader :identifier, :results
|
45
|
+
extend Forwardable
|
46
|
+
def_delegators :@identifier, :short_id, :url, :rdf_uri, :to_s
|
47
|
+
|
48
|
+
def initialize(resource_url, results)
|
49
|
+
# if there are problems with results being empty
|
50
|
+
# and, for example, dup or filter being called on a null class
|
51
|
+
# consider changing the following line to @results = results || <an empty object for whatever results normally is>
|
52
|
+
@results = results || RDF::Query::Solutions.new()
|
53
|
+
@identifier = ResourceIdentifier.new(resource_url)
|
54
|
+
end
|
55
|
+
|
56
|
+
#generic query methods for all resources
|
57
|
+
def values(property) # should return an array of resource identifiers
|
58
|
+
results = self.results.dup.filter(:p => RDF::URI(property))
|
59
|
+
array = results.map {|m| ResourceIdentifier.new(m[:o])}
|
60
|
+
return array
|
61
|
+
end
|
62
|
+
|
63
|
+
def value(property) # should return a single resource identifier; and error if there is more than one property for this value
|
64
|
+
value = @results.dup.filter(:p => RDF::URI(property))
|
65
|
+
if value.count > 0
|
66
|
+
value = value.first[:o]
|
67
|
+
ResourceIdentifier.new(value)
|
68
|
+
else
|
69
|
+
nil
|
70
|
+
end
|
71
|
+
|
56
72
|
end
|
73
|
+
|
74
|
+
#query for properties global to all resources
|
57
75
|
def type
|
58
|
-
|
76
|
+
value("http://www.w3.org/1999/02/22-rdf-syntax-ns#type")
|
59
77
|
end
|
60
78
|
def title
|
61
|
-
|
79
|
+
#careful here; title in db is not actualy a uri, but a litteral
|
80
|
+
#to_s method should work, but it might not be correct for this to be initially
|
81
|
+
#instantiated into a resource identifer.
|
82
|
+
# This is why I'm forcing the to_s method in the return value rather than
|
83
|
+
# return the ResourceIdentifer object itself as in the case of type above
|
84
|
+
value(RDF::Vocab::DC11.title).to_s
|
85
|
+
end
|
86
|
+
def description
|
87
|
+
value(RDF::Vocab::DC11.description).to_s
|
62
88
|
end
|
63
|
-
|
64
|
-
|
65
|
-
def structureType_shortId
|
66
|
-
type = @results.dup.filter(:p => RDF::URI("http://scta.info/property/structureType")).first[:o].to_s.split("/").last
|
89
|
+
def has_parts
|
90
|
+
values(RDF::Vocab::DC.hasPart)
|
67
91
|
end
|
68
|
-
def
|
69
|
-
|
92
|
+
def is_part_of
|
93
|
+
value(RDF::Vocab::DC.isPartOf)
|
70
94
|
end
|
95
|
+
|
96
|
+
|
71
97
|
end
|
72
98
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'rdf'
|
2
|
+
require 'lbp'
|
3
|
+
|
4
|
+
module Lbp
|
5
|
+
###NOTE #rdf_uri can be a littel confusing, since it also works for RDF::Literal
|
6
|
+
class ResourceIdentifier
|
7
|
+
attr_reader :short_id, :url, :rdf_uri
|
8
|
+
class << self
|
9
|
+
def from_short(short)
|
10
|
+
RDF::URI.new("http://scta.info/resource/#{short}")
|
11
|
+
end
|
12
|
+
def from_url(url)
|
13
|
+
RDF::URI.new(url)
|
14
|
+
end
|
15
|
+
def from_rdf_uri(rdf_uri)
|
16
|
+
rdf_uri
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize(rdf_uri)
|
21
|
+
@rdf_uri = rdf_uri
|
22
|
+
@url = rdf_uri.to_s
|
23
|
+
@short_id = if @url.include? "property/"
|
24
|
+
@url.split("property/").last
|
25
|
+
else
|
26
|
+
@url.split("resource/").last
|
27
|
+
end
|
28
|
+
end
|
29
|
+
def to_s
|
30
|
+
@url
|
31
|
+
end
|
32
|
+
def resource
|
33
|
+
unless @rdf_uri.class == RDF::Literal
|
34
|
+
Lbp::Resource.find(url)
|
35
|
+
else
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/lbp/transcription.rb
CHANGED
@@ -8,26 +8,32 @@ require 'lbp'
|
|
8
8
|
module Lbp
|
9
9
|
class Transcription < Resource
|
10
10
|
#initionalization handled by Resource Class
|
11
|
-
def file_path
|
12
|
-
file_path =
|
11
|
+
def file_path(branch="master")
|
12
|
+
file_path = value("http://scta.info/property/hasXML").to_s
|
13
|
+
#file_path = self.results.dup.filter(:p => RDF::URI("http://scta.info/property/hasXML")).first[:o].to_s
|
14
|
+
if branch != "master"
|
15
|
+
file_path.gsub!("master", branch)
|
16
|
+
end
|
17
|
+
return file_path
|
13
18
|
end
|
14
19
|
def transcription_type
|
15
|
-
type =
|
16
|
-
type.
|
20
|
+
type = value("http://scta.info/property/transcriptionType")
|
21
|
+
#type = self.results.dup.filter(:p => RDF::URI("http://scta.info/property/transcriptionType")).first[:o].to_s
|
22
|
+
type.to_s.downcase
|
17
23
|
end
|
18
24
|
|
19
|
-
def file(confighash)
|
20
|
-
file = File.new(self.file_path, self.transcription_type, confighash)
|
25
|
+
def file(branch: "master", confighash: nil)
|
26
|
+
file = File.new(self.file_path(branch), self.transcription_type, confighash)
|
21
27
|
return file
|
22
28
|
end
|
23
|
-
#NOTE: this really is a temporary method, since the database
|
29
|
+
#NOTE: this really is a temporary method, since the database
|
24
30
|
#should point to file corresponding to each transcription
|
25
31
|
#dynamically generated by the exist-db database.
|
26
|
-
# but this could remain in case it was useful to grab the part
|
32
|
+
# but this could remain in case it was useful to grab the part
|
27
33
|
# from a file that would include a tei header etc.
|
28
|
-
|
34
|
+
def file_part(partid: nil, confighash: nil)
|
29
35
|
file = FilePart.new(self.file_path, self.transcription_type, confighash, partid)
|
30
36
|
return file
|
31
37
|
end
|
32
38
|
end
|
33
|
-
end
|
39
|
+
end
|
data/lib/lbp/version.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
module Lbp
|
2
|
+
class WorkGroup < Resource
|
3
|
+
## works groups can contain other work groups
|
4
|
+
## but works groups should really only list child workGroups and this
|
5
|
+
## this should be covered through the generic has_parts method
|
6
|
+
## db currently has "hasWorkGroup" and this needs to be changed to "hasPart"
|
7
|
+
## before this method can be removed
|
8
|
+
def work_groups
|
9
|
+
values("http://scta.info/property/hasWorkGroup")
|
10
|
+
end
|
11
|
+
def expressions
|
12
|
+
values("http://scta.info/property/hasExpression")
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'lbp'
|
3
|
+
require 'pry'
|
4
|
+
require 'nokogiri'
|
5
|
+
|
6
|
+
describe 'article object' do
|
7
|
+
$article_obj1 = Lbp::Article.new("pp-about")
|
8
|
+
$article_obj2 = Lbp::Article.new("http://scta.info/resource/aw-bibliography")
|
9
|
+
|
10
|
+
it 'returns type of resource' do
|
11
|
+
result = $article_obj1.type_shortId
|
12
|
+
expect(result).to be == "article"
|
13
|
+
end
|
14
|
+
it 'returns article type' do
|
15
|
+
result = $article_obj1.article_type_shortId
|
16
|
+
expect(result).to be == "about"
|
17
|
+
end
|
18
|
+
it 'returns article type' do
|
19
|
+
result = $article_obj2.article_type_shortId
|
20
|
+
expect(result).to be == "bibliography"
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/spec/config_globals.rb
CHANGED
@@ -1,18 +1,17 @@
|
|
1
|
-
$confighash = {
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
}
|
1
|
+
$confighash = {
|
2
|
+
local_texts_dir: "/Users/JCWitt/WebPages/lbplib-testfiles/pp-projectfiles/GitTextfiles/",
|
3
|
+
citation_lists_dir: "/Users/JCWitt/WebPages/lbplib-testfiles/pp-projectfiles/citationlists/",
|
4
|
+
xslt_base: "/Users/jcwitt/Projects/lombardpress/lombardpress2/xslt/",
|
5
|
+
stylesheets: {
|
6
|
+
main_view: "main_view.xsl",
|
7
|
+
clean_view: "clean_view.xsl",
|
8
|
+
plain_text: "plaintext.xsl",
|
9
|
+
toc: "lectio_outline.xsl"
|
10
|
+
},
|
11
|
+
git_repo: "bitbucket.org/jeffreycwitt/",
|
12
|
+
git_username: ENV["GUN"],
|
13
|
+
git_password: ENV["GPW"]
|
14
|
+
}
|
16
15
|
|
17
16
|
|
18
17
|
|
data/spec/expression_spec.rb
CHANGED
@@ -5,55 +5,58 @@ require 'pry'
|
|
5
5
|
|
6
6
|
describe 'expression object' do
|
7
7
|
#TODO: database needs be changed so that shortID is "sententia"
|
8
|
-
$resource_obj1 = Lbp::
|
9
|
-
$resource_obj2 = Lbp::
|
10
|
-
$resource_item = Lbp::
|
11
|
-
$resource_toplevelexpression = Lbp::
|
12
|
-
$resource_itemFirstInSequence = Lbp::
|
13
|
-
$resource_itemLastInSequence = Lbp::
|
14
|
-
$resource_item2 = Lbp::
|
15
|
-
$resource_item3 = Lbp::
|
16
|
-
$resource_para = Lbp::
|
17
|
-
$resource_div1 = Lbp::
|
18
|
-
$resource_div2 = Lbp::
|
8
|
+
$resource_obj1 = Lbp::Resource.find("sentences")
|
9
|
+
$resource_obj2 = Lbp::Resource.find("http://scta.info/resource/sententia")
|
10
|
+
$resource_item = Lbp::Resource.find("lectio1")
|
11
|
+
$resource_toplevelexpression = Lbp::Resource.find("plaoulcommentary")
|
12
|
+
$resource_itemFirstInSequence = Lbp::Resource.find("principiumI")
|
13
|
+
$resource_itemLastInSequence = Lbp::Resource.find("lectio134")
|
14
|
+
$resource_item2 = Lbp::Resource.find("pl-l1d1c1") #structureItem id
|
15
|
+
$resource_item3 = Lbp::Resource.find("http://scta.info/resource/l1-acfefv") #paragraph url
|
16
|
+
$resource_para = Lbp::Resource.find("l1-acfefv") #paragraph id
|
17
|
+
$resource_div1 = Lbp::Resource.find("wdr-l1d1q1") #div short id
|
18
|
+
$resource_div2 = Lbp::Resource.find("http://scta.info/resource/wdr-l1d1q1") #div url
|
19
19
|
|
20
20
|
it 'returns array of manifestations for given expression at the structureItem level' do
|
21
|
-
result = $resource_item.
|
22
|
-
expect(result).to be_kind_of(Array)
|
23
|
-
end
|
24
|
-
it 'returns array of manifestations for given expression structureBlock level' do
|
25
|
-
result = $resource_para.manifestationUrls
|
21
|
+
result = $resource_item.manifestations
|
26
22
|
expect(result).to be_kind_of(Array)
|
27
23
|
end
|
24
|
+
#it 'returns array of manifestations for given expression structureBlock level' do
|
25
|
+
# result = $resource_para.manifestation
|
26
|
+
# expect(result).to be_kind_of(Array)
|
27
|
+
#end
|
28
28
|
it 'returns type of resource id from url to check inheritance from Resource Class' do
|
29
|
-
result = $resource_item.
|
29
|
+
result = $resource_item.type.short_id
|
30
30
|
expect(result).to be == "expression"
|
31
31
|
end
|
32
32
|
it 'returns canonical manifestation' do
|
33
|
-
result = $resource_item.
|
33
|
+
result = $resource_item.canonical_manifestation.url
|
34
34
|
expect(result).to be == "http://scta.info/resource/lectio1/critical"
|
35
35
|
end
|
36
36
|
it 'returns canonical transcription' do
|
37
|
-
result = $resource_item.
|
37
|
+
result = $resource_item.canonical_transcription.url
|
38
38
|
expect(result).to be == "http://scta.info/resource/lectio1/critical/transcription"
|
39
39
|
end
|
40
40
|
it 'returns true or false for presence of canonical Transcription' do
|
41
|
-
result = $resource_item.
|
41
|
+
result = $resource_item.canonical_transcription?
|
42
42
|
expect(result).to be == true
|
43
43
|
end
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
44
|
+
|
45
|
+
# need to revisit this test; test made be failing because of bad data, not bad code
|
46
|
+
|
47
|
+
#it 'returns false for presence of canonical Transcription' do
|
48
|
+
# $resource_without_transcript_started = Lbp::Resource.find("b3-q2")
|
49
|
+
|
50
|
+
# result = $resource_without_transcript_started.canonical_transcription?
|
51
|
+
# expect(result).to be == false
|
52
|
+
#end
|
49
53
|
|
50
54
|
it 'returns status of expression' do
|
51
55
|
result = $resource_item.status
|
52
|
-
|
53
56
|
expect(result).to be_kind_of(String)
|
54
57
|
end
|
55
58
|
it 'returns next expression at the same (structureItem) level' do
|
56
|
-
result = $resource_item.next
|
59
|
+
result = $resource_item.next.url
|
57
60
|
expect(result).to be_kind_of(String)
|
58
61
|
end
|
59
62
|
it 'returns null for expression next request when expression is last in the series' do
|
@@ -61,31 +64,31 @@ describe 'expression object' do
|
|
61
64
|
expect(result).to be == nil
|
62
65
|
end
|
63
66
|
it 'returns previous expression at the same (structureItem) level' do
|
64
|
-
result = $resource_item.previous
|
67
|
+
result = $resource_item.previous.url
|
65
68
|
expect(result).to be_kind_of(String)
|
66
69
|
end
|
67
70
|
it 'returns null for expression previous request when expression is first in the series' do
|
68
|
-
result = $
|
71
|
+
result = $resource_itemFirstInSequence.previous
|
69
72
|
expect(result).to be == nil
|
70
73
|
end
|
71
74
|
it 'returns next expression at the same (structureBlock) level' do
|
72
|
-
result = $resource_para.next
|
75
|
+
result = $resource_para.next.url
|
73
76
|
expect(result).to be_kind_of(String)
|
74
77
|
end
|
75
78
|
it 'returns previous expression at the same (structureBlock) level' do
|
76
|
-
result = $resource_para.previous
|
79
|
+
result = $resource_para.previous.url
|
77
80
|
expect(result).to be_kind_of(String)
|
78
81
|
end
|
79
82
|
it 'returns top level expression for expression resource' do
|
80
|
-
result = $resource_para.
|
83
|
+
result = $resource_para.top_level_expression.url
|
81
84
|
expect(result).to be_kind_of(String)
|
82
85
|
end
|
83
86
|
it 'returns top level expression for expression resource' do
|
84
|
-
result = $resource_item.
|
87
|
+
result = $resource_item.top_level_expression.url
|
85
88
|
expect(result).to be_kind_of(String)
|
86
89
|
end
|
87
90
|
it 'returns top level expression for expression resource' do
|
88
|
-
result = $resource_item.
|
91
|
+
result = $resource_item.top_level_expression.short_id
|
89
92
|
expect(result).to be_kind_of(String)
|
90
93
|
end
|
91
94
|
it 'returns the level integer from the expression' do
|
@@ -93,4 +96,29 @@ describe 'expression object' do
|
|
93
96
|
expect(result).to be_kind_of(Integer)
|
94
97
|
end
|
95
98
|
|
99
|
+
it 'returns structureType of resource ' do
|
100
|
+
result = $resource_item.structure_type.short_id
|
101
|
+
expect(result).to be == "structureItem"
|
102
|
+
end
|
103
|
+
it 'returns structureType of resource ' do
|
104
|
+
result = $resource_item2.structure_type.short_id
|
105
|
+
expect(result).to be == "structureItem"
|
106
|
+
end
|
107
|
+
it 'returns structureType of resource ' do
|
108
|
+
result = $resource_item3.structure_type.short_id
|
109
|
+
expect(result).to be == "structureBlock"
|
110
|
+
end
|
111
|
+
it 'returns structureType of resource ' do
|
112
|
+
result = $resource_item3.structure_type.url
|
113
|
+
expect(result).to be == "http://scta.info/resource/structureBlock"
|
114
|
+
end
|
115
|
+
it 'returns structureType of resource ' do
|
116
|
+
result = $resource_div1.structure_type.short_id
|
117
|
+
expect(result).to be == "structureDivision"
|
118
|
+
end
|
119
|
+
it 'returns structureType of resource ' do
|
120
|
+
result = $resource_div2.structure_type.short_id
|
121
|
+
expect(result).to be == "structureDivision"
|
122
|
+
end
|
123
|
+
|
96
124
|
end
|