cmis-ruby 0.4.9 → 0.4.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dc9f3393f79186ade5f153deb2384a2dc90cb7c0
4
- data.tar.gz: 0684f81f515ba8fe393cc463672ac73f79881416
3
+ metadata.gz: 5b3229e8479edca2b61d24a6851296d30cea4f1a
4
+ data.tar.gz: fad024a8f321c55d7039c05a0e523eba13bd8739
5
5
  SHA512:
6
- metadata.gz: 1968cc53fa44ad8007975d6b2bba0c50d4980bd6c31c874b48e215a73e54d237b645a424698c69e376a646c8e6838fc4919ba997fe2a32ea2acc41f4000e15a4
7
- data.tar.gz: 1a13f30564ad323bbaea4dfb22850d07e56eaa1f28ad1cfe354dddc78aa7101e3d8d9b384b90d5a8c3835c4710a145c818e271d2a3f0ae08dc1a7e5b189e1c40
6
+ metadata.gz: 5204a6e9810c562ea5ce9bcb7edf305289a4426f3c977b884d5f7057fe8ce6b9a0c177e3259356a749e48b67ec3bd94dd8dd14a3dc19fc692a080eaa91a328ed
7
+ data.tar.gz: 1e75079eb77373630c136a2b8d216fb935c365e1b2aa209ff6ca8da2b67ad28e5d2a4ef57625a2172ed3298416aba1b778ba8f0afc432e9564aaa39a80111cb8
@@ -1,3 +1,4 @@
1
+ require 'cmis/connection/follow_redirects'
1
2
  require 'cmis/connection/request_modifier'
2
3
  require 'cmis/connection/response_parser'
3
4
  require 'cmis/version'
@@ -19,6 +20,7 @@ module CMIS
19
20
  end
20
21
 
21
22
  builder.adapter (options[:adapter] || :net_http).to_sym
23
+ builder.use FollowRedirects
22
24
  builder.response :logger if options[:log_requests]
23
25
  builder.use ResponseParser
24
26
  end
@@ -31,7 +33,7 @@ module CMIS
31
33
  url = infer_url(repository_id, params[:objectId])
32
34
 
33
35
  if params[:cmisaction]
34
- @http.post(url, params, headers)
36
+ @http.post(url, params, headers) { |req| req.params = query }
35
37
  else
36
38
  @http.get(url, params.merge(query), headers)
37
39
  end
@@ -0,0 +1,137 @@
1
+ require 'faraday'
2
+ require 'set'
3
+
4
+ module CMIS
5
+ class Connection
6
+ # Based on https://github.com/lostisland/faraday_middleware/blob/master/lib/faraday_middleware/response/follow_redirects.rb
7
+ # Modified ALLOWED_METHODS to only include :get
8
+
9
+ # Public: Exception thrown when the maximum amount of requests is exceeded.
10
+ class RedirectLimitReached < Faraday::Error::ClientError
11
+ attr_reader :response
12
+
13
+ def initialize(response)
14
+ super "too many redirects; last one to: #{response['location']}"
15
+ @response = response
16
+ end
17
+ end
18
+
19
+ # Public: Follow HTTP 301, 302, 303, and 307 redirects.
20
+ #
21
+ # For HTTP 301, 302, and 303, the original GET, POST, PUT, DELETE, or PATCH
22
+ # request gets converted into a GET. With `:standards_compliant => true`,
23
+ # however, the HTTP method after 301/302 remains unchanged. This allows you
24
+ # to opt into HTTP/1.1 compliance and act unlike the major web browsers.
25
+ #
26
+ # This middleware currently only works with synchronous requests; i.e. it
27
+ # doesn't support parallelism.
28
+ class FollowRedirects < Faraday::Middleware
29
+ # HTTP methods for which 30x redirects can be followed
30
+ ALLOWED_METHODS = Set.new [:get]
31
+
32
+ # HTTP redirect status codes that this middleware implements
33
+ REDIRECT_CODES = Set.new [301, 302, 303, 307]
34
+
35
+ # Keys in env hash which will get cleared between requests
36
+ ENV_TO_CLEAR = Set.new [:status, :response, :response_headers]
37
+
38
+ # Default value for max redirects followed
39
+ FOLLOW_LIMIT = 3
40
+
41
+ # Public: Initialize the middleware.
42
+ #
43
+ # options - An options Hash (default: {}):
44
+ # :limit - A Numeric redirect limit (default: 3)
45
+ # :standards_compliant - A Boolean indicating whether to respect
46
+ # the HTTP spec when following 301/302
47
+ # (default: false)
48
+ # :cookies - An Array of Strings (e.g.
49
+ # ['cookie1', 'cookie2']) to choose
50
+ # cookies to be kept, or :all to keep
51
+ # all cookies (default: []).
52
+ def initialize(app, options = {})
53
+ super(app)
54
+ @options = options
55
+
56
+ @convert_to_get = Set.new [303]
57
+ @convert_to_get << 301 << 302 unless standards_compliant?
58
+ end
59
+
60
+ def call(env)
61
+ perform_with_redirection(env, follow_limit)
62
+ end
63
+
64
+ private
65
+
66
+ def convert_to_get?(response)
67
+ ![:head, :options].include?(response.env[:method]) &&
68
+ @convert_to_get.include?(response.status)
69
+ end
70
+
71
+ def perform_with_redirection(env, follows)
72
+ request_body = env[:body]
73
+ response = @app.call(env)
74
+
75
+ response.on_complete do |env|
76
+ if follow_redirect?(env, response)
77
+ raise RedirectLimitReached, response if follows.zero?
78
+ env = update_env(env, request_body, response)
79
+ response = perform_with_redirection(env, follows - 1)
80
+ end
81
+ end
82
+ response
83
+ end
84
+
85
+ def update_env(env, request_body, response)
86
+ env[:url] += response['location']
87
+ if @options[:cookies]
88
+ cookies = keep_cookies(env)
89
+ env[:request_headers][:cookies] = cookies unless cookies.nil?
90
+ end
91
+
92
+ if convert_to_get?(response)
93
+ env[:method] = :get
94
+ env[:body] = nil
95
+ else
96
+ env[:body] = request_body
97
+ end
98
+
99
+ ENV_TO_CLEAR.each {|key| env.delete key }
100
+
101
+ env
102
+ end
103
+
104
+ def follow_redirect?(env, response)
105
+ ALLOWED_METHODS.include? env[:method] and
106
+ REDIRECT_CODES.include? response.status
107
+ end
108
+
109
+ def follow_limit
110
+ @options.fetch(:limit, FOLLOW_LIMIT)
111
+ end
112
+
113
+ def keep_cookies(env)
114
+ cookies = @options.fetch(:cookies, [])
115
+ response_cookies = env[:response_headers][:cookies]
116
+ cookies == :all ? response_cookies : selected_request_cookies(response_cookies)
117
+ end
118
+
119
+ def selected_request_cookies(cookies)
120
+ selected_cookies(cookies)[0...-1]
121
+ end
122
+
123
+ def selected_cookies(cookies)
124
+ "".tap do |cookie_string|
125
+ @options[:cookies].each do |cookie|
126
+ string = /#{cookie}=?[^;]*/.match(cookies)[0] + ';'
127
+ cookie_string << string
128
+ end
129
+ end
130
+ end
131
+
132
+ def standards_compliant?
133
+ @options.fetch(:standards_compliant, false)
134
+ end
135
+ end
136
+ end
137
+ end
data/lib/cmis/type.rb CHANGED
@@ -30,8 +30,8 @@ module CMIS
30
30
  property_definitions[property['id']] = property
31
31
  end
32
32
 
33
- def create
34
- repository.create_type(self)
33
+ def create(opts = {})
34
+ repository.create_type(self, opts)
35
35
  end
36
36
 
37
37
  def update(changed_property_defs, opts = {})
data/lib/cmis/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module CMIS
2
- VERSION = '0.4.9'
2
+ VERSION = '0.4.10'
3
3
  end
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.9
4
+ version: 0.4.10
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-04-10 00:00:00.000000000 Z
12
+ date: 2014-04-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -48,6 +48,7 @@ files:
48
48
  - lib/cmis-ruby.rb
49
49
  - lib/cmis/children.rb
50
50
  - lib/cmis/connection.rb
51
+ - lib/cmis/connection/follow_redirects.rb
51
52
  - lib/cmis/connection/request_modifier.rb
52
53
  - lib/cmis/connection/response_parser.rb
53
54
  - lib/cmis/document.rb
@@ -101,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
102
  version: '0'
102
103
  requirements: []
103
104
  rubyforge_project:
104
- rubygems_version: 2.2.1
105
+ rubygems_version: 2.2.2
105
106
  signing_key:
106
107
  specification_version: 4
107
108
  summary: Ruby client for CMIS
@@ -115,4 +116,3 @@ test_files:
115
116
  - spec/config.yml
116
117
  - spec/rspec.opts
117
118
  - spec/spec_helper.rb
118
- has_rdoc: false