cmis-ruby 0.3.9 → 0.4.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.
- checksums.yaml +4 -4
- data/lib/cmis-ruby.rb +3 -13
- data/lib/cmis/children.rb +3 -0
- data/lib/cmis/connection.rb +9 -109
- data/lib/cmis/connection/request_modifier.rb +58 -0
- data/lib/cmis/connection/response_parser.rb +31 -0
- data/lib/cmis/connection/url_resolver.rb +38 -0
- data/lib/cmis/folder.rb +2 -0
- data/lib/cmis/object.rb +2 -0
- data/lib/cmis/query.rb +3 -0
- data/lib/cmis/relationships.rb +3 -0
- data/lib/cmis/repository.rb +3 -0
- data/lib/cmis/type.rb +2 -0
- data/lib/cmis/version.rb +1 -1
- data/readme.md +5 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54d939c76212d26bf61e62941fc9c8befd44bd32
|
4
|
+
data.tar.gz: a46f072f12e9309b00334e1c184c9250fd887539
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c369361121888cbd294e8c897b153b677377dc115fb31924d46e25cd3c4eb9e24ffdba3081c13a95be8ebf4d490504264b3942febaaade37d43eb10e07f4cb21
|
7
|
+
data.tar.gz: 5c8d73ce97ec3a0b873825e8cb9c1247c9b3ef3529469d03182da7d96a83627a7424003f901d3dd560d7b92a51171eed936227ad0c26072897888857acfd393e
|
data/lib/cmis-ruby.rb
CHANGED
@@ -1,20 +1,11 @@
|
|
1
|
-
require 'bigdecimal'
|
2
|
-
require 'json'
|
3
|
-
|
4
|
-
require 'faraday'
|
5
|
-
|
6
1
|
require 'active_support/core_ext'
|
7
2
|
require 'core_ext'
|
8
3
|
|
9
|
-
require 'cmis/connection'
|
10
4
|
require 'cmis/exceptions'
|
11
|
-
require 'cmis/server'
|
12
5
|
require 'cmis/helpers'
|
13
6
|
require 'cmis/object_factory'
|
14
|
-
require 'cmis/
|
15
|
-
require 'cmis/
|
16
|
-
require 'cmis/children'
|
17
|
-
require 'cmis/relationships'
|
7
|
+
require 'cmis/connection'
|
8
|
+
require 'cmis/server'
|
18
9
|
require 'cmis/repository'
|
19
10
|
require 'cmis/object'
|
20
11
|
require 'cmis/document'
|
@@ -22,6 +13,5 @@ require 'cmis/folder'
|
|
22
13
|
require 'cmis/item'
|
23
14
|
require 'cmis/policy'
|
24
15
|
require 'cmis/relationship'
|
25
|
-
require 'cmis/property_definition'
|
26
16
|
require 'cmis/type'
|
27
|
-
require 'cmis/
|
17
|
+
require 'cmis/property_definition'
|
data/lib/cmis/children.rb
CHANGED
data/lib/cmis/connection.rb
CHANGED
@@ -1,10 +1,16 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'cmis/version'
|
3
|
+
require 'cmis/connection/url_resolver'
|
4
|
+
require 'cmis/connection/request_modifier'
|
5
|
+
require 'cmis/connection/response_parser'
|
6
|
+
|
1
7
|
module CMIS
|
2
8
|
class Connection
|
3
9
|
def initialize(options)
|
4
10
|
options.symbolize_keys!
|
5
11
|
|
6
12
|
message = "option `service_url` must be set"
|
7
|
-
|
13
|
+
service_url = options[:service_url] or raise message
|
8
14
|
|
9
15
|
adapter = (options[:adapter] || :net_http).to_sym
|
10
16
|
|
@@ -27,7 +33,7 @@ module CMIS
|
|
27
33
|
builder.use ResponseParser
|
28
34
|
end
|
29
35
|
|
30
|
-
@
|
36
|
+
@url_resolver = URLResolver.new(@http, service_url)
|
31
37
|
end
|
32
38
|
|
33
39
|
def execute!(params = {}, options = {})
|
@@ -35,7 +41,7 @@ module CMIS
|
|
35
41
|
|
36
42
|
query = options[:query] || {}
|
37
43
|
headers = options[:headers] || {}
|
38
|
-
url = url(params.delete(:repositoryId), params[:objectId])
|
44
|
+
url = @url_resolver.url(params.delete(:repositoryId), params[:objectId])
|
39
45
|
|
40
46
|
response = if params[:cmisaction]
|
41
47
|
@http.post(url, params, headers)
|
@@ -45,111 +51,5 @@ module CMIS
|
|
45
51
|
|
46
52
|
response.body
|
47
53
|
end
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
def url(repository_id, object_id)
|
52
|
-
if repository_id.nil?
|
53
|
-
@service_url
|
54
|
-
else
|
55
|
-
urls = repository_urls(repository_id)
|
56
|
-
urls[object_id ? :root_folder_url : :repository_url]
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def repository_urls(repository_id)
|
61
|
-
if @url_cache[repository_id].nil?
|
62
|
-
repository_infos = @http.get(@service_url).body
|
63
|
-
|
64
|
-
unless repository_infos.has_key?(repository_id)
|
65
|
-
raise Exceptions::ObjectNotFound, "repositoryId: #{repository_id}"
|
66
|
-
end
|
67
|
-
|
68
|
-
repository_info = repository_infos[repository_id]
|
69
|
-
@url_cache[repository_id] = {
|
70
|
-
repository_url: repository_info[:repositoryUrl],
|
71
|
-
root_folder_url: repository_info[:rootFolderUrl]
|
72
|
-
}
|
73
|
-
end
|
74
|
-
@url_cache[repository_id]
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
class RequestModifier < Faraday::Middleware
|
79
|
-
def call(env)
|
80
|
-
if env[:body]
|
81
|
-
env[:body].compact!
|
82
|
-
wrap_content(env)
|
83
|
-
massage_properties(env)
|
84
|
-
end
|
85
|
-
@app.call(env)
|
86
|
-
end
|
87
|
-
|
88
|
-
private
|
89
|
-
|
90
|
-
def wrap_content(env)
|
91
|
-
if content_hash = env[:body][:content]
|
92
|
-
env[:body][:content] = Faraday::UploadIO.new(content_hash[:stream],
|
93
|
-
content_hash[:mime_type],
|
94
|
-
content_hash[:filename])
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
def massage_properties(env)
|
99
|
-
if props = env[:body].delete(:properties)
|
100
|
-
props.each_with_index do |(id, value), index|
|
101
|
-
if value.is_a?(Array)
|
102
|
-
env[:body][id_key(index)] = id
|
103
|
-
value.each_with_index do |sub_value, sub_index|
|
104
|
-
env[:body][val_key(index, sub_index)] = normalize(sub_value)
|
105
|
-
end
|
106
|
-
else
|
107
|
-
env[:body][id_key(index)] = id
|
108
|
-
env[:body][val_key(index)] = normalize(value)
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
def normalize(value)
|
115
|
-
value = value.to_time if value.is_a?(Date)
|
116
|
-
value = (value.to_f * 1000).to_i if value.is_a?(Time)
|
117
|
-
value
|
118
|
-
end
|
119
|
-
|
120
|
-
def id_key(index)
|
121
|
-
"propertyId[#{index}]"
|
122
|
-
end
|
123
|
-
|
124
|
-
def val_key(i1, i2 = nil)
|
125
|
-
result = "propertyValue[#{i1}]"
|
126
|
-
result = "#{result}[#{i2}]" if i2
|
127
|
-
result
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
class ResponseParser < Faraday::Middleware
|
132
|
-
JSON_CONTENT_TYPE = /\/(x-)?json(;.+?)?$/
|
133
|
-
|
134
|
-
def call(env)
|
135
|
-
@app.call(env).on_complete do |env|
|
136
|
-
if env[:response_headers][:content_type] =~ JSON_CONTENT_TYPE
|
137
|
-
env[:body] = JSON.parse(env[:body]).with_indifferent_access
|
138
|
-
check_for_exception!(env[:body])
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
private
|
144
|
-
|
145
|
-
def check_for_exception!(body)
|
146
|
-
return unless body.is_a?(Hash)
|
147
|
-
|
148
|
-
if ex = body[:exception]
|
149
|
-
ruby_exception = "CMIS::Exceptions::#{ex.camelize}".constantize
|
150
|
-
message = "#{ex.underscore.humanize}: #{body[:message]}"
|
151
|
-
raise ruby_exception, message
|
152
|
-
end
|
153
|
-
end
|
154
54
|
end
|
155
55
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
|
3
|
+
module CMIS
|
4
|
+
class Connection
|
5
|
+
class RequestModifier < Faraday::Middleware
|
6
|
+
def call(env)
|
7
|
+
if env[:body]
|
8
|
+
env[:body].compact!
|
9
|
+
wrap_content(env)
|
10
|
+
massage_properties(env)
|
11
|
+
end
|
12
|
+
@app.call(env)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def wrap_content(env)
|
18
|
+
if content_hash = env[:body][:content]
|
19
|
+
env[:body][:content] = Faraday::UploadIO.new(content_hash[:stream],
|
20
|
+
content_hash[:mime_type],
|
21
|
+
content_hash[:filename])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def massage_properties(env)
|
26
|
+
if props = env[:body].delete(:properties)
|
27
|
+
props.each_with_index do |(id, value), index|
|
28
|
+
if value.is_a?(Array)
|
29
|
+
env[:body][id_key(index)] = id
|
30
|
+
value.each_with_index do |sub_value, sub_index|
|
31
|
+
env[:body][val_key(index, sub_index)] = normalize(sub_value)
|
32
|
+
end
|
33
|
+
else
|
34
|
+
env[:body][id_key(index)] = id
|
35
|
+
env[:body][val_key(index)] = normalize(value)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def normalize(value)
|
42
|
+
value = value.to_time if value.is_a?(Date)
|
43
|
+
value = (value.to_f * 1000).to_i if value.is_a?(Time)
|
44
|
+
value
|
45
|
+
end
|
46
|
+
|
47
|
+
def id_key(index)
|
48
|
+
"propertyId[#{index}]"
|
49
|
+
end
|
50
|
+
|
51
|
+
def val_key(i1, i2 = nil)
|
52
|
+
result = "propertyValue[#{i1}]"
|
53
|
+
result = "#{result}[#{i2}]" if i2
|
54
|
+
result
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module CMIS
|
5
|
+
class Connection
|
6
|
+
class ResponseParser < Faraday::Middleware
|
7
|
+
JSON_CONTENT_TYPE = /\/(x-)?json(;.+?)?$/
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
@app.call(env).on_complete do |env|
|
11
|
+
if env[:response_headers][:content_type] =~ JSON_CONTENT_TYPE
|
12
|
+
env[:body] = JSON.parse(env[:body]).with_indifferent_access
|
13
|
+
check_for_exception!(env[:body])
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def check_for_exception!(body)
|
21
|
+
return unless body.is_a?(Hash)
|
22
|
+
|
23
|
+
if ex = body[:exception]
|
24
|
+
ruby_exception = "CMIS::Exceptions::#{ex.camelize}".constantize
|
25
|
+
message = "#{ex.underscore.humanize}: #{body[:message]}"
|
26
|
+
raise ruby_exception, message
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module CMIS
|
2
|
+
class Connection
|
3
|
+
class URLResolver
|
4
|
+
def initialize(http, service_url)
|
5
|
+
@http = http
|
6
|
+
@service_url = service_url
|
7
|
+
@cache = {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def url(repository_id, object_id)
|
11
|
+
return @service_url if repository_id.nil?
|
12
|
+
|
13
|
+
urls = repository_urls(repository_id)
|
14
|
+
urls[object_id ? :root_folder_url : :repository_url]
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def repository_urls(repository_id)
|
20
|
+
if @cache[repository_id].nil?
|
21
|
+
repository_infos = @http.get(@service_url).body
|
22
|
+
|
23
|
+
unless repository_infos.has_key?(repository_id)
|
24
|
+
raise Exceptions::ObjectNotFound, "repositoryId: #{repository_id}"
|
25
|
+
end
|
26
|
+
|
27
|
+
repository_info = repository_infos[repository_id]
|
28
|
+
@cache[repository_id] = {
|
29
|
+
repository_url: repository_info[:repositoryUrl],
|
30
|
+
root_folder_url: repository_info[:rootFolderUrl]
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
@cache[repository_id]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/cmis/folder.rb
CHANGED
data/lib/cmis/object.rb
CHANGED
data/lib/cmis/query.rb
CHANGED
data/lib/cmis/relationships.rb
CHANGED
data/lib/cmis/repository.rb
CHANGED
data/lib/cmis/type.rb
CHANGED
data/lib/cmis/version.rb
CHANGED
data/readme.md
CHANGED
@@ -13,7 +13,11 @@ Running the tests requires a separate CMIS server. The default rake task runs th
|
|
13
13
|
|
14
14
|
## TODO
|
15
15
|
|
16
|
-
*
|
16
|
+
* remove ActiveSupport dependency:
|
17
|
+
* stringify_keys! -> to_options!
|
18
|
+
* symbolize_keys! -> to_options!
|
19
|
+
* compact!
|
20
|
+
* with_indifferent_access -> ?
|
17
21
|
* caching
|
18
22
|
|
19
23
|
## Contributing
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cmis-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kenneth Geerts
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-03-
|
12
|
+
date: 2014-03-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -62,6 +62,9 @@ files:
|
|
62
62
|
- lib/cmis-ruby.rb
|
63
63
|
- lib/cmis/children.rb
|
64
64
|
- lib/cmis/connection.rb
|
65
|
+
- lib/cmis/connection/request_modifier.rb
|
66
|
+
- lib/cmis/connection/response_parser.rb
|
67
|
+
- lib/cmis/connection/url_resolver.rb
|
65
68
|
- lib/cmis/document.rb
|
66
69
|
- lib/cmis/exceptions.rb
|
67
70
|
- lib/cmis/folder.rb
|