Class: XMP
- Inherits:
-
Object
- Object
- XMP
- Defined in:
- lib/xmp.rb,
lib/xmp/version.rb,
lib/xmp/silencer.rb,
lib/xmp/namespace.rb
Overview
XMP XML parser
Example
xmp = XMP.new(File.read('xmp.xml'))
xmp.dc.title # => "Amazing Photo"
xmp.photoshop.Category # => "summer"
xmp.photoshop.SupplementalCategories # => ["morning", "sea"]
Defined Under Namespace
Modules: Silencer Classes: Namespace
Constant Summary collapse
- VERSION =
"0.2.2"
Instance Attribute Summary collapse
-
#namespaces ⇒ Object
readonly
available namespace names.
-
#xml ⇒ Object
readonly
underlying XML content.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(xml) ⇒ XMP
constructor
accepts valid XMP XML.
- #inspect ⇒ Object
-
#method_missing(namespace, *args) ⇒ Object
returns Namespace object if namespace exists, otherwise tries to call a method.
- #respond_to?(method) ⇒ Boolean
Constructor Details
#initialize(xml) ⇒ XMP
accepts valid XMP XML
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/xmp.rb', line 19 def initialize(xml) doc = Nokogiri::XML(xml) @xml = doc.root available_namespaces = doc.collect_namespaces # let nokogiri know about all namespaces available_namespaces.each do |ns, url| @xml.add_namespace_definition ns, url end # collect namespace names @namespaces = available_namespaces.collect do |ns, _| ns =~ /^xmlns:(.+)/ $1 end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
Instance Attribute Details
#namespaces ⇒ Object (readonly)
available namespace names
16 17 18 |
# File 'lib/xmp.rb', line 16 def namespaces @namespaces end |
#xml ⇒ Object (readonly)
underlying XML content
14 15 16 |
# File 'lib/xmp.rb', line 14 def xml @xml end |
Class Method Details
.parse(doc) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/xmp.rb', line 53 def self.parse(doc) case doc.class.to_s when 'EXIFR::JPEG' if xmp_chunk = doc.app1s.find { |a| a =~ %r|\Ahttp://ns.adobe.com/xap/1.0/| } xmp_data = xmp_chunk.split("\000")[1] XMP.new(xmp_data) end else raise "Document not supported:\n#{doc.inspect}" end end |
Instance Method Details
#inspect ⇒ Object
36 37 38 |
# File 'lib/xmp.rb', line 36 def inspect "#<XMP:@namespaces=#{@namespaces.inspect}>" end |
#respond_to?(method) ⇒ Boolean
49 50 51 |
# File 'lib/xmp.rb', line 49 def respond_to?(method) has_namespace?(method) or super end |