vortex_client 0.6.0 → 0.7.0

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.
@@ -0,0 +1,44 @@
1
+ require 'rubygems'
2
+ require 'open-uri'
3
+ require 'nokogiri'
4
+ require 'cgi'
5
+ require 'pp'
6
+ require 'uri'
7
+
8
+ # Search a vortex host for a query string by scraping search results
9
+ # Regexp filter for url's is optional.
10
+ #
11
+ # Usage:
12
+ #
13
+ # result = vortex_search("www.hf.uio.no", "Ansettelsesforhold ved UiO")
14
+ # => ["http://www.hf.uio.no/ifikk/for-ansatte/ansettelsesforhold/index.html",
15
+ # "http://www.hf.uio.no/imv/for-ansatte/ansettelsesforhold/",
16
+ # "http://www.hf.uio.no/iln/for-ansatte/ansettelsesforhold/"]
17
+ def vortex_search(host, query)
18
+ uri = URI.parse(host)
19
+ if(uri.host)then
20
+ host = uri.host
21
+ end
22
+ q = CGI::escape(query)
23
+ search_results = {}
24
+ prev_page = nil
25
+ current_page = ""
26
+ i = 1
27
+ # Manage paging of search results
28
+ while(prev_page != current_page)do
29
+ prev_page = current_page
30
+ url = "http://#{host}/?vrtx=search&page=#{i}&query=#{q}"
31
+ doc = Nokogiri::HTML(open(url))
32
+ doc.css('span.url').each do |link|
33
+ search_results[link.content] = true
34
+ end
35
+ current_page = doc.to_s
36
+ i = i + 1
37
+ end
38
+
39
+ result = []
40
+ search_results.keys.each do |link|
41
+ result << link
42
+ end
43
+ end
44
+
@@ -0,0 +1,57 @@
1
+ # Search and replace a set of sentences in a set of folders on vortex webdav server.
2
+ #
3
+ # TODO: Make the script keep the lastUpdatedDate and publishedDate unchanged.
4
+ #
5
+ # Author: Thomas Flemming 2010 thomasfl@usit.uio.no
6
+
7
+ require 'rubygems'
8
+ require 'vortex_client'
9
+ require 'json'
10
+
11
+ replacements = {
12
+ "<h2>Teaching</h2>" => "<h2>Courses taught</h2>",
13
+ "<h2>Higher education and employment history</h2>" => "<h2>Background</h2>",
14
+ "<h2>Honoraria</h2>" => "<h2>Awards</h2>",
15
+ "<h2>Appointments</h2>" => "<h2>Positions held</h2>",
16
+ "<h2>Cooperation</h2>" => "<h2>Partners</h2>"
17
+ }
18
+
19
+ folders = [
20
+ "/isv/english/people/aca/",
21
+ "/iss/english/people/aca/",
22
+ "/psi/english/people/aca/",
23
+ "/sai/english/people/aca/",
24
+ "/econ/english/people/aca/",
25
+ "/arena/english/people/aca/",
26
+ "/tik/english/people/aca/"
27
+ ]
28
+
29
+
30
+ vortex = Vortex::Connection.new("https://nyweb1-dav.uio.no/",:use_osx_keychain => true)
31
+
32
+ folders.each do |folder|
33
+
34
+ vortex.find(folder,:recursive => true,:filename=>/\.html$/) do |item|
35
+ puts item.uri.to_s
36
+
37
+ data = nil
38
+ begin
39
+ data = JSON.parse(item.content)
40
+ rescue
41
+ puts "Warning. Bad document. Not json:" + item.uri.to_s
42
+ end
43
+
44
+ if(data)then
45
+ content = data["properties"]["content"]
46
+ if(content)then
47
+ replacements.each do |key,val|
48
+ content = content.gsub(key,val)
49
+ end
50
+ data["properties"]["content"] = content
51
+ item.content = data.to_json
52
+ end
53
+ end
54
+
55
+ end
56
+
57
+ end
@@ -0,0 +1,88 @@
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
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+
3
+ puts 'Start'
@@ -0,0 +1,11 @@
1
+ require 'rubygems'
2
+ require 'vortex_client'
3
+
4
+ # Hides documents for visitors by setting the documents unpublish-date to current time and date.
5
+ #
6
+ # Find all files recursively under '/people' with name 'index.html', and set "unpublished-date" to now.
7
+
8
+ @vortex = Vortex::Connection.new("https://nyweb2-dav.uio.no/", :use_osx_keychain => true)
9
+ @vortex.find('/people/', :recursive => true, :filename=>/\.html$/) do |item|
10
+ item.proppatch('<v:unpublish-date xmlns:v="vrtx">'+Time.now.httpdate.to_s+'</v:unpublish-date>')
11
+ end
@@ -0,0 +1,8 @@
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)
@@ -0,0 +1,8 @@
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)
data/lib/vortex_client.rb CHANGED
@@ -52,7 +52,7 @@ module Vortex
52
52
  @handler = NetHttpHandler.new(@uri)
53
53
  @handler.verify_server = false # This defaults to true in Net::DAV
54
54
  if(args != [])
55
- if(args[0][:use_osx_keychain])then
55
+ if(args[0][:use_osx_keychain] or args[0][:osx_keychain])then
56
56
 
57
57
  # Retrieve password from OS X KeyChain.
58
58
  osx = (RUBY_PLATFORM =~ /darwin/)
@@ -116,6 +116,7 @@ module Vortex
116
116
  uri = @uri.merge(object.url)
117
117
  # puts "DEBUG: uri = " + uri.to_s
118
118
  self.put_string(uri, object.content)
119
+ # puts "DEBUG: object.properties: #{uri}\n#{object.properties.gsub("><",">\n<")}\n-----\n"
119
120
  self.proppatch(uri, object.properties)
120
121
  return uri.to_s
121
122
  else
@@ -6,10 +6,9 @@ class TestVortexClientUtils < Test::Unit::TestCase
6
6
 
7
7
  def setup
8
8
  if(not(@vortex))
9
- # user = ENV['DAVUSER']
10
- # pass = ENV['DAVPASS']
11
- # @vortex = Connection.new("https://vortex-dav.uio.no/",user, pass)
12
- @vortex = Connection.new("https://vortex-dav.uio.no/", :use_osx_keychain => true)
9
+ user = ENV['DAVUSER']
10
+ pass = ENV['DAVPASS']
11
+ @vortex = Connection.new("https://vortex-dav.uio.no/",user, pass)
13
12
  end
14
13
  end
15
14
 
@@ -23,18 +22,6 @@ class TestVortexClientUtils < Test::Unit::TestCase
23
22
  article = Vortex::HtmlArticle.new(:title => "Sample Title 2",
24
23
  :introduction => "Sample introduction",
25
24
  :body => "<p>Hello world</p>",
26
- :tags => ["Tag1", "Tag2"],
27
- ## :date => Time.now,
28
- :publishedDate => "05.01.2010 12:00",
29
- :author => "Thomas Flemming")
30
-
31
- @vortex.publish(article)
32
- assert @vortex.exists?(url)
33
-
34
- article = Vortex::StrucHtmlArticle.new(:title => "Sample Title 2",
35
- :introduction => "Sample introduction",
36
- :body => "<p>Hello world</p>",
37
- :tags => ["Tag1", "Tag2"],
38
25
  ## :date => Time.now,
39
26
  :publishedDate => "05.01.2010 12:00",
40
27
  :author => "Thomas Flemming")
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: 7
5
- prerelease: false
4
+ hash: 3
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 6
8
+ - 7
9
9
  - 0
10
- version: 0.6.0
10
+ version: 0.7.0
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: 2010-07-06 00:00:00 +02:00
18
+ date: 2011-05-30 00:00:00 +02:00
19
19
  default_executable: vrtx-sync
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -75,20 +75,32 @@ extra_rdoc_files:
75
75
  - README.rdoc
76
76
  files:
77
77
  - .document
78
- - .gitignore
79
78
  - LICENSE
80
79
  - README.rdoc
81
80
  - Rakefile
82
81
  - VERSION
83
82
  - bin/vrtx-sync
83
+ - examples/README.rdoc
84
84
  - examples/change_folder_type.rb
85
85
  - examples/create_collection.rb
86
+ - examples/create_personpresentations.rb
87
+ - examples/dice.gif
86
88
  - examples/disable_right_column.rb
89
+ - examples/import_static_site.rb
87
90
  - examples/ldap_util.rb
91
+ - examples/no_right_margin.rb
88
92
  - examples/person_presentation.rb
93
+ - examples/propfind_proppatch.rb
89
94
  - examples/publish_article.rb
90
95
  - examples/publish_event.rb
96
+ - examples/scrape_hero_publications.rb
97
+ - examples/scrape_holocaust.rb
98
+ - examples/scrape_holocaust_related_links.rb
99
+ - examples/scrape_vortex_search.rb
100
+ - examples/search_replace_documents.rb
91
101
  - examples/sitemap.rb
102
+ - examples/unpublish.rb
103
+ - examples/upload_image.rb
92
104
  - lib/vortex_client.rb
93
105
  - lib/vortex_client/item_extensions.rb
94
106
  - lib/vortex_client/person.rb
@@ -105,13 +117,17 @@ files:
105
117
  - test/test_vortex_pic.rb
106
118
  - test/test_vortex_tags.rb
107
119
  - 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
108
124
  has_rdoc: true
109
125
  homepage: http://github.com/thomasfl/vortex_client
110
126
  licenses: []
111
127
 
112
128
  post_install_message:
113
- rdoc_options:
114
- - --charset=UTF-8
129
+ rdoc_options: []
130
+
115
131
  require_paths:
116
132
  - lib
117
133
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -135,11 +151,34 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
151
  requirements: []
136
152
 
137
153
  rubyforge_project:
138
- rubygems_version: 1.3.7
154
+ rubygems_version: 1.5.0
139
155
  signing_key:
140
156
  specification_version: 3
141
157
  summary: Vortex CMS client
142
158
  test_files:
159
+ - examples/change_folder_type.rb
160
+ - examples/create_collection.rb
161
+ - examples/create_personpresentations.rb
162
+ - examples/disable_right_column.rb
163
+ - examples/import_static_site.rb
164
+ - examples/ldap_util.rb
165
+ - examples/no_right_margin.rb
166
+ - examples/person_presentation.rb
167
+ - examples/propfind_proppatch.rb
168
+ - examples/publish_article.rb
169
+ - examples/publish_event.rb
170
+ - examples/replace_spike.rb
171
+ - examples/scrape_hero_publications.rb
172
+ - examples/scrape_holocaust.rb
173
+ - examples/scrape_holocaust_related_links.rb
174
+ - examples/scrape_vortex_search.rb
175
+ - examples/search_replace_documents.rb
176
+ - examples/search_replace_documents_frontpage.rb
177
+ - examples/sitemap.rb
178
+ - examples/test_searc_replace.rb
179
+ - examples/unpublish.rb
180
+ - examples/upload_image.rb
181
+ - examples/upload_image_flymake.rb
143
182
  - test/helper.rb
144
183
  - test/test_acl.rb
145
184
  - test/test_date_conversion.rb
@@ -152,11 +191,3 @@ test_files:
152
191
  - test/test_vortex_pic.rb
153
192
  - test/test_vortex_tags.rb
154
193
  - test/test_vortex_utils.rb
155
- - examples/change_folder_type.rb
156
- - examples/create_collection.rb
157
- - examples/disable_right_column.rb
158
- - examples/ldap_util.rb
159
- - examples/person_presentation.rb
160
- - examples/publish_article.rb
161
- - examples/publish_event.rb
162
- - examples/sitemap.rb
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC