Class: GraphQL::Modernize::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/graphql/modernize/config.rb

Constant Summary collapse

DEFAULT_INCLUDE =
["app/graphql/**/*.rb", "lib/graphql/**/*.rb"].freeze
DEFAULT_EXCLUDE =
["vendor/**/*", "tmp/**/*"].freeze
BASE_CLASS_KINDS =
%w[object input_object enum interface union resolver mutation subscription schema].freeze
DEFAULTS =
{
  "include" => DEFAULT_INCLUDE,
  "exclude" => DEFAULT_EXCLUDE,
  "base_classes" => {},
  "rules" => {},
  "apply_unsafe" => false,
  "require_suppression_reason" => false,
  "iterations" => 3
}.freeze
KEYS =
(DEFAULTS.keys + %w[from_version target_version ruby_version]).freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root: Dir.pwd, include_patterns: DEFAULT_INCLUDE, exclude_patterns: DEFAULT_EXCLUDE, base_classes: {}, rules: {}, ruby_version: nil, apply_unsafe: false, from_version: nil, target_version: nil, require_suppression_reason: false, iterations: 3) ⇒ Config

Returns a new instance of Config.



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/graphql/modernize/config.rb', line 45

def initialize(root: Dir.pwd, include_patterns: DEFAULT_INCLUDE, exclude_patterns: DEFAULT_EXCLUDE,
               base_classes: {}, rules: {}, ruby_version: nil, apply_unsafe: false, from_version: nil,
               target_version: nil, require_suppression_reason: false, iterations: 3)
  validate!(include_patterns, exclude_patterns, base_classes, rules, apply_unsafe,
            require_suppression_reason, iterations, ruby_version, from_version, target_version)

  @root = File.expand_path(root)
  @include_patterns = Array(include_patterns).freeze
  @exclude_patterns = Array(exclude_patterns).freeze
  @base_classes = base_classes.transform_keys(&:to_sym).transform_values { |names| Array(names) }.freeze
  @rules = rules.to_h { |id, options| [id.to_s.upcase, options.transform_keys(&:to_s).freeze] }.freeze
  @ruby_version = ruby_version
  @apply_unsafe = apply_unsafe
  @from_version = from_version || locked_graphql_version
  @target_version = target_version || locked_graphql_version
  if @from_version && @target_version && Gem::Version.new(@from_version) > Gem::Version.new(@target_version)
    raise Error, "from_version must be less than or equal to target_version"
  end

  @require_suppression_reason = require_suppression_reason
  @iterations = iterations
rescue ArgumentError => e
  raise Error, "Invalid version configuration: #{e.message}"
end

Instance Attribute Details

#apply_unsafeObject (readonly)

Returns the value of attribute apply_unsafe.



22
23
24
# File 'lib/graphql/modernize/config.rb', line 22

def apply_unsafe
  @apply_unsafe
end

#base_classesObject (readonly)

Returns the value of attribute base_classes.



22
23
24
# File 'lib/graphql/modernize/config.rb', line 22

def base_classes
  @base_classes
end

#exclude_patternsObject (readonly)

Returns the value of attribute exclude_patterns.



22
23
24
# File 'lib/graphql/modernize/config.rb', line 22

def exclude_patterns
  @exclude_patterns
end

#from_versionObject (readonly)

Returns the value of attribute from_version.



22
23
24
# File 'lib/graphql/modernize/config.rb', line 22

def from_version
  @from_version
end

#include_patternsObject (readonly)

Returns the value of attribute include_patterns.



22
23
24
# File 'lib/graphql/modernize/config.rb', line 22

def include_patterns
  @include_patterns
end

#iterationsObject (readonly)

Returns the value of attribute iterations.



22
23
24
# File 'lib/graphql/modernize/config.rb', line 22

def iterations
  @iterations
end

#require_suppression_reasonObject (readonly)

Returns the value of attribute require_suppression_reason.



22
23
24
# File 'lib/graphql/modernize/config.rb', line 22

def require_suppression_reason
  @require_suppression_reason
end

#rootObject (readonly)

Returns the value of attribute root.



22
23
24
# File 'lib/graphql/modernize/config.rb', line 22

def root
  @root
end

#ruby_versionObject (readonly)

Returns the value of attribute ruby_version.



22
23
24
# File 'lib/graphql/modernize/config.rb', line 22

def ruby_version
  @ruby_version
end

#rulesObject (readonly)

Returns the value of attribute rules.



22
23
24
# File 'lib/graphql/modernize/config.rb', line 22

def rules
  @rules
end

#target_versionObject (readonly)

Returns the value of attribute target_version.



22
23
24
# File 'lib/graphql/modernize/config.rb', line 22

def target_version
  @target_version
end

Class Method Details

.load(root: Dir.pwd, path: nil, overrides: {}) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/graphql/modernize/config.rb', line 26

def self.load(root: Dir.pwd, path: nil, overrides: {})
  root = File.expand_path(root)
  path ||= File.join(root, ".graphql-modernize.yml")
  file_options = File.file?(path) ? YAML.safe_load_file(path, aliases: false) : {}
  raise Error, "The configuration root must be a mapping" unless file_options.nil? || file_options.is_a?(Hash)

  options = DEFAULTS.merge(file_options || {}).merge(overrides.compact.transform_keys(&:to_s))
  unknown = options.keys - KEYS
  raise Error, "Unknown configuration keys: #{unknown.join(', ')}" unless unknown.empty?

  new(root: root, include_patterns: options["include"], exclude_patterns: options["exclude"],
      base_classes: options["base_classes"], rules: options["rules"], ruby_version: options["ruby_version"],
      apply_unsafe: options["apply_unsafe"], from_version: options["from_version"],
      target_version: options["target_version"],
      require_suppression_reason: options["require_suppression_reason"], iterations: options["iterations"])
rescue Psych::Exception => e
  raise Error, "Unable to load the configuration file: #{e.message}"
end

Instance Method Details

#rule_enabled?(metadata) ⇒ Boolean

Returns:

  • (Boolean)


70
71
72
73
# File 'lib/graphql/modernize/config.rb', line 70

def rule_enabled?()
  configured = rules.fetch(.id, {})
  configured.fetch("enabled", .default_enabled)
end

#rule_options(rule_id) ⇒ Object



75
76
77
# File 'lib/graphql/modernize/config.rb', line 75

def rule_options(rule_id)
  rules.fetch(rule_id, {})
end