Class: Handler
- Inherits:
-
Object
- Object
- Handler
- Includes:
- BulkImportMixins, JSONModel
- Defined in:
- backend/app/lib/bulk_import/handler.rb
Direct Known Subclasses
AgentHandler, ContainerInstanceHandler, DigitalObjectHandler, LangHandler, NotesHandler, SubjectHandler
Constant Summary collapse
- DISAMB_STR =
" DISAMBIGUATE ME!"
Constants included from JSONModel
JSONModel::REFERENCE_KEY_REGEX
Instance Method Summary collapse
-
#clear(enum_list) ⇒ Object
-
#initialize(current_user, validate_only) ⇒ Handler
constructor
A new instance of Handler.
-
#save(obj, model) ⇒ Object
-
#search(repo_id, params, sym, type = "", match = "", report = nil) ⇒ Object
if repo_id is nil, do a global search (subject and agent) this is using archivesspace/backend/app/models/search.rb.
-
#stored(hash, id, key) ⇒ Object
centralize the checking for an already-found object.
Methods included from BulkImportMixins
#ao_save, #archival_object_from_ref, #archival_object_from_ref_or_uri, #archival_object_from_uri, #create_date, #created, #find_top_container, #handle_notes, #indicator_and_type_exist_for_resource?, #resolves, #resource_from_ref, #resource_match, #sub_container_from_barcode, #test_exceptions, #valid, #value_check
Methods included from CrudHelpers
#handle_create, #handle_delete, #handle_listing, #handle_raw_listing, #handle_unlimited_listing, #handle_update, scoped_dataset, with_record_conflict_reporting, #with_record_conflict_reporting
Methods included from JSONModel
JSONModel, #JSONModel, add_error_handler, all, allow_unmapped_enum_value, backend_url, check_valid_refs, client_mode?, custom_validations, destroy_model, enum_default_value, enum_values, handle_error, init, load_schema, #models, models, parse_jsonmodel_ref, parse_reference, repository, repository_for, schema_src, set_publish_flags!, set_repository, strict_mode, strict_mode?, validate_schema, with_repository
Constructor Details
#initialize(current_user, validate_only) ⇒ Handler
Returns a new instance of Handler.
21 22 23 24 25 |
# File 'backend/app/lib/bulk_import/handler.rb', line 21 def initialize(current_user, validate_only) @current_user = current_user @validate_only = validate_only @create_key = @validate_only ? "bulk_import.could_be" : "bulk_import.created" end |
Instance Method Details
#clear(enum_list) ⇒ Object
97 98 99 |
# File 'backend/app/lib/bulk_import/handler.rb', line 97 def clear(enum_list) enum_list.renew end |
#save(obj, model) ⇒ Object
27 28 29 30 31 32 33 34 35 36 |
# File 'backend/app/lib/bulk_import/handler.rb', line 27 def save(obj, model) test_exceptions(obj) if !@validate_only saved = model.create_from_json(obj) objs = model.sequel_to_jsonmodel([saved]) revived = objs.empty? ? nil : objs[0] if !objs.empty? else obj end end |
#search(repo_id, params, sym, type = "", match = "", report = nil) ⇒ Object
if repo_id is nil, do a global search (subject and agent) this is using archivesspace/backend/app/models/search.rb
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'backend/app/lib/bulk_import/handler.rb', line 40 def search(repo_id, params, sym, type = "", match = "", report = nil) obj = nil search = nil matches = match.split(":") # need to add these default-y values to the params params[:page_size] = 10 params[:page] = 1 params[:sort] = "" unless !params[:q] params[:q] = "primary_type:#{type} AND #{params[:q]}" if !type.empty? params[:q] = "repository:\"/repositories/#{repo_id}\" AND #{params[:q]}" if repo_id end begin search = Search.search(params, nil) rescue Exception => e raise e if !e..match("<h1>Not Found</h1>") # global search doesn't handle this gracefully :-( search = { "total_hits" => 0 } end total_hits = search["total_hits"] || 0 if total_hits == 1 #&& !search['results'].empty? # for some reason, you get a hit of '1' but still have obj = ASUtils.json_parse(search["results"][0]["json"]) elsif total_hits > 1 if matches.length == 2 match_ct = 0 disam = matches[1] + DISAMB_STR disam_obj = nil search["results"].each do |result| # if we have a disambiguate result get it if result[matches[0]] == disam disam_obj = ASUtils.json_parse(result["json"]) elsif result[matches[0]] == matches[1] match_ct += 1 obj = ASUtils.json_parse(result["json"]) end end # if we have more than one exact match, then return disam_obj if we have one, or bail! if match_ct > 1 if disam_obj obj = disam_obj report.add_info(I18n.t("bulk_import.warn.disamuse", :which => matches[1], :name => disam)) if !report.nil? else raise BulkImportDisambigException.new(I18n.t("bulk_import.error.too_many")) end end else raise BulkImportDisambigException.new(I18n.t("bulk_import.error.too_many")) end end obj = JSONModel(sym).from_hash(obj) if !obj.nil? obj end |
#stored(hash, id, key) ⇒ Object
centralize the checking for an already-found object
93 94 95 |
# File 'backend/app/lib/bulk_import/handler.rb', line 93 def stored(hash, id, key) ret_obj = (id != "" && hash.fetch(id, nil)) || hash.fetch(key, nil) end |