rtunesu 0.2.3 → 0.2.4
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.
- data/History.txt +2 -1
- data/README.txt +7 -2
- data/lib/rtunesu/document.rb +4 -1
- data/lib/rtunesu/entities/theme.rb +1 -0
- data/lib/rtunesu/entities/track.rb +11 -1
- data/lib/rtunesu/entity.rb +6 -3
- data/lib/rtunesu/version.rb +1 -1
- metadata +2 -2
data/History.txt
CHANGED
data/README.txt
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
= RTunesU
|
2
2
|
|
3
3
|
== DESCRIPTION:
|
4
|
-
RTunesU is a ruby library for accessing Apple's iTunes U Webservices to integrate your education institutions iTunes U account into ruby applications
|
4
|
+
RTunesU is a ruby library for accessing Apple's iTunes U Webservices to integrate your education institutions iTunes U account into ruby applications. iTunes U's Webservices interface is fairly primitive by today's standards for XML based APIs. Some known flaws of iTunes U
|
5
|
+
* No arbitrary search
|
6
|
+
* Queries for missing objects return an XML document representing the entire institution instead of returning an error
|
7
|
+
* Does not follow REST principles
|
8
|
+
* Does not use HTTP status codes meaningfully
|
9
|
+
* Collections not contained in an outer element
|
5
10
|
|
6
11
|
== FEATURES/PROBLEMS:
|
7
12
|
- TODO: file uploading
|
@@ -14,7 +19,7 @@ http://github.com/trek/rtunesu/wikis
|
|
14
19
|
RTunesU depends on the ruby-hmac, hpricot, and builder libraries. These should all install automatically as dependencies when installing RTunesU
|
15
20
|
|
16
21
|
== INSTALL:
|
17
|
-
RTunesU install via rubygems
|
22
|
+
RTunesU install via rubygems with
|
18
23
|
gem instal rtunesu
|
19
24
|
|
20
25
|
== LICENSE:
|
data/lib/rtunesu/document.rb
CHANGED
@@ -6,12 +6,15 @@ module RTunesU
|
|
6
6
|
# c = Course.find(12345, itunes_connection_object)
|
7
7
|
# c.Name # "Exemple Course"
|
8
8
|
# c.Name = 'Example Course'
|
9
|
-
# c.save # genertes and sends a Document::Merge object with the Course data.
|
9
|
+
# c.save(itunes_connection_object) # genertes and sends a Document::Merge object with the Course data.
|
10
10
|
module Document
|
11
11
|
class Base
|
12
12
|
INDENT = 2
|
13
13
|
attr_accessor :builder, :source, :options, :xml
|
14
14
|
|
15
|
+
# Creates a new XML document using Builder. Includes the required XML entities of
|
16
|
+
# ITunesUDocument and Version, then calls tag_action to add in specific XML entities for
|
17
|
+
# the type of document being built. tag_action is defined in each sublcass of Document.
|
15
18
|
def initialize(source, options = {})
|
16
19
|
self.source, self.options = source, options
|
17
20
|
builder = Builder::XmlMarkup.new(:indent => INDENT)
|
@@ -13,11 +13,21 @@ module RTunesU
|
|
13
13
|
# DownloadURL
|
14
14
|
# Comment
|
15
15
|
class Track < Entity
|
16
|
-
# Tracks can only be found from within their Course. There is currently no way to find a Track separete from its Course.
|
16
|
+
# Tracks can only be found from within their Course. There is currently no way to find a Track separete from its Course in iTunes U.
|
17
17
|
def self.find(handle, course_handle, connection)
|
18
18
|
entity = self.new(:handle => handle)
|
19
19
|
entity.source_xml = Course.find(course_handle, connection).source_xml.at("Handle[text()=#{entity.handle}]..")
|
20
20
|
entity
|
21
21
|
end
|
22
|
+
|
23
|
+
# Duration in millseconds is the one attribute in plural form that is not a collection
|
24
|
+
def DurationMilliseconds
|
25
|
+
self.value_from_edits_or_store('DurationMilliseconds')
|
26
|
+
end
|
27
|
+
|
28
|
+
# Duration in millseconds is the one attribute in plural form that is not a collection
|
29
|
+
def DurationMilliseconds=(duration)
|
30
|
+
self.edits['DurationMilliseconds'] = duration
|
31
|
+
end
|
22
32
|
end
|
23
33
|
end
|
data/lib/rtunesu/entity.rb
CHANGED
@@ -39,7 +39,7 @@ module RTunesU
|
|
39
39
|
self.attributes = {}
|
40
40
|
attrs.each {|attribute, value| self.send("#{attribute}=", value)}
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
# Finds a specific entity in iTunes U. To find an entity you will need to know both its type (Course, Group, etc) and handle. Handles uniquely identify entities in iTunes U and the entity type is used to search the returned XML for the specific entity you are looking for. For example,
|
44
44
|
# Course.find(123456, rtunes_connection_object)
|
45
45
|
def self.find(handle, connection)
|
@@ -71,7 +71,8 @@ module RTunesU
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def method_missing(method_name, args = nil)
|
74
|
-
# introspect the kind of method call (read one attribute,
|
74
|
+
# introspect the kind of method call (read one attribute,
|
75
|
+
# read an array of related items, write one attribute, write an array of related items)
|
75
76
|
case method_name.to_s.match(/(s)*(=)*$/).captures
|
76
77
|
when [nil, "="] : self.edits[method_name.to_s[0..-2]] = args
|
77
78
|
when ["s", "="] : self.edits[method_name.to_s[0..-2]] = args
|
@@ -101,7 +102,7 @@ module RTunesU
|
|
101
102
|
# course.class #=> 'RTunesU::Course'
|
102
103
|
# course.class_name #=> 'Course'
|
103
104
|
def class_name
|
104
|
-
self.class.to_s.split('
|
105
|
+
self.class.to_s.split('::').last
|
105
106
|
end
|
106
107
|
|
107
108
|
# Returns the handle of the entitiy's parent. This can either be set directly as a string or interger or will access the parent entity. Sometimes you know the parent_handle without the parent object (for example, stored locally from an earlier request). This allows you to add a new Entity to iTunes U without first firing a reques for a prent entity (For example, if your institution places all inside the same Section, you want to add a new Section to your Site, or a new Group to a course tied to your institution's LMS).
|
@@ -116,11 +117,13 @@ module RTunesU
|
|
116
117
|
}
|
117
118
|
end
|
118
119
|
|
120
|
+
# called when .save is called on an object that is already stored in iTunes U
|
119
121
|
def update(connection)
|
120
122
|
connection.process(Document::Merge.new(self).xml)
|
121
123
|
self
|
122
124
|
end
|
123
125
|
|
126
|
+
# called when .save is called on an object that has no Handle (i.e. does not already exist in iTunes U)
|
124
127
|
def create(connection)
|
125
128
|
response = Hpricot.XML(connection.process(Document::Add.new(self).xml))
|
126
129
|
raise Exception, response.at('error').innerHTML if response.at('error')
|
data/lib/rtunesu/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rtunesu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Trek Glowacki
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-09-
|
12
|
+
date: 2008-09-12 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|