class Ducktrails::Resource
Attributes
current_uri[R]
resource[R]
resources[R]
Public Class Methods
new(resources, resource, current_uri)
click to toggle source
# File lib/ducktrails/resource.rb, line 13 def initialize(resources, resource, current_uri) @resources = DeepStruct.new(resources) @resource = resource @current_uri = current_uri end
Public Instance Methods
link()
click to toggle source
# File lib/ducktrails/resource.rb, line 19 def link # Build resource link # example /institutions/:institution_id/iterations/:id if resources.send(resource.to_sym).present? return unless resources[resource.to_sym][:policy] build_link(link_text(resources[resource.to_sym])) elsif (show_action || new_action || edit_action) && current_resource.present? return unless current_resource[:policy] build_link(link_text(current_resource)) else # build links based off of uri build_link(link_text(resource.underscore.titleize)) end rescue ActionController::RoutingError nil end
Private Instance Methods
build_link(text)
click to toggle source
# File lib/ducktrails/resource.rb, line 51 def build_link(text) { text: text, uri: progressive_uri } end
col_prefix()
click to toggle source
# File lib/ducktrails/resource.rb, line 101 def col_prefix return '' if new_action || edit_action if resources[resource]&.collection_prefix.present? resources[resource].collection_prefix.concat(' ') else collection_prefix end end
controller_resource_title()
click to toggle source
# File lib/ducktrails/resource.rb, line 95 def controller_resource_title return string_resource if request_pattern[:controller].split('/')[uri_index].nil? request_pattern[:controller].split('/')[uri_index].underscore.titleize.pluralize. prepend(col_prefix) end
current_resource()
click to toggle source
TODO: Refactor this to use a resource given by the view_helpers?
# File lib/ducktrails/resource.rb, line 47 def current_resource resources[request_pattern[:controller].split('/').last.to_sym] end
link_text(resource)
click to toggle source
# File lib/ducktrails/resource.rb, line 62 def link_text(resource) return string_resource if resource.is_a?(String) if resource.nil? || resource.resource.nil? return resource.as.prepend(col_prefix) unless resource.resource.present? || resource.as.nil? return controller_resource_title end case request_pattern(progressive_uri)[:action] when 'show' resource[:resource].send(resource[:key]) when 'edit' 'Edit ' + resource[:resource].send(resource[:key]) when 'new' 'New ' + resourcer(resource.try(:resource)).singularize else resourcer(resource.try(:resource)) end end
progressive_uri()
click to toggle source
# File lib/ducktrails/resource.rb, line 58 def progressive_uri split_uri[0..uri_index].join('/').prepend('/') end
request_pattern(url = nil)
click to toggle source
# File lib/ducktrails/resource.rb, line 91 def request_pattern(url = nil) @request_pattern ||= Rails.application.routes.recognize_path(url || current_uri) end
resourcer(resource)
click to toggle source
# File lib/ducktrails/resource.rb, line 87 def resourcer(resource) resource.class.name.split('::').first.underscore.titleize.pluralize.prepend(col_prefix) end
split_uri()
click to toggle source
# File lib/ducktrails/resource.rb, line 38 def split_uri @split_uri ||= current_uri.split('/').reject(&:empty?) end
string_resource()
click to toggle source
# File lib/ducktrails/resource.rb, line 82 def string_resource return resource.titleize if show_action || edit_action || new_action resource.titleize.prepend(col_prefix) end
uri_index()
click to toggle source
# File lib/ducktrails/resource.rb, line 42 def uri_index split_uri.index(resource) end