Extends models with a map between disposition & viewing_preference (which may be renamed eventually to avoid confusion)
Provides a DISPOSITIONS enum for viewing_preference
Cannot be named ContentDisposition due to collision with Shrine
Constants
| DISPOSITIONS | = | %w[direct inline popup download browser].freeze |
Instance Public methods
allow_dispositions(allow_list, default: nil) Link
Sets the class’s list of .allowed_dispositions and its .default_disposition
Default .allowed_dispositions is DISPOSITIONS
Default .default_disposition is the first item in .allowed_dispositions
Arguments
Given allow_list values must be present in DISPOSITIONS
When no default is provided, .default_disposition will be the first item in allow_list
Examples
class Post < ApplicationRecord
include ContentLinkDisposition
allow_dispositions %i[inline popup], default: :popup
end
class DownloadableFile < ApplicationRecord
include ContentLinkDisposition
allow_dispositions %w[direct download browser], default: :download
end
Source: show
# File app/models/concerns/content_link_disposition.rb, line 54 def allow_dispositions(allow_list, default: nil) allow_list = Array(allow_list).map(&:to_s) self.allowed_dispositions = allow_list self.default_disposition = String(default || allow_list.first) end
content_link() Link
Provides the URL of the content
Adds a display=<value> query parameter
viewing_preference == 'inline' #=> https://any_site.com?msopen=/content/:public_id/inline
viewing_preference == 'popup' #=> .../popup
viewing_preference == 'browser' #=> .../newtab
Source: show
# File app/models/concerns/content_link_disposition.rb, line 94 def content_link site.widget_url(:content_disposition, self, display) end
display() Link
Source: show
# File app/models/concerns/content_link_disposition.rb, line 98 def display if inline? :inline elsif popup? :popup elsif new_tab? :newtab else :download end end
disposition() Link
Returns the viewing_preference as custom param disposition
Converts viewing_preference of inline to embed
Source: show
# File app/models/concerns/content_link_disposition.rb, line 81 def disposition inline? ? "embed" : viewing_preference end
disposition=(value) Link
Maps the custom param disposition to viewing_preference
Converts value of embed to inline
Dismisses any value not present in the class’s .allowed_dispositions
Source: show
# File app/models/concerns/content_link_disposition.rb, line 68 def disposition=(value) value = (value == "embed") ? "inline" : value if self.class.allowed_dispositions.include?(value) self.viewing_preference = value end end