class KManager::Resources::FileResource

A file resource represents context that is loaded via a file.

File resources have the benefit that file watchers can watch them locally and reload these resources on change.

Attributes

file[R]

Full path to file

example: /Users/davidcruwys/dev/kgems/k_dsl/spec/factories/dsls/common-auth/admin_user.rb

Public Class Methods

instance(**opts) click to toggle source
# File lib/k_manager/resources/file_resource.rb, line 28
def instance(**opts)
  file = opts[:file]

  extension = ::File.extname(file).downcase

  case extension
  when '.rb'
    KManager::Resources::RubyFileResource.new(**opts)
  when '.csv'
    KManager::Resources::CsvFileResource.new(**opts)
  when '.json'
    KManager::Resources::JsonFileResource.new(**opts)
  when '.yaml'
    KManager::Resources::YamlFileResource.new(**opts)
  else
    KManager::Resources::UnknownFileResource.new(**opts)
  end
end
new(**opts) click to toggle source
Calls superclass method KManager::Resources::BaseResource::new
# File lib/k_manager/resources/file_resource.rb, line 19
def initialize(**opts)
  super(**opts)
  @source = :file
  @file = opts[:file]

  guard
end

Public Instance Methods

debug() click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/k_manager/resources/file_resource.rb, line 71
def debug
  log.section_heading('resource')
  log.kv 'source'   , source                                                , 15
  log.kv 'file'     , file                                                  , 15
  log.kv 'type'     , type                                                  , 15
  log.kv 'infer_key', infer_key                                             , 15
  log.kv 'status'   , status                                                , 15
  # log.kv 'project'  , project
  log.kv 'content'  , content.nil? ? '' : content[0..100].gsub("\n", '\n')  , 15
  log.kv 'documents', documents.length                                      , 15

  documents.each(&:debug)
end
infer_key() click to toggle source

Infer key is the file name without the extension stored in dash-case

# File lib/k_manager/resources/file_resource.rb, line 49
def infer_key
  file_name = Pathname.new(@file).basename.sub_ext('').to_s
  Handlebars::Helpers::StringFormatting::Dasherize.new.parse(file_name)
end
load_content() click to toggle source
# File lib/k_manager/resources/file_resource.rb, line 54
def load_content
  if File.exist?(file)
    begin
      @content = File.read(file)
    rescue StandardError => e
      log.error e
    end
  else
    log.error "Source file not found: #{file}"
  end
end
register_document() click to toggle source
# File lib/k_manager/resources/file_resource.rb, line 66
def register_document
  attach_document(create_document)
end

Private Instance Methods

guard() click to toggle source

rubocop:enable Metrics/AbcSize

# File lib/k_manager/resources/file_resource.rb, line 88
def guard
  raise KType::Error, 'File resource requires a file option' if @file.nil? || @file == ''
end