springcm-sdk 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +23 -1
- data/lib/springcm-sdk/attribute_group.rb +10 -3
- data/lib/springcm-sdk/document.rb +16 -1
- data/lib/springcm-sdk/helpers.rb +19 -0
- data/lib/springcm-sdk/mixins/attributes.rb +32 -2
- data/lib/springcm-sdk/resource.rb +37 -1
- data/lib/springcm-sdk/version.rb +1 -1
- data/lib/springcm-sdk.rb +18 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6147bd5e61e56858a0c7bd91d8aab95a718b580e32e42f1fe7de34a2599742a
|
4
|
+
data.tar.gz: 84260d0c7050d3675765f7d481da6ca261e98ad900c272731de26daa8d1792a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ed35a3f5b082bf08b7e4162f8a6491f8a27d8f4d6ffb9a88de4116dd2b1c078cb564f161d683c557c0eda46b9251dfb23f7ffee6aec592d64ca804cde7af254
|
7
|
+
data.tar.gz: cf064b9ea38ac974f63f87d67e548aab6e58fed69d545bff2e84da68e30be373b9c1924954c16ee6a5ad582cd58eb1a6930e56a0f4b37f2b4657b31fa4b9c3ea
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,27 @@ All notable changes to springcm-sdk will be documented in this file.
|
|
4
4
|
|
5
5
|
## [Unreleased]
|
6
6
|
|
7
|
+
## [0.5.0] - 2020-01-03
|
8
|
+
### Added
|
9
|
+
* #patch and #put for Resources.
|
10
|
+
* #set_attribute for Attribute mixin.
|
11
|
+
* Safeguard against permanent Document deletions. DeleteRefusedError will be
|
12
|
+
be raised on documents that are in the trash folder unless #delete! is used.
|
13
|
+
|
14
|
+
### Changed
|
15
|
+
* Moved attribute-related tests to a separate test file. May need to re-add
|
16
|
+
to document/folder specs just for live testing.
|
17
|
+
* AttributeGroupBuilder JSON now includes IsSystem property.
|
18
|
+
* Fix property default values on DocumentBuilder
|
19
|
+
* Raise error on invalid attribute groups or fields.
|
20
|
+
|
21
|
+
### Bugfixes
|
22
|
+
* Fix issue with Resource#resource_params not being applied properly in
|
23
|
+
request methods.
|
24
|
+
* Fix JSON returned from builders when retrieving data in lists, e.g.
|
25
|
+
`/folders/<uid>/documents` does not include attribute groups. Tests have
|
26
|
+
been modified to call #reload where full data is needed.
|
27
|
+
|
7
28
|
## [0.4.0] - 2019-12-27
|
8
29
|
### Added
|
9
30
|
* Faraday middleware for authorization expiration and rate limit handling.
|
@@ -89,7 +110,7 @@ All notable changes to springcm-sdk will be documented in this file.
|
|
89
110
|
### Added
|
90
111
|
* Initial release to reserve gem name
|
91
112
|
|
92
|
-
[Unreleased]: https://github.com/paulholden2/springcm-sdk/compare/0.
|
113
|
+
[Unreleased]: https://github.com/paulholden2/springcm-sdk/compare/0.5.0...HEAD
|
93
114
|
[0.1.0]: https://github.com/paulholden2/springcm-sdk/releases/tag/0.1.0
|
94
115
|
[0.1.1]: https://github.com/paulholden2/springcm-sdk/releases/tag/0.1.1
|
95
116
|
[0.1.2]: https://github.com/paulholden2/springcm-sdk/releases/tag/0.1.2
|
@@ -102,3 +123,4 @@ All notable changes to springcm-sdk will be documented in this file.
|
|
102
123
|
[0.3.5]: https://github.com/paulholden2/springcm-sdk/releases/tag/0.3.5
|
103
124
|
[0.3.6]: https://github.com/paulholden2/springcm-sdk/releases/tag/0.3.6
|
104
125
|
[0.4.0]: https://github.com/paulholden2/springcm-sdk/releases/tag/0.4.0
|
126
|
+
[0.5.0]: https://github.com/paulholden2/springcm-sdk/releases/tag/0.5.0
|
@@ -6,7 +6,7 @@ module Springcm
|
|
6
6
|
class AttributeGroup < Resource
|
7
7
|
# Retrieve an attribute set by name.
|
8
8
|
def set(name)
|
9
|
-
res =
|
9
|
+
res = attributes_config.select { |attr|
|
10
10
|
attr["Attributes"].is_a?(Array) && attr["Name"] == name
|
11
11
|
}
|
12
12
|
return nil if !res.any?
|
@@ -38,7 +38,7 @@ module Springcm
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def attributes
|
41
|
-
|
41
|
+
attributes_config.map { |attr|
|
42
42
|
if attr["Attributes"].is_a?(Array)
|
43
43
|
attr["Attributes"]
|
44
44
|
else
|
@@ -48,9 +48,16 @@ module Springcm
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def sets
|
51
|
-
|
51
|
+
attributes_config.select { |attr|
|
52
52
|
attr["Attributes"].is_a?(Array)
|
53
53
|
}
|
54
54
|
end
|
55
|
+
|
56
|
+
protected
|
57
|
+
|
58
|
+
def attributes_config
|
59
|
+
@data = reload.raw if !@data.key?("Attributes")
|
60
|
+
@data["Attributes"]
|
61
|
+
end
|
55
62
|
end
|
56
63
|
end
|
@@ -11,7 +11,7 @@ module Springcm
|
|
11
11
|
|
12
12
|
def self.resource_params
|
13
13
|
{
|
14
|
-
"expand" => "attributegroups"
|
14
|
+
"expand" => "attributegroups,path"
|
15
15
|
}
|
16
16
|
end
|
17
17
|
|
@@ -30,5 +30,20 @@ module Springcm
|
|
30
30
|
nil
|
31
31
|
end
|
32
32
|
end
|
33
|
+
|
34
|
+
def delete!
|
35
|
+
unsafe_delete
|
36
|
+
end
|
37
|
+
|
38
|
+
alias_method :unsafe_delete, :delete
|
39
|
+
private :unsafe_delete
|
40
|
+
|
41
|
+
def delete
|
42
|
+
reload
|
43
|
+
if path.start_with?("/#{@client.account.name}/Trash")
|
44
|
+
raise Springcm::DeleteRefusedError.new(path)
|
45
|
+
end
|
46
|
+
unsafe_delete
|
47
|
+
end
|
33
48
|
end
|
34
49
|
end
|
data/lib/springcm-sdk/helpers.rb
CHANGED
@@ -11,6 +11,25 @@ module Springcm
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
+
def self.serialize_field(field_config, value)
|
15
|
+
type = field_config.type
|
16
|
+
repeating = field_config.repeating_attribute?
|
17
|
+
serialized = {
|
18
|
+
"AttributeType" => type,
|
19
|
+
"RepeatingAttribute" => repeating
|
20
|
+
}
|
21
|
+
serialized_value = nil
|
22
|
+
if type == "Date"
|
23
|
+
# Raise if value is not a DateTime
|
24
|
+
serialized_value = value.strftime("%m/%d/%Y")
|
25
|
+
else
|
26
|
+
serialized_value = value.to_s
|
27
|
+
end
|
28
|
+
return nil if serialized_value.nil?
|
29
|
+
serialized["Value"] = serialized_value
|
30
|
+
serialized
|
31
|
+
end
|
32
|
+
|
14
33
|
# Deserialize a SpringCM attribute value
|
15
34
|
def self.deserialize_field(field)
|
16
35
|
type = field["AttributeType"]
|
@@ -4,16 +4,46 @@ module Springcm
|
|
4
4
|
module Mixins
|
5
5
|
# Mixin for objects that have attributes.
|
6
6
|
module Attributes
|
7
|
+
def attribute_groups=(value)
|
8
|
+
@data["AttributeGroups"] = value
|
9
|
+
end
|
10
|
+
|
11
|
+
def set_attribute(group:, field:, index: nil, value:)
|
12
|
+
group_config = @client.account.all_attribute_groups.select { |g|
|
13
|
+
g.name == group
|
14
|
+
}.first
|
15
|
+
# Non-existent group
|
16
|
+
raise Springcm::NoAttributeGroupError.new(group) if group_config.nil?
|
17
|
+
field_config = group_config.field(field)
|
18
|
+
field_set_config = group_config.set_for_field(field)
|
19
|
+
# Non-existent field
|
20
|
+
raise Springcm::NoAttributeFieldError.new(group, field) if field_config.nil?
|
21
|
+
groups = attribute_groups || {}
|
22
|
+
group_data = groups.fetch(group, {})
|
23
|
+
# Repeating set
|
24
|
+
if !field_set_config.nil? && field_set_config["RepeatingAttribute"]
|
25
|
+
set_name = field_set_config["Name"]
|
26
|
+
set_data = group_data.fetch(set_name, {})
|
27
|
+
set_data["Items"].insert(index || -1, Springcm::Helpers.serialize_field(field_config, value))
|
28
|
+
group_data[set_name] = set_data
|
29
|
+
else
|
30
|
+
group_data[field] = Springcm::Helpers.serialize_field(field_config, value)
|
31
|
+
end
|
32
|
+
groups[group] = group_data
|
33
|
+
attribute_groups = groups
|
34
|
+
value
|
35
|
+
end
|
36
|
+
|
7
37
|
def get_attribute(group:, field:)
|
8
38
|
group_config = @client.account.all_attribute_groups.select { |g|
|
9
39
|
g.name == group
|
10
40
|
}.first
|
11
41
|
# Non-existent group
|
12
|
-
|
42
|
+
raise Springcm::NoAttributeGroupError.new(group) if group_config.nil?
|
13
43
|
field_config = group_config.field(field)
|
14
44
|
field_set_config = group_config.set_for_field(field)
|
15
45
|
# Non-existent field
|
16
|
-
|
46
|
+
raise Springcm::NoAttributeFieldError.new(group, field) if field_config.nil?
|
17
47
|
groups = attribute_groups
|
18
48
|
# No attribute groups applied
|
19
49
|
return nil if groups.nil?
|
@@ -30,6 +30,38 @@ module Springcm
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
# Send a PATCH request for this resource.
|
34
|
+
def patch
|
35
|
+
conn = @client.authorized_connection(url: @client.object_api_url)
|
36
|
+
res = conn.patch do |req|
|
37
|
+
req.headers['Content-Type'] = "application/json"
|
38
|
+
req.url resource_uri
|
39
|
+
req.body = raw.to_json
|
40
|
+
end
|
41
|
+
if res.success?
|
42
|
+
data = JSON.parse(res.body)
|
43
|
+
self.class.new(data, @client)
|
44
|
+
else
|
45
|
+
nil
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Send a PUT request for this resource.
|
50
|
+
def put
|
51
|
+
conn = @client.authorized_connection(url: @client.object_api_url)
|
52
|
+
res = conn.put do |req|
|
53
|
+
req.headers['Content-Type'] = "application/json"
|
54
|
+
req.url resource_uri
|
55
|
+
req.body = raw.to_json
|
56
|
+
end
|
57
|
+
if res.success?
|
58
|
+
data = JSON.parse(res.body)
|
59
|
+
self.class.new(data, @client)
|
60
|
+
else
|
61
|
+
nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
33
65
|
# Send a DELETE request for this resource.
|
34
66
|
def delete
|
35
67
|
conn = @client.authorized_connection(url: @client.object_api_url)
|
@@ -52,10 +84,14 @@ module Springcm
|
|
52
84
|
|
53
85
|
# Some resources have query parameters that must be passed when
|
54
86
|
# retrieving it, e.g. expand=attributegroups when retrieving a document.
|
55
|
-
def resource_params
|
87
|
+
def self.resource_params
|
56
88
|
{}
|
57
89
|
end
|
58
90
|
|
91
|
+
def resource_params
|
92
|
+
self.class.resource_params
|
93
|
+
end
|
94
|
+
|
59
95
|
# Pluralized resource name, e.g. documents or folders. Used to construct
|
60
96
|
# request URLs.
|
61
97
|
def resource_name
|
data/lib/springcm-sdk/version.rb
CHANGED
data/lib/springcm-sdk.rb
CHANGED
@@ -15,6 +15,18 @@ module Springcm
|
|
15
15
|
class ConnectionInfoError < Error
|
16
16
|
end
|
17
17
|
|
18
|
+
class NoAttributeGroupError < Error
|
19
|
+
def initialize(group)
|
20
|
+
super("No such attribute group: #{group}")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class NoAttributeFieldError < Error
|
25
|
+
def initialize(group, field)
|
26
|
+
super("No such attribute field: #{group}.#{field}")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
18
30
|
class InvalidClientIdOrSecretError < Error
|
19
31
|
def initialize
|
20
32
|
super("Invalid Client Id or Client Secret")
|
@@ -32,4 +44,10 @@ module Springcm
|
|
32
44
|
super("Rate limit exceeded")
|
33
45
|
end
|
34
46
|
end
|
47
|
+
|
48
|
+
class DeleteRefusedError < Error
|
49
|
+
def initialize(path)
|
50
|
+
super("Refused to delete #{path}, use #delete! instead.")
|
51
|
+
end
|
52
|
+
end
|
35
53
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: springcm-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Holden
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -187,7 +187,7 @@ metadata:
|
|
187
187
|
allowed_push_host: https://rubygems.org
|
188
188
|
homepage_uri: https://github.com/paulholden2/springcm-sdk
|
189
189
|
source_code_uri: https://github.com/paulholden2/springcm-sdk
|
190
|
-
documentation_uri: https://rubydoc.info/github/paulholden2/springcm-sdk/0.
|
190
|
+
documentation_uri: https://rubydoc.info/github/paulholden2/springcm-sdk/0.5.0
|
191
191
|
changelog_uri: https://github.com/paulholden2/springcm-sdk/blob/master/CHANGELOG.md
|
192
192
|
post_install_message:
|
193
193
|
rdoc_options: []
|