Sha256: a0b95bdfd9cefd17c09158f5d064d0230465c1cfd7ae16f0274a1c403e10893a
Contents?: true
Size: 1.48 KB
Versions: 2
Compression:
Stored size: 1.48 KB
Contents
# frozen_string_literal: true module RuboCop module Rails # It loads db/schema.rb and return Schema object. # Cops refers database schema information with this module. module SchemaLoader extend self # It parses `db/schema.rb` and return it. # It returns `nil` if it can't find `db/schema.rb`. # So a cop that uses the loader should handle `nil` properly. # # @return [Schema, nil] def load(target_ruby_version) return @schema if defined?(@schema) @schema = load!(target_ruby_version) end def reset! return unless instance_variable_defined?(:@schema) remove_instance_variable(:@schema) end private def load!(target_ruby_version) path = db_schema_path return unless path ast = parse(path, target_ruby_version) Schema.new(ast) end def db_schema_path path = Pathname.pwd until path.root? schema_path = path.join('db/schema.rb') return schema_path if schema_path.exist? path = path.join('../').cleanpath end nil end def parse(path, target_ruby_version) klass_name = :"Ruby#{target_ruby_version.to_s.sub('.', '')}" klass = ::Parser.const_get(klass_name) parser = klass.new(RuboCop::AST::Builder.new) buffer = Parser::Source::Buffer.new(path, 1) buffer.source = path.read parser.parse(buffer) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
rubocop-rails-2.5.1 | lib/rubocop/rails/schema_loader.rb |
rubocop-rails-2.5.0 | lib/rubocop/rails/schema_loader.rb |