ocman 1.2.3 → 1.3.0

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
  SHA256:
3
- metadata.gz: 2f629736d36a0df291ad884200af7b9467a2adf1dee039f0d9e2aa344bc49dc2
4
- data.tar.gz: 03c847f40bc76577dc7b99654e8562e203f419dca75d3ec664e9297517840867
3
+ metadata.gz: 58ec7628de08f07c7606567bdcce3a4152fddc2dab5365652b0707d09a3767ec
4
+ data.tar.gz: ab5f84e0df798e065eea6b0f6b38e41c161dca35b382b04d7ae091035f13c91a
5
5
  SHA512:
6
- metadata.gz: 746d95913b6985f64596f58a3b360c420dc1b1d48a88759e484ecc456daaa3b52992ee42c605b0c281cec958cb4127291c2cf9a04da302a2d3183995c238895c
7
- data.tar.gz: 86021fa8cd483a213563ce11ec5d2c44b0dca41b69dac5792a1d8f9110469de2730240769e3a66f840143f97e4d30576b64992c192f41c3f6174d91d24106b37
6
+ metadata.gz: 54640cbcdc3977c51a66831d1948d61dd5bbcbed8208f0e616ead51450268bcb6487add93d75deae77718df3fb1ec91d96aba8e237c6f1eb62431213bd6703d9
7
+ data.tar.gz: '086169501a6e5a2d4da0f3f9344434b1673510cfde1b7f7418bbe784d089a7425a28e936b7124a036681af13556b8b74df7c29190cbd6b12759199c4fda10fe1'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ocman
2
4
  class Configuration
3
5
  attr_accessor :base_url, :user_name, :password, :dav_base_uri
data/lib/ocman/dav.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'net/dav'
2
4
  require 'cgi'
3
5
 
@@ -6,16 +8,16 @@ module Ocman
6
8
  attr_writer :connection
7
9
 
8
10
  def mkdir(path)
9
- connection.mkdir(uri(path) )
11
+ connection.mkdir(uri(path))
10
12
  end
11
13
 
12
- def ls(path, options={})
13
- connection.find(uri(path), options ) do |item|
14
+ def ls(path, options = {})
15
+ connection.find(uri(path), options) do |item|
14
16
  yield(item)
15
17
  end
16
18
  end
17
19
 
18
- def put(file_path, path, options={})
20
+ def put(file_path, path, options = {})
19
21
  filename = options[:filename] || File.basename(file_path)
20
22
  File.open(file_path, 'r') do |stream|
21
23
  connection.put(uri(path, filename), stream, File.size(file_path))
@@ -23,11 +25,11 @@ module Ocman
23
25
  end
24
26
 
25
27
  def delete(path)
26
- connection.delete( uri(path) )
28
+ connection.delete(uri(path))
27
29
  end
28
30
 
29
31
  def move(source_path, destination_path)
30
- connection.move(uri(source_path), uri(destination_path) )
32
+ connection.move(uri(source_path), uri(destination_path))
31
33
  end
32
34
 
33
35
  def self.base_uri
@@ -35,7 +37,7 @@ module Ocman
35
37
  end
36
38
 
37
39
  def self.url(path)
38
- Ocman.configuration.base_url + (Ocman::Dav.base_uri + path).gsub(/\/+/, '/')
40
+ Ocman.configuration.base_url + (Ocman::Dav.base_uri + path).gsub(%r{/+}, '/')
39
41
  end
40
42
 
41
43
  private
@@ -48,9 +50,9 @@ module Ocman
48
50
  }
49
51
  end
50
52
 
51
- def uri(path, filename=nil)
53
+ def uri(path, filename = nil)
52
54
  filename = CGI.escape(filename) if filename
53
- [Ocman::Dav.base_uri, path, filename].compact.join('/').gsub(/\/+/, '/')
55
+ [Ocman::Dav.base_uri, path, filename].compact.join('/').gsub(%r{/+}, '/')
54
56
  end
55
57
 
56
58
  def connection
data/lib/ocman/folder.rb CHANGED
@@ -1,23 +1,34 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'hashie'
4
+ require 'cgi'
2
5
 
3
6
  module Ocman
4
7
  class Folder
5
- def self.create(path)
6
- Ocman::Dav.new.mkdir(URI.encode(path))
7
- end
8
+ class << self
9
+ def create(path)
10
+ Ocman::Dav.new.mkdir(escape_path(path))
11
+ end
8
12
 
9
- def self.list(path, options={})
10
- accu = []
13
+ def list(path, options = {})
14
+ accu = []
11
15
 
12
- Ocman::Dav.new.ls(URI.encode(path), options) do |item|
13
- accu << Hashie::Mash.new({
14
- path: URI.decode(item.uri.to_s.gsub(Ocman::Dav.url(path), '').gsub('/', '')),
15
- type: item.type.to_s,
16
- size: item.size
17
- })
16
+ Ocman::Dav.new.ls(escape_path(path), options) do |item|
17
+ accu << Hashie::Mash.new(
18
+ path: CGI.unescape(item.uri.to_s.gsub(Ocman::Dav.url(path), '').gsub('/', '')),
19
+ type: item.type.to_s,
20
+ size: item.size
21
+ )
22
+ end
23
+
24
+ accu
18
25
  end
19
26
 
20
- accu
27
+ private
28
+
29
+ def escape_path(path)
30
+ path.split('/').map { |segment| CGI.escape(segment) }.join('/')
31
+ end
21
32
  end
22
33
  end
23
34
  end
data/lib/ocman/item.rb CHANGED
@@ -1,15 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ocman
2
4
  class Item
3
- def self.create(file, path, options={})
4
- Ocman::Dav.new.put(file, URI.encode(path), options)
5
+ def self.create(file, path, options = {})
6
+ Ocman::Dav.new.put(file, CGI.escape(path), options)
5
7
  end
6
8
 
7
9
  def self.delete(path)
8
- Ocman::Dav.new.delete(URI.encode(path))
10
+ Ocman::Dav.new.delete(CGI.escape(path))
9
11
  end
10
12
 
11
13
  def self.move(source_path, destination_path)
12
- Ocman::Dav.new.move(URI.encode(source_path), URI.encode(destination_path))
14
+ Ocman::Dav.new.move(CGI.escape(source_path), CGI.escape(destination_path))
13
15
  end
14
16
  end
15
17
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ocman
4
+ class Permission
5
+ PERMISSIONS = {
6
+ read: 1,
7
+ update: 2,
8
+ create: 4,
9
+ delete: 8,
10
+ share: 16
11
+ }.freeze
12
+ private_constant :PERMISSIONS
13
+
14
+ attr_reader :permissions
15
+
16
+ def initialize(permissions = [:all])
17
+ @permissions = Set.new(permissions)
18
+ @permissions = Set.new(PERMISSIONS.keys) if @permissions.include?(:all)
19
+
20
+ raise ArgumentError, "No permission given. Valid permissions are: #{PERMISSIONS.keys}" if @permissions.empty?
21
+ return if @permissions.all? { |permission| PERMISSIONS.key?(permission) }
22
+
23
+ raise ArgumentError, "Valid permissions are: #{PERMISSIONS.keys}"
24
+ end
25
+
26
+ def to_i
27
+ @permissions
28
+ .map { |permission| PERMISSIONS.fetch(permission) }
29
+ .inject(&:|) || PERMISSIONS[:all]
30
+ end
31
+
32
+ def +(other)
33
+ Permission.new(permissions + other.permissions)
34
+ end
35
+
36
+ def -(other)
37
+ Permission.new(permissions - other.permissions)
38
+ end
39
+
40
+ class << self
41
+ PERMISSIONS.each_key do |name|
42
+ define_method(name) do
43
+ new([name])
44
+ end
45
+ end
46
+
47
+ def all
48
+ new(PERMISSIONS.keys)
49
+ end
50
+ end
51
+ end
52
+ end
data/lib/ocman/share.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'multi_json'
2
4
  require 'restclient'
3
5
  require 'hashie'
@@ -8,65 +10,67 @@ module Ocman
8
10
  @path = path
9
11
  end
10
12
 
11
- def share(user)
13
+ def share(user, permission = Permission.all)
12
14
  request_parameter = {
13
- payload: {
15
+ payload: {
14
16
  path: @path,
15
17
  shareWith: user,
16
18
  shareType: '0',
17
- permissions: '31',
18
- },
19
+ permissions: permission.to_i
20
+ }
19
21
  }.merge connection_params('post')
20
22
 
21
- request = RestClient::Request.new( request_parameter )
22
- parse_result( request.execute )
23
+ request = RestClient::Request.new(request_parameter)
24
+ parse_result(request.execute)
23
25
  end
24
26
 
25
27
  def delete_share(user)
26
28
  share = find_share(user)
27
- request = RestClient::Request.new( connection_params('delete', id: share.id) )
28
- parse_result( request.execute )
29
+ return if share.nil?
30
+
31
+ request = RestClient::Request.new(connection_params('delete', id: share.id))
32
+ parse_result(request.execute)
29
33
  end
30
34
 
31
35
  def find_share(user)
32
- result = nil
33
- shares = share_info.data
34
- shares = [shares] unless shares.kind_of?(Array)
35
- shares.each do |share|
36
- if share.share_with == user
37
- result = share
38
- end
36
+ Array(share_info.data).find do |share|
37
+ share.share_with == user
39
38
  end
40
- result
41
39
  end
42
40
 
43
41
  def share_info
44
- request = RestClient::Request.new( connection_params('get', path: @path) )
45
- parse_result( request.execute )
42
+ request = RestClient::Request.new(connection_params('get', path: @path))
43
+ parse_result(request.execute)
46
44
  end
47
45
 
48
46
  private
47
+
49
48
  def parse_result(response)
50
- Hashie::Mash.new( MultiJson.load(response)['ocs'] )
49
+ Hashie::Mash.new(MultiJson.load(response)['ocs'])
51
50
  end
52
51
 
53
- def connection_params(http_method, attributes={})
54
- id = attributes[:id]
55
- url = Ocman.configuration.base_url + "/ocs/v1.php/apps/files_sharing/api/v1/shares" + "#{'/' + id.to_s if id}"
56
-
52
+ def connection_params(http_method, attributes = {})
57
53
  {
58
- url: url,
59
- method: http_method,
60
- user: Ocman.configuration.user_name,
54
+ url: share_url(attributes[:id]),
55
+ method: http_method,
56
+ user: Ocman.configuration.user_name,
61
57
  password: Ocman.configuration.password,
62
- headers: {
63
- 'OCS-APIRequest' => true,
64
- params: {
65
- path: attributes[:path],
66
- format: 'json'
67
- }.reject {| key, value | value.nil? }
68
- }
58
+ headers: connection_headers(attributes)
69
59
  }
70
60
  end
61
+
62
+ def connection_headers(attributes = {})
63
+ {
64
+ 'OCS-APIRequest' => true,
65
+ params: {
66
+ path: attributes[:path],
67
+ format: 'json'
68
+ }.reject { |_key, value| value.nil? }
69
+ }
70
+ end
71
+
72
+ def share_url(id = nil)
73
+ Ocman.configuration.base_url + '/ocs/v1.php/apps/files_sharing/api/v1/shares' + ('/' + id.to_s if id).to_s
74
+ end
71
75
  end
72
76
  end
data/lib/ocman/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ocman
2
- VERSION = '1.2.3'
4
+ VERSION = '1.3.0'
3
5
  end
data/lib/ocman.rb CHANGED
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'ocman/configuration'
2
4
  require 'ocman/dav'
3
5
  require 'ocman/item'
6
+ require 'ocman/permission'
4
7
  require 'ocman/folder'
5
8
  require 'ocman/version'
6
9
  require 'ocman/share'
@@ -19,8 +22,8 @@ module Ocman
19
22
  end
20
23
 
21
24
  ### share
22
- def self.share(path, user)
23
- Ocman::Share.new(path).share(user)
25
+ def self.share(path, user, permission = Permission.all)
26
+ Ocman::Share.new(path).share(user, permission)
24
27
  end
25
28
 
26
29
  def self.delete_share(path, user)
@@ -28,7 +31,7 @@ module Ocman
28
31
  end
29
32
 
30
33
  ### folder
31
- def self.list(path, options={})
34
+ def self.list(path, options = {})
32
35
  Ocman::Folder.list(path, options)
33
36
  end
34
37
 
@@ -37,7 +40,7 @@ module Ocman
37
40
  end
38
41
 
39
42
  ### files
40
- def self.put(file_path, path, options={})
43
+ def self.put(file_path, path, options = {})
41
44
  Ocman::Item.create(file_path, path, options)
42
45
  end
43
46
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ocman
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Waldemar Gribele
@@ -12,61 +12,103 @@ cert_chain: []
12
12
  date: 2016-12-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: net_dav
15
+ name: hashie
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 0.5.1
20
+ version: '3.4'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 0.5.1
27
+ version: '3.4'
28
28
  - !ruby/object:Gem::Dependency
29
- name: hashie
29
+ name: multi_json
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '3.4'
34
+ version: '1.0'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '3.4'
41
+ version: '1.0'
42
42
  - !ruby/object:Gem::Dependency
43
- name: rest-client
43
+ name: net_dav
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '2.0'
48
+ version: 0.5.1
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '2.0'
55
+ version: 0.5.1
56
56
  - !ruby/object:Gem::Dependency
57
- name: multi_json
57
+ name: rest-client
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '1.0'
62
+ version: '2.0'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '1.0'
69
+ version: '2.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: pry
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: pry-nav
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rake
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
70
112
  - !ruby/object:Gem::Dependency
71
113
  name: rspec
72
114
  requirement: !ruby/object:Gem::Requirement
@@ -81,6 +123,34 @@ dependencies:
81
123
  - - "~>"
82
124
  - !ruby/object:Gem::Version
83
125
  version: '3.5'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rubocop
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: 0.79.0
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: 0.79.0
140
+ - !ruby/object:Gem::Dependency
141
+ name: rubocop-rspec
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: 1.37.1
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: 1.37.1
84
154
  description: Ruby gem for file managment and sharing in nextcloud/owncloud
85
155
  email: laboratories@toptranslation.com
86
156
  executables: []
@@ -92,6 +162,7 @@ files:
92
162
  - lib/ocman/dav.rb
93
163
  - lib/ocman/folder.rb
94
164
  - lib/ocman/item.rb
165
+ - lib/ocman/permission.rb
95
166
  - lib/ocman/share.rb
96
167
  - lib/ocman/version.rb
97
168
  homepage: https://developer.toptranslation.com