lbp 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,24 +11,12 @@ module Lbp
11
11
 
12
12
  #inherits initialization from Resource
13
13
 
14
- def transcriptionUrls
15
- results = self.results.dup.filter(:p => RDF::URI("http://scta.info/property/hasTranscription"))
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 canonicalTranscriptionUrl
20
- # TODO this check against an empty array should
21
- # occur everywhere the filter is used
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
@@ -8,65 +8,91 @@ require 'lbp'
8
8
 
9
9
  module Lbp
10
10
  class Resource
11
- attr_reader :resource_shortId, :resource_url, :results
12
- def initialize(resource_id)
13
- # fist conditions check to see if search results
14
- # are being passed
15
- if resource_id.class != String
16
- @results = resource_id
17
- # resource should should be returned instead of "unsure"
18
- @resource_shortId = @results.first[:s].to_s.split("resource/").last
19
- @resource_url = @results.first[:s].to_s
20
- # if resource id is a string rather than results
21
- # it looks ot see if this is a URL to query for results
22
- elsif resource_id.include? "http"
23
- @query = Query.new();
24
- @results = @query.subject("<" + resource_id + ">")
25
- @resource_url = resource_id
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
- end
35
- def convert
36
- #this conditional should be replaced
37
- # by a function that converts the string
38
- # into a class name
39
- if self.type_shortId == 'workGroup'
40
- return WorkGroup.new(@results)
41
- elsif self.type_shortId == 'work'
42
- return Work.new(@results)
43
- elsif self.type_shortId == 'expression'
44
- return Expression.new(@results)
45
- elsif self.type_shortId == "manifestation"
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
- def type_shortId
55
- type = @results.dup.filter(:p => RDF::URI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type")).first[:o].to_s.split("/").last
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
- type = @results.dup.filter(:p => RDF::URI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type")).first[:o].to_s
76
+ value("http://www.w3.org/1999/02/22-rdf-syntax-ns#type")
59
77
  end
60
78
  def title
61
- type = @results.dup.filter(:p => RDF::URI(RDF::Vocab::DC11.title)).first[:o].to_s
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
- ## structure type should be moved to expression and other classes because it's not generic enough
64
- ## some resources like quotes or name will not have structure type
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 structureType
69
- type = @results.dup.filter(:p => RDF::URI("http://scta.info/property/structureType")).first[:o].to_s
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
@@ -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 = self.results.dup.filter(:p => RDF::URI("http://scta.info/property/hasXML")).first[:o].to_s
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 = self.results.dup.filter(:p => RDF::URI("http://scta.info/property/transcriptionType")).first[:o].to_s
16
- type.downcase
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
- def file_part(confighash, partid)
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
@@ -0,0 +1,4 @@
1
+ module Lbp
2
+ class Translation < Manifestation
3
+ end
4
+ end
@@ -1,3 +1,3 @@
1
1
  module Lbp
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -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
@@ -1,18 +1,17 @@
1
- $confighash = {local_texts_dir: "/Users/JCWitt/WebPages/lbplib-testfiles/pp-projectfiles/GitTextfiles/",
2
- citation_lists_dir: "/Users/JCWitt/WebPages/lbplib-testfiles/pp-projectfiles/citationlists/",
3
- xslt_dirs: { "default" => {
4
- critical: "/Users/jcwitt/Projects/lombardpress/lombardpress2/xslt/default/critical/",
5
- documentary: "/Users/jcwitt/Projects/lombardpress/lombardpress2/xslt/default/documentary/",
6
- main_view: "main_view.xsl",
7
- clean_view: "clean_view.xsl",
8
- plain_text: "plaintext.xsl",
9
- toc: "lectio_outline.xsl"
10
- }
11
- },
12
- git_repo: "bitbucket.org/jeffreycwitt/",
13
- git_username: ENV["GUN"],
14
- git_password: ENV["GPW"]
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
 
@@ -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::Expression.new("sentences")
9
- $resource_obj2 = Lbp::Expression.new("http://scta.info/resource/sententia")
10
- $resource_item = Lbp::Expression.new("lectio1")
11
- $resource_toplevelexpression = Lbp::Expression.new("plaoulcommentary")
12
- $resource_itemFirstInSequence = Lbp::Expression.new("principiumI")
13
- $resource_itemLastInSequence = Lbp::Expression.new("lectio134")
14
- $resource_item2 = Lbp::Expression.new("pl-l1d1c1") #structureItem id
15
- $resource_item3 = Lbp::Expression.new("http://scta.info/resource/l1-acfefv") #paragraph url
16
- $resource_para = Lbp::Expression.new("l1-acfefv") #paragraph id
17
- $resource_div1 = Lbp::Expression.new("wdr-l1d1q1") #div short id
18
- $resource_div2 = Lbp::Expression.new("http://scta.info/resource/wdr-l1d1q1") #div url
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.manifestationUrls
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.type_shortId
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.canonicalManifestationUrl
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.canonicalTranscriptionUrl
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.canonicalTranscription?
41
+ result = $resource_item.canonical_transcription?
42
42
  expect(result).to be == true
43
43
  end
44
- it 'returns false for presence of canonical Transcription' do
45
- $resource_without_transcript_started = Lbp::Expression.new("b3-q2")
46
- result = $resource_without_transcript_started.canonicalTranscription?
47
- expect(result).to be == false
48
- end
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 = $resource_itemLastInSequence.next
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.top_level_expression_url
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.top_level_expression_url
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.top_level_expression_shortId
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