active_cmis 0.2.3 → 0.2.4

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/Rakefile CHANGED
@@ -1,5 +1,4 @@
1
1
  require 'rubygems'
2
- require 'rake/gempackagetask'
3
2
 
4
3
  begin
5
4
  require 'yard'
data/active_cmis.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{active_cmis}
8
- s.version = "0.2.3"
8
+ s.version = "0.2.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Joeri Samson"]
12
- s.date = %q{2011-07-18}
12
+ s.date = %q{2011-09-30}
13
13
  s.description = %q{A CMIS library implementing both reading and updating capabilities through the AtomPub/REST binding to CMIS.}
14
14
  s.email = %q{joeri@xaop.com}
15
15
  s.extra_rdoc_files = [
@@ -52,11 +52,10 @@ Gem::Specification.new do |s|
52
52
  s.homepage = %q{http://xaop.com/labs/activecmis/}
53
53
  s.require_paths = ["lib"]
54
54
  s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
55
- s.rubygems_version = %q{1.3.7}
55
+ s.rubygems_version = %q{1.6.2}
56
56
  s.summary = %q{A library to interact with CMIS repositories through the AtomPub/REST binding}
57
57
 
58
58
  if s.respond_to? :specification_version then
59
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
60
59
  s.specification_version = 3
61
60
 
62
61
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
@@ -171,26 +171,52 @@ module ActiveCMIS
171
171
  end
172
172
 
173
173
  def handle_request(uri, req)
174
- logger.debug "#{req.method} #{uri}"
175
- http = authenticate_request(uri, req)
176
- response = http.request(req)
177
- status = response.code.to_i
178
- logger.debug "RECEIVED #{response.code}"
179
- if 200 <= status && status < 300
180
- return response.body
181
- else
182
- # Problem: some codes 400, 405, 403, 409, 500 have multiple meanings
183
- logger.error "Error occurred when handling request:\n#{response.body}"
184
- case status
185
- when 400; raise Error::InvalidArgument.new(response.body)
186
- # FIXME: can also be filterNotValid
187
- when 401; raise HTTPError::AuthenticationError.new(response.body)
188
- when 404; raise Error::ObjectNotFound.new(response.body)
189
- when 403; raise Error::PermissionDenied.new(response.body)
190
- # FIXME: can also be streamNotSupported (?? shouldn't that be 405??)
191
- when 405; raise Error::NotSupported.new(response.body)
192
- else
193
- raise HTTPError.new("A HTTP #{status} error occured, for more precision update the code:\n" + response.body)
174
+ catch(:retry) do
175
+ logger.debug "#{req.method} #{uri}"
176
+ http = authenticate_request(uri, req)
177
+
178
+ status, body, headers = nil
179
+ http.request(req) { |resp|
180
+ status = resp.code.to_i
181
+ body = resp.body
182
+ headers = resp.header
183
+ }
184
+
185
+ logger.debug "RECEIVED #{status}"
186
+
187
+ if 200 <= status && status < 300
188
+ return body
189
+ elsif 300 <= status && status < 400
190
+ # follow the redirected a limited number of times
191
+ retry_count = (retry_count || 0) + 1
192
+ location = headers["location"]
193
+ logger.debug "REDIRECTING: #{location.inspect}"
194
+ if retry_count <= 3
195
+ new_uri = URI.parse(location)
196
+ if new_uri.relative?
197
+ uri = uri + location
198
+ end
199
+ req = req.class.new(uri.request_uri)
200
+ throw(:retry)
201
+ else
202
+ raise HTTPError.new("Too many redirects")
203
+ end
204
+ elsif 400 <= status && status < 500
205
+ # Problem: some codes 400, 405, 403, 409, 500 have multiple meanings
206
+ logger.error "Error occurred when handling request:\n#{body}"
207
+ case status
208
+ when 400; raise Error::InvalidArgument.new(body)
209
+ # FIXME: can also be filterNotValid
210
+ when 401; raise HTTPError::AuthenticationError.new(body)
211
+ when 404; raise Error::ObjectNotFound.new(body)
212
+ when 403; raise Error::PermissionDenied.new(body)
213
+ # FIXME: can also be streamNotSupported (?? shouldn't that be 405??)
214
+ when 405; raise Error::NotSupported.new(body)
215
+ else
216
+ raise HTTPError::ClientError.new("A HTTP #{status} error occured, for more precision update the code:\n" + body)
217
+ end
218
+ elsif 400 <= status && status < 500
219
+ raise HTTPError::ServerError.new("The server encountered an internal error #{status} (this could be a client error though):\n" + body)
194
220
  end
195
221
  end
196
222
  end
@@ -226,7 +226,7 @@ module ActiveCMIS
226
226
  unless parent_feed.empty?
227
227
  Collection.new(repository, parent_feed.first)
228
228
  else
229
- parent_entry = Internal::Utils.extract_links(data, 'up', 'application/atom+xml','type' => 'entries')
229
+ parent_entry = Internal::Utils.extract_links(data, 'up', 'application/atom+xml','type' => 'entry')
230
230
  unless parent_entry.empty?
231
231
  e = conn.get_atom_entry(parent_entry.first)
232
232
  [ActiveCMIS::Object.from_atom_entry(repository, e)]
@@ -40,6 +40,53 @@ module ActiveCMIS
40
40
  @cmis_version ||= data.xpath("cra:repositoryInfo/c:cmisVersionSupported", NS::COMBINED).text
41
41
  end
42
42
 
43
+ # The name of the repository, meant for display purposes
44
+ # @return [String]
45
+ def name
46
+ @name ||= data.xpath("cra:repositoryInfo/c:repositoryName", NS::COMBINED).text
47
+ end
48
+
49
+ # A description of the repository
50
+ # @return [String]
51
+ def description
52
+ @name ||= data.xpath("cra:repositoryInfo/c:repositoryDescription", NS::COMBINED).text
53
+ end
54
+
55
+ # The name of the vendor of this Repository
56
+ # @return [String]
57
+ def vendor
58
+ @vendor ||= data.xpath("cra:repositoryInfo/c:vendorName", NS::COMBINED).text
59
+ end
60
+
61
+ # The name of the product behind this Repository
62
+ # @return [String]
63
+ def product_name
64
+ @product_name ||= data.xpath("cra:repositoryInfo/c:productName", NS::COMBINED).text
65
+ end
66
+
67
+ # The version of the product behind this Repository
68
+ # @return [String]
69
+ def product_version
70
+ @product_version ||= data.xpath("cra:repositoryInfo/c:productVersion", NS::COMBINED).text
71
+ end
72
+
73
+ # Changelog token representing the most recent change to this repository (will
74
+ # represent the most recent change at the time that this ActiveCMIS::Repository
75
+ # was created
76
+ # @return [String]
77
+ def latest_changelog_token
78
+ @changelog_token ||= data.xpath("cra:repositoryInfo/c:latestChangeLogToken", NS::COMBINED).text
79
+ end
80
+
81
+ # A URI that points to a web service for this repository. May not be present
82
+ # @return [URI, nil]
83
+ def thin_client_uri
84
+ @thin_client_uri ||= begin
85
+ string = data.xpath("cra:repositoryInfo/c:thinClientURI", NS::COMBINED).text
86
+ URI.parse(string) if string && string != ""
87
+ end
88
+ end
89
+
43
90
  # Finds the object with a given ID in the repository
44
91
  #
45
92
  # @param [String] id
@@ -2,7 +2,7 @@ module ActiveCMIS
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- PATCH = 3
5
+ PATCH = 4
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,55 +1,40 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_cmis
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 2
9
- - 3
10
- version: 0.2.3
4
+ prerelease:
5
+ version: 0.2.4
11
6
  platform: ruby
12
7
  authors:
13
- - Joeri Samson
8
+ - Joeri Samson
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-07-18 00:00:00 +02:00
13
+ date: 2011-09-30 00:00:00 +02:00
19
14
  default_executable:
20
15
  dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: nokogiri
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 5
30
- segments:
31
- - 1
32
- - 4
33
- - 1
34
- version: 1.4.1
35
- type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: ntlm-http
39
- prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- hash: 25
46
- segments:
47
- - 0
48
- - 1
49
- - 1
50
- version: 0.1.1
51
- type: :runtime
52
- version_requirements: *id002
16
+ - !ruby/object:Gem::Dependency
17
+ name: nokogiri
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 1.4.1
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: ntlm-http
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: 0.1.1
36
+ type: :runtime
37
+ version_requirements: *id002
53
38
  description: A CMIS library implementing both reading and updating capabilities through the AtomPub/REST binding to CMIS.
54
39
  email: joeri@xaop.com
55
40
  executables: []
@@ -57,40 +42,40 @@ executables: []
57
42
  extensions: []
58
43
 
59
44
  extra_rdoc_files:
60
- - LICENSE
61
- - README.md
62
- - TODO
45
+ - LICENSE
46
+ - README.md
47
+ - TODO
63
48
  files:
64
- - LICENSE
65
- - README.md
66
- - Rakefile
67
- - TODO
68
- - active_cmis.gemspec
69
- - lib/active_cmis.rb
70
- - lib/active_cmis/acl.rb
71
- - lib/active_cmis/acl_entry.rb
72
- - lib/active_cmis/active_cmis.rb
73
- - lib/active_cmis/atomic_types.rb
74
- - lib/active_cmis/attribute_prefix.rb
75
- - lib/active_cmis/collection.rb
76
- - lib/active_cmis/document.rb
77
- - lib/active_cmis/exceptions.rb
78
- - lib/active_cmis/folder.rb
79
- - lib/active_cmis/internal/caching.rb
80
- - lib/active_cmis/internal/connection.rb
81
- - lib/active_cmis/internal/utils.rb
82
- - lib/active_cmis/ns.rb
83
- - lib/active_cmis/object.rb
84
- - lib/active_cmis/policy.rb
85
- - lib/active_cmis/property_definition.rb
86
- - lib/active_cmis/query_result.rb
87
- - lib/active_cmis/rel.rb
88
- - lib/active_cmis/relationship.rb
89
- - lib/active_cmis/rendition.rb
90
- - lib/active_cmis/repository.rb
91
- - lib/active_cmis/server.rb
92
- - lib/active_cmis/type.rb
93
- - lib/active_cmis/version.rb
49
+ - LICENSE
50
+ - README.md
51
+ - Rakefile
52
+ - TODO
53
+ - active_cmis.gemspec
54
+ - lib/active_cmis.rb
55
+ - lib/active_cmis/acl.rb
56
+ - lib/active_cmis/acl_entry.rb
57
+ - lib/active_cmis/active_cmis.rb
58
+ - lib/active_cmis/atomic_types.rb
59
+ - lib/active_cmis/attribute_prefix.rb
60
+ - lib/active_cmis/collection.rb
61
+ - lib/active_cmis/document.rb
62
+ - lib/active_cmis/exceptions.rb
63
+ - lib/active_cmis/folder.rb
64
+ - lib/active_cmis/internal/caching.rb
65
+ - lib/active_cmis/internal/connection.rb
66
+ - lib/active_cmis/internal/utils.rb
67
+ - lib/active_cmis/ns.rb
68
+ - lib/active_cmis/object.rb
69
+ - lib/active_cmis/policy.rb
70
+ - lib/active_cmis/property_definition.rb
71
+ - lib/active_cmis/query_result.rb
72
+ - lib/active_cmis/rel.rb
73
+ - lib/active_cmis/relationship.rb
74
+ - lib/active_cmis/rendition.rb
75
+ - lib/active_cmis/repository.rb
76
+ - lib/active_cmis/server.rb
77
+ - lib/active_cmis/type.rb
78
+ - lib/active_cmis/version.rb
94
79
  has_rdoc: true
95
80
  homepage: http://xaop.com/labs/activecmis/
96
81
  licenses: []
@@ -99,31 +84,23 @@ post_install_message:
99
84
  rdoc_options: []
100
85
 
101
86
  require_paths:
102
- - lib
87
+ - lib
103
88
  required_ruby_version: !ruby/object:Gem::Requirement
104
89
  none: false
105
90
  requirements:
106
- - - ">="
107
- - !ruby/object:Gem::Version
108
- hash: 59
109
- segments:
110
- - 1
111
- - 8
112
- - 6
113
- version: 1.8.6
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: 1.8.6
114
94
  required_rubygems_version: !ruby/object:Gem::Requirement
115
95
  none: false
116
96
  requirements:
117
- - - ">="
118
- - !ruby/object:Gem::Version
119
- hash: 3
120
- segments:
121
- - 0
122
- version: "0"
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: "0"
123
100
  requirements: []
124
101
 
125
102
  rubyforge_project:
126
- rubygems_version: 1.3.7
103
+ rubygems_version: 1.6.2
127
104
  signing_key:
128
105
  specification_version: 3
129
106
  summary: A library to interact with CMIS repositories through the AtomPub/REST binding