module Repository
Constants
- COMPOSITE_MIME_TYPES
- DIGRAPH_TEMPLATE
- KNART_MIME_TYPES
- SUPPORTED_MIME_TYPES
Public Instance Methods
audit_content_directory(root, manifest)
click to toggle source
# File lib/common.rb, line 166 def audit_content_directory(root, manifest) good = [] bad = [] manifest['groups'].each do |group| group['items'].each do |item| if item['path'] path = "#{root}/#{item['path']}" if File.exist? path good << item else bad << item end end begin if item['url'] response = HTTParty.head(item['url']) if(response.code >= 400) bad << item else good << item end end rescue SocketError => e # Probably a bad DNS or protocol name. bad << item end end end return [good, bad] end
content_directory_to_item_tree(root)
click to toggle source
# File lib/common.rb, line 117 def content_directory_to_item_tree(root) content = [] list = Dir["#{root}/**/**"] list.each do |n| # puts n if(File.file?(n)) # ext = File.extname(n).downcase[1..-1] mimeType = mimeTypeForFile(n) name = n.split('/')[1] #.split['.'][0] name = name.split('_').collect(&:capitalize).join(' ') tags = n.split('/').select{|d| d.length <= 4} # Add subdirectory names to the tag list subs = Dir.glob(File.dirname(n) + '/*').select{ |t| puts t # puts File.directory?(t) # puts File.dirname(n) != t # byebug File.directory?(t) && n != t }.collect{ |t| File.basename(t)} puts "#{n} SUBS: #{subs}" tags |= subs if mimeType # it's a supported piece of content item = { 'name': name, 'path': n, 'mimeType': mimeType, 'tags': tags } update_security(item) item = rekey(item) # Any directory name of 4 characters or less will be treated as a tag automatically content << item end end end content end
generate_dot(doc)
click to toggle source
# File lib/common.rb, line 42 def generate_dot(doc) artifacts = [] events = {} doc.xpath('//xmlns:containedArtifacts/xmlns:artifact').each do |a| name = a.xpath('./xmlns:name/@value').to_s file = a.xpath('./xmlns:reference/xmlns:url/@address').to_s file = '(embedded)' if file.empty? triggers = [] emits = [] tmp = { name: name, hash: Digest::SHA1.hexdigest(name), file: file, triggers: triggers, emits: emits } artifacts << tmp # Search for triggers # puts a a.xpath('.//xmlns:triggers/xmlns:trigger/@onEventName').each do |t| value = t.to_s triggers << value events[value] = Digest::SHA1.hexdigest(value) end # Emmitted events within embedded KNARTs. a.xpath('./xmlns:knowledgeDocument//xmlns:simpleAction[@xsi:type="FireEventAction"]').each do |action| conditions = action.xpath('./xmlns:conditions').to_s.gsub('"', '\"') # puts conditions action.xpath('.//elm:element[@name="EventName"]/elm:value/@value').each do |n| value = n.to_s emits << { name: value, conditions: conditions } events[value] = Digest::SHA1.hexdigest(value) end end # Emmitted events for referencesd KNARTs. a.xpath('./xmlns:onCompletion//xmlns:eventName/@name').each do |n| value = n.to_s emits << { name: value, conditions: '(always)' } events[value] = Digest::SHA1.hexdigest(value) end end # puts artifacts # puts events renderer = ERB.new(DIGRAPH_TEMPLATE) renderer.result(binding) end
mimeTypeForFile(path)
click to toggle source
# File lib/common.rb, line 105 def mimeTypeForFile(path) mimeType = nil SUPPORTED_MIME_TYPES.each do |k,v| if v[:expression].match?(path) mimeType = k break end end # puts mimeType || path mimeType end
rekey(hash)
click to toggle source
Forces keys to strings.
# File lib/common.rb, line 101 def rekey(hash) hash.collect{|k,v| [k.to_s, v]}.to_h end
render_partial(name, stuff)
click to toggle source
# File lib/common.rb, line 198 def render_partial(name, stuff) template = File.join(File.dirname(File.expand_path(__FILE__)), name) Slim::Template.new(template).render(self, stuff) end
update_security(item)
click to toggle source
# File lib/common.rb, line 155 def update_security(item) # byebug content = File.read(item[:path]) item['security'] = rekey({ sha1: Digest::SHA1.hexdigest(content), sha256: Digest::SHA256.hexdigest(content), md5: Digest::MD5.hexdigest(content) }) puts item end