grapefruit 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/grapefruit.rb +1 -0
- data/lib/grapefruit/cmis_client.rb +12 -22
- data/lib/grapefruit/folder.rb +31 -0
- data/lib/grapefruit/version.rb +1 -1
- data/spec/cmis_client_spec.rb +15 -9
- data/spec/fixtures/create_folder_response.xml +89 -0
- data/spec/folder_spec.rb +59 -0
- data/spec/spec_helper.rb +23 -0
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56440bfc747e9db9fb39b37a0be2ef717f6d04bd
|
4
|
+
data.tar.gz: 713c3cda200b0166fc8a10a6fd1870c141d4c6bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bab8545b7d17474beed41988cba1409f8c20eee02a439b225ec5534123985d622e8cf066a19635cad55a795c28f97991890fe718513f2210254f889004fd39d
|
7
|
+
data.tar.gz: 3082d4ac47a4a135c948096d50fa5d3a910994762780ee601fda512f5b264d8a66afce95275d28911c9c165355b1d92460fb5e1ac4f22eb50208255eefdea312
|
data/lib/grapefruit.rb
CHANGED
@@ -12,9 +12,9 @@ module Grapefruit
|
|
12
12
|
@password = password
|
13
13
|
fetch_ticket
|
14
14
|
#Loading Alfresco repository using active_cmis client
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
self.repository = ActiveCMIS.load_config('alfresco_config', File.expand_path(ENV["CMIS_YML"]))
|
16
|
+
self.root = repository.root_folder
|
17
|
+
self.sites = fetch_sites
|
18
18
|
end
|
19
19
|
|
20
20
|
def fetch_ticket
|
@@ -24,10 +24,9 @@ module Grapefruit
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def fetch_sites
|
27
|
-
|
27
|
+
sites = root.items.select { |i| i.name == "Sites" }[0]
|
28
28
|
end
|
29
29
|
|
30
|
-
|
31
30
|
def ticket_url
|
32
31
|
"#{@url}/alfresco/service/api/login?u=#{@username}&pw=#{@password}"
|
33
32
|
end
|
@@ -36,23 +35,14 @@ module Grapefruit
|
|
36
35
|
"#{ENV['CMIS_HOST']}/alfresco/s/cmis/s/workspace:SpacesStore/i/51ccddc0-d1e6-43fe-b75e-87675659977e/tree"
|
37
36
|
end
|
38
37
|
|
39
|
-
def
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
path.split("/").map!{ |s| s.downcase }.each do |name|
|
48
|
-
folder = curr_folder.items.select { |i| i.name.downcase == name }[0]
|
49
|
-
if folder
|
50
|
-
curr_folder = folder
|
51
|
-
else
|
52
|
-
raise 'Dumb ? you have passed a wrong path'
|
53
|
-
end
|
54
|
-
end
|
55
|
-
curr_folder
|
38
|
+
def create_folder(folder)
|
39
|
+
xml = folder.to_xml
|
40
|
+
response = RestClient.post("#{ENV['CMIS_HOST']}/alfresco/s/cmis/p/children?alf_ticket=#{ticket}", xml.strip, :content_type => :atom)
|
41
|
+
doc = Nokogiri::XML.parse(response)
|
42
|
+
ns = doc.collect_namespaces
|
43
|
+
folder.cmis_object_id = doc.xpath("//cmis:propertyId[@propertyDefinitionId='cmis:objectId']", ns).text().strip
|
44
|
+
# Handle errors
|
45
|
+
folder
|
56
46
|
end
|
57
47
|
|
58
48
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Grapefruit
|
2
|
+
class Folder
|
3
|
+
attr_accessor :client, :title, :cmis_object_id
|
4
|
+
|
5
|
+
def initialize(client=Grapefruit::CmisClient)
|
6
|
+
self.client = client
|
7
|
+
end
|
8
|
+
|
9
|
+
def save
|
10
|
+
client.create_folder(self)
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_xml
|
14
|
+
<<-eoxml
|
15
|
+
<?xml version="1.0" encoding="utf-8"?>
|
16
|
+
<entry xmlns="http://www.w3.org/2005/Atom"
|
17
|
+
xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/"
|
18
|
+
xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/">
|
19
|
+
<title>#{title}</title>
|
20
|
+
<cmisra:object>
|
21
|
+
<cmis:properties>
|
22
|
+
<cmis:propertyId propertyDefinitionId="cmis:objectTypeId">
|
23
|
+
<cmis:value>cmis:folder</cmis:value>
|
24
|
+
</cmis:propertyId>
|
25
|
+
</cmis:properties>
|
26
|
+
</cmisra:object>
|
27
|
+
</entry>
|
28
|
+
eoxml
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/grapefruit/version.rb
CHANGED
data/spec/cmis_client_spec.rb
CHANGED
@@ -31,17 +31,23 @@ describe "cmis client", :contract => true do
|
|
31
31
|
expect(@sut.sites).to be_true
|
32
32
|
end
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
context "Creating Folders" do
|
35
|
+
it "should make a request to the CMIS host to create a folder" do
|
36
|
+
sut = Grapefruit::CmisClient.new(ENV["CMIS_HOST"], ENV["CMIS_USER"], ENV["CMIS_PASS"])
|
37
|
+
folder = sut.create_folder(FakeFolder.new)
|
38
|
+
expect(folder.cmis_object_id).to be
|
39
|
+
end
|
40
|
+
it "should be able to create a folder under another given folder" do
|
41
|
+
pending "Not Yet Implemented"
|
42
|
+
end
|
43
|
+
it "should optionally behave like mkdir -p" do
|
44
|
+
pending "Not Yet"
|
45
|
+
end
|
46
|
+
it "should not try to create folders that already exist" do
|
47
|
+
pending "Not Yet"
|
48
|
+
end
|
37
49
|
end
|
38
50
|
|
39
|
-
it "Verfiy the slash in front of path should pass" do
|
40
|
-
expect(@sut.getFolder("/Pearson/documentLibrary")).to be_true
|
41
|
-
end
|
42
51
|
|
43
|
-
it "Verfiy we are able to retrieve Reading folder" do
|
44
|
-
expect(@sut.getFolder("/pearson/documentLibrary/SuccessMaker UK/Reading").name).to eq('Reading')
|
45
|
-
end
|
46
52
|
|
47
53
|
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:alf="http://www.alfresco.org" xmlns:app="http://www.w3.org/2007/app" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/" xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/">
|
3
|
+
<author>
|
4
|
+
<name>claytonlz</name>
|
5
|
+
</author>
|
6
|
+
<content src="http://cmsstg.smdemo.info:80/alfresco/s/cmis/s/workspace:SpacesStore/i/9e9087a5-0ece-42c8-84b6-6940eb6b28fa/content" />
|
7
|
+
<id>urn:uuid:9e9087a5-0ece-42c8-84b6-6940eb6b28fa</id>
|
8
|
+
<link rel="self" href="http://cmsstg.smdemo.info:80/alfresco/s/cmis/s/workspace:SpacesStore/i/9e9087a5-0ece-42c8-84b6-6940eb6b28fa" />
|
9
|
+
<link rel="edit" href="http://cmsstg.smdemo.info:80/alfresco/s/cmis/s/workspace:SpacesStore/i/9e9087a5-0ece-42c8-84b6-6940eb6b28fa" />
|
10
|
+
<link rel="http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions" href="http://cmsstg.smdemo.info:80/alfresco/s/cmis/s/workspace:SpacesStore/i/9e9087a5-0ece-42c8-84b6-6940eb6b28fa/allowableactions" />
|
11
|
+
<link rel="http://docs.oasis-open.org/ns/cmis/link/200908/relationships" href="http://cmsstg.smdemo.info:80/alfresco/s/cmis/s/workspace:SpacesStore/i/9e9087a5-0ece-42c8-84b6-6940eb6b28fa/rels" />
|
12
|
+
<link rel="http://docs.oasis-open.org/ns/cmis/link/200908/policies" href="http://cmsstg.smdemo.info:80/alfresco/s/cmis/s/workspace:SpacesStore/i/9e9087a5-0ece-42c8-84b6-6940eb6b28fa/pols" />
|
13
|
+
<link rel="http://docs.oasis-open.org/ns/cmis/link/200908/acl" href="http://cmsstg.smdemo.info:80/alfresco/s/cmis/s/workspace:SpacesStore/i/9e9087a5-0ece-42c8-84b6-6940eb6b28fa/acl" />
|
14
|
+
<link rel="up" href="http://cmsstg.smdemo.info:80/alfresco/s/cmis/s/workspace:SpacesStore/i/ec50a0b7-fa2d-473a-8057-c2907aef7023" type="application/atom+xml;type=entry" />
|
15
|
+
<link rel="down" href="http://cmsstg.smdemo.info:80/alfresco/s/cmis/s/workspace:SpacesStore/i/9e9087a5-0ece-42c8-84b6-6940eb6b28fa/children" type="application/atom+xml;type=feed" />
|
16
|
+
<link rel="down" href="http://cmsstg.smdemo.info:80/alfresco/s/cmis/s/workspace:SpacesStore/i/9e9087a5-0ece-42c8-84b6-6940eb6b28fa/descendants" type="application/cmistree+xml" />
|
17
|
+
<link rel="http://docs.oasis-open.org/ns/cmis/link/200908/foldertree" href="http://cmsstg.smdemo.info:80/alfresco/s/cmis/s/workspace:SpacesStore/i/9e9087a5-0ece-42c8-84b6-6940eb6b28fa/tree" type="application/atom+xml;type=feed" />
|
18
|
+
<link rel="describedby" href="http://cmsstg.smdemo.info:80/alfresco/s/cmis/type/cmis:folder" />
|
19
|
+
<link rel="service" href="http://cmsstg.smdemo.info:80/alfresco/s/cmis" />
|
20
|
+
<published>2013-12-03T14:51:53.168-07:00</published>
|
21
|
+
<summary>Team Exception</summary>
|
22
|
+
<title>Team Exception</title>
|
23
|
+
<updated>2013-12-03T14:51:53.168-07:00</updated>
|
24
|
+
<app:edited>2013-12-03T14:51:53.168-07:00</app:edited>
|
25
|
+
<alf:icon>http://cmsstg.smdemo.info:80/alfresco/images/icons/space-icon-default-16.gif</alf:icon>
|
26
|
+
<cmisra:object>
|
27
|
+
<cmis:properties>
|
28
|
+
<cmis:propertyId propertyDefinitionId="cmis:allowedChildObjectTypeIds" displayName="Allowed Child Object Types Ids" queryName="cmis:allowedChildObjectTypeIds" />
|
29
|
+
<cmis:propertyId propertyDefinitionId="cmis:objectTypeId" displayName="Object Type Id" queryName="cmis:objectTypeId">
|
30
|
+
<cmis:value>cmis:folder</cmis:value>
|
31
|
+
</cmis:propertyId>
|
32
|
+
<cmis:propertyString propertyDefinitionId="cmis:path" displayName="Path" queryName="cmis:path">
|
33
|
+
<cmis:value>/Team Exception</cmis:value>
|
34
|
+
</cmis:propertyString>
|
35
|
+
<cmis:propertyString propertyDefinitionId="cmis:name" displayName="Name" queryName="cmis:name">
|
36
|
+
<cmis:value>Team Exception</cmis:value>
|
37
|
+
</cmis:propertyString>
|
38
|
+
<cmis:propertyDateTime propertyDefinitionId="cmis:creationDate" displayName="Creation Date" queryName="cmis:creationDate">
|
39
|
+
<cmis:value>2013-12-03T14:51:53.168-07:00</cmis:value>
|
40
|
+
</cmis:propertyDateTime>
|
41
|
+
<cmis:propertyString propertyDefinitionId="cmis:changeToken" displayName="Change token" queryName="cmis:changeToken" />
|
42
|
+
<cmis:propertyString propertyDefinitionId="cmis:lastModifiedBy" displayName="Last Modified By" queryName="cmis:lastModifiedBy">
|
43
|
+
<cmis:value>claytonlz</cmis:value>
|
44
|
+
</cmis:propertyString>
|
45
|
+
<cmis:propertyString propertyDefinitionId="cmis:createdBy" displayName="Created by" queryName="cmis:createdBy">
|
46
|
+
<cmis:value>claytonlz</cmis:value>
|
47
|
+
</cmis:propertyString>
|
48
|
+
<cmis:propertyId propertyDefinitionId="cmis:objectId" displayName="Object Id" queryName="cmis:objectId">
|
49
|
+
<cmis:value>workspace://SpacesStore/9e9087a5-0ece-42c8-84b6-6940eb6b28fa</cmis:value>
|
50
|
+
</cmis:propertyId>
|
51
|
+
<cmis:propertyId propertyDefinitionId="alfcmis:nodeRef" displayName="Alfresco Node Ref" queryName="alfcmis:nodeRef" />
|
52
|
+
<cmis:propertyId propertyDefinitionId="cmis:baseTypeId" displayName="Base Type Id" queryName="cmis:baseTypeId">
|
53
|
+
<cmis:value>cmis:folder</cmis:value>
|
54
|
+
</cmis:propertyId>
|
55
|
+
<cmis:propertyDateTime propertyDefinitionId="cmis:lastModificationDate" displayName="Last Modified Date" queryName="cmis:lastModificationDate">
|
56
|
+
<cmis:value>2013-12-03T14:51:53.168-07:00</cmis:value>
|
57
|
+
</cmis:propertyDateTime>
|
58
|
+
<cmis:propertyId propertyDefinitionId="cmis:parentId" displayName="Parent Id" queryName="cmis:parentId">
|
59
|
+
<cmis:value>workspace://SpacesStore/ec50a0b7-fa2d-473a-8057-c2907aef7023</cmis:value>
|
60
|
+
</cmis:propertyId>
|
61
|
+
<alf:aspects>
|
62
|
+
<alf:appliedAspects>P:sys:localized</alf:appliedAspects>
|
63
|
+
<alf:properties />
|
64
|
+
</alf:aspects>
|
65
|
+
</cmis:properties>
|
66
|
+
<cmis:allowableActions>
|
67
|
+
<cmis:canDeleteObject>true</cmis:canDeleteObject>
|
68
|
+
<cmis:canUpdateProperties>true</cmis:canUpdateProperties>
|
69
|
+
<cmis:canGetFolderTree>true</cmis:canGetFolderTree>
|
70
|
+
<cmis:canGetProperties>true</cmis:canGetProperties>
|
71
|
+
<cmis:canGetObjectRelationships>true</cmis:canGetObjectRelationships>
|
72
|
+
<cmis:canGetObjectParents>true</cmis:canGetObjectParents>
|
73
|
+
<cmis:canGetFolderParent>true</cmis:canGetFolderParent>
|
74
|
+
<cmis:canGetDescendants>true</cmis:canGetDescendants>
|
75
|
+
<cmis:canMoveObject>true</cmis:canMoveObject>
|
76
|
+
<cmis:canApplyPolicy>false</cmis:canApplyPolicy>
|
77
|
+
<cmis:canGetAppliedPolicies>true</cmis:canGetAppliedPolicies>
|
78
|
+
<cmis:canRemovePolicy>false</cmis:canRemovePolicy>
|
79
|
+
<cmis:canGetChildren>true</cmis:canGetChildren>
|
80
|
+
<cmis:canCreateDocument>true</cmis:canCreateDocument>
|
81
|
+
<cmis:canCreateFolder>true</cmis:canCreateFolder>
|
82
|
+
<cmis:canCreateRelationship>true</cmis:canCreateRelationship>
|
83
|
+
<cmis:canDeleteTree>true</cmis:canDeleteTree>
|
84
|
+
<cmis:canGetACL>true</cmis:canGetACL>
|
85
|
+
<cmis:canApplyACL>true</cmis:canApplyACL>
|
86
|
+
</cmis:allowableActions>
|
87
|
+
</cmisra:object>
|
88
|
+
<cmisra:pathSegment>Team Exception</cmisra:pathSegment>
|
89
|
+
</entry>
|
data/spec/folder_spec.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Folders" do
|
4
|
+
it "should have a default client" do
|
5
|
+
sut = Grapefruit::Folder.new
|
6
|
+
expect(sut.client).to be
|
7
|
+
end
|
8
|
+
it "should be able to take a custom client" do
|
9
|
+
fake = FakeCMISClient.new
|
10
|
+
sut = Grapefruit::Folder.new(fake)
|
11
|
+
expect(sut.client).to eq(fake)
|
12
|
+
end
|
13
|
+
it "should have a title" do
|
14
|
+
sut = Grapefruit::Folder.new(FakeCMISClient)
|
15
|
+
sut.title = "Title"
|
16
|
+
expect(sut.title).to eq("Title")
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should have a cmis object id" do
|
20
|
+
sut = Grapefruit::Folder.new(FakeCMISClient)
|
21
|
+
sut.cmis_object_id = 123
|
22
|
+
expect(sut.cmis_object_id).to eq(123)
|
23
|
+
end
|
24
|
+
|
25
|
+
context "Persisting Folders" do
|
26
|
+
it "should be able to persist a folder using the client" do
|
27
|
+
mock = double(Grapefruit::CmisClient, :create_folder => true)
|
28
|
+
sut = Grapefruit::Folder.new(mock)
|
29
|
+
mock.should_receive(:create_folder).with(sut)
|
30
|
+
sut.save
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "Viewing as XML" do
|
35
|
+
it "should be able to represent itself as an CMIS XML document" do
|
36
|
+
sut = Grapefruit::Folder.new(FakeCMISClient.new)
|
37
|
+
sut.title = "Cats are Cool"
|
38
|
+
|
39
|
+
xml_string = <<-eoxml
|
40
|
+
<?xml version="1.0" encoding="utf-8"?>
|
41
|
+
<entry xmlns="http://www.w3.org/2005/Atom"
|
42
|
+
xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/"
|
43
|
+
xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/">
|
44
|
+
<title>Cats are Cool</title>
|
45
|
+
<cmisra:object>
|
46
|
+
<cmis:properties>
|
47
|
+
<cmis:propertyId propertyDefinitionId="cmis:objectTypeId">
|
48
|
+
<cmis:value>cmis:folder</cmis:value>
|
49
|
+
</cmis:propertyId>
|
50
|
+
</cmis:properties>
|
51
|
+
</cmisra:object>
|
52
|
+
</entry>
|
53
|
+
eoxml
|
54
|
+
|
55
|
+
expect(sut.to_xml).to eq(xml_string)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
data/spec/spec_helper.rb
CHANGED
@@ -1 +1,24 @@
|
|
1
1
|
require File.join(File.expand_path(File.dirname(__FILE__)),"..","lib","grapefruit")
|
2
|
+
|
3
|
+
class FakeCMISClient
|
4
|
+
end
|
5
|
+
|
6
|
+
class FakeFolder < Grapefruit::Folder
|
7
|
+
def to_xml
|
8
|
+
<<-eoxml
|
9
|
+
<?xml version="1.0" encoding="utf-8"?>
|
10
|
+
<entry xmlns="http://www.w3.org/2005/Atom"
|
11
|
+
xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/"
|
12
|
+
xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/">
|
13
|
+
<title>Test Folder #{Time.now.to_f}</title>
|
14
|
+
<cmisra:object>
|
15
|
+
<cmis:properties>
|
16
|
+
<cmis:propertyId propertyDefinitionId="cmis:objectTypeId">
|
17
|
+
<cmis:value>cmis:folder</cmis:value>
|
18
|
+
</cmis:propertyId>
|
19
|
+
</cmis:properties>
|
20
|
+
</cmisra:object>
|
21
|
+
</entry>
|
22
|
+
eoxml
|
23
|
+
end
|
24
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grapefruit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Team Exception
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -129,10 +129,13 @@ files:
|
|
129
129
|
- grapefruit.gemspec
|
130
130
|
- lib/grapefruit.rb
|
131
131
|
- lib/grapefruit/cmis_client.rb
|
132
|
+
- lib/grapefruit/folder.rb
|
132
133
|
- lib/grapefruit/interface.rb
|
133
134
|
- lib/grapefruit/module Grapefruit
|
134
135
|
- lib/grapefruit/version.rb
|
135
136
|
- spec/cmis_client_spec.rb
|
137
|
+
- spec/fixtures/create_folder_response.xml
|
138
|
+
- spec/folder_spec.rb
|
136
139
|
- spec/spec_helper.rb
|
137
140
|
homepage: ''
|
138
141
|
licenses:
|
@@ -154,10 +157,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
157
|
version: '0'
|
155
158
|
requirements: []
|
156
159
|
rubyforge_project:
|
157
|
-
rubygems_version: 2.
|
160
|
+
rubygems_version: 2.0.3
|
158
161
|
signing_key:
|
159
162
|
specification_version: 4
|
160
163
|
summary: A sane library for interacting with Alfresco
|
161
164
|
test_files:
|
162
165
|
- spec/cmis_client_spec.rb
|
166
|
+
- spec/fixtures/create_folder_response.xml
|
167
|
+
- spec/folder_spec.rb
|
163
168
|
- spec/spec_helper.rb
|