omeka_client 0.0.1 → 0.0.2

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
  SHA1:
3
- metadata.gz: fe54ea6bb2500f310743cc83bf4c203356a0d25f
4
- data.tar.gz: 8a8134364d70c54aaf0cf3e241ea97141f238da6
3
+ metadata.gz: 9ff4f2bddc2555b7645ff60265bf425785d5ea97
4
+ data.tar.gz: d6333149ed0684f15812558ca5941b57dc0a8bf8
5
5
  SHA512:
6
- metadata.gz: 006f5a232c887a0084db1edfc9e83e44ce4551a786eb592a8b5075161a84650d31940450b2a85327f7af17dbb9409b6a06b146d6cd2e10db9c2e34aa5e7fc11f
7
- data.tar.gz: f2a89cea37789f8acaaf7a82e22458861853f72fe33e625f5381f6c965fb1106c1dfa4ef4fa944959b6b7cdc669f0da8686a6850b488e352ada68d7a0253ffee
6
+ metadata.gz: b5c3269e51e86f0d63044227ad2de0e103691703733624246abd630bc7e5d971cc587db22f99ddc5b67292b6ab885029a1c9ddff8d6d30903381a0981df5b5f3
7
+ data.tar.gz: 7143ea1c58405c9c0ff7bd5a214da4004008b178e87ce67b9a3925e91a983c4f88cde103f17d2f6ed3e8e80ebea586bf4a88541a80eb3627a1f5134273f8dd38
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # OmekaClient
1
+ # Omeka Client
2
2
 
3
3
  A REST client for [Omeka][], using the API introduced in Omeka 2.1.
4
4
 
@@ -28,10 +28,29 @@ First, load the gem in your script:
28
28
 
29
29
  Next, create a client to interact with your Omeka site. You'll need your endpoint and, optionally, an API key.
30
30
 
31
- client = OmekaClient::Client.new(http://localhost/omeka/api, "api_key")
31
+ client = OmekaClient::Client.new("http://localhost/omeka/api", "api_key")
32
32
  # => #<OmekaClient::Client:0x007f4307937aa0>
33
33
 
34
- You can use the convenience methods for easy access to data.
34
+ You can use the convenience methods for easy access to data. The most useful methods return classes that represent OmekaItems.
35
+
36
+ item = client.omeka_items(1)
37
+ item.id
38
+ # => 1
39
+ item.public
40
+ # => true
41
+ item.dublin_core.title
42
+ # => "Questions of the Soul"
43
+ item.dublin_core.author
44
+ # => "Hecker, Isaac Thomas, 1819-1888."
45
+ item.item_type
46
+ # => "book"
47
+ item.item_type_metadata.binding
48
+ # => "cloth"
49
+
50
+ item = client.omeka_items
51
+ # returns array of OmekaItem instances
52
+
53
+ There are some helper methods to get other results in other forms:
35
54
 
36
55
  site_info = client.site
37
56
  puts site_info['title']
@@ -43,7 +62,7 @@ You can use the convenience methods for easy access to data.
43
62
  puts items[0]['url']
44
63
  # => http://localhost/omeka/api/items/1
45
64
 
46
- If you want more flexibility, you can use the higher level methods.
65
+ If you want more flexibility about what you're requesting, you can use the lower-level methods.
47
66
 
48
67
  client.get('collections', 1)
49
68
 
@@ -61,7 +80,7 @@ You can generate the documentation by running `rake yard`.
61
80
 
62
81
  ## Future plans
63
82
 
64
- For now the gem only handles GET requests. I'm going to work on making methods that pull information out of Omeka as robust as possible before I deal with POST, PUT, and DELETE. Contributions are more than welcome.
83
+ For now the gem only handles GET requests. I'm going to work on making methods that pull information out of Omeka as robust as possible before I deal with POST, PUT, and DELETE. In particular, the class representations of Omeka items are important. Contributions are more than welcome.
65
84
 
66
85
  ## License
67
86
 
data/lib/omeka_client.rb CHANGED
@@ -2,12 +2,14 @@ require "rest"
2
2
  require "json"
3
3
  require "omeka_client/version"
4
4
  require "omeka_client/client"
5
+ require "omeka_client/omeka-item"
5
6
 
6
7
 
7
8
  #
8
9
  # The module wrapping the classes that do the work
9
10
  #
10
11
  # @author Lincoln Mullen
12
+ # @since 0.0.1
11
13
  #
12
14
  module OmekaClient
13
15
 
@@ -35,6 +35,7 @@ module OmekaClient
35
35
  # @param query [Hash] Additional query parameters
36
36
  #
37
37
  # @return [NetHttpPersistentResponseWrapper] A wrapper around the object
38
+ # @since 0.0.1
38
39
  def get(resource, id = nil, query = {} )
39
40
  url = self.endpoint + "/" + resource
40
41
  url += "/" + id.to_s unless id.nil?
@@ -51,6 +52,7 @@ module OmekaClient
51
52
  #
52
53
  # @return [Array or Hash] A hash of the representation of the object,
53
54
  # or an array of hashes.
55
+ # @since 0.0.1
54
56
  def get_hash(resource, id = nil, query = {} )
55
57
  response = self.get(resource, id, query)
56
58
  if response.code == 200
@@ -63,6 +65,31 @@ module OmekaClient
63
65
  # TODO: put
64
66
  # TODO: delete
65
67
 
68
+ # Methods that return classes
69
+ # -------------------------------------------------------------------
70
+
71
+ #
72
+ # Get an array or a single Omeka item represented as an OmekaItem class
73
+ # @param id [Integer] The ID of the item to return. No value gets an
74
+ # array of all the items.
75
+ # @param query = {} [Hash] Additional query parameters
76
+ # @since 0.0.2
77
+ #
78
+ # @return [OmekaItem] An OmekaItem representation of the desired item,
79
+ # or an array of OmekaItems
80
+ def omeka_items(id = nil, query = {} )
81
+ response = self.get_hash('items', id = id, query = query)
82
+ if id.nil?
83
+ items = Array.new
84
+ response.each do |item_hash|
85
+ items.push OmekaItem.new(item_hash)
86
+ end
87
+ return items
88
+ else
89
+ OmekaItem.new(response)
90
+ end
91
+ end
92
+
66
93
  # Convenience methods
67
94
  # -------------------------------------------------------------------
68
95
 
@@ -74,8 +101,9 @@ module OmekaClient
74
101
  end
75
102
 
76
103
  # Get a list of the resources available from the Omeka API
77
- #
104
+ #
78
105
  # @return [Hash] Returns a hash of the resources available via the API
106
+ # @since 0.0.1
79
107
  def resources
80
108
  self.get_hash('resources')
81
109
  end
@@ -85,6 +113,7 @@ module OmekaClient
85
113
  # TODO: Check that items are available in the resources
86
114
  #
87
115
  # @return [Array] Returns an array of item hashes
116
+ # @since 0.0.1
88
117
  def items
89
118
  self.get_hash('items')
90
119
  end
@@ -94,6 +123,7 @@ module OmekaClient
94
123
  # TODO: Check that items are available in the resources
95
124
  #
96
125
  # @return [Array] Returns an array of collection hashes
126
+ # @since 0.0.1
97
127
  def collections
98
128
  self.get_hash('collections')
99
129
  end
@@ -0,0 +1,63 @@
1
+ require "ostruct"
2
+
3
+ module OmekaClient
4
+
5
+ #
6
+ # A class to represent an item in an Omeka site
7
+ #
8
+ # @author Lincoln Mullen
9
+ # @since 0.0.2
10
+ #
11
+ class OmekaItem
12
+
13
+ # Instance variables for each of the main parts of the metadata
14
+ attr_accessor :id, :url, :public, :featured, :added, :modified, \
15
+ :item_type, :collection, :owner, :files, :tags, :dublin_core, \
16
+ :item_type_metadata, :extended_resources
17
+
18
+ #
19
+ # Parse the data we got from the API into handy methods
20
+ # @param hash [Hash] Uses the hash from OmekaClient::Client::get_hash
21
+ #
22
+ def initialize(hash)
23
+
24
+ # Some of these values have strings. Others return arrays or hashes.
25
+ @id = hash['id']
26
+ @url = hash['url']
27
+ @public = hash['public']
28
+ @featured = hash['featured']
29
+ @added = hash['added']
30
+ @modified = hash['modified']
31
+ @item_type = hash['item_type']
32
+ @collection = hash['collection']
33
+ @owner = hash['owner']
34
+ @files = hash['files']
35
+ @tags = hash['tags']
36
+ @extended_resources = ['extended_resources']
37
+
38
+ # OpenStruct.new requires a hash of method names and methods values,
39
+ # which we construct here for Dublin Core and for the Item Type
40
+ # Metadata. The downside is that we are discarding some data.
41
+ # Element names become method names: "Lesson Plan" to "lesson_plan"
42
+ dc_metadata = Hash.new
43
+ item_metadata = Hash.new
44
+ hash['element_texts'].each do |e|
45
+ if e['element_set']['name'] == "Dublin Core"
46
+ method_name = e['element']['name'].downcase.gsub(/\s/, '_')
47
+ dc_metadata[method_name] = e['text']
48
+ elsif e['element_set']['name'] == "Item Type Metadata"
49
+ method_name = e['element']['name'].downcase.gsub(/\s/, '_')
50
+ item_metadata[method_name] = e['text']
51
+ end
52
+ end
53
+
54
+ # The OpenStruct will provide methods of the style
55
+ # item.dublin_core.title
56
+ @dublin_core = OpenStruct.new(dc_metadata)
57
+ @item_type_metadata = OpenStruct.new(item_metadata)
58
+
59
+ end
60
+
61
+ end
62
+
63
+ end
@@ -1,4 +1,4 @@
1
1
  module OmekaClient
2
2
  # The version number
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
@@ -1,14 +1,14 @@
1
1
  require "minitest/autorun"
2
2
  require "omeka_client"
3
3
 
4
- # Set up an test client
5
- test_endpoint = "http://localhost/omeka-2.1-rc1/api"
6
- test_api_key = "c56c8f542bc98483b71896523d4faa6321de193b"
7
- resources = ["items", "collections"]
8
- client = OmekaClient::Client.new(test_endpoint, test_api_key)
9
-
10
4
  describe OmekaClient::Client do
11
5
 
6
+ # Setup a test client
7
+ test_endpoint = "http://localhost/omeka-2.1-rc1/api"
8
+ test_api_key = "c56c8f542bc98483b71896523d4faa6321de193b"
9
+ resources = ["items", "collections"]
10
+ client = OmekaClient::Client.new(test_endpoint, test_api_key)
11
+
12
12
  it "must have an endpoint" do
13
13
  client.endpoint.must_equal test_endpoint
14
14
  end
@@ -67,4 +67,16 @@ describe OmekaClient::Client do
67
67
  client.collections.wont_be_empty
68
68
  end
69
69
 
70
+ it "must return an OmekaItem class" do
71
+ puts client.omeka_items(1).must_be_instance_of OmekaClient::OmekaItem
72
+ end
73
+
74
+ it "must return an array of OmekaItem classes" do
75
+ puts client.omeka_items.must_be_instance_of Array
76
+ [0,1].each do |number|
77
+ puts client.omeka_items[number].must_be_instance_of \
78
+ OmekaClient::OmekaItem
79
+ end
80
+ end
81
+
70
82
  end
@@ -0,0 +1,78 @@
1
+ require "minitest/autorun"
2
+ require "omeka_client"
3
+
4
+ # Set up an test client
5
+ test_endpoint = "http://localhost/omeka-2.1-rc1/api"
6
+ test_api_key = "c56c8f542bc98483b71896523d4faa6321de193b"
7
+ resources = ["items", "collections"]
8
+ client = OmekaClient::Client.new(test_endpoint, test_api_key)
9
+ # item_array = client.omeka_items
10
+ item_single = client.omeka_items(1)
11
+
12
+
13
+ describe OmekaClient::OmekaItem do
14
+
15
+ it "should have an ID" do
16
+ item_single.id.must_equal 1
17
+ end
18
+
19
+ it "should have a URL" do
20
+ item_single.url.must_be_instance_of String
21
+ end
22
+
23
+ it "should have a URL" do
24
+ item_single.url.must_be_instance_of String
25
+ end
26
+
27
+ it "should know whether it's public" do
28
+ item_single.public.wont_be_nil
29
+ end
30
+
31
+ it "should know whether it's featured" do
32
+ item_single.featured.wont_be_nil
33
+ end
34
+
35
+ it "should have a date added" do
36
+ item_single.added.must_be_instance_of String
37
+ end
38
+
39
+ it "should have a date modified" do
40
+ item_single.modified.must_be_instance_of String
41
+ end
42
+
43
+ it "should have an item type" do
44
+ item_single.item_type.must_be_instance_of Hash
45
+ end
46
+
47
+ it "should have a collection" do
48
+ item_single.collection.must_be_instance_of Hash
49
+ end
50
+
51
+ it "should have files" do
52
+ item_single.files.must_be_instance_of Hash
53
+ end
54
+
55
+ it "should have tags" do
56
+ item_single.tags.must_be_instance_of Array
57
+ end
58
+
59
+ it "should have extended resources" do
60
+ item_single.extended_resources.must_be_instance_of Array
61
+ end
62
+
63
+ it "should have the Dublin Core metadata" do
64
+ item_single.dublin_core.must_be_instance_of OpenStruct
65
+ dc_fields = [:title, :subject, :contributor, :description, :creator, \
66
+ :source, :publisher, :date, :rights, :relation, :format, :language, \
67
+ :type, :identifier, :coverage]
68
+ dc_fields.each do |field|
69
+ item_single.dublin_core.send(field).must_be_instance_of String
70
+ end
71
+ end
72
+
73
+ it "should have the Item Type metadata" do
74
+ item_single.item_type_metadata.must_be_instance_of OpenStruct
75
+ # The item type is unpredictable, so it's hard to be more specific
76
+ end
77
+
78
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omeka_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lincoln Mullen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-13 00:00:00.000000000 Z
11
+ date: 2013-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,9 +94,11 @@ files:
94
94
  - Rakefile
95
95
  - lib/omeka_client.rb
96
96
  - lib/omeka_client/client.rb
97
+ - lib/omeka_client/omeka-item.rb
97
98
  - lib/omeka_client/version.rb
98
99
  - omeka_client.gemspec
99
- - test/omekaclient_test.rb
100
+ - test/client_test.rb
101
+ - test/omeka-item_test.rb
100
102
  homepage: https://github.com/lmullen/omeka_client
101
103
  licenses:
102
104
  - GPLv3
@@ -122,5 +124,6 @@ signing_key:
122
124
  specification_version: 4
123
125
  summary: A REST client to access the Omeka API
124
126
  test_files:
125
- - test/omekaclient_test.rb
127
+ - test/client_test.rb
128
+ - test/omeka-item_test.rb
126
129
  has_rdoc: