vortex_client 0.7.0 → 0.7.2
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/README.rdoc +6 -5
- data/VERSION +1 -1
- data/examples/create_personpresentations.rb +1 -1
- data/examples/disable_right_column.rb +1 -1
- data/examples/download_and_upload_pdf.rb +16 -0
- data/examples/import_static_site.rb +1 -1
- data/examples/make_links_relative.rb +50 -0
- data/examples/propfind_proppatch.rb +2 -1
- data/examples/publish_json.rb +20 -0
- data/examples/scrape_holocaust.rb +1 -2
- data/examples/unpublish.rb +1 -1
- data/lib/vortex_client.rb +41 -0
- metadata +10 -12
- data/examples/replace_spike.rb +0 -42
- data/examples/search_replace_documents_frontpage.rb +0 -88
- data/examples/test_searc_replace.rb +0 -3
- data/examples/upload_image_flymake.rb +0 -8
data/README.rdoc
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
= Vortex Client
|
2
2
|
|
3
|
-
A
|
4
|
-
|
3
|
+
A Ruby API for the "Vortex":http://www.usit.uio.no/it/vortex/ Content Management System developed at the
|
4
|
+
University of Oslo in Norway by IT Services department.
|
5
|
+
The Ruby API uses the WebDAV protocol, supported by Vortex, to manage content.
|
5
6
|
|
6
7
|
|
7
8
|
= Publishing content
|
@@ -50,11 +51,11 @@ If your'e having problems installing the xml parser nokogiri on is x: http://wi
|
|
50
51
|
Also how to compile ruby 1.9.1 on os x http://wonko.com/post/how-to-compile-ruby-191
|
51
52
|
On ubuntu openssl can be an issue http://blog.maxaller.name/2009/02/ruby-19-and-openssl-on-ubuntu/
|
52
53
|
|
53
|
-
=
|
54
|
+
= Storing passwords in KeyChain on OS X
|
54
55
|
|
55
|
-
To retrieve password from KeyChain on OS X, use the option :
|
56
|
+
To retrieve password from KeyChain on OS X, use the option :osx_keychain => true.
|
56
57
|
|
57
|
-
vortex = Vortex::Connection.new("https://www-dav.server.com", :
|
58
|
+
vortex = Vortex::Connection.new("https://www-dav.server.com", :osx_keychain => true)
|
58
59
|
|
59
60
|
When running for the first time, ruby prompts for the password. Username must be
|
60
61
|
the same both locally and on the server.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.7.
|
1
|
+
0.7.2
|
@@ -131,7 +131,7 @@ end
|
|
131
131
|
|
132
132
|
# src_url = 'https://nyweb3-dav.uio.no/konv/ubo/'
|
133
133
|
src_url = 'https://nyweb1-dav.uio.no/personer/genererte-presentasjoner/econ/'
|
134
|
-
@vortex = Vortex::Connection.new(src_url, :
|
134
|
+
@vortex = Vortex::Connection.new(src_url, :osx_keychain => true)
|
135
135
|
|
136
136
|
# puts "Restore from backup..."
|
137
137
|
# delete(src_url)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'vortex_client'
|
3
3
|
|
4
|
-
vortex = Vortex::Connection.new('https://nyweb2-dav.uio.no/', :
|
4
|
+
vortex = Vortex::Connection.new('https://nyweb2-dav.uio.no/', :osx_keychain => true)
|
5
5
|
# url = 'https://nyweb2-dav.uio.no/for-ansatte/aktuelt/hf-aktuelt-mod/utg2/index.html'
|
6
6
|
url = '/for-ansatte/aktuelt/hf-aktuelt-mod/utg2/index.html'
|
7
7
|
snippet = '<hideAdditionalContent xmlns="http://www.uio.no/vrtx/__vrtx/ns/structured-resources">true</hideAdditionalContent>'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'vortex_client'
|
3
|
+
require 'open-uri'
|
4
|
+
require 'uri'
|
5
|
+
require 'pathname'
|
6
|
+
|
7
|
+
# Download and upload a binary file to Vortex
|
8
|
+
|
9
|
+
url = 'http://www.hlsenteret.no/248/267/Bakgrunn_Rwanda.pdf'
|
10
|
+
content = open(url).read
|
11
|
+
|
12
|
+
filename = Pathname.new( URI.parse(url).path ).basename.to_s
|
13
|
+
|
14
|
+
vortex = Vortex::Connection.new("https://vortex-dav.uio.no/")
|
15
|
+
vortex.cd('/brukere/thomasfl/')
|
16
|
+
vortex.put_string(filename, content)
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'rubygems'
|
3
|
+
require 'nokogiri'
|
4
|
+
require 'vortex_client'
|
5
|
+
require 'pathname'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
def make_links_relative(dav_url)
|
9
|
+
vortex = Vortex::Connection.new(dav_url, :osx_keychain => true)
|
10
|
+
vortex.cd(URI.parse(dav_url).path.to_s)
|
11
|
+
count = 0
|
12
|
+
vortex.find('.', :recursive => true, :filename=>/\.html$/) do |item|
|
13
|
+
count = count + 1
|
14
|
+
puts "Checking : " + count.to_s + ": " + item.url.to_s
|
15
|
+
|
16
|
+
json_data = JSON.parse(item.content)
|
17
|
+
content = json_data["properties"]["content"]
|
18
|
+
dirty = false
|
19
|
+
doc = Nokogiri::HTML(content)
|
20
|
+
doc.css('a').each do |element|
|
21
|
+
href = element['href']
|
22
|
+
if(href and href[/^\//])then
|
23
|
+
pathname_from = Pathname.new( URI.parse(item.url.to_s).path.to_s )
|
24
|
+
pathname_to = Pathname.new( URI.parse(href.to_s).path.to_s )
|
25
|
+
new_href = pathname_to.relative_path_from(pathname_from.parent).to_s
|
26
|
+
element['href'] = new_href
|
27
|
+
puts " " + href + " => " + new_href
|
28
|
+
dirty = true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
if(dirty)then
|
32
|
+
json_data["properties"]["content"] = doc.to_s
|
33
|
+
item.content = json_data.to_json
|
34
|
+
puts "Updating : " + item.url.to_s
|
35
|
+
puts
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
url = ARGV[0]
|
42
|
+
if(not(url))then
|
43
|
+
puts "Usage: make_links_relative URL"
|
44
|
+
puts
|
45
|
+
puts "Example: make_links_relative https://www-dav.vortex-demo.uio.no/tmp/relativiser/ "
|
46
|
+
puts "Looks for links in vortex documents stored as json. Takes a vortex webdav url as"
|
47
|
+
puts "parameter. Searches recursively through subfolders."
|
48
|
+
else
|
49
|
+
make_links_relative(url)
|
50
|
+
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'vortex_client'
|
3
3
|
|
4
|
-
vortex = Vortex::Connection.new("https://www-dav.vortex-demo.uio.no/", :
|
4
|
+
vortex = Vortex::Connection.new("https://www-dav.vortex-demo.uio.no/", :osx_keychain => true)
|
5
5
|
props = vortex.propfind('/index.html')
|
6
|
+
puts props
|
6
7
|
|
7
8
|
vortex.proppatch('/index.html','<v:title xmlns:v="vrtx">Forside vortex demo</v:title>')
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'vortex_client'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
vortex = Vortex::Connection.new("https://vortex-dav.uio.no/", :osx_keychain => true)
|
6
|
+
|
7
|
+
data = {
|
8
|
+
:resourcetype => "structured-article",
|
9
|
+
:properties => {
|
10
|
+
:title => "Hello world",
|
11
|
+
:introduction => "Short introduction",
|
12
|
+
:content => "<p>Longer body</p>",
|
13
|
+
:author => "Thomas Flemming"}
|
14
|
+
}
|
15
|
+
|
16
|
+
uri = URI.parse('/brukere/thomasfl/nyheter/json_test.html')
|
17
|
+
vortex.put_string(uri,data.to_json)
|
18
|
+
|
19
|
+
vortex.proppatch(uri, '<v:publish-date xmlns:v="vrtx">' + Time.now.httpdate.to_s + '</v:publish-date>')
|
20
|
+
|
@@ -26,7 +26,7 @@ require 'pp'
|
|
26
26
|
# - Hvorfor konverteres og publiseres /konv/kunnskapsbasen/-a-hrefhttp-.html
|
27
27
|
# - Håndtere /konv/kunnskapsbasen/hl-senterets-kunnskapsbase.html spesielt?
|
28
28
|
|
29
|
-
@vortex = Vortex::Connection.new("https://nyweb4-dav.uio.no", :
|
29
|
+
@vortex = Vortex::Connection.new("https://nyweb4-dav.uio.no", :osx_keychain => true)
|
30
30
|
|
31
31
|
# Simple logger
|
32
32
|
def log(str)
|
@@ -252,7 +252,6 @@ EOF
|
|
252
252
|
end
|
253
253
|
|
254
254
|
def scrape_article(url)
|
255
|
-
# puts "Scraping article: " + url
|
256
255
|
doc = Nokogiri::HTML.parse(open(url))
|
257
256
|
doc.encoding = 'utf-8'
|
258
257
|
if(doc.css(".article .title").size() == 0)then
|
data/examples/unpublish.rb
CHANGED
@@ -5,7 +5,7 @@ require 'vortex_client'
|
|
5
5
|
#
|
6
6
|
# Find all files recursively under '/people' with name 'index.html', and set "unpublished-date" to now.
|
7
7
|
|
8
|
-
@vortex = Vortex::Connection.new("https://nyweb2-dav.uio.no/", :
|
8
|
+
@vortex = Vortex::Connection.new("https://nyweb2-dav.uio.no/", :osx_keychain => true)
|
9
9
|
@vortex.find('/people/', :recursive => true, :filename=>/\.html$/) do |item|
|
10
10
|
item.proppatch('<v:unpublish-date xmlns:v="vrtx">'+Time.now.httpdate.to_s+'</v:unpublish-date>')
|
11
11
|
end
|
data/lib/vortex_client.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'net/dav'
|
3
3
|
require 'vortex_client/string_utils'
|
4
4
|
require 'vortex_client/person'
|
5
|
+
require 'vortex_client/utilities'
|
5
6
|
require 'highline/import'
|
6
7
|
require 'time'
|
7
8
|
|
@@ -165,6 +166,46 @@ module Vortex
|
|
165
166
|
end
|
166
167
|
end
|
167
168
|
|
169
|
+
# Create path - create all folders in the given path if they do not exist.
|
170
|
+
#
|
171
|
+
# Default is article-listing folder and the foldername used as title.
|
172
|
+
#
|
173
|
+
# Example:
|
174
|
+
#
|
175
|
+
# create_path('/folders/to/be/created/')
|
176
|
+
# create_path('/folders/to/be/created/', :type => "event-listing", :title => "Testing")
|
177
|
+
def create_path(dest_path, *args)
|
178
|
+
title = nil
|
179
|
+
if(args.size > 0)then
|
180
|
+
type = args[0][:type]
|
181
|
+
title = args[0][:title]
|
182
|
+
end
|
183
|
+
if(not(type))then
|
184
|
+
type = "article-listing"
|
185
|
+
end
|
186
|
+
|
187
|
+
destination_path = "/"
|
188
|
+
dest_path.split("/").each do |folder|
|
189
|
+
if(folder != "")then
|
190
|
+
folder = folder.downcase
|
191
|
+
destination_path = destination_path + folder + "/"
|
192
|
+
if( not(exists?(destination_path)) )then
|
193
|
+
mkdir(destination_path)
|
194
|
+
proppatch(destination_path,'<v:collection-type xmlns:v="vrtx">' + type + '</v:collection-type>')
|
195
|
+
if(title)then
|
196
|
+
proppatch(destination_path,'<v:userTitle xmlns:v="vrtx">' + title.to_s + '</v:userTitle>')
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
return destination_path
|
202
|
+
end
|
203
|
+
|
204
|
+
# Returns current working directory on vortex/webdav server as string.
|
205
|
+
def cwd
|
206
|
+
return cd("").to_s
|
207
|
+
end
|
208
|
+
|
168
209
|
private
|
169
210
|
|
170
211
|
# Disable Net::DAV.credentials
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vortex_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 7
|
9
|
-
-
|
10
|
-
version: 0.7.
|
9
|
+
- 2
|
10
|
+
version: 0.7.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Thomas Flemming
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-07-12 00:00:00 +02:00
|
19
19
|
default_executable: vrtx-sync
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -86,13 +86,16 @@ files:
|
|
86
86
|
- examples/create_personpresentations.rb
|
87
87
|
- examples/dice.gif
|
88
88
|
- examples/disable_right_column.rb
|
89
|
+
- examples/download_and_upload_pdf.rb
|
89
90
|
- examples/import_static_site.rb
|
90
91
|
- examples/ldap_util.rb
|
92
|
+
- examples/make_links_relative.rb
|
91
93
|
- examples/no_right_margin.rb
|
92
94
|
- examples/person_presentation.rb
|
93
95
|
- examples/propfind_proppatch.rb
|
94
96
|
- examples/publish_article.rb
|
95
97
|
- examples/publish_event.rb
|
98
|
+
- examples/publish_json.rb
|
96
99
|
- examples/scrape_hero_publications.rb
|
97
100
|
- examples/scrape_holocaust.rb
|
98
101
|
- examples/scrape_holocaust_related_links.rb
|
@@ -117,10 +120,6 @@ files:
|
|
117
120
|
- test/test_vortex_pic.rb
|
118
121
|
- test/test_vortex_tags.rb
|
119
122
|
- test/test_vortex_utils.rb
|
120
|
-
- examples/replace_spike.rb
|
121
|
-
- examples/search_replace_documents_frontpage.rb
|
122
|
-
- examples/test_searc_replace.rb
|
123
|
-
- examples/upload_image_flymake.rb
|
124
123
|
has_rdoc: true
|
125
124
|
homepage: http://github.com/thomasfl/vortex_client
|
126
125
|
licenses: []
|
@@ -160,25 +159,24 @@ test_files:
|
|
160
159
|
- examples/create_collection.rb
|
161
160
|
- examples/create_personpresentations.rb
|
162
161
|
- examples/disable_right_column.rb
|
162
|
+
- examples/download_and_upload_pdf.rb
|
163
163
|
- examples/import_static_site.rb
|
164
164
|
- examples/ldap_util.rb
|
165
|
+
- examples/make_links_relative.rb
|
165
166
|
- examples/no_right_margin.rb
|
166
167
|
- examples/person_presentation.rb
|
167
168
|
- examples/propfind_proppatch.rb
|
168
169
|
- examples/publish_article.rb
|
169
170
|
- examples/publish_event.rb
|
170
|
-
- examples/
|
171
|
+
- examples/publish_json.rb
|
171
172
|
- examples/scrape_hero_publications.rb
|
172
173
|
- examples/scrape_holocaust.rb
|
173
174
|
- examples/scrape_holocaust_related_links.rb
|
174
175
|
- examples/scrape_vortex_search.rb
|
175
176
|
- examples/search_replace_documents.rb
|
176
|
-
- examples/search_replace_documents_frontpage.rb
|
177
177
|
- examples/sitemap.rb
|
178
|
-
- examples/test_searc_replace.rb
|
179
178
|
- examples/unpublish.rb
|
180
179
|
- examples/upload_image.rb
|
181
|
-
- examples/upload_image_flymake.rb
|
182
180
|
- test/helper.rb
|
183
181
|
- test/test_acl.rb
|
184
182
|
- test/test_date_conversion.rb
|
data/examples/replace_spike.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'vortex_client'
|
3
|
-
require 'json'
|
4
|
-
require 'scrape_vortex_search'
|
5
|
-
require 'pp'
|
6
|
-
require 'uri'
|
7
|
-
|
8
|
-
# Replace text in json document on server
|
9
|
-
# Optional resourcetype can
|
10
|
-
def replace(host, path, from, to, *resourcetype)
|
11
|
-
verbose = false
|
12
|
-
host = host.sub(/\/$/,'')
|
13
|
-
uri = URI.parse(path)
|
14
|
-
url = host + uri.path
|
15
|
-
url = url.sub(/\/$/,'/index.html')
|
16
|
-
|
17
|
-
vortex = Vortex::Connection.new(host,:use_osx_keychain => true)
|
18
|
-
vortex.find(url) do |item|
|
19
|
-
|
20
|
-
data = nil
|
21
|
-
begin
|
22
|
-
data = JSON.parse(item.content)
|
23
|
-
rescue
|
24
|
-
if(verbose)then
|
25
|
-
puts "Warning. Bad document. Not json: " + item.uri.to_s
|
26
|
-
end
|
27
|
-
return 0
|
28
|
-
end
|
29
|
-
|
30
|
-
if(resourcetype[0] and resourcetype[0].class == String and data["resourcetype"] != resourcetype[0] )then
|
31
|
-
if(verbose)then
|
32
|
-
puts "Warning: resourcetype not: " + resourcetype[0]
|
33
|
-
end
|
34
|
-
return 0
|
35
|
-
end
|
36
|
-
|
37
|
-
puts "Oppdaterer: " + item.uri.to_s
|
38
|
-
new_content = item.content.sub(from,to)
|
39
|
-
item.content = new_content
|
40
|
-
return 1
|
41
|
-
end
|
42
|
-
end
|
@@ -1,88 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
# Search and replace a set of sentences in a set of folders on vortex webdav server.
|
3
|
-
#
|
4
|
-
#
|
5
|
-
# for alle forside-dokumenter på jus.uio.no, tf.uio.no, hf.uio.no, uv.uio.no, sv.uio.no, odontologi.uio.no
|
6
|
-
#
|
7
|
-
#
|
8
|
-
# Author: Thomas Flemming 2010 thomasfl@usit.uio.no
|
9
|
-
|
10
|
-
require 'rubygems'
|
11
|
-
require 'vortex_client'
|
12
|
-
require 'json'
|
13
|
-
require 'scrape_vortex_search'
|
14
|
-
require 'pp'
|
15
|
-
require 'uri'
|
16
|
-
|
17
|
-
replacements = {
|
18
|
-
"Ansettelsesforhold ved UiO" => "Ansettelsesforhold for alle ansatte ved UiO",
|
19
|
-
"Arbeidsstøtte ved UiO" => "Arbeidsstøtte for alle ansatte ved UiO",
|
20
|
-
"Drift og servicefunksjoner ved UiO" =>"Drift og servicefunksjoner for alle ansatte ved UiO",
|
21
|
-
"Kompetanseutvikling ved UiO" => "Kompetanseutvikling for alle ansatte ved UiO"
|
22
|
-
}
|
23
|
-
|
24
|
-
hosts = [
|
25
|
-
"https://www-dav.hf.uio.no/",
|
26
|
-
"https://www-dav.odont.uio.no",
|
27
|
-
"https://www-dav.jus.uio.no/",
|
28
|
-
"https://www-dav.tf.uio.no/",
|
29
|
-
"https://www-dav.uv.uio.no/",
|
30
|
-
"https://www-dav.sv.uio.no/"
|
31
|
-
]
|
32
|
-
|
33
|
-
# Opens a json document in vortex.
|
34
|
-
#
|
35
|
-
# Example:
|
36
|
-
#
|
37
|
-
# with_json_doc(path) do |dav_item, json_data|
|
38
|
-
# puts json_data["resourcetype"]
|
39
|
-
# dav_item.content = dav_item.content.sub('Oxford','UiO')
|
40
|
-
# end
|
41
|
-
|
42
|
-
def with_json_doc(url)
|
43
|
-
vortex = Vortex::Connection.new(url,:use_osx_keychain => true)
|
44
|
-
if(not(vortex.exists?(url)))then
|
45
|
-
puts "Warning: Can't find " + url
|
46
|
-
return -1
|
47
|
-
end
|
48
|
-
vortex.find(url) do |item|
|
49
|
-
begin
|
50
|
-
data = JSON.parse(item.content)
|
51
|
-
yield item, data
|
52
|
-
rescue
|
53
|
-
return -1
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
hosts.each do |host|
|
59
|
-
search_host = host.sub("www-dav","www")
|
60
|
-
replacements.each do |from, to|
|
61
|
-
puts "Replacing: '#{from}' => '#{to}'"
|
62
|
-
search_results = vortex_search(search_host, from)
|
63
|
-
# TODO remove not( /(\.html)|\// alt untatt '.../' eller 'html'
|
64
|
-
search_results.delete_if {|x| x =~ /\.pdf$/} # Remove pdf files
|
65
|
-
count = 0
|
66
|
-
search_results.each do |path|
|
67
|
-
if(not(path =~ /\.html$/))then
|
68
|
-
path = path + "index.html"
|
69
|
-
end
|
70
|
-
# count = count + replace(host, path, from, to, "frontpage")
|
71
|
-
path = path.sub(/^http:/, 'https:').sub(/\/\/www\./,'//www-dav.')
|
72
|
-
with_json_doc(path) do |item, data|
|
73
|
-
if(data["resourcetype"] == "frontpage")then
|
74
|
-
puts "Updating:" + path
|
75
|
-
item.content = item.content.sub(from,to)
|
76
|
-
|
77
|
-
if(item.content.to_s =~ Regexp.new(from))then
|
78
|
-
puts "Warning: Not updated."
|
79
|
-
else
|
80
|
-
count = count + 1
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
puts "Updated #{count.to_s} documents."
|
86
|
-
puts
|
87
|
-
end
|
88
|
-
end
|
@@ -1,8 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'vortex_client'
|
3
|
-
|
4
|
-
# Upload a binary file to Vortex
|
5
|
-
vortex = Vortex::Connection.new("https://vortex-dav.uio.no/")
|
6
|
-
vortex.cd('/brukere/thomasfl/')
|
7
|
-
content = open("dice.gif", "rb") {|io| io.read }
|
8
|
-
vortex.put_string("dice_6.gif", content)
|