Sha256: fa18a2efdc9129b054eed299fae43c47ed534a0aab908d121923925cae8d5f70

Contents?: true

Size: 1.2 KB

Versions: 1

Compression:

Stored size: 1.2 KB

Contents

module ActsAsLinkable
  module ActiveRecordExtensions
    def acts_as_linkable(opts={}, &block)
      class_eval "def link_attr; #{opts.inspect}; end;"
    end
  end

  module ActionViewExtensions
    def link(obj, options={}, html_options={})
      raise "I can't link to nil." unless obj
      if (obj.class == Array) || (obj.class == ActiveRecord::Relation)
        obj.map{|v| link(v)}.to_sentence
      else
        p = obj.link_attr
        p[:partial] = "#{obj.class.name.tableize}/link" if p.empty?
        unless p[:partial].nil?
          obj_name = (p[:object_name] ||= obj.class.name.underscore).to_s.to_sym
          (render :partial => p[:partial], :locals => {obj_name => obj}).strip
        else
          name = obj.link_attr[:name]
          link_attr.except(:name).each do |key, val|
            html_options[key] ||= obj.send(val) if val.class==Symbol
          end
          url = self.send("#{obj.class.name.tableize}_path", obj, options.except(:remote))
          link_to name, obj, html_options, :remote => options[:remote]||true
        end
      end
    end
  end
end
ActiveRecord::Base.extend(ActsAsLinkable::ActiveRecordExtensions)
ActionView::Base.send :include, ActsAsLinkable::ActionViewExtensions

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
casey_jones-0.0.108 lib/acts_as_linkable/acts_as_linkable.rb