lyber-core 1.3.0 → 3.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Y2NhYmQxMTVlZWIwZWY3MjM1YmI5YjFmYWQ2YzljMzVjYzU4NGU4Mg==
5
+ data.tar.gz: !binary |-
6
+ YzI0OGFmZDIwMmVlNTNjNjM4MmY5ZWZhM2FlYWViMjg4ZDUwNGIwNA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ NjYzYzYxYWQxZDE2YjA0Y2I4MWExODdlZTIwNDdhOTJjYjZlZGYzZGUxNTdh
10
+ NGZlZDVkMmRjY2I5NWUwMDkyZTJiMzJlMDIxNjZjMDhhNGE4NDJkY2UxMTM3
11
+ ZjI4MzViODRkMzRlOWI5MDI3YjFlOWMyMmY5MDNiYTNmNjljODM=
12
+ data.tar.gz: !binary |-
13
+ NDAwMGY4ZDBmMjYyYmU1YjI5ZjU2NWFkYjRkMTg1ZTgyZTUyMDAxZTZlZTkz
14
+ OWVlY2NkOGE3OGY3YmMzZjZjYzgwNTZjNDc1OGY4NmUzODBhOGEwMzIzODM4
15
+ NGJhZDcyOTZhZjlhMGVmNjZlOTE4YWJiNjg5ZGMzZjBkODI1MTg=
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Stanford University Library
1
+ Copyright (c) 2014 Stanford University Library
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md ADDED
@@ -0,0 +1,81 @@
1
+ # lyber_core
2
+
3
+ ## Robot Creation
4
+
5
+ Create a class that mixes in `LyberCore::Robot`
6
+
7
+ * In the intializer, call `super` with the repository, workflow name, step name
8
+ * Your class `#perform` method will perform the actual work, with `druid` passed in as the one and only argument
9
+
10
+ ```ruby
11
+ module Robots
12
+ module DorRepo
13
+ module Accession
14
+
15
+ class Shelve
16
+ include LyberCore::Robot
17
+
18
+ def initialize
19
+ super('dor', 'accessionWF', 'shelve')
20
+ end
21
+
22
+ def perform druid
23
+ obj = Dor::Item.find(druid)
24
+ obj.shelve
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+ end
31
+ end
32
+ ```
33
+
34
+ ## Robot Environment Setup
35
+
36
+ * Create a `config/boot.rb` file to load the classpath, classes and configuration that your robot will need in order to run.
37
+ See the [boot.rb file from the Common-Accessioning robot suite](https://github.com/sul-dlss/common-accessioning/blob/master/config/boot.rb) as an example
38
+
39
+ * Add `require 'resque/tasks'` to your `Rakefile`
40
+
41
+ * Create an `environment` task within your `Rakefile` that requires your `config/boot.rb` file
42
+
43
+ #### Example Rakefile modifications
44
+ ```ruby
45
+ require 'resque/tasks'
46
+ ...
47
+ task :environment do
48
+ require_relative 'config/boot'
49
+ end
50
+ ```
51
+
52
+ ## Start the Robot
53
+
54
+ * Use rake to start your robot, specifying the Resque queue as the environment variable `QUEUE`
55
+
56
+ ```
57
+ $ QUEUE=accessionWF_shelve rake environment resque:work
58
+ ```
59
+
60
+ ## Enqueing a Job
61
+
62
+ ```ruby
63
+ require 'resque'
64
+ Resque.enqueue_to('accessionWF_shelve'.to_sym, Robot::DorRepo::Accession::Shelve, 'druid:aa123bb4567')
65
+ ```
66
+
67
+
68
+ ## Releases
69
+ * **3.0** Robot overhaul. Use `resque` for job management and `bluepill` for process management
70
+ * **2.1.1** Relax dor-services-gem version requirement
71
+ * **2.0** Moved what was left of DorService (namely get_objects_for_workstep()) to dor-services' Dor::WorkflowService. Removed IdentityMetadata and DublinCore XML models. Factored out all remaining global constants. Removed unnecessary dependencies.
72
+ * **1.3** Started to use Dor::Config for workspace configuration
73
+ * **1.0.0** Factored all Dor::* classes and object models out of lyber-core and into a separate dor-services gem. WARNING: MAY BREAK COMPATIBILITY WITH PREVIOUS DOR-ENABLED CODE.
74
+ * **0.9.8** Created branch for legacy work "0.9-legacy". Robots can now be configured with fully qualified workflows for prerequisites
75
+ eg <i>dor:googleScannedBookWF:register-object</i>
76
+ * **0.9.2** Workflow bug fixes. Last version that supports active-fedora 1.0.7
77
+ * We recommend that you **DO NOT USE** any version older than these
78
+
79
+ ## Copyright
80
+
81
+ Copyright (c) 2014 Stanford University Library. See LICENSE for details.
data/lib/lyber_core.rb CHANGED
@@ -1,17 +1,3 @@
1
- require 'lyber_core/config'
2
- require 'dlss_service'
3
- require 'dor-services'
4
- require 'lyber_core/connection'
5
1
  require 'lyber_core/destroyer'
6
2
  require 'lyber_core/log'
7
- require 'lyber_core/robots/robot'
8
- require 'lyber_core/robots/service_controller'
9
- require 'lyber_core/robots/workflow'
10
- require 'lyber_core/robots/workspace'
11
- require 'lyber_core/robots/work_queue'
12
- require 'lyber_core/robots/work_item'
13
- require 'lyber_core/exceptions/empty_queue'
14
- require 'lyber_core/exceptions/fatal_error'
15
- require 'lyber_core/exceptions/service_error'
16
- require 'lyber_core/exceptions/item_error'
17
-
3
+ require 'lyber_core/robot'
@@ -22,16 +22,9 @@ module LyberCore
22
22
 
23
23
  def get_druid_list
24
24
  begin
25
- druid_list = []
26
- url_string = "#{WORKFLOW_URI}/workflow_queue?repository=#{@repository}&workflow=#{@workflow}&completed=#{@registration_robot}"
27
- LyberCore::Log.info("Fetching druids from #{url_string}")
28
- doc = Nokogiri::XML(open(url_string))
29
- doc.xpath("//objects/object/@id").each do |id|
30
- druid_list << id.to_s
31
- end
32
- return druid_list
25
+ Dor::WorkflowService.get_objects_for_workstep @registration_robot, '', @repository, @workflow
33
26
  rescue Exception => e
34
- raise e, "Couldn't fetch druid list from #{url_string}"
27
+ raise e, "Couldn't fetch druid list"
35
28
  end
36
29
  end
37
30
 
@@ -1,15 +1,15 @@
1
1
 
2
2
  module LyberCore
3
-
3
+
4
4
  class LyberCore::Log
5
5
  require 'logger'
6
-
6
+
7
7
  # Default values
8
- DEFAULT_LOGFILE = "/tmp/lybercore_log.log"
8
+ DEFAULT_LOGFILE = "/tmp/lybercore_log.log" # TODO change to STDOUT?
9
9
  DEFAULT_LOG_LEVEL = Logger::INFO
10
- DEFAULT_FORMATTER = proc{|s,t,p,m|"%5s [%s] (%s) %s :: %s\n" % [s,
10
+ DEFAULT_FORMATTER = proc{|s,t,p,m|"%5s [%s] (%s) %s :: %s\n" % [s,
11
11
  t.strftime("%Y-%m-%d %H:%M:%S"), $$, p, m]}
12
-
12
+
13
13
  # Initial state
14
14
  @@logfile = DEFAULT_LOGFILE
15
15
  @@log ||= Logger.new(@@logfile)
@@ -17,25 +17,25 @@ module LyberCore
17
17
  # $stderr.reopen(@@logfile)
18
18
  @@log.level = DEFAULT_LOG_LEVEL
19
19
  @@log.formatter = DEFAULT_FORMATTER
20
-
20
+
21
21
  # Restore LyberCore::Log to its default state
22
22
  def Log.restore_defaults
23
23
  @@log.level = DEFAULT_LOG_LEVEL
24
24
  Log.set_logfile(DEFAULT_LOGFILE)
25
25
  @@log.formatter = DEFAULT_FORMATTER
26
26
  end
27
-
27
+
28
28
  # The current location of the logfile
29
29
  def Log.logfile
30
30
  return @@logfile
31
31
  end
32
-
33
32
 
34
-
35
- # Accepts a filename as an argument, and checks to see whether that file can be
33
+
34
+
35
+ # Accepts a filename as an argument, and checks to see whether that file can be
36
36
  # opened for writing. If it can be opened, it closes the existing Logger object
37
37
  # and re-opens it with the new logfile location. It raises an exception if it
38
- # cannot write to the specified logfile.
38
+ # cannot write to the specified logfile.
39
39
  def Log.set_logfile(new_logfile)
40
40
  begin
41
41
  current_log_level = @@log.level
@@ -47,12 +47,12 @@ module LyberCore
47
47
  rescue Exception => e
48
48
  raise e, "Couldn't initialize logfile #{new_logfile} because\n#{e.message}: #{e.backtrace.join(%{\n})}}"
49
49
  end
50
-
50
+
51
51
  end
52
-
53
- # Set the log level.
54
- # See http://ruby-doc.org/core/classes/Logger.html for more info.
55
- # Possible values are:
52
+
53
+ # Set the log level.
54
+ # See http://ruby-doc.org/core/classes/Logger.html for more info.
55
+ # Possible values are:
56
56
  # Logger::FATAL (4): an unhandleable error that results in a program crash
57
57
  # Logger::ERROR (3): a handleable error condition
58
58
  # Logger::WARN (2): a warning
@@ -72,47 +72,43 @@ module LyberCore
72
72
  raise e, "Couldn't set log level because\n#{e.message}: #{e.backtrace.join(%{\n})}"
73
73
  end
74
74
  end
75
-
75
+
76
76
  # Return the current log level
77
77
  def Log.level
78
78
  @@log.level
79
79
  end
80
-
80
+
81
81
  def Log.fatal(msg)
82
82
  @@log.add(Logger::FATAL) { msg }
83
83
  end
84
-
84
+
85
85
  def Log.error(msg)
86
86
  @@log.add(Logger::ERROR) { msg }
87
87
  end
88
-
88
+
89
89
  def Log.warn(msg)
90
90
  @@log.add(Logger::WARN) { msg }
91
91
  end
92
-
92
+
93
93
  def Log.info(msg)
94
94
  @@log.add(Logger::INFO) { msg }
95
95
  end
96
-
96
+
97
97
  def Log.debug(msg)
98
98
  @@log.add(Logger::DEBUG) { msg }
99
99
  end
100
100
 
101
101
  def Log.exception(e)
102
102
  msg = Log.exception_message(e)
103
- if e.is_a?(LyberCore::Exceptions::FatalError)
104
- Log.fatal(msg)
105
- else
106
- Log.error(msg)
107
- end
103
+ Log.error(msg)
108
104
  end
109
105
 
110
106
  def Log.exception_message(e)
111
107
  msg = e.inspect.split($/).join('; ') + "\n"
112
108
  msg << e.backtrace.join("\n") if(e.backtrace)
113
109
  end
114
-
110
+
115
111
  end
116
-
117
-
112
+
113
+
118
114
  end
@@ -0,0 +1,67 @@
1
+ require 'benchmark'
2
+
3
+ module LyberCore
4
+ module Robot
5
+
6
+ # Add the ClassMethods to the class this is being mixed into
7
+ def self.included base
8
+ base.extend ClassMethods
9
+ end
10
+
11
+ module ClassMethods
12
+
13
+ # Called by job-manager on derived-class
14
+ # Instantiate the Robot and call #work with the passed in druid
15
+ def perform(druid)
16
+ # Get the name of the derived-class that was invoked
17
+ klazz = self.name.split('::').inject(Object) {|o,c| o.const_get c}
18
+ bot = klazz.new
19
+ bot.work druid
20
+ end
21
+ end
22
+
23
+ attr_accessor :check_queued_status
24
+
25
+ def initialize(repo, workflow_name, step_name, opts = {})
26
+ @repo = repo
27
+ @workflow_name = workflow_name
28
+ @step_name = step_name
29
+ @check_queued_status = opts.fetch(:check_queued_status, true)
30
+ # create option to check return value of process_item
31
+ # @check_if_processed = opts.fetch(:check_if_processed, false)
32
+ end
33
+
34
+ # Sets up logging, timing and error handling of the job
35
+ # Calls the #perform method, then sets workflow to 'completed' or 'error' depending on success
36
+ def work(druid)
37
+ LyberCore::Log.set_logfile($stdout) # let process manager(bluepill) handle logging
38
+ LyberCore::Log.info "Processing #{druid}"
39
+ return if @check_queued_status && !item_queued?(druid)
40
+
41
+ elapsed = Benchmark.realtime do
42
+ self.perform druid # implemented in the mixed-in robot class
43
+ end
44
+ # TODO check return value of #process_item if @check_if_processed == true ( have a self.processed? method that gets set in #process_item)
45
+ # if true returned, update step to completed
46
+ # otherwise, the robot did something like set the step to 'waiting' with a note
47
+
48
+ Dor::WorkflowService.update_workflow_status @repo, druid, @workflow_name, @step_name, 'completed', :elapsed => elapsed, :note => Socket.gethostname
49
+ LyberCore::Log.info "Finished #{druid} in #{elapsed}s"
50
+ rescue => e
51
+ LyberCore::Log.error e.message + "\n" + e.backtrace.join("\n")
52
+ Dor::WorkflowService.update_workflow_error_status @repo, druid , @workflow_name, @step_name, e.message, :error_text => Socket.gethostname
53
+ end
54
+
55
+ private
56
+ def item_queued?(druid)
57
+ status = Dor::WorkflowService.get_workflow_status(@repo, druid, @workflow_name, @step_name)
58
+ if(status =~ /queued/i)
59
+ return true
60
+ else
61
+ LyberCore::Log.warn "Item is not queued, but has status of '#{status}'. Will skip processing"
62
+ return false
63
+ end
64
+ end
65
+
66
+ end
67
+ end
metadata CHANGED
@@ -1,15 +1,9 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: lyber-core
3
- version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease:
6
- segments:
7
- - 1
8
- - 3
9
- - 0
10
- version: 1.3.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.2.2
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Alpana Pande
14
8
  - Bess Sadler
15
9
  - Chris Fitzpatrick
@@ -20,398 +14,165 @@ authors:
20
14
  autorequire:
21
15
  bindir: bin
22
16
  cert_chain: []
23
-
24
- date: 2011-07-21 00:00:00 -07:00
25
- default_executable:
26
- dependencies:
27
- - !ruby/object:Gem::Dependency
28
- version_requirements: &id001 !ruby/object:Gem::Requirement
29
- none: false
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- hash: 3
34
- segments:
35
- - 0
36
- version: "0"
37
- prerelease: false
38
- type: :runtime
39
- requirement: *id001
40
- name: actionpack
41
- - !ruby/object:Gem::Dependency
42
- version_requirements: &id002 !ruby/object:Gem::Requirement
43
- none: false
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- hash: 19
48
- segments:
49
- - 1
50
- - 2
51
- - 6
52
- version: 1.2.6
53
- prerelease: false
17
+ date: 2014-05-08 00:00:00.000000000 Z
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
20
+ name: dor-workflow-service
21
+ requirement: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ~>
24
+ - !ruby/object:Gem::Version
25
+ version: '1.6'
26
+ - - ! '>='
27
+ - !ruby/object:Gem::Version
28
+ version: 1.6.3
54
29
  type: :runtime
55
- requirement: *id002
56
- name: active-fedora
57
- - !ruby/object:Gem::Dependency
58
- version_requirements: &id003 !ruby/object:Gem::Requirement
59
- none: false
60
- requirements:
61
- - - ">="
62
- - !ruby/object:Gem::Version
63
- hash: 3
64
- segments:
65
- - 0
66
- version: "0"
67
30
  prerelease: false
68
- type: :runtime
69
- requirement: *id003
70
- name: daemons
71
- - !ruby/object:Gem::Dependency
72
- version_requirements: &id004 !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- hash: 19
78
- segments:
79
- - 0
80
- - 3
81
- - 0
82
- version: 0.3.0
83
- prerelease: false
84
- type: :runtime
85
- requirement: *id004
86
- name: dor-services
87
- - !ruby/object:Gem::Dependency
88
- version_requirements: &id005 !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ">="
92
- - !ruby/object:Gem::Version
93
- hash: 27
94
- segments:
95
- - 0
96
- - 1
97
- - 0
98
- version: 0.1.0
99
- prerelease: false
100
- type: :runtime
101
- requirement: *id005
102
- name: bagit
103
- - !ruby/object:Gem::Dependency
104
- version_requirements: &id006 !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - "="
108
- - !ruby/object:Gem::Version
109
- hash: 113
110
- segments:
111
- - 1
112
- - 4
113
- - 3
114
- - 1
115
- version: 1.4.3.1
116
- prerelease: false
117
- type: :runtime
118
- requirement: *id006
119
- name: nokogiri
120
- - !ruby/object:Gem::Dependency
121
- version_requirements: &id007 !ruby/object:Gem::Requirement
122
- none: false
123
- requirements:
124
- - - ">="
125
- - !ruby/object:Gem::Version
126
- hash: 15
127
- segments:
128
- - 0
129
- - 0
130
- - 8
131
- version: 0.0.8
132
- prerelease: false
133
- type: :runtime
134
- requirement: *id007
135
- name: solr-ruby
136
- - !ruby/object:Gem::Dependency
137
- version_requirements: &id008 !ruby/object:Gem::Requirement
138
- none: false
139
- requirements:
140
- - - ">="
141
- - !ruby/object:Gem::Version
142
- hash: 17
143
- segments:
144
- - 0
145
- - 3
146
- - 1
147
- version: 0.3.1
148
- prerelease: false
149
- type: :runtime
150
- requirement: *id008
151
- name: solrizer
152
- - !ruby/object:Gem::Dependency
153
- version_requirements: &id009 !ruby/object:Gem::Requirement
154
- none: false
155
- requirements:
156
- - - ">="
157
- - !ruby/object:Gem::Version
158
- hash: 3
159
- segments:
160
- - 0
161
- version: "0"
162
- prerelease: false
163
- type: :runtime
164
- requirement: *id009
165
- name: stomp
166
- - !ruby/object:Gem::Dependency
167
- version_requirements: &id010 !ruby/object:Gem::Requirement
168
- none: false
169
- requirements:
170
- - - ">="
171
- - !ruby/object:Gem::Version
172
- hash: 31
173
- segments:
174
- - 1
175
- - 2
176
- - 0
177
- version: 1.2.0
178
- prerelease: false
179
- type: :runtime
180
- requirement: *id010
181
- name: systemu
182
- - !ruby/object:Gem::Dependency
183
- version_requirements: &id011 !ruby/object:Gem::Requirement
184
- none: false
185
- requirements:
186
- - - ">="
187
- - !ruby/object:Gem::Version
188
- hash: 3
189
- segments:
190
- - 0
191
- version: "0"
192
- prerelease: false
193
- type: :runtime
194
- requirement: *id011
195
- name: validatable
196
- - !ruby/object:Gem::Dependency
197
- version_requirements: &id012 !ruby/object:Gem::Requirement
198
- none: false
199
- requirements:
200
- - - ">="
201
- - !ruby/object:Gem::Version
202
- hash: 3
203
- segments:
204
- - 0
205
- version: "0"
206
- prerelease: false
207
- type: :development
208
- requirement: *id012
31
+ version_requirements: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: '1.6'
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: 1.6.3
39
+ - !ruby/object:Gem::Dependency
209
40
  name: fakeweb
210
- - !ruby/object:Gem::Dependency
211
- version_requirements: &id013 !ruby/object:Gem::Requirement
212
- none: false
213
- requirements:
214
- - - ">="
215
- - !ruby/object:Gem::Version
216
- hash: 3
217
- segments:
218
- - 0
219
- version: "0"
220
- prerelease: false
41
+ requirement: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
221
46
  type: :development
222
- requirement: *id013
223
- name: haml
224
- - !ruby/object:Gem::Dependency
225
- version_requirements: &id014 !ruby/object:Gem::Requirement
226
- none: false
227
- requirements:
228
- - - ">="
229
- - !ruby/object:Gem::Version
230
- hash: 25
231
- segments:
232
- - 0
233
- - 1
234
- - 1
235
- version: 0.1.1
236
47
  prerelease: false
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: lyberteam-gems-devel
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
237
60
  type: :development
238
- requirement: *id014
239
- name: lyberteam-devel
240
- - !ruby/object:Gem::Dependency
241
- version_requirements: &id015 !ruby/object:Gem::Requirement
242
- none: false
243
- requirements:
244
- - - ">="
245
- - !ruby/object:Gem::Version
246
- hash: 49
247
- segments:
248
- - 0
249
- - 8
250
- - 7
251
- version: 0.8.7
252
61
  prerelease: false
253
- type: :development
254
- requirement: *id015
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ - !ruby/object:Gem::Dependency
255
68
  name: rake
256
- - !ruby/object:Gem::Dependency
257
- version_requirements: &id016 !ruby/object:Gem::Requirement
258
- none: false
259
- requirements:
260
- - - ">="
261
- - !ruby/object:Gem::Version
262
- hash: 3
263
- segments:
264
- - 0
265
- version: "0"
266
- prerelease: false
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: 0.8.7
267
74
  type: :development
268
- requirement: *id016
269
- name: rcov
270
- - !ruby/object:Gem::Dependency
271
- version_requirements: &id017 !ruby/object:Gem::Requirement
272
- none: false
273
- requirements:
274
- - - ">="
275
- - !ruby/object:Gem::Version
276
- hash: 3
277
- segments:
278
- - 0
279
- version: "0"
280
75
  prerelease: false
281
- type: :development
282
- requirement: *id017
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: 0.8.7
81
+ - !ruby/object:Gem::Dependency
283
82
  name: rdoc
284
- - !ruby/object:Gem::Dependency
285
- version_requirements: &id018 !ruby/object:Gem::Requirement
286
- none: false
287
- requirements:
288
- - - <
289
- - !ruby/object:Gem::Version
290
- hash: 3
291
- segments:
292
- - 2
293
- - 0
294
- version: "2.0"
295
- prerelease: false
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
296
88
  type: :development
297
- requirement: *id018
298
- name: rspec
299
- - !ruby/object:Gem::Dependency
300
- version_requirements: &id019 !ruby/object:Gem::Requirement
301
- none: false
302
- requirements:
303
- - - ">="
304
- - !ruby/object:Gem::Version
305
- hash: 3
306
- segments:
307
- - 0
308
- version: "0"
309
89
  prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: rspec
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
310
102
  type: :development
311
- requirement: *id019
312
- name: ruby-debug
313
- - !ruby/object:Gem::Dependency
314
- version_requirements: &id020 !ruby/object:Gem::Requirement
315
- none: false
316
- requirements:
317
- - - ">="
318
- - !ruby/object:Gem::Version
319
- hash: 3
320
- segments:
321
- - 0
322
- version: "0"
323
103
  prerelease: false
324
- type: :development
325
- requirement: *id020
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ - !ruby/object:Gem::Dependency
326
110
  name: stompserver
327
- - !ruby/object:Gem::Dependency
328
- version_requirements: &id021 !ruby/object:Gem::Requirement
329
- none: false
330
- requirements:
331
- - - ">="
332
- - !ruby/object:Gem::Version
333
- hash: 3
334
- segments:
335
- - 0
336
- version: "0"
337
- prerelease: false
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
338
116
  type: :development
339
- requirement: *id021
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ! '>='
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ - !ruby/object:Gem::Dependency
340
124
  name: yard
341
- description: |-
342
- Contains classes to make http connections with a client-cert, use Jhove, and call Suri
343
- Also contains core classes to build robots
344
- email:
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ description: ! 'Contains classes to make http connections with a client-cert, use
138
+ Jhove, and call Suri
139
+
140
+ Also contains core classes to build robots'
141
+ email:
345
142
  - wmene@stanford.edu
346
143
  executables: []
347
-
348
144
  extensions: []
349
-
350
145
  extra_rdoc_files: []
351
-
352
- files:
353
- - lib/dlss_service.rb
354
- - lib/dor_service.rb
355
- - lib/lyber_core/config.rb
356
- - lib/lyber_core/connection.rb
146
+ files:
147
+ - LICENSE
148
+ - README.md
149
+ - lib/lyber_core.rb
357
150
  - lib/lyber_core/destroyer.rb
358
- - lib/lyber_core/exceptions/chained_error.rb
359
- - lib/lyber_core/exceptions/empty_queue.rb
360
- - lib/lyber_core/exceptions/fatal_error.rb
361
- - lib/lyber_core/exceptions/item_error.rb
362
- - lib/lyber_core/exceptions/service_error.rb
363
151
  - lib/lyber_core/log.rb
364
- - lib/lyber_core/robots/robot.rb
365
- - lib/lyber_core/robots/service_controller.rb
366
- - lib/lyber_core/robots/work_item.rb
367
- - lib/lyber_core/robots/work_queue.rb
368
- - lib/lyber_core/robots/workflow.rb
369
- - lib/lyber_core/robots/workspace.rb
370
- - lib/lyber_core/utils/bagit_bag.rb
371
- - lib/lyber_core/utils/checksum_validate.rb
372
- - lib/lyber_core/utils/file_utilities.rb
373
- - lib/lyber_core/utils.rb
374
- - lib/lyber_core.rb
152
+ - lib/lyber_core/robot.rb
375
153
  - lib/tasks/rdoc.rake
376
- - lib/xml_models/identity_metadata/dublin_core.rb
377
- - lib/xml_models/identity_metadata/identity_metadata.rb
378
- - LICENSE
379
- - README.rdoc
380
- has_rdoc: true
381
- homepage: http://github.com/wmene/lyber-core
154
+ homepage: http://github.com/sul-dlss/lyber-core
382
155
  licenses: []
383
-
156
+ metadata: {}
384
157
  post_install_message:
385
158
  rdoc_options: []
386
-
387
- require_paths:
159
+ require_paths:
388
160
  - lib
389
- required_ruby_version: !ruby/object:Gem::Requirement
390
- none: false
391
- requirements:
392
- - - ">="
393
- - !ruby/object:Gem::Version
394
- hash: 3
395
- segments:
396
- - 0
397
- version: "0"
398
- required_rubygems_version: !ruby/object:Gem::Requirement
399
- none: false
400
- requirements:
401
- - - ">="
402
- - !ruby/object:Gem::Version
403
- hash: 23
404
- segments:
405
- - 1
406
- - 3
407
- - 6
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ! '>='
169
+ - !ruby/object:Gem::Version
408
170
  version: 1.3.6
409
171
  requirements: []
410
-
411
172
  rubyforge_project:
412
- rubygems_version: 1.5.2
173
+ rubygems_version: 2.2.2
413
174
  signing_key:
414
- specification_version: 3
175
+ specification_version: 4
415
176
  summary: Core services used by the SULAIR Digital Library
416
177
  test_files: []
417
-
178
+ has_rdoc: