module Shrine::Plugins::PrettyLocation::InstanceMethods

Public Instance Methods

generate_location(io, **options) click to toggle source
# File lib/shrine/plugins/pretty_location.rb, line 13
def generate_location(io, **options)
  pretty_location(io, **options)
end
pretty_location(io, name: nil, record: nil, version: nil, derivative: nil, identifier: nil, metadata: {}, **) click to toggle source
# File lib/shrine/plugins/pretty_location.rb, line 17
def pretty_location(io, name: nil, record: nil, version: nil, derivative: nil, identifier: nil, metadata: {}, **)
  if record
    namespace    = record_namespace(record)
    identifier ||= record_identifier(record)
  end

  basename = basic_location(io, metadata: metadata)
  basename = [*(version || derivative), basename].join("-")

  [*namespace, *identifier, *name, basename].join("/")
end

Private Instance Methods

record_identifier(record) click to toggle source
# File lib/shrine/plugins/pretty_location.rb, line 31
def record_identifier(record)
  record.public_send(opts[:pretty_location][:identifier])
end
record_namespace(record) click to toggle source
# File lib/shrine/plugins/pretty_location.rb, line 43
def record_namespace(record)
  class_name = record.class.name or return
  parts      = transform_class_name(class_name).split("::")

  if separator = opts[:pretty_location][:namespace]
    parts.join(separator)
  else
    parts.last
  end
end
transform_class_name(class_name) click to toggle source
# File lib/shrine/plugins/pretty_location.rb, line 35
def transform_class_name(class_name)
  if opts[:pretty_location][:class_underscore]
    class_name.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').gsub(/([a-z])([A-Z])/, '\1_\2').downcase
  else
    class_name.downcase
  end
end