active_cmis 0.1.13 → 0.2.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.
- data/active_cmis.gemspec +70 -0
- data/lib/active_cmis.rb +1 -0
- data/lib/active_cmis/active_cmis.rb +2 -2
- data/lib/active_cmis/atomic_types.rb +18 -5
- data/lib/active_cmis/query_result.rb +40 -0
- data/lib/active_cmis/repository.rb +4 -2
- data/lib/active_cmis/version.rb +2 -2
- metadata +55 -71
data/active_cmis.gemspec
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{active_cmis}
|
8
|
+
s.version = "0.2.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Joeri Samson"]
|
12
|
+
s.date = %q{2011-04-11}
|
13
|
+
s.description = %q{A CMIS library implementing both reading and updating capabilities through the AtomPub/REST binding to CMIS.}
|
14
|
+
s.email = %q{joeri@xaop.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.md",
|
18
|
+
"TODO"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
"LICENSE",
|
22
|
+
"README.md",
|
23
|
+
"Rakefile",
|
24
|
+
"TODO",
|
25
|
+
"active_cmis.gemspec",
|
26
|
+
"lib/active_cmis.rb",
|
27
|
+
"lib/active_cmis/acl.rb",
|
28
|
+
"lib/active_cmis/acl_entry.rb",
|
29
|
+
"lib/active_cmis/active_cmis.rb",
|
30
|
+
"lib/active_cmis/atomic_types.rb",
|
31
|
+
"lib/active_cmis/attribute_prefix.rb",
|
32
|
+
"lib/active_cmis/collection.rb",
|
33
|
+
"lib/active_cmis/document.rb",
|
34
|
+
"lib/active_cmis/exceptions.rb",
|
35
|
+
"lib/active_cmis/folder.rb",
|
36
|
+
"lib/active_cmis/internal/caching.rb",
|
37
|
+
"lib/active_cmis/internal/connection.rb",
|
38
|
+
"lib/active_cmis/internal/utils.rb",
|
39
|
+
"lib/active_cmis/ns.rb",
|
40
|
+
"lib/active_cmis/object.rb",
|
41
|
+
"lib/active_cmis/policy.rb",
|
42
|
+
"lib/active_cmis/property_definition.rb",
|
43
|
+
"lib/active_cmis/query_result.rb",
|
44
|
+
"lib/active_cmis/rel.rb",
|
45
|
+
"lib/active_cmis/relationship.rb",
|
46
|
+
"lib/active_cmis/rendition.rb",
|
47
|
+
"lib/active_cmis/repository.rb",
|
48
|
+
"lib/active_cmis/server.rb",
|
49
|
+
"lib/active_cmis/type.rb",
|
50
|
+
"lib/active_cmis/version.rb"
|
51
|
+
]
|
52
|
+
s.homepage = %q{http://xaop.com/labs/activecmis/}
|
53
|
+
s.require_paths = ["lib"]
|
54
|
+
s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
|
55
|
+
s.rubygems_version = %q{1.5.1}
|
56
|
+
s.summary = %q{A library to interact with CMIS repositories through the AtomPub/REST binding}
|
57
|
+
|
58
|
+
if s.respond_to? :specification_version then
|
59
|
+
s.specification_version = 3
|
60
|
+
|
61
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
62
|
+
s.add_runtime_dependency(%q<nokogiri>, [">= 1.4.1"])
|
63
|
+
else
|
64
|
+
s.add_dependency(%q<nokogiri>, [">= 1.4.1"])
|
65
|
+
end
|
66
|
+
else
|
67
|
+
s.add_dependency(%q<nokogiri>, [">= 1.4.1"])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
data/lib/active_cmis.rb
CHANGED
@@ -49,7 +49,7 @@ module ActiveCMIS
|
|
49
49
|
end
|
50
50
|
return repository
|
51
51
|
else
|
52
|
-
raise "Configuration does not have correct format (not a hash)"
|
52
|
+
raise "Configuration does not have correct format (#{config.class} is not a hash)"
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -81,7 +81,7 @@ module ActiveCMIS
|
|
81
81
|
raise "Configuration not found in file"
|
82
82
|
end
|
83
83
|
else
|
84
|
-
raise "Configuration file does not have right format (not a hash)"
|
84
|
+
raise "Configuration file #{file} does not have right format (not a hash)"
|
85
85
|
end
|
86
86
|
end
|
87
87
|
end
|
@@ -22,7 +22,7 @@ module ActiveCMIS
|
|
22
22
|
|
23
23
|
class String < CommonBase
|
24
24
|
attr_reader :max_length
|
25
|
-
def initialize(max_length)
|
25
|
+
def initialize(max_length = nil)
|
26
26
|
@max_length = max_length
|
27
27
|
end
|
28
28
|
|
@@ -47,10 +47,10 @@ module ActiveCMIS
|
|
47
47
|
private :_cmis2rb, :_rb2cmis
|
48
48
|
end
|
49
49
|
|
50
|
-
# Precision is ignored?
|
50
|
+
# Qarning: Precision is ignored?
|
51
51
|
class Decimal < CommonBase
|
52
52
|
attr_reader :precision, :min_value, :max_value
|
53
|
-
def initialize(precision, min_value, max_value)
|
53
|
+
def initialize(precision = nil, min_value = nil, max_value = nil)
|
54
54
|
@precision, @min_value, @max_value = precision, min_value, max_value
|
55
55
|
end
|
56
56
|
|
@@ -77,7 +77,7 @@ module ActiveCMIS
|
|
77
77
|
|
78
78
|
class Integer < CommonBase
|
79
79
|
attr_reader :min_value, :max_value
|
80
|
-
def initialize(min_value, max_value)
|
80
|
+
def initialize(min_value = nil, max_value = nil)
|
81
81
|
@min_value, @max_value = min_value, max_value
|
82
82
|
end
|
83
83
|
|
@@ -106,7 +106,7 @@ module ActiveCMIS
|
|
106
106
|
attr_reader :resolution
|
107
107
|
|
108
108
|
@instances ||= {}
|
109
|
-
def self.new(precision)
|
109
|
+
def self.new(precision = TIME)
|
110
110
|
raise ArgumentError.new("Got precision = #{precision.inspect}") unless [YEAR, DATE, TIME].include? precision.to_s.downcase
|
111
111
|
@instances[precision] ||= super
|
112
112
|
end
|
@@ -228,5 +228,18 @@ module ActiveCMIS
|
|
228
228
|
|
229
229
|
private :_cmis2rb, :_rb2cmis
|
230
230
|
end
|
231
|
+
|
232
|
+
# Map of XML property elements to the corresponding AtomicTypes
|
233
|
+
MAPPING = {
|
234
|
+
"propertyString" => ActiveCMIS::AtomicType::String,
|
235
|
+
"propertyBoolean" => ActiveCMIS::AtomicType::Boolean,
|
236
|
+
"propertyId" => ActiveCMIS::AtomicType::ID,
|
237
|
+
"propertyDateTime" => ActiveCMIS::AtomicType::DateTime,
|
238
|
+
"propertyInteger" => ActiveCMIS::AtomicType::Integer,
|
239
|
+
"propertyDecimal" => ActiveCMIS::AtomicType::Decimal,
|
240
|
+
"propertyHtml" => ActiveCMIS::AtomicType::HTML,
|
241
|
+
"propertyUri" => ActiveCMIS::AtomicType::URI,
|
242
|
+
}
|
243
|
+
|
231
244
|
end
|
232
245
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module ActiveCMIS
|
2
|
+
# QueryResults are returned when doing a query
|
3
|
+
# You can retrieve the values they contain either by the properties ID or by the query name.
|
4
|
+
#
|
5
|
+
# Since it is possible that a JOIN is being requested it is not guaranteed that either the query name or the object ID are unique.
|
6
|
+
# If that's not the case then it is impossible to retrieve one of the two values. It is therefore important to choose unique queryNames
|
7
|
+
# Furthermore, it is not possible to guess which type a query is returning, and therefore it is also not possible to know whether a property is repeating or not, it is possible that a repeating property contains 0 or 1 values, in which case nil or that single value are returned. If multiple values are found for a property then an Array with those properties will be returned
|
8
|
+
class QueryResult
|
9
|
+
def initialize(atom_entry)
|
10
|
+
@atom_entry = atom_entry
|
11
|
+
properties = atom_entry.xpath("cra:object/c:properties/c:*", NS::COMBINED)
|
12
|
+
@properties_by_id = {}
|
13
|
+
@properties_by_query_name = {}
|
14
|
+
properties.each do |property|
|
15
|
+
type = ActiveCMIS::AtomicType::MAPPING[property.node_name]
|
16
|
+
converter = type.new
|
17
|
+
|
18
|
+
values = property.xpath("c:value", NS::COMBINED)
|
19
|
+
# FIXME: If attributes are repeating, but have 0-1 value they won't be in array
|
20
|
+
if values.length > 1
|
21
|
+
value = values.map {|v| converter.cmis2rb(v)}
|
22
|
+
elsif !values.empty?
|
23
|
+
value = converter.cmis2rb(values)
|
24
|
+
else
|
25
|
+
value = nil
|
26
|
+
end
|
27
|
+
@properties_by_id[property["propertyDefinitionId"]] = value
|
28
|
+
@properties_by_query_name[property["queryName"]] = value
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def property_by_id(name)
|
33
|
+
@properties_by_id[name]
|
34
|
+
end
|
35
|
+
|
36
|
+
def property_by_query_name(name)
|
37
|
+
@properties_by_query_name[name]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -145,7 +145,7 @@ module ActiveCMIS
|
|
145
145
|
# @option options [String] :renditionFilter ('cmis:none') Possible values: 'cmis:none', '*' (all), comma-separated list of rendition kinds or mimetypes
|
146
146
|
# @option options [Integer] :maxItems used for paging
|
147
147
|
# @option options [Integer] :skipCount (0) used for paging
|
148
|
-
# @return [Collection]
|
148
|
+
# @return [Collection] A collection with each return value wrapped in a QueryResult
|
149
149
|
def query(query_string, options = {})
|
150
150
|
raise "This repository does not support queries" if capabilities["Query"] == "none"
|
151
151
|
# For the moment we make no difference between metadataonly,fulltextonly,bothseparate and bothcombined
|
@@ -162,7 +162,9 @@ module ActiveCMIS
|
|
162
162
|
# FIXME: options are not respected yet by pick_template
|
163
163
|
url = pick_template("query", :mimetype => "application/atom+xml", :type => "feed")
|
164
164
|
url = fill_in_template(url, options.merge("q" => query_string))
|
165
|
-
Collection.new(self, url)
|
165
|
+
Collection.new(self, url) do |entry|
|
166
|
+
QueryResult.new(entry)
|
167
|
+
end
|
166
168
|
end
|
167
169
|
|
168
170
|
# The root folder of the repository (as defined in the CMIS standard)
|
data/lib/active_cmis/version.rb
CHANGED
metadata
CHANGED
@@ -1,39 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_cmis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 1
|
5
4
|
prerelease:
|
6
|
-
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 13
|
10
|
-
version: 0.1.13
|
5
|
+
version: 0.2.0
|
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-04-
|
13
|
+
date: 2011-04-11 00:00:00 +02:00
|
19
14
|
default_executable:
|
20
15
|
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
- 4
|
33
|
-
- 1
|
34
|
-
version: 1.4.1
|
35
|
-
type: :runtime
|
36
|
-
version_requirements: *id001
|
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
|
37
27
|
description: A CMIS library implementing both reading and updating capabilities through the AtomPub/REST binding to CMIS.
|
38
28
|
email: joeri@xaop.com
|
39
29
|
executables: []
|
@@ -41,38 +31,40 @@ executables: []
|
|
41
31
|
extensions: []
|
42
32
|
|
43
33
|
extra_rdoc_files:
|
44
|
-
- LICENSE
|
45
|
-
- README.md
|
46
|
-
- TODO
|
34
|
+
- LICENSE
|
35
|
+
- README.md
|
36
|
+
- TODO
|
47
37
|
files:
|
48
|
-
- LICENSE
|
49
|
-
- README.md
|
50
|
-
- Rakefile
|
51
|
-
- TODO
|
52
|
-
-
|
53
|
-
- lib/active_cmis
|
54
|
-
- lib/active_cmis/
|
55
|
-
- lib/active_cmis/
|
56
|
-
- lib/active_cmis/
|
57
|
-
- lib/active_cmis/
|
58
|
-
- lib/active_cmis/
|
59
|
-
- lib/active_cmis/
|
60
|
-
- lib/active_cmis/
|
61
|
-
- lib/active_cmis/
|
62
|
-
- lib/active_cmis/
|
63
|
-
- lib/active_cmis/internal/
|
64
|
-
- lib/active_cmis/internal/
|
65
|
-
- lib/active_cmis/
|
66
|
-
- lib/active_cmis/
|
67
|
-
- lib/active_cmis/
|
68
|
-
- lib/active_cmis/
|
69
|
-
- lib/active_cmis/
|
70
|
-
- lib/active_cmis/
|
71
|
-
- lib/active_cmis/
|
72
|
-
- lib/active_cmis/
|
73
|
-
- lib/active_cmis/
|
74
|
-
- lib/active_cmis/
|
75
|
-
- lib/active_cmis/
|
38
|
+
- LICENSE
|
39
|
+
- README.md
|
40
|
+
- Rakefile
|
41
|
+
- TODO
|
42
|
+
- active_cmis.gemspec
|
43
|
+
- lib/active_cmis.rb
|
44
|
+
- lib/active_cmis/acl.rb
|
45
|
+
- lib/active_cmis/acl_entry.rb
|
46
|
+
- lib/active_cmis/active_cmis.rb
|
47
|
+
- lib/active_cmis/atomic_types.rb
|
48
|
+
- lib/active_cmis/attribute_prefix.rb
|
49
|
+
- lib/active_cmis/collection.rb
|
50
|
+
- lib/active_cmis/document.rb
|
51
|
+
- lib/active_cmis/exceptions.rb
|
52
|
+
- lib/active_cmis/folder.rb
|
53
|
+
- lib/active_cmis/internal/caching.rb
|
54
|
+
- lib/active_cmis/internal/connection.rb
|
55
|
+
- lib/active_cmis/internal/utils.rb
|
56
|
+
- lib/active_cmis/ns.rb
|
57
|
+
- lib/active_cmis/object.rb
|
58
|
+
- lib/active_cmis/policy.rb
|
59
|
+
- lib/active_cmis/property_definition.rb
|
60
|
+
- lib/active_cmis/query_result.rb
|
61
|
+
- lib/active_cmis/rel.rb
|
62
|
+
- lib/active_cmis/relationship.rb
|
63
|
+
- lib/active_cmis/rendition.rb
|
64
|
+
- lib/active_cmis/repository.rb
|
65
|
+
- lib/active_cmis/server.rb
|
66
|
+
- lib/active_cmis/type.rb
|
67
|
+
- lib/active_cmis/version.rb
|
76
68
|
has_rdoc: true
|
77
69
|
homepage: http://xaop.com/labs/activecmis/
|
78
70
|
licenses: []
|
@@ -81,31 +73,23 @@ post_install_message:
|
|
81
73
|
rdoc_options: []
|
82
74
|
|
83
75
|
require_paths:
|
84
|
-
- lib
|
76
|
+
- lib
|
85
77
|
required_ruby_version: !ruby/object:Gem::Requirement
|
86
78
|
none: false
|
87
79
|
requirements:
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
segments:
|
92
|
-
- 1
|
93
|
-
- 8
|
94
|
-
- 6
|
95
|
-
version: 1.8.6
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.8.6
|
96
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
84
|
none: false
|
98
85
|
requirements:
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
segments:
|
103
|
-
- 0
|
104
|
-
version: "0"
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: "0"
|
105
89
|
requirements: []
|
106
90
|
|
107
91
|
rubyforge_project:
|
108
|
-
rubygems_version: 1.
|
92
|
+
rubygems_version: 1.5.1
|
109
93
|
signing_key:
|
110
94
|
specification_version: 3
|
111
95
|
summary: A library to interact with CMIS repositories through the AtomPub/REST binding
|