vortex_client 0.5.2 → 0.5.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.
- data/VERSION +1 -1
- data/lib/vortex_client.rb +114 -10
- data/lib/vortex_client/string_utils.rb +1 -1
- data/test/test_json_publish.rb +40 -0
- metadata +4 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.3
|
data/lib/vortex_client.rb
CHANGED
@@ -4,6 +4,8 @@ require 'vortex_client/string_utils'
|
|
4
4
|
require 'highline/import'
|
5
5
|
require 'time'
|
6
6
|
|
7
|
+
|
8
|
+
|
7
9
|
# Utilities for managing content in the web content management system Vortex.
|
8
10
|
# All calls are done with the webdav protocol.
|
9
11
|
module Vortex
|
@@ -62,7 +64,7 @@ module Vortex
|
|
62
64
|
# article = Vortex::StructuredArticle(:title=>"My title")
|
63
65
|
# vortex.publish(article)
|
64
66
|
def publish(object)
|
65
|
-
if(object.is_a? HtmlArticle or object.is_a? HtmlEvent)
|
67
|
+
if(object.is_a? HtmlArticle or object.is_a? HtmlEvent or object.is_a? StructuredArticle)
|
66
68
|
uri = @uri.merge(object.url)
|
67
69
|
# puts "DEBUG: '" + object.class.to_s + "=" + object.properties
|
68
70
|
self.put_string(uri, object.content)
|
@@ -97,7 +99,8 @@ module Vortex
|
|
97
99
|
|
98
100
|
end
|
99
101
|
|
100
|
-
|
102
|
+
# Gimmick the internal resource hierarchy in Vortex as class hierarchy in ruby
|
103
|
+
# with resource as the root class.
|
101
104
|
class Resource
|
102
105
|
end
|
103
106
|
|
@@ -106,7 +109,7 @@ module Vortex
|
|
106
109
|
# Named PlainFile so it won't get mixed up with standard File class.
|
107
110
|
end
|
108
111
|
|
109
|
-
# Plain HTML files with title, introduction and keywords set as
|
112
|
+
# HtmlArticle: Plain HTML files with title, introduction and keywords set as WebDAV properties.
|
110
113
|
#
|
111
114
|
# Examples:
|
112
115
|
#
|
@@ -213,7 +216,6 @@ module Vortex
|
|
213
216
|
end
|
214
217
|
props += '</vrtx:values></v:tags>'
|
215
218
|
end
|
216
|
-
|
217
219
|
return props
|
218
220
|
end
|
219
221
|
|
@@ -362,9 +364,9 @@ module Vortex
|
|
362
364
|
|
363
365
|
# Vortex article stored as JSON data.
|
364
366
|
# TODO: Fill out the stub.
|
365
|
-
class StructuredArticle <
|
367
|
+
class StructuredArticle < HtmlArticle
|
366
368
|
|
367
|
-
attr_accessor :title, :introduction, :content, :filename, :modifiedDate, :publishedDate, :owner, :url
|
369
|
+
attr_accessor :title, :introduction, :content, :filename, :modifiedDate, :publishedDate, :owner, :url, :picture
|
368
370
|
|
369
371
|
# Create an article
|
370
372
|
# Options:
|
@@ -374,18 +376,120 @@ module Vortex
|
|
374
376
|
options.each{|k,v|send("#{k}=",v)}
|
375
377
|
end
|
376
378
|
|
379
|
+
|
380
|
+
def url
|
381
|
+
if(@url)
|
382
|
+
@url
|
383
|
+
else
|
384
|
+
if(filename)
|
385
|
+
filename
|
386
|
+
end
|
387
|
+
if(title)
|
388
|
+
StringUtils.create_filename(title) + ".html"
|
389
|
+
else
|
390
|
+
warn "Article must have either a full url or title. "
|
391
|
+
end
|
392
|
+
end
|
393
|
+
end
|
394
|
+
|
377
395
|
def to_s
|
378
396
|
"#<Vortex::StructuredArticle "+instance_variables.collect{|var|var+": "+instance_variable_get(var).to_s}.join(",")+">"
|
379
397
|
end
|
380
398
|
|
381
|
-
|
382
|
-
|
399
|
+
|
400
|
+
def content
|
401
|
+
json = <<-EOF
|
402
|
+
{
|
403
|
+
"resourcetype": "structured-article",
|
404
|
+
"properties": {
|
405
|
+
EOF
|
406
|
+
if(body and body.size > 0)
|
407
|
+
tmp_body = body
|
408
|
+
# Escape '"' and line shifts so html will be valid json data.
|
409
|
+
tmp_body = body.gsub(/\r/,"\\\r").gsub(/\n/,"\\\n").gsub(/\"/,"\\\"")
|
410
|
+
json += " \"content\": \"#{tmp_body}\",\n"
|
411
|
+
end
|
412
|
+
if(author and author.size > 0)
|
413
|
+
json += " \"author\": [\"#{author}\"],\n"
|
414
|
+
end
|
415
|
+
json += " \"title\": \"#{title}\",\n"
|
416
|
+
if(introduction and introduction.size > 0)
|
417
|
+
tmp_introduction = introduction
|
418
|
+
tmp_introduction = tmp_introduction.gsub(/\r/,"\\\r")
|
419
|
+
tmp_introduction = tmp_introduction.gsub(/\n/,"\\\n")
|
420
|
+
tmp_introduction = tmp_introduction.gsub(/\"/,"\\\"")
|
421
|
+
json += " \"introduction\": \"#{tmp_introduction}\",\n"
|
422
|
+
end
|
423
|
+
if(picture)
|
424
|
+
json += " \"picture\": \"#{picture}\",\n"
|
425
|
+
end
|
426
|
+
json += <<-EOF
|
427
|
+
"hideAdditionalContent": "false"
|
428
|
+
}
|
429
|
+
}
|
430
|
+
EOF
|
431
|
+
return json
|
383
432
|
end
|
384
433
|
|
385
|
-
def
|
386
|
-
|
434
|
+
def properties
|
435
|
+
props = '<v:resourceType xmlns:v="vrtx">structured-article</v:resourceType>' +
|
436
|
+
# '<v:xhtml10-type xmlns:v="vrtx">structured-article</v:xhtml10-type>' +
|
437
|
+
'<v:userSpecifiedCharacterEncoding xmlns:v="vrtx">utf-8</v:userSpecifiedCharacterEncoding>' +
|
438
|
+
'<d:getcontenttype>application/json</d:getcontenttype>'
|
439
|
+
|
440
|
+
if(@publishedDate and @publishedDate != "")
|
441
|
+
if(@publishedDate.kind_of? Time)
|
442
|
+
@publishedDate = @publishedDate.httpdate.to_s
|
443
|
+
end
|
444
|
+
props += '<v:published-date xmlns:v="vrtx">' + @publishedDate + '</v:published-date>'
|
445
|
+
end
|
446
|
+
|
447
|
+
if(date and date != "")
|
448
|
+
if(date.kind_of? Time)
|
449
|
+
date = @date.httpdate.to_s
|
450
|
+
end
|
451
|
+
if(@publishedDate == nil or @publishedDate != "")
|
452
|
+
props += '<v:published-date xmlns:v="vrtx">' + date + '</v:published-date>'
|
453
|
+
end
|
454
|
+
props += '<d:getlastmodified>' + date + '</d:getlastmodified>' +
|
455
|
+
'<v:contentLastModified xmlns:v="vrtx">' + date + '</v:contentLastModified>' +
|
456
|
+
'<v:propertiesLastModified xmlns:v="vrtx">' + date + '</v:propertiesLastModified>' +
|
457
|
+
'<v:creationTime xmlns:v="vrtx">' + date + '</v:creationTime>'
|
458
|
+
end
|
459
|
+
|
460
|
+
if(picture)
|
461
|
+
# props += '<v:picture xmlns:v="vrtx">' + picture + '</v:picture>'
|
462
|
+
end
|
463
|
+
|
464
|
+
if(title)
|
465
|
+
# props += '<v:userTitle xmlns:v="vrtx">' + title + '</v:userTitle>'
|
466
|
+
end
|
467
|
+
if(owner)
|
468
|
+
props += '<owner xmlns="vrtx">' + owner + '</owner>'
|
469
|
+
end
|
470
|
+
if(introduction and introduction != "")
|
471
|
+
# props += '<introduction xmlns="vrtx">' + escape_html(introduction) + '</introduction>'
|
472
|
+
end
|
473
|
+
if(author and author != "")
|
474
|
+
# props += '<v:authors xmlns:v="vrtx">' +
|
475
|
+
# '<vrtx:values xmlns:vrtx="http://vortikal.org/xml-value-list">' +
|
476
|
+
# '<vrtx:value>' + author + '</vrtx:value>' +
|
477
|
+
# '</vrtx:values>' +
|
478
|
+
# '</v:authors>'
|
479
|
+
end
|
480
|
+
|
481
|
+
if(tags and tags.kind_of?(Array) and tags.size > 0)
|
482
|
+
# props += '<v:tags xmlns:v="vrtx">' +
|
483
|
+
# '<vrtx:values xmlns:vrtx="http://vortikal.org/xml-value-list">'
|
484
|
+
# tags.each do |tag|
|
485
|
+
# props += "<vrtx:value>#{tag}</vrtx:value>"
|
486
|
+
# end
|
487
|
+
# props += '</vrtx:values></v:tags>'
|
488
|
+
end
|
489
|
+
return props
|
387
490
|
end
|
388
491
|
|
492
|
+
|
389
493
|
end
|
390
494
|
|
391
495
|
|
@@ -55,7 +55,7 @@ module Vortex
|
|
55
55
|
['é','è','ê','ë','Ë','É','È','Ê'] => 'e',
|
56
56
|
['í','ì','î','ï','I','Î','Ì'] => 'i',
|
57
57
|
['ó','ò','ô','ö','õ','Õ','Ö','Ô','Ò'] => 'o',
|
58
|
-
['œ'] => '
|
58
|
+
['œ'] => 'e',
|
59
59
|
['ß'] => 'ss',
|
60
60
|
['ú','ù','û','ü','U','Û','Ù'] => 'u',
|
61
61
|
['æ'] => 'ae',
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestJSONPublish < Test::Unit::TestCase
|
5
|
+
include Vortex
|
6
|
+
|
7
|
+
def setup
|
8
|
+
if(not(@vortex))
|
9
|
+
user = ENV['DAVUSER']
|
10
|
+
pass = ENV['DAVPASS']
|
11
|
+
# puts "JSON testene kan foreløpig ikke kjøres på vortex.uio.no?"
|
12
|
+
@vortex = Connection.new("https://nyweb1-dav.uio.no",user, pass)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
should "publish JSON articles" do
|
17
|
+
# url = 'https://vortex-dav.uio.no/bloggimport/json-test.html'
|
18
|
+
url = 'bloggimport/json-test.html'
|
19
|
+
if(@vortex.exists?(url))
|
20
|
+
@vortex.delete(url)
|
21
|
+
end
|
22
|
+
|
23
|
+
body = "<p> Bla bla<\/p>\r\n<p>Mer "Bla" bla<\/p>\r\n<p>"+
|
24
|
+
"<strong>Enda<\/strong> <a href=\"http://www.vg.no\">mer<\/a> bla bla<\/p>\r\n<p> <\/p>"
|
25
|
+
|
26
|
+
@vortex.cd('/bloggimport/')
|
27
|
+
article = Vortex::StructuredArticle.new(:title => "JSON test",
|
28
|
+
:introduction => "Sample introduction",
|
29
|
+
:body => body, # .to_json, # "<p>Hello world</p><p>Bla bla</p>",
|
30
|
+
:publishedDate => "05.01.2010 12:00",
|
31
|
+
:author => "Thomas Flemming",
|
32
|
+
:picture => "/bloggimport/forskning/arrangementer/disputaser/2008/01/gran_boe.jpg" )
|
33
|
+
|
34
|
+
url = @vortex.publish(article)
|
35
|
+
puts "For å fullføre testen: Se på denne siden i en nettleser: " + url
|
36
|
+
assert @vortex.exists?(url)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 5
|
8
|
-
-
|
9
|
-
version: 0.5.
|
8
|
+
- 3
|
9
|
+
version: 0.5.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Thomas Flemming
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-11 00:00:00 +01:00
|
18
18
|
default_executable: vrtx-sync
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -123,6 +123,7 @@ test_files:
|
|
123
123
|
- test/helper.rb
|
124
124
|
- test/test_acl.rb
|
125
125
|
- test/test_date_conversion.rb
|
126
|
+
- test/test_json_publish.rb
|
126
127
|
- test/test_vortex_article_publish.rb
|
127
128
|
- test/test_vortex_client.rb
|
128
129
|
- test/test_vortex_collection.rb
|