rtunesu 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. data/History.txt +4 -0
  2. data/License.txt +20 -0
  3. data/Manifest.txt +77 -0
  4. data/README.txt +38 -0
  5. data/Rakefile +4 -0
  6. data/config/hoe.rb +75 -0
  7. data/config/requirements.rb +15 -0
  8. data/lib/multipart.rb +53 -0
  9. data/lib/rtunesu/connection.rb +111 -0
  10. data/lib/rtunesu/document.rb +84 -0
  11. data/lib/rtunesu/entities/course.rb +8 -0
  12. data/lib/rtunesu/entities/division.rb +16 -0
  13. data/lib/rtunesu/entities/group.rb +8 -0
  14. data/lib/rtunesu/entities/permission.rb +7 -0
  15. data/lib/rtunesu/entities/section.rb +15 -0
  16. data/lib/rtunesu/entities/site.rb +7 -0
  17. data/lib/rtunesu/entities/theme.rb +4 -0
  18. data/lib/rtunesu/entities/track.rb +13 -0
  19. data/lib/rtunesu/entity.rb +154 -0
  20. data/lib/rtunesu/user.rb +26 -0
  21. data/lib/rtunesu/version.rb +9 -0
  22. data/lib/rtunesu.rb +25 -0
  23. data/script/console +10 -0
  24. data/script/destroy +14 -0
  25. data/script/generate +14 -0
  26. data/script/txt2html +82 -0
  27. data/setup.rb +1585 -0
  28. data/spec/connection_spec.rb +53 -0
  29. data/spec/document_spec.rb +16 -0
  30. data/spec/documents/add_spec.rb +41 -0
  31. data/spec/documents/delete_spec.rb +30 -0
  32. data/spec/documents/merge_spec.rb +30 -0
  33. data/spec/documents/show_tree_spec.rb +16 -0
  34. data/spec/entities/course_spec.rb +47 -0
  35. data/spec/entities/division_spec.rb +8 -0
  36. data/spec/entities/group_spec.rb +8 -0
  37. data/spec/entities/permission_spec.rb +8 -0
  38. data/spec/entities/section_spec.rb +8 -0
  39. data/spec/entities/site_spec.rb +8 -0
  40. data/spec/entities/track_spec.rb +8 -0
  41. data/spec/entity_spec.rb +108 -0
  42. data/spec/fixtures/add_course.xml +26 -0
  43. data/spec/fixtures/add_division.xml +26 -0
  44. data/spec/fixtures/add_group.xml +27 -0
  45. data/spec/fixtures/add_permission.xml +12 -0
  46. data/spec/fixtures/add_section.xml +34 -0
  47. data/spec/fixtures/add_track.xml +19 -0
  48. data/spec/fixtures/delete_course.xml +8 -0
  49. data/spec/fixtures/delete_division.xml +8 -0
  50. data/spec/fixtures/delete_group.xml +8 -0
  51. data/spec/fixtures/delete_permission.xml +9 -0
  52. data/spec/fixtures/delete_section.xml +8 -0
  53. data/spec/fixtures/delete_track.xml +7 -0
  54. data/spec/fixtures/merge_course.xml +38 -0
  55. data/spec/fixtures/merge_division.xml +47 -0
  56. data/spec/fixtures/merge_group.xml +29 -0
  57. data/spec/fixtures/merge_permission.xml +12 -0
  58. data/spec/fixtures/merge_section.xml +36 -0
  59. data/spec/fixtures/merge_site.xml +31 -0
  60. data/spec/fixtures/merge_track.xml +18 -0
  61. data/spec/fixtures/requests/add_coures_request.xml +0 -0
  62. data/spec/fixtures/responses/generic_entity_response.xml +17 -0
  63. data/spec/fixtures/responses/show_tree_course.xml +676 -0
  64. data/spec/fixtures/show_tree.xml +273 -0
  65. data/spec/fixtures/update_group.xml +7 -0
  66. data/spec/spec.opts +1 -0
  67. data/spec/spec_helper.rb +10 -0
  68. data/spec/user_spec.rb +18 -0
  69. data/tasks/deployment.rake +34 -0
  70. data/tasks/environment.rake +7 -0
  71. data/tasks/rspec.rake +21 -0
  72. data/tasks/website.rake +17 -0
  73. data/website/index.html +141 -0
  74. data/website/index.txt +83 -0
  75. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  76. data/website/stylesheets/screen.css +138 -0
  77. data/website/template.html.erb +48 -0
  78. metadata +144 -0
@@ -0,0 +1,53 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+ include RTunesU
3
+
4
+ describe Connection do
5
+ describe 'token generation' do
6
+ before do
7
+ Time.should_receive(:now).and_return(@current_time)
8
+ @current_time.should_receive(:to_i).and_return(1214619134)
9
+
10
+ user = mock(RTunesU::User, :id => 0,
11
+ :username => 'admin',
12
+ :name => 'Admin',
13
+ :email => 'admin@example.edu',
14
+ :credentials => ['Administrator@urn:mace:itunesu.com:sites:example.edu'],
15
+ :to_credential_string => 'Administrator@urn:mace:itunesu.com:sites:example.edu',
16
+ :to_identity_string => '"Admin" <admin@example.edu> (admin) [0]')
17
+
18
+ @connection = Connection.new(:user => user, :shared_secret => 'STRINGOFTHIRTYTWOLETTERSORDIGITS')
19
+ end
20
+
21
+ it 'generates a token' do
22
+ @connection.generate_authorization_token.should eql("credentials=Administrator%40urn%3Amace%3Aitunesu.com%3Asites%3Aexample.edu&identity=%22Admin%22+%3Cadmin%40example.edu%3E+%28admin%29+%5B0%5D&time=1214619134&signature=121a6cf76c9c5ecda41450d87e3394b9d02c570a5f76b2bd16287f860f068302")
23
+ end
24
+ end
25
+ describe 'requesting an upload location for a file' do
26
+ end
27
+
28
+ describe 'API accessing' do
29
+ before do
30
+ Time.should_receive(:now).and_return(@current_time)
31
+ @current_time.should_receive(:to_i).and_return(1214619134)
32
+
33
+ user = mock(RTunesU::User, :id => 0,
34
+ :username => 'admin',
35
+ :name => 'Admin',
36
+ :email => 'admin@example.edu',
37
+ :credentials => ['Administrator@urn:mace:itunesu.com:sites:example.edu'],
38
+ :to_credential_string => 'Administrator@urn:mace:itunesu.com:sites:example.edu',
39
+ :to_identity_string => '"Admin" <admin@example.edu> (admin) [0]')
40
+
41
+ @connection = Connection.new(:user => user, :site => 'example.edu', :shared_secret => 'STRINGOFTHIRTYTWOLETTERSORDIGITS')
42
+ end
43
+
44
+ it 'access a web services url for the institution' do
45
+ @connection.webservices_url.should eql('https://deimos.apple.com/WebObjects/Core.woa/API/ProcessWebServicesDocument/example.edu?credentials=Administrator%40urn%3Amace%3Aitunesu.com%3Asites%3Aexample.edu&identity=%22Admin%22+%3Cadmin%40example.edu%3E+%28admin%29+%5B0%5D&time=1214619134&signature=121a6cf76c9c5ecda41450d87e3394b9d02c570a5f76b2bd16287f860f068302')
46
+ end
47
+
48
+ it 'can generate a url for uploading files'
49
+ it 'opens an HTTPS connection to iTunes U'
50
+ it 'send XML data'
51
+ it 'generates a url user access to a location through iTunes U'
52
+ end
53
+ end
@@ -0,0 +1,16 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+ include RTunesU
3
+
4
+ describe Document do
5
+ before(:all) do
6
+ @xml = Document::Merge.new(Course.new).xml
7
+ end
8
+
9
+ it 'includes a base element of ITunesUDocument' do
10
+ (Hpricot.XML(@xml) % 'ITunesUDocument').should_not be_nil
11
+ end
12
+
13
+ it 'includes a version number' do
14
+ (Hpricot.XML(@xml) % 'ITunesUDocument/Version').should_not be_nil
15
+ end
16
+ end
@@ -0,0 +1,41 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ include RTunesU
3
+ include Document
4
+
5
+ describe Document::Add do
6
+ before do
7
+ course = mock(RTunesU::Course, :handle => 1234567,
8
+ :parent_handle => 98765,
9
+ :class_name => 'Course',
10
+ :to_xml => '<Course></Course>')
11
+ @document = Document::Add.new(course)
12
+ end
13
+
14
+ it 'can convert itself to a string of xml' do
15
+ lambda { @document.xml }.should_not raise_error
16
+ end
17
+
18
+ describe 'xml contents' do
19
+ before do
20
+ course = Course.new(:handle => 1234567, :parent_handle => 98765)
21
+ @document = Document::Add.new(course)
22
+ @xml = Hpricot.XML(@document.xml)
23
+ end
24
+
25
+ it 'has a source entity that defines the specific action name' do
26
+ @xml.at('AddCourse').should_not be_nil
27
+ end
28
+
29
+ it 'has a parent handle' do
30
+ @xml.at('AddCourse/ParentHandle').should_not be_nil
31
+ end
32
+
33
+ it 'has a parent path' do
34
+ @xml.at('AddCourse/ParentPath').should_not be_nil
35
+ end
36
+
37
+ it 'has a child element that represents the source entity' do
38
+ @xml.at('AddCourse/Course').should_not be_nil
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,30 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ include RTunesU
3
+ include Document
4
+
5
+ describe Document::Delete do
6
+ before do
7
+ course = Course.new(:handle => 1234567, :parent_handle => 98765)
8
+ @document = Document::Delete.new(course)
9
+ end
10
+
11
+ it 'can convert itself to a string of xml' do
12
+ lambda { @document.xml }.should_not raise_error
13
+ end
14
+
15
+ describe 'xml contents' do
16
+ before do
17
+ course = Course.new(:handle => 1234567, :parent_handle => 98765)
18
+ document = Document::Delete.new(course)
19
+ @xml = Hpricot.XML(document.xml)
20
+ end
21
+
22
+ it 'has a parent handle' do
23
+ @xml.at('DeleteCourse/CourseHandle').should_not be_nil
24
+ end
25
+
26
+ it 'has a parent path' do
27
+ @xml.at('DeleteCourse/CoursePath').should_not be_nil
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ include RTunesU
3
+ include Document
4
+
5
+ describe Document::Merge do
6
+ before do
7
+ course = Course.new(:handle => 1234567, :parent_handle => 98765)
8
+ @document = Document::Merge.new(course)
9
+ end
10
+
11
+ it 'can convert itself to a string of xml' do
12
+ lambda { @document.xml }.should_not raise_error
13
+ end
14
+
15
+ describe 'xml contents' do
16
+ before do
17
+ course = Course.new(:handle => 1234567, :parent_handle => 98765)
18
+ document = Document::Merge.new(course)
19
+ @xml = Hpricot.XML(document.xml)
20
+ end
21
+
22
+ it 'has a handle that represents its entity' do
23
+ @xml.at('MergeCourse/CourseHandle').should_not be_nil
24
+ end
25
+
26
+ it 'has a child element that represents the source entity' do
27
+ @xml.at('MergeCourse/Course').should_not be_nil
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,16 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ include RTunesU
3
+ include Document
4
+
5
+ describe Document, "ShowTree" do
6
+ describe 'handle' do
7
+ it 'should exist'
8
+ it 'should default to the source entity handle location'
9
+ it 'can take a specific handle'
10
+ end
11
+
12
+ describe 'keygroup' do
13
+ it 'should default to most'
14
+ it 'cannot take values other than minimal, maximal, and most'
15
+ end
16
+ end
@@ -0,0 +1,47 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ include RTunesU
3
+
4
+ describe Course do
5
+ before do
6
+ u = RTunesU::User.new(0, 'admin', 'Admin', 'admin@example.com')
7
+ u.credentials = ['Administrator@urn:mace:example.edu']
8
+ @connection = RTunesU::Connection.new(:user => u, :site => 'example.edu', :shared_secret => 'STRINGOFTHIRTYTWOLETTERSORDIGITS')
9
+ end
10
+
11
+ describe 'finding' do
12
+ it 'can find itself in iTunesU' do
13
+ @connection.should_receive(:process).and_return(File.open(File.dirname(__FILE__) + '/../fixtures/responses/show_tree_course.xml'))
14
+ @course = Course.find(1257981186, @connection)
15
+ end
16
+ end
17
+
18
+ describe ' after successful finding' do
19
+ before(:all) do
20
+ @connection.should_receive(:process).and_return(File.open(File.dirname(__FILE__) + '/../fixtures/responses/show_tree_course.xml'))
21
+ @course = Course.find(1257981186, @connection)
22
+ end
23
+
24
+ it 'should access its attributes from the returned xml' do
25
+ @course.Name.should eql('SI 539 001 W07')
26
+ @course.Handle.should eql('1257981186')
27
+ end
28
+
29
+ it 'should find its parent element' do
30
+ @course.parent.should be_an_instance_of(RTunesU::Section)
31
+ end
32
+
33
+ it 'should be able to find its groups (tabs)' do
34
+ @course.Groups.should be_an_instance_of(Array)
35
+ @course.Groups[0].should be_an_instance_of(RTunesU::Group)
36
+ end
37
+
38
+ it 'should be able to access it groups attributes' do
39
+ @course.Groups[0].Handle.should eql('1257981189')
40
+ end
41
+
42
+ it 'should be able to access it groups tracks' do
43
+ @course.Groups[0].Tracks.should be_an_instance_of(Array)
44
+ @course.Groups[0].Tracks[0].should be_an_instance_of(RTunesU::Track)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ include RTunesU
3
+
4
+ describe Division do
5
+ it 'should find itself in iTunes U'
6
+ it 'is valid'
7
+ it 'converts itself to an xml document'
8
+ end
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ include RTunesU
3
+
4
+ describe Group do
5
+ it 'should find itself in iTunes U'
6
+ it 'is valid'
7
+ it 'converts itself to an xml document'
8
+ end
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ include RTunesU
3
+
4
+ describe Permission do
5
+ it 'should find itself in iTunes U'
6
+ it 'is valid'
7
+ it 'converts itself to an xml document'
8
+ end
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ include RTunesU
3
+
4
+ describe Section do
5
+ it 'should find itself in iTunes U'
6
+ it 'is valid'
7
+ it 'converts itself to an xml document'
8
+ end
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ include RTunesU
3
+
4
+ describe Site do
5
+ it 'should find itself in iTunes U'
6
+ it 'is valid'
7
+ it 'converts itself to an xml document'
8
+ end
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ include RTunesU
3
+
4
+ describe Track do
5
+ it 'should find itself in iTunes U'
6
+ it 'is valid'
7
+ it 'converts itself to an xml document'
8
+ end
@@ -0,0 +1,108 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+ include RTunesU
3
+
4
+ # describe Entity do
5
+ # it 'finds itself in iTunes U'
6
+ # it 'rasies an error if it cannot be found in iTunes U'
7
+ #
8
+ # it "saves to iTunes U"
9
+ # it "appepts to saves if valid"
10
+ # it "it won't attempt to save (and rasies an error) if it's missing require attributes"
11
+ #
12
+ # it "creates if it didn't previously exist"
13
+ # it "updates if it previously existed"
14
+ #
15
+ # it "rasies an error if saving failed"
16
+ #
17
+ # it "deletes"
18
+ # it "raises an error if delting failed"
19
+ #
20
+ # it "converts to an xml string"
21
+ # it "creats from a ITunesU Response"
22
+ # end
23
+ describe Entity, 'attribute assignment' do
24
+ before do
25
+ @entity = Entity.new
26
+ end
27
+
28
+ it 'assigns singular attributes to the edits hash as a string' do
29
+ @entity.Name = 'Eng211'
30
+ @entity.edits['Name'].should eql('Eng211')
31
+ @entity.Name.should eql('Eng211')
32
+ end
33
+
34
+ it 'returns a default empty array for plural attributes' do
35
+ @entity.Groups.should eql([])
36
+ @entity.edits['Groups'].should eql([])
37
+ end
38
+
39
+ it 'assigns plural attribute to the edits hash an array' do
40
+ @entity.Groups = [Group.new(:name => 'does not matter')]
41
+ @entity.Groups.size.should be(1)
42
+ @entity.edits['Groups'].size.should be(1)
43
+ end
44
+
45
+ it 'adds plural attributes with <<' do
46
+ @entity.Groups = [Group.new(:name => 'does not matter')]
47
+ @entity.Groups.size.should be(1)
48
+ @entity.Groups << Group.new(:name => 'another group')
49
+ @entity.edits['Groups'].size.should be(2)
50
+ end
51
+ end
52
+
53
+ describe Entity, 'converting to XML' do
54
+ describe 'with nested elements' do
55
+ before do
56
+ @entity = Entity.new(:Name => 'Example')
57
+ @entity.Groups = [Group.new(:Name => 'example group 1'), Group.new(:Name => 'example group 2', :Description => 'Blah, blah, blah')]
58
+ @xml = @entity.to_xml
59
+ end
60
+
61
+ it 'should contain nested XML edits' do
62
+ (Hpricot.XML(@xml) / 'Entity/Group').size.should be(2)
63
+ end
64
+
65
+ it 'has nested elements that propely converted their singular attributes' do
66
+ (Hpricot.XML(@xml) / 'Entity/Group')[0].at('Name').innerHTML.should eql('example group 1')
67
+ end
68
+
69
+ end
70
+ end
71
+
72
+ describe Entity, 'loading from XML' do
73
+ before do
74
+ @source = File.read(File.dirname(__FILE__) + '/fixtures/responses/generic_entity_response.xml')
75
+ @entity = Entity.new(:handle => 789)
76
+ end
77
+
78
+ it 'access attributes from XML source or from the edits hash' do
79
+ @entity.load_from_xml(@source)
80
+ @entity.Name.should eql('Example Entity Inside of A Section')
81
+ @entity.Name = 'new test name'
82
+ @entity.Name.should eql('new test name')
83
+ end
84
+
85
+ it 'can reset its edits' do
86
+ @entity.load_from_xml(@source)
87
+ @entity.Name.should eql('Example Entity Inside of A Section')
88
+ @entity.Name = 'new test name'
89
+ @entity.Name.should eql('new test name')
90
+ @entity.reload
91
+ @entity.Name.should eql('Example Entity Inside of A Section')
92
+ end
93
+
94
+ it 'should find its appropriate node in the XML based on node name and <Handle> element' do
95
+ @entity.load_from_xml(@source)
96
+ @entity.source_xml.name.should eql('Entity')
97
+ end
98
+
99
+ it 'should raise an EntityNotFound error if the specific entity cannot be found' do
100
+ @entity.handle = 1
101
+ lambda { @entity.load_from_xml(@source) }.should raise_error(EntityNotFound)
102
+ end
103
+
104
+ it 'should still be able to access its parent XML node' do
105
+ @entity.load_from_xml(@source)
106
+ @entity.source_xml.parent.name.should eql('Section')
107
+ end
108
+ end
@@ -0,0 +1,26 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ITunesUDocument>
3
+ <Version>1.1.1</Version>
4
+ <AddCourse>
5
+ <ParentHandle>123456789</ParentHandle>
6
+ <ParentPath>ExampleU/Humanities</ParentPath>
7
+ <TemplateHandle>987654321</TemplateHandle>
8
+ <Course>
9
+ <Name>Introduction to the Humanities</Name>
10
+ <ShortName>HUM 211</ShortName>
11
+ <Identifier>identifier value</Identifier>
12
+ <Instructor>Dr. Jesse Sielaff</Instructor>
13
+ <Description>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</Description>
14
+ <Group>
15
+ <Name>Lectures</Name>
16
+ <Handle></Handle>
17
+ <Permission>
18
+ <Credential>credential value</Credential>
19
+ <Access>access value</Access>
20
+ </Permission>
21
+ </Group>
22
+ <AllowSubscription>true</AllowSubscription>
23
+ <ThemeHandle>109234567</ThemeHandle>
24
+ </Course>
25
+ </AddCourse>
26
+ </ITunesUDocument>
@@ -0,0 +1,26 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ITunesUDocument>
3
+ <Version>1.1.1</Version>
4
+ <AddDivision>
5
+ <ParentHandle>parenthandle value</ParentHandle>
6
+ <ParentPath>parentpath value</ParentPath>
7
+ <Division>
8
+ <Name>name value</Name>
9
+ <ShortName>shortname value</ShortName>
10
+ <Identifier>identifier value</Identifier>
11
+ <AllowSubscription>allowsubscription value</AllowSubscription>
12
+ <Permission>
13
+ <Credential>credential value</Credential>
14
+ <Access>access value</Access>
15
+ </Permission>
16
+ <Section>
17
+ <Name>name value</Name>
18
+ <Handle>handle value</Handle>
19
+ <Course>
20
+ <Name>name value</Name>
21
+ </Course>
22
+ </Section>
23
+ <ThemeHandle>themehandle value</ThemeHandle>
24
+ </Division>
25
+ </AddDivision>
26
+ </ITunesUDocument>
@@ -0,0 +1,27 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ITunesUDocument>
3
+ <Version>1.1.1</Version>
4
+ <AddGroup>
5
+ <ParentHandle>parenthandle value</ParentHandle>
6
+ <ParentPath>parentpath value</ParentPath>
7
+ <Group>
8
+ <Name>name value</Name>
9
+ <Handle>handle value</Handle>
10
+ <Track>
11
+ <Name>name value</Name>
12
+ <Handle>handle value</Handle>
13
+ <Kind>kind value</Kind>
14
+ <DiscNumber>discnumber value</DiscNumber>
15
+ <DurationMilliseconds>durationmilliseconds value
16
+ </DurationMilliseconds>
17
+ <AlbumName>albumname value</AlbumName>
18
+ <ArtistName>artistname value</ArtistName>
19
+ <DownloadURL>downloadurl value</DownloadURL>
20
+ </Track>
21
+ <Permission>
22
+ <Credential>credential value</Credential>
23
+ <Access>access value</Access>
24
+ </Permission>
25
+ </Group>
26
+ </AddGroup>
27
+ </ITunesUDocument>
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ITunesUDocument>
3
+ <Version>1.1.1</Version>
4
+ <AddPermission>
5
+ <ParentHandle>parenthandle value</ParentHandle>
6
+ <ParentPath>parentpath value</ParentPath>
7
+ <Permission>
8
+ <Credential>credential value</Credential>
9
+ <Access>access value</Access>
10
+ </Permission>
11
+ </AddPermission>
12
+ </ITunesUDocument>
@@ -0,0 +1,34 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ITunesUDocument>
3
+ <Version>1.1.1</Version>
4
+ <AddSection>
5
+ <ParentHandle>parenthandle value</ParentHandle>
6
+ <ParentPath>parentpath value</ParentPath>
7
+ <Section>
8
+ <Name>name value</Name>
9
+ <Handle>handle value</Handle>
10
+ <Course>
11
+ <Name>name value</Name>
12
+ <Group>
13
+ <Name>name value</Name>
14
+ <Handle>handle value</Handle>
15
+ <Track>
16
+ <Name>name value</Name>
17
+ <Handle>handle value</Handle>
18
+ <Kind>kind value</Kind>
19
+ <DiscNumber>discnumber value</DiscNumber>
20
+ <DurationMilliseconds>durationmilliseconds value
21
+ </DurationMilliseconds>
22
+ <AlbumName>albumname value</AlbumName>
23
+ <ArtistName>artistname value</ArtistName>
24
+ <DownloadURL>downloadurl value</DownloadURL>
25
+ </Track>
26
+ <Permission>
27
+ <Credential>credential value</Credential>
28
+ <Access>access value</Access>
29
+ </Permission>
30
+ </Group>
31
+ </Course>
32
+ </Section>
33
+ </AddSection>
34
+ </ITunesUDocument>
@@ -0,0 +1,19 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ITunesUDocument>
3
+ <Version>1.1.1</Version>
4
+ <AddTrack>
5
+ <ParentHandle>parenthandle value</ParentHandle>
6
+ <ParentPath>parentpath value</ParentPath>
7
+ <Track>
8
+ <Name>name value</Name>
9
+ <Handle>handle value</Handle>
10
+ <Kind>kind value</Kind>
11
+ <DiscNumber>discnumber value</DiscNumber>
12
+ <DurationMilliseconds>durationmilliseconds value
13
+ </DurationMilliseconds>
14
+ <AlbumName>albumname value</AlbumName>
15
+ <ArtistName>artistname value</ArtistName>
16
+ <DownloadURL>downloadurl value</DownloadURL>
17
+ </Track>
18
+ </AddTrack>
19
+ </ITunesUDocument>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ITunesUDocument>
3
+ <Version>1.1.1</Version>
4
+ <DeleteCourse>
5
+ <CourseHandle>coursehandle value</CourseHandle>
6
+ <CoursePath>coursepath value</CoursePath>
7
+ </DeleteCourse>
8
+ </ITunesUDocument>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ITunesUDocument>
3
+ <Version>1.1.1</Version>
4
+ <DeleteDivision>
5
+ <DivisionHandle>divisionhandle value</DivisionHandle>
6
+ <DivisionPath>divisionpath value</DivisionPath>
7
+ </DeleteDivision>
8
+ </ITunesUDocument>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ITunesUDocument>
3
+ <Version>1.1.1</Version>
4
+ <DeleteGroup>
5
+ <GroupHandle>grouphandle value</GroupHandle>
6
+ <GroupPath>grouppath value</GroupPath>
7
+ </DeleteGroup>
8
+ </ITunesUDocument>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ITunesUDocument>
3
+ <Version>1.1.1</Version>
4
+ <DeletePermission>
5
+ <ParentHandle>parenthandle value</ParentHandle>
6
+ <ParentPath>parentpath value</ParentPath>
7
+ <Credential>credential value</Credential>
8
+ </DeletePermission>
9
+ </ITunesUDocument>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ITunesUDocument>
3
+ <Version>1.1.1</Version>
4
+ <DeleteSection>
5
+ <SectionHandle>sectionhandle value</SectionHandle>
6
+ <SectionPath>sectionpath value</SectionPath>
7
+ </DeleteSection>
8
+ </ITunesUDocument>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ITunesUDocument>
3
+ <Version>1.1.1</Version>
4
+ <DeleteTrack>
5
+ <TrackHandle>trackhandle value</TrackHandle>
6
+ </DeleteTrack>
7
+ </ITunesUDocument>
@@ -0,0 +1,38 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ITunesUDocument>
3
+ <Version>1.1.1</Version>
4
+ <MergeCourse>
5
+ <CourseHandle>coursehandle value</CourseHandle>
6
+ <CoursePath>coursepath value</CoursePath>
7
+ <MergeByHandle>mergebyhandle value</MergeByHandle>
8
+ <Destructive>destructive value</Destructive>
9
+ <Course>
10
+ <Name>name value</Name>
11
+ <ShortName>shortname value</ShortName>
12
+ <Identifier>identifier value</Identifier>
13
+ <Instructor>instructor value</Instructor>
14
+ <Description>description value</Description>
15
+ <Group>
16
+ <Name>name value</Name>
17
+ <Handle>handle value</Handle>
18
+ <Track>
19
+ <Name>name value</Name>
20
+ <Handle>handle value</Handle>
21
+ <Kind>kind value</Kind>
22
+ <DiscNumber>discnumber value</DiscNumber>
23
+ <DurationMilliseconds>durationmilliseconds value
24
+ </DurationMilliseconds>
25
+ <AlbumName>albumname value</AlbumName>
26
+ <ArtistName>artistname value</ArtistName>
27
+ <DownloadURL>downloadurl value</DownloadURL>
28
+ </Track>
29
+ <Permission>
30
+ <Credential>credential value</Credential>
31
+ <Access>access value</Access>
32
+ </Permission>
33
+ </Group>
34
+ <AllowSubscription>allowsubscription value</AllowSubscription>
35
+ <ThemeHandle>themehandle value</ThemeHandle>
36
+ </Course>
37
+ </MergeCourse>
38
+ </ITunesUDocument>