module DynaModel::Tasks

Public Instance Methods

included_models() click to toggle source
# File lib/dyna_model/tasks.rb, line 6
def included_models
  dir = ENV['DIR'].to_s != '' ? ENV['DIR'] : Rails.root.join("app/models")
  DynaModel::Config.logger.info "Loading models from: #{dir}"
  included = []
  Dir.glob(File.join("#{dir}/**/*.rb")).each do |path|
    model_filename = path[/#{Regexp.escape(dir.to_s)}\/([^\.]+).rb/, 1]
    next if model_filename.match(/^concerns\//i) # Skip concerns/ folder

    begin
      klass = model_filename.camelize.constantize
    rescue NameError
      require(path) ? retry : raise
    rescue LoadError => e
      # Try non-namespaced class name instead...
      klass = model_filename.camelize.split("::").last.constantize
    end

    # Skip if the class doesn't have DynaModel integration
    next unless klass.respond_to?(:dynamo_db_table)

    included << klass
  end
  included
end