Method: Referent.create_by_context_object
- Defined in:
- app/models/referent.rb
.create_by_context_object(co, options = {}) ⇒ Object
Pass in :permalink => :force to force creation of a permalink, otherwise no permalink is created by this method, one can be lazily created when needed.
29 30 31 32 33 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 |
# File 'app/models/referent.rb', line 29 def self.create_by_context_object(co, = {}) self.clean_up_context_object(co) rft = Referent.new # Wrap everything in a transaction for better efficiency, at least # with MySQL, I think. Referent.transaction do rft.set_values_from_context_object(co) # Permalinks created on-demand later. But if set config to :force, can # force old behavior. if [:permalink] == :force permalink = Permalink.new_with_values!(rft, co.referrer.identifier) end # Add shortcuts. rft.referent_values.each do | val | rft.atitle = val.normalized_value if val.key_name == 'atitle' and val. rft.title = val.normalized_value if val.key_name.match(/^[bj]?title$/) and val. rft.issn = val.normalized_value.gsub(/[^\d]/, '')[0,8] if val.key_name == 'issn' and val. rft.isbn = val.normalized_value.gsub(/[^\d]/, '')[0,13] if val.key_name == 'isbn' and val. rft.volume = val.normalized_value if val.key_name == 'volume' and val. rft.year = val.normalized_value.gsub(/[^\d]/, '')[0,4] if val.key_name == 'date' and val. end rft.save! # Apply referent filters rfr_id = "" rfr_id = co.referrer.identifier if (co.referrer && ! co.referrer.identifier.blank?) UmlautController.umlaut_config.lookup!("referent_filters", []).each do |filter_config| regexp = filter_config[:match] filter = filter_config[:filter] if (regexp =~ rfr_id) filter.filter(rft) if filter.respond_to?(:filter) end end end return rft end |