Module: ADIWG::Mdtranslator::Writers::SbJson
- Defined in:
- lib/adiwg/mdtranslator/writers/sbJson/version.rb,
lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_id.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_tag.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_date.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_facet.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_hours.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_budget.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_rights.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_sbJson.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_contact.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_project.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_spatial.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_webLink.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_abstract.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_citation.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_parentId.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_codelists.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_identifier.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_provenance.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_publication.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_browseCategory.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_materialRequest.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_geographicExtent.rb
Defined Under Namespace
Modules: Abstract, BrowseCategory, Budget, Citation, Codelists, Contact, Date, Facet, GeographicExtent, Hours, Id, Identifier, MaterialRequest, ParentId, Project, Provenance, Publication, Rights, Spatial, Tag, WebLink
Constant Summary collapse
- VERSION =
'1.0.0'
Class Method Summary collapse
- .build(intObj, responseObj) ⇒ Object
-
.get_contact_by_id(contactId) ⇒ Object
find contact in contact array and return the contact hash.
-
.get_contact_by_index(contactIndex) ⇒ Object
find contact in contact array and return the contact hash.
-
.get_contact_index_by_id(contactId) ⇒ Object
find contact in contact array and return the contact index.
-
.json_map(collection = [], _class) ⇒ Object
ignore jBuilder object mapping when array is empty.
-
.nested_objs_by_element(obj, ele, excludeList = []) ⇒ Object
find all nested objects in ‘obj’ that contain the element ‘ele’.
- .startWriter(intObj, responseObj) ⇒ Object
Class Method Details
.build(intObj, responseObj) ⇒ Object
34 35 36 37 38 39 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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_sbJson.rb', line 34 def self.build(intObj, responseObj) = intObj[:metadata][:metadataInfo] resourceInfo = intObj[:metadata][:resourceInfo] distributorInfo = intObj[:metadata][:distributorInfo] hCitation = resourceInfo[:citation] @Namespace = ADIWG::Mdtranslator::Writers::SbJson Jbuilder.new do |json| resourceId = Id.build(intObj) json.id resourceId json.title hCitation[:title] unless hCitation.empty? json.alternateTitles hCitation[:alternateTitles] unless hCitation[:alternateTitles].empty? json.body Abstract.build(resourceInfo[:abstract]) json.citation Citation.build(hCitation) unless hCitation.empty? # gather all identifiers # include the metadataIdentifier if it is NOT in the 'gov.sciencebase.catalog' namespace # otherwise it would be the resourceId above aIdentifiers = [] unless [:metadataIdentifier].empty? unless [:metadataIdentifier][:namespace] == 'gov.sciencebase.catalog' aIdentifiers << [:metadataIdentifier] end end # do not duplicate the identifier which is the primary resource unless hCitation.empty? hCitation[:identifiers].each do |hIdentifier| unless hIdentifier[:identifier] == resourceId aIdentifiers << hIdentifier end end end # eliminate duplicate identifiers # duplicate must match on both ID and schema (namespace) aUniqIds = [] aIdentifiers.each do |hIdentifier| foundDup = false aUniqIds.each do |hUniqId| if hIdentifier[:identifier] == hUniqId[:identifier] if hIdentifier[:namespace] == hUniqId[:namespace] foundDup = true end end end unless foundDup aUniqIds << hIdentifier end end json.identifiers @Namespace.json_map(aUniqIds, Identifier) unless aIdentifiers.empty? json.purpose resourceInfo[:purpose] haveRights = false haveRights = true unless resourceInfo[:constraints].empty? distributorInfo.each do |hDistribution| unless hDistribution[:liabilityStatement].nil? haveRights = true end end if haveRights json.rights Rights.build(resourceInfo[:constraints], distributorInfo) end json.provenance Provenance.build json.materialRequestInstructions MaterialRequest.build(distributorInfo) unless distributorInfo.empty? json.parentId ParentId.build([:parentMetadata]) unless [:parentMetadata].empty? aContactList = Contact.get_contact_list(intObj) json.contacts @Namespace.json_map(aContactList, Contact) unless aContactList.empty? json.webLinks WebLink.build(intObj[:metadata]) json.browseCategories BrowseCategory.build(resourceInfo[:resourceTypes]) json. Tag.build(intObj) json.dates Date.build(resourceInfo) unless resourceInfo.empty? json.spatial Spatial.build(resourceInfo[:extents]) unless resourceInfo[:extents].empty? json.facets Facet.build(intObj[:metadata]) json.geographicExtents GeographicExtent.build(resourceInfo[:extents]) unless resourceInfo[:extents].empty? end end |
.get_contact_by_id(contactId) ⇒ Object
find contact in contact array and return the contact hash
47 48 49 50 51 52 53 54 |
# File 'lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb', line 47 def self.get_contact_by_id(contactId) @contacts.each do |hContact| if hContact[:contactId] == contactId return hContact end end {} end |
.get_contact_by_index(contactIndex) ⇒ Object
find contact in contact array and return the contact hash
39 40 41 42 43 44 |
# File 'lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb', line 39 def self.get_contact_by_index(contactIndex) if @contacts[contactIndex] return @contacts[contactIndex] end {} end |
.get_contact_index_by_id(contactId) ⇒ Object
find contact in contact array and return the contact index
57 58 59 60 61 62 63 64 |
# File 'lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb', line 57 def self.get_contact_index_by_id(contactId) @contacts.each_with_index do |hContact, index| if hContact[:contactId] == contactId return index end end {} end |
.json_map(collection = [], _class) ⇒ Object
ignore jBuilder object mapping when array is empty
67 68 69 70 71 72 73 |
# File 'lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb', line 67 def self.json_map(collection = [], _class) if collection.nil? || collection.empty? return nil else collection.map { |item| _class.build(item).attributes! } end end |
.nested_objs_by_element(obj, ele, excludeList = []) ⇒ Object
find all nested objects in ‘obj’ that contain the element ‘ele’
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb', line 76 def self.nested_objs_by_element(obj, ele, excludeList = []) aCollected = [] obj.each do |key, value| skipThisOne = false excludeList.each do |exclude| if key == exclude.to_sym skipThisOne = true end end next if skipThisOne if key == ele.to_sym aCollected << obj elsif obj.is_a?(Array) if key.respond_to?(:each) aReturn = nested_objs_by_element(key, ele, excludeList) aCollected = aCollected.concat(aReturn) unless aReturn.empty? end elsif obj[key].respond_to?(:each) aReturn = nested_objs_by_element(value, ele, excludeList) aCollected = aCollected.concat(aReturn) unless aReturn.empty? end end aCollected end |
.startWriter(intObj, responseObj) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb', line 17 def self.startWriter(intObj, responseObj) @contacts = intObj[:contacts] # set output flag for null properties Jbuilder.ignore_nil(!responseObj[:writerShowTags]) # set the format of the output file based on the writer specified responseObj[:writerOutputFormat] = 'json' responseObj[:writerVersion] = ADIWG::Mdtranslator::Writers::SbJson::VERSION # write the sbJson metadata record = SbJson.build(intObj, responseObj) # set writer pass to true if no messages # false or warning state will be set by writer code responseObj[:writerPass] = true if responseObj[:writerMessages].empty? # encode the metadata target as JSON .target! end |