dor-fetcher 0.0.2 → 1.0.0

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.
Files changed (3) hide show
  1. checksums.yaml +5 -13
  2. data/lib/dor-fetcher.rb +79 -10
  3. metadata +72 -10
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZjM1ZThlZWJiOGM0MzVmZTAwZTRkYjU5MzIxMDZkNzhhMTQ0YjNkMA==
5
- data.tar.gz: !binary |-
6
- ZDAyYWRlOTUzZDYwNjQxNDI1MjgwMGIyMzhlYTRmNGU2YTEwMTk3Ng==
2
+ SHA1:
3
+ metadata.gz: 5a1fe464fcac95b99e0136e9b2efed102927f6c3
4
+ data.tar.gz: 1ef59399da0edc8abfb759d0f385b7ef3fff0a56
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- MGE2NmNjZjIxMzk2YmUwODA3NWYwZWM2NzMyNzQ5MWY1YmFiYzY2OTExNzhj
10
- YWJkNzRiYTQwODQ0ZDgyNWFhN2EzMTRkZmE3YmFkZWI4ZTY5OGRjZTFkMmUy
11
- OTQ2NGJkOGM2ODQ1M2NjNzBiM2MyMzEwOGYzZjM2ZTJkODhkYTE=
12
- data.tar.gz: !binary |-
13
- MTUxOThlMTUzMjlmNzg1MDdmODAwZmY5ZjEwYmNmODc3ZTA2MmM0MjQwMmMy
14
- NDRiODQwY2I1NjRhYTUyMzg2YWU1M2ZmYzc2ZTA5NWYzZTU3ZmU4MTk2ZGE4
15
- NjAyOGU4NjBlYzYyMDYyYWUyZjliMjYzYjUyYjJjNjA2ZTRjMWY=
6
+ metadata.gz: 1ee6988a6c963de4f25c3fd11debfa586f7aa8d2b5467ea04f163e46c61f850f8efa12ebfde2fe0897cfb5e8a72a14ef690fc38bbfe10356750fe1fb223aa7d9
7
+ data.tar.gz: 0233b07bb7d84b5aba138aaf488d9339e289b26cea04be5492ec39058e7677828ae3290f584929819907133936d05cef175e4dea97c0ada13392fd1768fa7ce4
data/lib/dor-fetcher.rb CHANGED
@@ -9,48 +9,87 @@ module DorFetcher
9
9
  @@count_only_param = "?rows=0"
10
10
  @@default_service_url = 'http://127.0.0.1:3000'
11
11
 
12
- #Call me with {:service_url='http://SERVICEURL'}
12
+ #Create a new instance of DorFetcher::Client
13
+ #@param options [Hash] Currently supports only :service_url, the base
14
+ #url for API queries. Defaults to http://127.0.0.1:3000
15
+ #@example
16
+ # df = DorFetcher::Client.new({:service_url='http://SERVICEURL'})
13
17
  def initialize options = {}
14
18
  #TODO: Check for a well formed URL and a 200 from the destination before just accepting this
15
19
  @service_url = options[:service_url] || @@default_service_url
16
20
  end
17
- #options :count_only, :first_modified, :last_modified
21
+
22
+
23
+ #Get a hash of all members of a collection and the collection itself
24
+ #
25
+ #@param collection [String] we expect pid/druid
26
+ #@param params [Hash] we expect :count_only or any of @@supported_params
27
+ #@return [Hash] Hash of all objects in the collection including
28
+ #pid/druid, title, date last modified, and count
18
29
  def get_collection(collection, params = {})
19
30
  return query_api('collection', collection, params)
20
31
  end
21
32
 
33
+ #Get the count of the number of items in a collection, including the
34
+ #collection object itself
35
+ #@param collection [String] we expect pid/druid
36
+ #@param params [Hash] we expect :count_only or any of @@supported_params
37
+ #@return [Integer] Number found
22
38
  def get_count_for_collection(collection, params = {})
23
39
  return query_api('collection', collection, add_count_only_param(params))
24
40
  end
25
41
 
42
+ #Get a Hash of all the collections in the digital repository
43
+ #@return [Hash] Hash of all collections including pid/druid, title,
44
+ #date last modified, and count
26
45
  def list_all_collections
27
46
  return query_api('collection', '', {})
28
47
  end
29
48
 
49
+ #Get a Count of all the collections in the digital repository
50
+ #@return [Integer] Number of all collections
30
51
  def total_collection_count
31
52
  return query_api('collection', '', {:count_only=>true})
32
53
  end
33
54
 
34
- #options :count_only, :first_modified, :last_modified
55
+ #Get the APO and all objects governed by the APO
56
+ #@param apo [String] pid/druid of the APO
57
+ #@param params [Hash] we expect :count_only or any of @@supported_params
58
+ #@return [Hash] Hash of all objects governed by the APO including
59
+ #pid/druid, title, date last modified, and count
35
60
  def get_apo(apo, params= {})
36
61
  return query_api('apo', apo, params)
37
62
  end
38
63
 
64
+ #Get the count of the number of objects in an APO, including the
65
+ #APO object itself
66
+ #@param apo [String] we expect pid/druid
67
+ #@param params [Hash] we expect :count_only or any of @@supported_params
68
+ #@return [Integer] Number found
39
69
  def get_count_for_apo(apo, params={})
40
70
  return query_api('apo', apo, add_count_only_param(params))
41
71
  end
42
72
 
73
+ #Get a Hash of all the APOs in the digital repository
74
+ #@return [Hash] Hash of all APOs including pid/druid, title,
75
+ #date last modified, and count
43
76
  def list_all_apos
44
77
  return query_api('apo', '', {})
45
78
  end
46
79
 
80
+ #Get a Count of all the APOs in the digital repository
81
+ #@return [Integer] Number of all APOs
47
82
  def total_apo_count
48
83
  return query_api('apo', '', {:count_only=>true})
49
84
  end
50
85
 
86
+ #Method to parse full Hash into an array containing only the druids
87
+ #
88
+ #@param response [Hash] Hash as returned by query_api
89
+ #@return [Array] the array listing all druids in the supplied Hash
51
90
  def druid_array(response)
52
91
  return_list = []
53
- j = JSON.parse(response)
92
+ j = response
54
93
  j.keys.each do |key|
55
94
  j[key].each do |item|
56
95
  return_list << item['druid'] if item['druid'] != nil
@@ -58,9 +97,17 @@ module DorFetcher
58
97
  end
59
98
  return return_list
60
99
  end
61
-
100
+ #Query a RESTful API and return the JSON result as a Hash
101
+ #@param base [String] The name of controller of the Rails App you wish to
102
+ #route to
103
+ #@param druid [String] The druid/pid of the object you wish to query,
104
+ #or empty string for no specific druid
105
+ #@param params [Hash] we expect :count_only or any of @@supported_params
106
+ #@return [Hash] Hash of all objects governed by the APO including
107
+ #pid/druid, title, date last modified, and count
62
108
  def query_api(base, druid, params)
63
109
  url = "#{@service_url}/#{base}/#{druid}#{add_params(params)}"
110
+
64
111
  begin
65
112
  resp = Net::HTTP.get_response(URI.parse(url))
66
113
  rescue
@@ -68,26 +115,48 @@ module DorFetcher
68
115
  end
69
116
 
70
117
  return resp.body.to_i if params[:count_only] == true
71
- return resp.body
72
-
118
+ return JSON[resp.body] #Convert the response JSON to a Ruby Hash
73
119
  end
74
120
 
75
- def add_params(params)
121
+ #Transform a parameter hash into a RESTful API parameter format
122
+ #
123
+ #@param input_params [Hash] {The existing parameters, eg time and tag}
124
+ #@return [String] parameters in the Hash now formatted into a RESTful parameter string
125
+ def add_params(input_params)
76
126
  args_string = ""
77
127
 
78
128
  #Handle Count Only
79
- args_string << @@count_only_param if params[:count_only] == true
129
+ args_string << @@count_only_param if input_params[:count_only] == true
80
130
 
131
+ #If we did not add in a rows=0 param, args_string will have a size of
132
+ #zero
133
+ #If we did add in a rows=0 param, this will set count to greater than
134
+ #zero
135
+ count = args_string.size
81
136
  @@supported_params.each do |p|
82
- args_string << "#?{p.to_s}=#{params[p]}" if params[p] != nil
137
+ operator = "?"
138
+ operator = "&" if count > 0
139
+ args_string << "#{operator}#{p.to_s}=#{input_params[p]}" if input_params[p] != nil
140
+ count += 1
83
141
  end
84
142
  return args_string
85
143
  end
86
144
 
145
+ #Add the parameter so query_api knows only to get a count of the documents in solr
146
+ #
147
+ #@param params [Hash] {The existing parameters, eg time and tag}
148
+ #@return [Hash] the params Hash plus the key/value set :count_only=>true
87
149
  def add_count_only_param(params)
88
150
  params.store(:count_only, true)
89
151
  return params
90
152
  end
153
+
154
+ #Get the Base URL this instance will run RESTful API calls against
155
+ #@return [String] the url
156
+ def service_url
157
+ return @service_url
158
+ end
159
+
91
160
  end
92
161
 
93
162
  end
metadata CHANGED
@@ -1,38 +1,100 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dor-fetcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carrick Rogers
8
+ - Laney McGlohon
9
+ - Bess Sadler
8
10
  autorequire:
9
11
  bindir: bin
10
12
  cert_chain: []
11
- date: 2014-10-10 00:00:00.000000000 Z
13
+ date: 2014-10-21 00:00:00.000000000 Z
12
14
  dependencies:
13
15
  - !ruby/object:Gem::Dependency
14
16
  name: rspec
15
17
  requirement: !ruby/object:Gem::Requirement
16
18
  requirements:
17
- - - ! '>='
19
+ - - ">="
18
20
  - !ruby/object:Gem::Version
19
21
  version: '0'
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
23
25
  requirements:
24
- - - ! '>='
26
+ - - ">="
25
27
  - !ruby/object:Gem::Version
26
28
  version: '0'
27
- description: Wrapped for the Dor Fetcher Services restful api.
28
- email: carrickr@stanford.edu
29
+ - !ruby/object:Gem::Dependency
30
+ name: vcr
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: webmock
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ - !ruby/object:Gem::Dependency
58
+ name: yard
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: coveralls
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ description: Wrapper for the Dor Fetcher Services RESTful API.
86
+ email:
87
+ - carrickr@stanford.edu
88
+ - laneymcg@stanford.edu
89
+ - bess@stanford.edu
29
90
  executables: []
30
91
  extensions: []
31
92
  extra_rdoc_files: []
32
93
  files:
33
94
  - lib/dor-fetcher.rb
34
95
  homepage: http://www.stanford.edu
35
- licenses: []
96
+ licenses:
97
+ - Apache-2.0
36
98
  metadata: {}
37
99
  post_install_message:
38
100
  rdoc_options: []
@@ -40,17 +102,17 @@ require_paths:
40
102
  - lib
41
103
  required_ruby_version: !ruby/object:Gem::Requirement
42
104
  requirements:
43
- - - ! '>='
105
+ - - ">="
44
106
  - !ruby/object:Gem::Version
45
107
  version: '0'
46
108
  required_rubygems_version: !ruby/object:Gem::Requirement
47
109
  requirements:
48
- - - ! '>='
110
+ - - ">="
49
111
  - !ruby/object:Gem::Version
50
112
  version: '0'
51
113
  requirements: []
52
114
  rubyforge_project:
53
- rubygems_version: 2.1.2
115
+ rubygems_version: 2.2.2
54
116
  signing_key:
55
117
  specification_version: 4
56
118
  summary: DorFetcher Gem