Class: Exlibris::Aleph::TabHelper
- Inherits:
-
Object
- Object
- Exlibris::Aleph::TabHelper
- Includes:
- Singleton
- Defined in:
- lib/exlibris/aleph/tab_helper.rb
Overview
Overview
Exlibris::Aleph::TabHelper assumes a mount of Aleph tab files and provides a way to access the various tab settings for patrons, patron_permissions, items, item_permission (both by item status and by item processing status), collections and pickup locations. It also provides convenience methods for common tasks like getting the pickup location for a given combination of item status, item process status and borrower status or getting an item’s web text. To initialize Exlibris::Aleph::TabHelper call Exlibris::Aleph::TabHelper.init in an initializer.
Constant Summary collapse
- @@alephe_tabs =
{ :sub_libraries => :TabSubLibrary }
- @@adm_tabs =
{ :patrons => :PcTabExpFieldExtended, :patron_permissions => :Tab31, :items => :TabWwwItemDesc, :item_permissions_by_item_status => :Tab15ByItemStatus, :item_permissions_by_item_process_status => :Tab15ByItemProcessStatus, :collections => :Tab40, :pickup_locations => :Tab37 }
- @@tabs =
@@alephe_tabs.keys + @@adm_tabs.keys
- @@adms =
[]
- @@tab_path =
nil
- @@yml_path =
nil
- @@log_path =
nil
- @@irrelevant_sub_libraries =
["USR00", "HOME", "BOX", "ILLDT", "NYU51", "ALEPH", "USM50", "MED", "HYL", "HIL", "LAM", "LAW", "LIT", "MUS", "WID", "EXL", "CIRC", "HILR", "HIL01", "HYL01", "HYL02", "HYL03", "HYL04", "HYL05", "HYL06", "LAM01", "LAM02", "LAM03", "LAW01", "LAW02", "LAW03", "LIT01", "LIT02", "MED01", "MED02", "MUS01", "MUS02", "WID01", "WID02", "WID03", "WID04", "WID05", "U60WD", "U60HL", "U60LA", "U70WD", "CBAB", "BCU", "MBAZU", "USM51", "ELEC5", "GDOC5", "EDUC5", "LINC5", "RRLIN", "OU511", "OR512", "OR513", "OR514", "OR515", "U61ED", "U61EL", "U61LN", "S61GD", "USM53", "ELEC7", "GDOC7", "EDUC7", "LINC7", "USM54", "ELEC4", "USM55", "CUN50", "CLEC5", "CDOC5", "CDUC5", "CINC5", "UNI50", "NARCV", "NELEC", "NRLEC", "NGDOC", "NRDOC", "NEDUC", "NHLTH", "NLINC", "NLAW", "NMUSI", "NSCI", "NUPTN"]
Instance Attribute Summary collapse
-
#updated_at ⇒ Object
readonly
Returns the value of attribute updated_at.
Class Method Summary collapse
-
.init(tab_path, adms, refresh_time = lambda{1.day.ago}) ⇒ Object
Initialize TabHelper based on path to tabs, path to store yml configs, path for log file, and the ADMs for the Aleph implementation Exlibris::Aleph::TabHelper.init(“/mnt/aleph_tab”, [“ADM50”, “ADM51”]).
-
.refresh_yml ⇒ Object
Refreshes the yml files that are used to parse the tables.
-
.set_irrelevant_sub_libraries(irrelevant_sub_libraries, replace = true) ⇒ Object
Sets class variable of irrelevant sub libraries to be ignored when building sub_libraries YAML.
Instance Method Summary collapse
-
#collection_text(params) ⇒ Object
Returns collection text for the given params.
-
#initialize ⇒ TabHelper
constructor
Private initialzize method for the singleton.
-
#item_permissions(params) ⇒ Object
Returns item permissions for the given params.
-
#item_pickup_locations(params) ⇒ Object
Returns an array of pickup locations based on the given params.
-
#item_web_text(params) ⇒ Object
Returns web display text for the given params.
-
#sub_library_adm(code) ⇒ Object
Returns the ADM associated with the given sub library code.
-
#sub_library_text(code) ⇒ Object
Returns the sub library display text for the given sub library code.
Constructor Details
#initialize ⇒ TabHelper
Private initialzize method for the singleton.
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/exlibris/aleph/tab_helper.rb', line 88 def initialize raise ArgumentError.new("No tab path was specified.") if @@tab_path.nil? raise ArgumentError.new("No yml path was specified.") if @@yml_path.nil? raise ArgumentError.new("No log path was specified.") if @@log_path.nil? raise ArgumentError.new("No ADMs were specified.") if @@adms.nil? or @@adms.empty? raise ArgumentError.new("No refresh time was specified.") if @@refresh_time.nil? self.class.refresh_yml @helper_log = Logger.new(File.join(@@log_path, "tab_helper.log")) @helper_log.level = Logger::WARN @@tabs.each { |tab| # Default to empty hash instance_variable_set("@#{tab}".to_sym, {}) # Define reader w/ refresh self.class.send(:define_method, tab) { return instance_variable_get("@#{tab}".to_sym) unless refresh? refresh and return instance_variable_get("@#{tab}".to_sym) } } refresh end |
Instance Attribute Details
#updated_at ⇒ Object (readonly)
Returns the value of attribute updated_at.
18 19 20 |
# File 'lib/exlibris/aleph/tab_helper.rb', line 18 def updated_at @updated_at end |
Class Method Details
.init(tab_path, adms, refresh_time = lambda{1.day.ago}) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/exlibris/aleph/tab_helper.rb', line 48 def self.init(tab_path, adms, refresh_time = lambda{1.day.ago}) @@tab_path, @@refresh_time = tab_path, refresh_time @@adms = adms.collect{|adm| adm.downcase} unless adms.nil? # Set yml path and log path and make directories. @@yml_path, @@log_path = File.join(Rails.root, "config/aleph"), File.join(Rails.root, "log") Dir.mkdir(@@yml_path) unless @@yml_path.nil? or File.directory?(@@yml_path) Dir.mkdir(File.join(@@yml_path, "alephe")) unless @@yml_path.nil? or File.directory?(File.join(@@yml_path, "alephe")) @@adms.each { |adm| Dir.mkdir(File.join(@@yml_path, adm)) unless @@yml_path.nil? or File.directory?(File.join(@@yml_path, adm)) } unless @@adms.nil? Dir.mkdir(@@log_path) unless @@log_path.nil? or File.directory?(@@log_path) # Make readers for each class variable class_variables.each do |class_variable| define_method "#{class_variable}".sub('@@', '') do self.class.send(:class_variable_get, "#{class_variable}") end end end |
.refresh_yml ⇒ Object
Refreshes the yml files that are used to parse the tables.
74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/exlibris/aleph/tab_helper.rb', line 74 def self.refresh_yml @@alephe_tabs.each do |key, klass| tab = Exlibris::Aleph::Config.const_get(klass).new(:aleph_library => "ALEPHE", :aleph_mnt_path => @@tab_path).to_h File.open( File.join(@@yml_path, "alephe", "#{key}.yml"), 'w' ) { |out| YAML.dump( tab, out ) } unless tab.empty? end @@adm_tabs.each do |key, klass| @@adms.each do |adm| tab = Exlibris::Aleph::Config.const_get(klass).new(:aleph_library => adm, :aleph_mnt_path => @@tab_path).to_h File.open( File.join(@@yml_path, adm, "#{key}.yml"), 'w' ) { |out| YAML.dump( tab, out ) } unless tab.empty? end end end |
.set_irrelevant_sub_libraries(irrelevant_sub_libraries, replace = true) ⇒ Object
Sets class variable of irrelevant sub libraries to be ignored when building sub_libraries YAML
68 69 70 71 |
# File 'lib/exlibris/aleph/tab_helper.rb', line 68 def self.set_irrelevant_sub_libraries(irrelevant_sub_libraries, replace = true) @@irrelevant_sub_libraries |= irrelevant_sub_libraries if replace @@irrelevant_sub_libraries = irrelevant_sub_libraries unless replace end |
Instance Method Details
#collection_text(params) ⇒ Object
Returns collection text for the given params. Available param keys are:
:adm_library_code, :sub_library_code, :collection_code
220 221 222 223 224 225 |
# File 'lib/exlibris/aleph/tab_helper.rb', line 220 def collection_text(params) adm = collections[params[:adm_library_code]] sub = adm[params[:sub_library_code]] unless adm.nil? coll = sub[params[:collection_code]] unless sub.nil? return coll[:text] unless coll.nil? end |
#item_permissions(params) ⇒ Object
Returns item permissions for the given params. Available param keys are:
:adm_library_code, :sub_library_code, :item_status_code, :item_process_status_code
242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 |
# File 'lib/exlibris/aleph/tab_helper.rb', line 242 def (params) unless params[:item_process_status_code].nil? = [params[:adm_library_code]] = [params[:sub_library_code]] unless .nil? = [params[:item_process_status_code]] unless .nil? return unless .nil? end unless params[:item_status_code].nil? = [params[:adm_library_code]] = [params[:sub_library_code]] unless .nil? = [params[:item_status_code]] unless .nil? return unless .nil? end @helper_log.warn( "Warning in #{self.class}. "+ "Item permissions not found. "+ "Additional parameters:\n"+ "\tADM library: #{params[:adm_library_code]}\n"+ "\tSub library: #{params[:sub_library_code]}\n"+ "\tItem status: #{params[:item_status_code]}\n"+ "\tItem process status: #{params[:item_process_status_code]}" ) return {} end |
#item_pickup_locations(params) ⇒ Object
Returns an array of pickup locations based on the given params. Available param keys are:
:adm_library_code, :sub_library_code, :item_status_code,
:item_process_status_code, :bor_status, :availability_status
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 |
# File 'lib/exlibris/aleph/tab_helper.rb', line 125 def item_pickup_locations(params) adm_locations = pickup_locations[params[:adm_library_code]] sub_locations = adm_locations[params[:sub_library_code]] unless adm_locations.nil? # First try the most specific item_locations = sub_locations[params[:item_status_code]] unless sub_locations.nil? item_procesing_locations = item_locations[params[:item_process_status_code]] unless item_locations.nil? borrower_locations = item_procesing_locations[params[:bor_status]] unless item_procesing_locations.nil? availability_locations = item_procesing_locations[params[:bor_status]] unless item_procesing_locations.nil? locations = (borrower_locations.has_key?(params[:availability_status])) ? borrower_locations[:availability_status] : borrower_locations["#"] unless borrower_locations.nil? return locations[:pickup_locations] unless locations.nil? # Wild card item status item_locations, item_procesing_locations, borrower_locations = nil, nil, nil item_locations = sub_locations["##"] unless sub_locations.nil? item_procesing_locations = item_locations[params[:item_process_status_code]] unless item_locations.nil? borrower_locations = item_procesing_locations[params[:bor_status]] unless item_procesing_locations.nil? locations = (borrower_locations.has_key?(params[:availability_status])) ? borrower_locations[:availability_status] : borrower_locations["#"] unless borrower_locations.nil? return locations[:pickup_locations] unless locations.nil? # Wild card item process status item_locations, item_procesing_locations, borrower_locations = nil, nil, nil item_locations = sub_locations[params[:item_status_code]] unless sub_locations.nil? item_procesing_locations = item_locations["##"] unless item_locations.nil? borrower_locations = item_procesing_locations[params[:bor_status]] unless item_procesing_locations.nil? locations = (borrower_locations.has_key?(params[:availability_status])) ? borrower_locations[:availability_status] : borrower_locations["#"] unless borrower_locations.nil? return locations[:pickup_locations] unless locations.nil? # Wild card item status and item process status item_locations, item_procesing_locations, borrower_locations = nil, nil, nil item_locations = sub_locations["##"] unless sub_locations.nil? item_procesing_locations = item_locations["##"] unless item_locations.nil? borrower_locations = item_procesing_locations[params[:bor_status]] unless item_procesing_locations.nil? locations = (borrower_locations.has_key?(params[:availability_status])) ? borrower_locations[:availability_status] : borrower_locations["#"] unless borrower_locations.nil? return locations[:pickup_locations] unless locations.nil? # Wild card patron status item_locations, item_procesing_locations, borrower_locations = nil, nil, nil item_locations = sub_locations[params[:item_status_code]] unless sub_locations.nil? item_procesing_locations = item_locations[params[:item_process_status_code]] unless item_locations.nil? borrower_locations = item_procesing_locations["##"] unless item_procesing_locations.nil? locations = (borrower_locations.has_key?(params[:availability_status])) ? borrower_locations[:availability_status] : borrower_locations["#"] unless borrower_locations.nil? return locations[:pickup_locations] unless locations.nil? # Wild card patron status and item status item_locations, item_procesing_locations, borrower_locations = nil, nil, nil item_locations = sub_locations["##"] unless sub_locations.nil? item_procesing_locations = item_locations[params[:item_process_status_code]] unless item_locations.nil? borrower_locations = item_procesing_locations["##"] unless item_procesing_locations.nil? locations = (borrower_locations.has_key?(params[:availability_status])) ? borrower_locations[:availability_status] : borrower_locations["#"] unless borrower_locations.nil? return locations[:pickup_locations] unless locations.nil? # Wild card patron status and item process status item_locations, item_procesing_locations, borrower_locations = nil, nil, nil item_locations = sub_locations[params[:item_status_code]] unless sub_locations.nil? item_procesing_locations = item_locations["##"] unless item_locations.nil? borrower_locations = item_procesing_locations["##"] unless item_procesing_locations.nil? locations = (borrower_locations.has_key?(params[:availability_status])) ? borrower_locations[:availability_status] : borrower_locations["#"] unless borrower_locations.nil? return locations[:pickup_locations] unless locations.nil? # Wild card everything item_locations, item_procesing_locations, borrower_locations = nil, nil, nil item_locations = sub_locations["##"] unless sub_locations.nil? item_procesing_locations = item_locations["##"] unless item_locations.nil? borrower_locations = item_procesing_locations["##"] unless item_procesing_locations.nil? locations = (borrower_locations.has_key?(params[:availability_status])) ? borrower_locations[:availability_status] : borrower_locations["#"] unless borrower_locations.nil? return locations[:pickup_locations] unless locations.nil? # Set the pickup location to default to the passed in sub library @helper_log.warn( "Warning in #{self.class}. "+ "Pickup locations not found. "+ "Defaulting to Aleph item sub library, #{params[:sub_library_code]}.\n"+ "Additional parameters:\n"+ "\tADM library: #{params[:adm_library_code]}\n"+ "\tSub library: #{params[:sub_library_code]}\n"+ "\tItem status: #{params[:item_status_code]}\n"+ "\tItem process status: #{params[:item_process_status_code]}\n"+ "\tAvailability status: #{params[:availability_status]}\n"+ "\tBorrower status: #{params[:bor_status]}\n" ) return [params[:sub_library_code]] end |
#item_web_text(params) ⇒ Object
Returns web display text for the given params. Available param keys are:
:adm_library_code, :sub_library_code, :item_status_code, :item_process_status_code, :item_status, :item_process_status
230 231 232 233 234 235 236 237 |
# File 'lib/exlibris/aleph/tab_helper.rb', line 230 def item_web_text(params) adm = items[params[:adm_library_code]] item = (adm[params[:item_process_status]].nil?) ? adm[params[:item_status]] : adm[params[:item_process_status]] unless (params[:item_status].nil? and params[:item_process_status].nil?) or adm.nil? = (params) if item.nil? item = adm[[:text]] unless .nil? or adm.nil? return item[:web_text] unless item.nil? return [:text] unless .nil? end |
#sub_library_adm(code) ⇒ Object
Returns the ADM associated with the given sub library code
116 117 118 119 |
# File 'lib/exlibris/aleph/tab_helper.rb', line 116 def sub_library_adm(code) sub_library = @sub_libraries[code] return sub_library[:library] unless sub_library.nil? end |
#sub_library_text(code) ⇒ Object
Returns the sub library display text for the given sub library code
110 111 112 113 |
# File 'lib/exlibris/aleph/tab_helper.rb', line 110 def sub_library_text(code) sub_library = @sub_libraries[code] return sub_library[:text] unless sub_library.nil? end |