Class: BibTeX::Entry
- Extended by:
- Forwardable
- Includes:
- Enumerable
- Defined in:
- lib/bibtex/entry.rb
Overview
Represents a regular BibTeX entry.
Defined Under Namespace
Classes: BibTeXMLConverter, CiteProcConverter, RDFConverter
Constant Summary collapse
- REQUIRED_FIELDS =
Defines the required fields of the standard entry types
Hash.new([]).merge({ :article => [:author,:title,:journal,:year], :book => [[:author,:editor],:title,:publisher,:year], :booklet => [:title], :conference => [:author,:title,:booktitle,:year], :inbook => [[:author,:editor],:title,[:chapter,:pages],:publisher,:year], :incollection => [:author,:title,:booktitle,:publisher,:year], :inproceedings => [:author,:title,:booktitle,:year], :manual => [:title], :mastersthesis => [:author,:title,:school,:year], :misc => [], :phdthesis => [:author,:title,:school,:year], :proceedings => [:title,:year], :techreport => [:author,:title,:institution,:year], :unpublished => [:author,:title,:note] }).freeze
- FIELD_ALIASES =
Defines the default fallbacks for values defined in cross-references
{ :booktitle => :title, # :editor => :author }.freeze
- NAME_FIELDS =
[:author,:editor,:translator,:director,:producer,:composer].freeze
- DATE_FIELDS =
[:year,:month,:day,:date].freeze
- MONTHS =
[:jan,:feb,:mar,:apr,:may,:jun,:jul,:aug,:sep,:oct,:nov,:dec].freeze
- MONTHS_FILTER =
Hash.new do |h,k| case k.to_s.strip when /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i h[k] = Value.new(k.to_s[0,3].downcase.to_sym) when /^\d\d?$/ h[k] = Value.new(MONTHS[k.to_i - 1] || k) else h[k] = Value.new(k) end end
Instance Attribute Summary collapse
-
#fields ⇒ Object
readonly
Returns the value of attribute fields.
-
#type ⇒ Object
Returns the value of attribute type.
Attributes inherited from Element
Instance Method Summary collapse
- #<=>(other) ⇒ Object
-
#[](name) ⇒ Object
(also: #get)
Returns the value of the field with the given name.
-
#[]=(name, value) ⇒ Object
Adds a new field (name-value pair) to the entry.
-
#add(*arguments) ⇒ Object
(also: #<<)
call-seq: add(:author, “Edgar A. Poe”) add(:author, “Edgar A. Poe”, :title, “The Raven”) add([:author, “Edgar A. Poe”, :title, “The Raven”]) add(:author => “Edgar A. Poe”, :title => “The Raven”) add(:author => Names.new(Name.new(:first => ‘Edgar A.’, :last => ‘Poe’))).
-
#added_to_bibliography(bibliography) ⇒ Object
Called when the element was added to a bibliography.
-
#aliases ⇒ Object
Returns the Entry’s field name aliases.
-
#children ⇒ Object
(also: #cross_referenced_by)
Returns a list of all entries in the Bibliography containing a cross-reference to this entry or [] if there are no references to this entry.
-
#contained? ⇒ Boolean
Returns true if this entry is published inside a book, collection or journal.
- #container_title ⇒ Object
-
#content(options = {}) ⇒ Object
Returns a string of all the entry’s fields.
-
#convert(*filters) ⇒ Object
Returns a duplicate entry with all values converted using the filter(s).
-
#convert!(*filters) ⇒ Object
In-place variant of @see #convert.
- #date ⇒ Object
-
#delete(name) ⇒ Object
Removes the field with a given name from the entry.
-
#digest(filter = []) ⇒ String
Creates the entry’s digest based on the passed-in filters.
-
#each ⇒ Object
(also: #each_pair)
call-seq: entry.each { |key, value| block } -> entry entry.each_pair { |key, value| block } -> entry entry.each -> an_enumerator entry.each_pair -> an_enumerator.
- #fetch(name, default = nil) ⇒ Object
-
#field_names(filter = [], include_inherited = true) ⇒ Object
Returns a sorted list of the Entry’s field names.
-
#has_children? ⇒ Boolean
(also: #cross_referenced?)
Returns true if the entry is cross-referenced by another entry in the Bibliography.
- #has_field?(*names) ⇒ Boolean (also: #field?)
-
#has_parent? ⇒ Boolean
(also: #has_cross_reference?)
Returns true if the Entry has a valid cross-reference in the Bibliography.
- #has_type?(type) ⇒ Boolean (also: #type?)
- #identifier ⇒ Object
-
#inherited_fields ⇒ Object
Returns a sorted list of all field names referenced by this Entry’s cross-reference.
- #inherits?(*names) ⇒ Boolean
-
#initialize(attributes = {}) {|_self| ... } ⇒ Entry
constructor
Creates a new instance.
- #initialize_copy(other) ⇒ Object
- #join ⇒ Object
- #key ⇒ Object (also: #id)
-
#key=(key) ⇒ Object
(also: #id=)
Sets the Entry’s key.
- #merge(other, filter = field_names) ⇒ Object
- #merge!(other, filter = field_names) ⇒ Object
- #method_missing(name, *args, &block) ⇒ Object
- #month=(month) ⇒ Object
- #month_numeric ⇒ Object
-
#names ⇒ Object
Returns a list of all names (authors, editors, translators).
- #pages_from ⇒ Object
- #pages_to ⇒ Object
-
#parent ⇒ Object
(also: #cross_reference)
Returns the cross-referenced Entry from the Bibliography or nil if this Entry does define a cross-reference.
-
#parent_missing? ⇒ Boolean
(also: #cross_reference_missing?)
Returns true if the Entry cross-references an Entry which is not registered in the current Bibliography.
- #parse_month ⇒ Object (also: #parse_months)
-
#parse_names ⇒ Object
Parses all name values of the entry.
-
#provide(name) ⇒ Object
Returns the field value referenced by the passed-in name.
-
#provides?(*names) ⇒ Boolean
Returns true if the Entry has a field (or alias) for any of the passed-in names.
- #provides_or_inherits?(*names) ⇒ Boolean
-
#register(key) ⇒ Object
Registers this Entry in the associated Bibliographies entries hash.
-
#registered? ⇒ Boolean
Returns true if the Entry is currently registered with the associated Bibliography.
-
#removed_from_bibliography(bibliography) ⇒ Object
Called when the element was removed from a bibliography.
-
#rename(*arguments) ⇒ Object
(also: #rename_fields)
Returns a copy of the Entry with all the field names renamed.
-
#rename!(*arguments) ⇒ Object
(also: #rename_fields!)
Renames the given field names unless a field with the new name already exists.
- #replace(*arguments) ⇒ Object
- #respond_to?(method, include_all = false) ⇒ Boolean
-
#save_inherited_fields ⇒ Object
If the Entry has a cross-reference, copies all referenced all inherited values from the parent.
- #to_citeproc(options = {}) ⇒ Object
- #to_hash(options = {}) ⇒ Object
-
#to_rdf(options = {}) ⇒ Object
(also: #to_bibo)
Returns a RDF::Graph representation of the entry using the BIBO ontology.
-
#to_s(options = {}) ⇒ Object
Returns a string representation of the entry.
- #to_xml(options = {}) ⇒ Object
- #update(fields) ⇒ Object
-
#valid? ⇒ Boolean
Returns false if the entry is one of the standard entry types and does not have definitions of all the required fields for that type.
-
#values_at(*arguments) ⇒ Object
Returns an array containing the values associated with the given keys.
- #year ⇒ Object
Methods inherited from Element
#inspect, #matches?, #meets?, #meets_all?, #meets_any?, parse, #to_json, #to_yaml
Constructor Details
#initialize(attributes = {}) {|_self| ... } ⇒ Entry
Creates a new instance. If a hash is given, the entry is populated accordingly.
73 74 75 76 77 78 79 80 81 82 |
# File 'lib/bibtex/entry.rb', line 73 def initialize(attributes = {}) @fields = {} self.type = attributes.delete(:bibtex_type) if attributes.has_key?(:bibtex_type) self.key = attributes.delete(:bibtex_key) if attributes.has_key?(:bibtex_key) add(attributes) yield self if block_given? end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object
301 302 303 304 305 306 307 308 309 310 311 312 313 314 |
# File 'lib/bibtex/entry.rb', line 301 def method_missing(name, *args, &block) case when fields.has_key?(name) fields[name] when name.to_s =~ /^(.+)=$/ send(:add, $1.to_sym, args[0]) when name =~ /^(?:convert|from)_([a-z]+)(!)?$/ $2 ? convert!($1, &block) : convert($1, &block) when has_parent? && parent.provides?(name) parent.provide(name) else super end end |
Instance Attribute Details
#fields ⇒ Object (readonly)
Returns the value of attribute fields.
68 69 70 |
# File 'lib/bibtex/entry.rb', line 68 def fields @fields end |
#type ⇒ Object
Returns the value of attribute type.
68 69 70 |
# File 'lib/bibtex/entry.rb', line 68 def type @type end |
Instance Method Details
#<=>(other) ⇒ Object
626 627 628 |
# File 'lib/bibtex/entry.rb', line 626 def <=>(other) type != other.type ? type <=> other.type : key != other.key ? key <=> other.key : to_s <=> other.to_s end |
#[](name) ⇒ Object Also known as: get
Returns the value of the field with the given name. If the value is not defined and the entry has cross-reference, returns the cross-referenced value instead.
345 346 347 |
# File 'lib/bibtex/entry.rb', line 345 def [](name) fields[name.to_sym] || parent && parent.provide(name) end |
#[]=(name, value) ⇒ Object
Adds a new field (name-value pair) to the entry. Returns the new value.
357 358 359 |
# File 'lib/bibtex/entry.rb', line 357 def []=(name, value) add(name.to_sym, value) end |
#add(*arguments) ⇒ Object Also known as: <<
call-seq:
add(:author, "Edgar A. Poe")
add(:author, "Edgar A. Poe", :title, "The Raven")
add([:author, "Edgar A. Poe", :title, "The Raven"])
add(:author => "Edgar A. Poe", :title => "The Raven")
add(:author => Names.new(Name.new(:first => 'Edgar A.', :last => 'Poe')))
Adds a new field (name-value pair) or multiple fields to the entry. Returns the entry for chainability.
370 371 372 373 374 375 376 |
# File 'lib/bibtex/entry.rb', line 370 def add(*arguments) Hash[*arguments.flatten].each_pair do |name, value| fields[name.to_sym] = Value.create(value) end self end |
#added_to_bibliography(bibliography) ⇒ Object
Called when the element was added to a bibliography.
433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 |
# File 'lib/bibtex/entry.rb', line 433 def added_to_bibliography(bibliography) super @key = register(key) [:parse_names, :parse_months].each do |parser| send(parser) if bibliography.[parser] end if bibliography..has_key?(:filter) [*bibliography.[:filter]].each do |filter| convert!(filter) end end self end |
#aliases ⇒ Object
Returns the Entry’s field name aliases.
172 173 174 |
# File 'lib/bibtex/entry.rb', line 172 def aliases @aliases ||= FIELD_ALIASES.dup end |
#children ⇒ Object Also known as: cross_referenced_by
Returns a list of all entries in the Bibliography containing a cross-reference to this entry or [] if there are no references to this entry.
575 576 577 |
# File 'lib/bibtex/entry.rb', line 575 def children bibliography && bibliography.q("@entry[crossref=#{key}]") or [] end |
#contained? ⇒ Boolean
Returns true if this entry is published inside a book, collection or journal
594 595 596 597 |
# File 'lib/bibtex/entry.rb', line 594 def contained? has_field?(:container, :journal) || has_field?(:booktitle) && get(:booktitle) != get(:title) end |
#container_title ⇒ Object
581 582 583 |
# File 'lib/bibtex/entry.rb', line 581 def container_title get(:booktitle) || get(:journal) || get(:container) end |
#content(options = {}) ⇒ Object
Returns a string of all the entry’s fields.
632 633 634 |
# File 'lib/bibtex/entry.rb', line 632 def content( = {}) fields.map { |k,v| "#{k} = #{ fields[k].to_s() }" }.join(",\n") end |
#convert(*filters) ⇒ Object
Returns a duplicate entry with all values converted using the filter(s). If an optional block is given, only those values will be converted where the block returns true (the block will be called with each key-value pair).
611 612 613 |
# File 'lib/bibtex/entry.rb', line 611 def convert(*filters) block_given? ? dup.convert!(*filters, &Proc.new) : dup.convert!(*filters) end |
#convert!(*filters) ⇒ Object
In-place variant of @see #convert
616 617 618 619 620 621 622 623 624 |
# File 'lib/bibtex/entry.rb', line 616 def convert!(*filters) filters = filters.flatten.map { |f| Filters.resolve!(f) } fields.each_pair do |k, v| (!block_given? || yield(k, v)) ? v.convert!(*filters) : v end self end |
#date ⇒ Object
515 516 517 |
# File 'lib/bibtex/entry.rb', line 515 def date get(:date) || get(:year) end |
#delete(name) ⇒ Object
Removes the field with a given name from the entry. Returns the value of the deleted field; nil if the field was not set.
382 383 384 |
# File 'lib/bibtex/entry.rb', line 382 def delete(name) fields.delete(name.to_sym) end |
#digest(filter = []) ⇒ String
Creates the entry’s digest based on the passed-in filters.
The digest contains the type and all key-value pairs based on the passed in filter.
If a block is given, the computed digest will be passed to the block for post-processing (the entry itself will be passed as the second parameter).
407 408 409 410 411 412 413 414 415 416 417 |
# File 'lib/bibtex/entry.rb', line 407 def digest(filter = []) names = field_names(filter) digest = type.to_s names.zip(values_at(*names)).each do |key, value| digest << "|#{key}:#{value}" end digest = yield(digest, self) if block_given? digest end |
#each ⇒ Object Also known as: each_pair
call-seq:
entry.each { |key, value| block } -> entry
entry.each_pair { |key, value| block } -> entry
entry.each -> an_enumerator
entry.each_pair -> an_enumerator
Calls block once for each key in entry, passing the key-value pair as parameters.
If no block is given, an enumerator is returned instead.
159 160 161 162 163 164 165 166 |
# File 'lib/bibtex/entry.rb', line 159 def each if block_given? fields.each(&Proc.new) self else to_enum end end |
#fetch(name, default = nil) ⇒ Object
351 352 353 |
# File 'lib/bibtex/entry.rb', line 351 def fetch(name, default = nil) get(name) || (block_given? ? yield(name) : default) end |
#field_names(filter = [], include_inherited = true) ⇒ Object
Returns a sorted list of the Entry’s field names. If a filter
is passed as argument, returns all field names that are also defined by the filter. If the filter
is empty, returns all field names.
If the second optional argument is true (default) and the Entry contains a cross-reference, the list will include all inherited fields.
274 275 276 277 278 279 280 281 282 283 284 285 286 287 |
# File 'lib/bibtex/entry.rb', line 274 def field_names(filter = [], include_inherited = true) names = fields.keys if include_inherited && has_parent? names.concat(inherited_fields) end unless filter.empty? names = names & filter.map(&:to_sym) end names.sort! names end |
#has_children? ⇒ Boolean Also known as: cross_referenced?
Returns true if the entry is cross-referenced by another entry in the Bibliography.
566 567 568 |
# File 'lib/bibtex/entry.rb', line 566 def has_children? !children.empty? end |
#has_field?(*names) ⇒ Boolean Also known as: field?
218 219 220 221 222 |
# File 'lib/bibtex/entry.rb', line 218 def has_field?(*names) names.flatten.any? do |name| name.respond_to?(:to_sym) ? fields.has_key?(name.to_sym) : false end end |
#has_parent? ⇒ Boolean Also known as: has_cross_reference?
Returns true if the Entry has a valid cross-reference in the Bibliography.
541 542 543 |
# File 'lib/bibtex/entry.rb', line 541 def has_parent? !parent.nil? end |
#has_type?(type) ⇒ Boolean Also known as: type?
211 212 213 |
# File 'lib/bibtex/entry.rb', line 211 def has_type?(type) type.to_s.match(/^(?:entry|\*)$/i) || @type == type.to_sym || super end |
#identifier ⇒ Object
419 420 421 422 423 424 425 426 427 428 429 430 |
# File 'lib/bibtex/entry.rb', line 419 def identifier case when provides?(:doi) "info:doi/#{get(:doi)}" when provides?(:isbn) "urn:isbn:#{get(:isbn)}" when provides?(:issn) "urn:issn:#{get(:issn)}" else "urn:bibtex:#{key}" end end |
#inherited_fields ⇒ Object
Returns a sorted list of all field names referenced by this Entry’s cross-reference.
290 291 292 293 294 295 296 297 298 |
# File 'lib/bibtex/entry.rb', line 290 def inherited_fields return [] unless has_parent? names = parent.fields.keys - fields.keys names.concat(parent.aliases.reject { |k,v| !parent.has_field?(v) }.keys) names.sort! names end |
#inherits?(*names) ⇒ Boolean
226 227 228 229 230 |
# File 'lib/bibtex/entry.rb', line 226 def inherits?(*names) names.flatten.any? do |name| !has_field(name) && has_parent? && parent.provides?(name) end end |
#initialize_copy(other) ⇒ Object
84 85 86 87 88 89 90 91 |
# File 'lib/bibtex/entry.rb', line 84 def initialize_copy(other) @fields = {} self.type = other.type self.key = other.key add(other.fields) end |
#join ⇒ Object
483 484 485 486 |
# File 'lib/bibtex/entry.rb', line 483 def join fields.values.each(&:join) self end |
#key ⇒ Object Also known as: id
195 196 197 198 199 200 201 |
# File 'lib/bibtex/entry.rb', line 195 def key if @key.nil? || @key.empty? @key = default_key else @key end end |
#key=(key) ⇒ Object Also known as: id=
Sets the Entry’s key. If the Entry is currently registered with a Bibliography, re-registers the Entry with the new key; note that this may change the key value if another Entry is already regsitered with the same key.
Returns the new key.
182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/bibtex/entry.rb', line 182 def key=(key) key = key.to_s if registered? bibliography.entries.delete(@key) key = register(key) end @key = key rescue => e raise BibTeXError, "failed to set key to #{key.inspect}: #{e.}" end |
#merge(other, filter = field_names) ⇒ Object
93 94 95 |
# File 'lib/bibtex/entry.rb', line 93 def merge(other, filter = field_names) dup.merge!(other, filter) end |
#merge!(other, filter = field_names) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/bibtex/entry.rb', line 97 def merge!(other, filter = field_names) raise InvalidArgument, "failed to merge entries: type mismatch: #{type} #{other.type}" unless type == other.type other.each do |name, value| if has_field?(name) get(name).merge!(value) if filter.include?(name) else add name, value.dup end end self end |
#month=(month) ⇒ Object
488 489 490 491 492 |
# File 'lib/bibtex/entry.rb', line 488 def month=(month) fields[:month] = month ensure parse_month end |
#month_numeric ⇒ Object
494 495 496 497 498 499 |
# File 'lib/bibtex/entry.rb', line 494 def month_numeric return unless has_field?(:month) return unless (num = MONTHS.index fields[:month].to_sym) num.succ end |
#names ⇒ Object
Returns a list of all names (authors, editors, translators).
535 536 537 |
# File 'lib/bibtex/entry.rb', line 535 def names NAME_FIELDS.map { |k| has_field?(k) ? @fields[k].tokens : nil }.flatten.compact end |
#pages_from ⇒ Object
585 586 587 |
# File 'lib/bibtex/entry.rb', line 585 def pages_from fetch(:pages, '').split(/\D+/)[0] end |
#pages_to ⇒ Object
589 590 591 |
# File 'lib/bibtex/entry.rb', line 589 def pages_to fetch(:pages, '').split(/\D+/)[-1] end |
#parent ⇒ Object Also known as: cross_reference
Returns the cross-referenced Entry from the Bibliography or nil if this Entry does define a cross-reference.
557 558 559 |
# File 'lib/bibtex/entry.rb', line 557 def parent bibliography && bibliography[fields[:crossref]] end |
#parent_missing? ⇒ Boolean Also known as: cross_reference_missing?
Returns true if the Entry cross-references an Entry which is not registered in the current Bibliography.
549 550 551 |
# File 'lib/bibtex/entry.rb', line 549 def parent_missing? has_field?(:crossref) && !has_parent? end |
#parse_month ⇒ Object Also known as: parse_months
501 502 503 504 505 506 507 508 509 510 511 |
# File 'lib/bibtex/entry.rb', line 501 def parse_month fields.delete(:month_numeric) return unless has_field?(:month) fields[:month] = MONTHS_FILTER[fields[:month]] numeric = MONTHS.index(fields[:month].to_sym) fields[:month_numeric] = Value.new(numeric.succ) if numeric self end |
#parse_names ⇒ Object
Parses all name values of the entry. Tries to replace and join the value prior to parsing.
521 522 523 524 525 526 527 528 529 530 531 532 |
# File 'lib/bibtex/entry.rb', line 521 def parse_names strings = bibliography ? bibliography.strings.values : [] NAME_FIELDS.each do |key| if name = fields[key] name = name.dup.replace(strings).join.to_name fields[key] = name unless name.nil? end end self end |
#provide(name) ⇒ Object
Returns the field value referenced by the passed-in name. For example, this will return the ‘title’ value for ‘booktitle’ if a corresponding alias is defined.
250 251 252 253 254 |
# File 'lib/bibtex/entry.rb', line 250 def provide(name) return nil unless name.respond_to?(:to_sym) name = name.to_sym fields[name] || fields[aliases[name]] end |
#provides?(*names) ⇒ Boolean
Returns true if the Entry has a field (or alias) for any of the passed-in names.
233 234 235 236 237 238 239 240 241 |
# File 'lib/bibtex/entry.rb', line 233 def provides?(*names) names.flatten.any? do |name| if name.respond_to?(:to_sym) has_field?(name) || has_field?(aliases[name.to_sym]) else false end end end |
#provides_or_inherits?(*names) ⇒ Boolean
243 244 245 |
# File 'lib/bibtex/entry.rb', line 243 def provides_or_inherits?(*names) provides?(names) || inherits?(names) end |
#register(key) ⇒ Object
Registers this Entry in the associated Bibliographies entries hash. This method may change the Entry’s key, if another entry is already registered with the current key.
Returns the key or nil if the Entry is not associated with a Bibliography.
468 469 470 471 472 473 474 475 |
# File 'lib/bibtex/entry.rb', line 468 def register(key) return nil if bibliography.nil? k = key.dup k.succ! while bibliography.has_key?(k) bibliography.entries[k] = self k end |
#registered? ⇒ Boolean
Returns true if the Entry is currently registered with the associated Bibliography.
459 460 461 |
# File 'lib/bibtex/entry.rb', line 459 def registered? !!(bibliography && bibliography.entries[key].equal?(self)) end |
#removed_from_bibliography(bibliography) ⇒ Object
Called when the element was removed from a bibliography.
452 453 454 455 456 |
# File 'lib/bibtex/entry.rb', line 452 def removed_from_bibliography(bibliography) super bibliography.entries.delete(key) self end |
#rename(*arguments) ⇒ Object Also known as: rename_fields
Returns a copy of the Entry with all the field names renamed.
323 324 325 |
# File 'lib/bibtex/entry.rb', line 323 def rename(*arguments) dup.rename!(*arguments) end |
#rename!(*arguments) ⇒ Object Also known as: rename_fields!
Renames the given field names unless a field with the new name already exists.
329 330 331 332 333 334 335 336 337 |
# File 'lib/bibtex/entry.rb', line 329 def rename!(*arguments) Hash[*arguments.flatten].each_pair do |from,to| if fields.has_key?(from) && !fields.has_key?(to) fields[to] = fields[from] fields.delete(from) end end self end |
#replace(*arguments) ⇒ Object
477 478 479 480 481 |
# File 'lib/bibtex/entry.rb', line 477 def replace(*arguments) arguments = bibliography.q('@string') if arguments.empty? fields.values.each { |v| v.replace(*arguments) } self end |
#respond_to?(method, include_all = false) ⇒ Boolean
316 317 318 319 320 |
# File 'lib/bibtex/entry.rb', line 316 def respond_to?(method, include_all=false) provides?(method.to_sym) || method.to_s.match(/=$/) || method =~ /^(?:convert|from)_([a-z]+)(!)?$/ || (has_parent? && parent.respond_to?(method, include_all)) || super end |
#save_inherited_fields ⇒ Object
If the Entry has a cross-reference, copies all referenced all inherited values from the parent.
Returns the Entry.
260 261 262 263 264 265 266 |
# File 'lib/bibtex/entry.rb', line 260 def save_inherited_fields inherited_fields.each do |name| fields[name] = parent.provide(name) end self end |
#to_citeproc(options = {}) ⇒ Object
649 650 651 |
# File 'lib/bibtex/entry.rb', line 649 def to_citeproc( = {}) CiteProcConverter.convert(self, ) end |
#to_hash(options = {}) ⇒ Object
642 643 644 645 646 647 |
# File 'lib/bibtex/entry.rb', line 642 def to_hash( = {}) [:quotes] ||= %w({ }) hash = { :bibtex_key => key, :bibtex_type => type } each_pair { |k,v| hash[k] = v.to_s() } hash end |
#to_rdf(options = {}) ⇒ Object Also known as: to_bibo
Returns a RDF::Graph representation of the entry using the BIBO ontology.
658 659 660 661 662 663 664 |
# File 'lib/bibtex/entry.rb', line 658 def to_rdf( = {}) if defined?(::RDF) RDFConverter.convert(self) else BibTeX.log.error 'Please `gem install rdf` for RDF support.' end end |
#to_s(options = {}) ⇒ Object
Returns a string representation of the entry.
637 638 639 640 |
# File 'lib/bibtex/entry.rb', line 637 def to_s( = {}) [:quotes] ||= %w({ }) ["@#{type}{#{key},", content().gsub(/^/,' '), "}\n"].join("\n") end |
#to_xml(options = {}) ⇒ Object
653 654 655 |
# File 'lib/bibtex/entry.rb', line 653 def to_xml( = {}) BibTeXMLConverter.convert(self, ) end |
#update(fields) ⇒ Object
112 113 114 115 116 117 118 |
# File 'lib/bibtex/entry.rb', line 112 def update(fields) fields.each do |name, value| add name, value end self end |
#valid? ⇒ Boolean
Returns false if the entry is one of the standard entry types and does not have definitions of all the required fields for that type.
388 389 390 391 392 |
# File 'lib/bibtex/entry.rb', line 388 def valid? REQUIRED_FIELDS[type].all? do |f| f.is_a?(Array) ? !(f & fields.keys).empty? : !fields[f].nil? end end |
#values_at(*arguments) ⇒ Object
Returns an array containing the values associated with the given keys.
600 601 602 603 604 |
# File 'lib/bibtex/entry.rb', line 600 def values_at(*arguments) arguments.map do |key| get key end end |
#year ⇒ Object
668 669 670 671 672 673 |
# File 'lib/bibtex/entry.rb', line 668 def year return fields[:year] if has_field?(:year) return unless has_field?(:date) fields[:date].to_s[/\d{4}/] end |