ocman 1.2.3 → 1.3.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 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