class CSL::Info
{Info} nodes contain a {Style} (or {Locale}) metadata. Their XML structure is based on the Atom Syndication Format. For independent styles an {Info} node typically has the following child elements:
-
{Author} and {Contributor}: used to respectively acknowledge style authors and contributors, may each be used multiple times.
-
{Category}: styles may be assigned one or more categories. One {Category} node may be used once to describe how in-text citations are rendered, using its citation-format attribute.
-
{Id}: Must appear once. The element should contain a
URI
to establish the identity of the style. A stable, unique and dereferenceableURI
is desired for publicly available styles. -
{Link}: Multiple links can be added to an {Info} node: self, documentation, and template links all have dedicated accessors.
-
{Title}: Must appear once. The contents of this node should be the name of the style as shown to users.
-
{TitleShort}: May appear once. The contents of this node should be a shortened style name (e.g. “APA”).
-
{Summary}: This node gives a description of the style.
-
{Rights}: This node specifies the license under which the style file is released. The element may carry a license attribute to specify the
URI
of the license. -
{Updated}: Must appear once. This node must contain a timestamp that shows when the style was last updated.
In dependent styles, the {Info} node must contain a {Link} with rel set to “independent-parent”, with the URI
of the independent parent style set on href. This link is also accessible as a string using the {#independent_parent} accessors. In addition, dependent styles should not contain template links.
In a {Locale} node the {Info} node typically carries only {Translator}, {Rights} and {Updated} nodes.
Public Class Methods
# File lib/csl/info.rb, line 48 def initialize(attributes = {}) super(attributes, &nil) children[:link], children[:category] = [], [] yield self if block_given? end
Public Instance Methods
@return [Symbol] the parent style’s citation format
# File lib/csl/info.rb, line 175 def citation_format return unless has_categories? cat = categories.detect { |c| c.attribute? :'citation-format' } return if cat.nil? cat[:'citation-format'].to_sym end
# File lib/csl/info.rb, line 184 def citation_format=(new_format) cat = categories.detect { |c| c.attribute? :'citation-format' } cat = add_child Info::Category.new if cat.nil? cat[:'citation-format'] = new_format.to_s end
# File lib/csl/info.rb, line 163 def default_license! if has_rights? rights[:license] = Schema.default_license rights.text = Schema.default_rights_string else add_child Rights.new(:license => Schema.default_license) { |r| r.text = Schema.default_rights_string } end end
# File lib/csl/info.rb, line 158 def default_license? has_rights? && rights[:license] == Schema.default_license && rights.text == Schema.default_rights_string end
@return [Id] the id text node
# File lib/csl/info.rb, line 94 def id children[:id] end
# File lib/csl/info.rb, line 145 def license return unless has_rights? rights[:license] || rights.to_s end
# File lib/csl/info.rb, line 150 def license=(license) if has_rights? rights[:license] = license else add_child Rights.new(:license => license) end end
Sets the updated_at
timestamp. @return [self]
# File lib/csl/info.rb, line 133 def publish!(timestamp = Time.now) ts = timestamp.respond_to?(:xmlschema) ? timestamp.xmlschema : timestamp.to_s if has_published? published.text = ts else add_child Published.new { |u| u.text = ts } end self end
@return [Time,nil] when the info node’s parent was published
# File lib/csl/info.rb, line 126 def published_at return unless has_published? published.to_time end
# File lib/csl/info.rb, line 100 def self_link! return unless has_id? self.self_link = id end
Sets the updated_at
timestamp. @return [self]
# File lib/csl/info.rb, line 113 def update!(timestamp = Time.now) ts = timestamp.respond_to?(:xmlschema) ? timestamp.xmlschema : timestamp.to_s if has_updated? updated.text = ts else add_child Updated.new { |u| u.text = ts } end self end
@return [Time,nil] when the info node’s parent was last updated
# File lib/csl/info.rb, line 106 def updated_at return unless has_updated? updated.to_time end