Module: Mongo::Lint Private

Defined in:
lib/mongo/lint.rb

Overview

This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.

API:

  • private

Class Method Summary collapse

Class Method Details

.assert_type(obj, cls) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Raises LintError if obj is not of type cls.

API:

  • private



10
11
12
13
14
15
# File 'lib/mongo/lint.rb', line 10

def assert_type(obj, cls)
  return unless enabled?
  unless obj.is_a?(cls)
    raise Error::LintError, "Expected #{obj} to be a #{cls}"
  end
end

.enabled?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

API:

  • private



100
101
102
# File 'lib/mongo/lint.rb', line 100

def enabled?
  ENV['MONGO_RUBY_DRIVER_LINT'] && %w(1 yes true on).include?(ENV['MONGO_RUBY_DRIVER_LINT'].downcase)
end

.validate_camel_case_read_preference(read_pref) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



38
39
40
41
42
43
44
45
# File 'lib/mongo/lint.rb', line 38

def validate_camel_case_read_preference(read_pref)
  return unless enabled?
  return if read_pref.nil?
  unless read_pref.is_a?(Hash)
    raise Error::LintError, "Read preference is not a hash: #{read_pref}"
  end
  validate_camel_case_read_preference_mode(read_pref[:mode] || read_pref['mode'])
end

.validate_camel_case_read_preference_mode(mode) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



48
49
50
51
52
53
54
55
# File 'lib/mongo/lint.rb', line 48

def validate_camel_case_read_preference_mode(mode)
  return unless enabled?
  if mode
    unless %w(primary primaryPreferred secondary secondaryPreferred nearest).include?(mode.to_s)
      raise Error::LintError, "Invalid read preference mode: #{mode}"
    end
  end
end

.validate_read_concern_option(read_concern) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Validates the provided hash as a read concern object, per the read/write concern specification (github.com/mongodb/specifications/blob/master/source/read-write-concern/read-write-concern.rst#read-concern).

This method also accepts nil as input for convenience.

The read concern document as sent to the server may include additional fields, for example afterClusterTime. These fields are generated internally by the driver and cannot be specified by the user (and would potentially lead to incorrect behavior if they were specified by the user), hence this method prohibits them.

Parameters:

  • The read concern options hash, with the following optional keys:

    • :level – the read preference level as a symbol; valid values

      are *:local*, *:majority*, and *:snapshot*
      

Raises:

  • If the validation failed.

API:

  • private



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/mongo/lint.rb', line 76

def validate_read_concern_option(read_concern)
  return unless enabled?
  return if read_concern.nil?
  unless read_concern.is_a?(Hash)
    raise Error::LintError, "Read concern is not a hash: #{read_concern}"
  end
  return if read_concern.empty?
  keys = read_concern.keys
  if read_concern.is_a?(BSON::Document)
    # Permits indifferent access
    allowed_keys = ['level']
  else
    # Does not permit indifferent access
    allowed_keys = [:level]
  end
  if keys != allowed_keys
    raise Error::LintError, "Read concern has invalid keys: #{keys.inspect}"
  end
  level = read_concern[:level]
  return if [:local, :available, :majority, :linearizable, :snapshot].include?(level)
  raise Error::LintError, "Read concern level is invalid: value must be a symbol: #{level.inspect}"
end

.validate_underscore_read_preference(read_pref) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



18
19
20
21
22
23
24
25
# File 'lib/mongo/lint.rb', line 18

def validate_underscore_read_preference(read_pref)
  return unless enabled?
  return if read_pref.nil?
  unless read_pref.is_a?(Hash)
    raise Error::LintError, "Read preference is not a hash: #{read_pref}"
  end
  validate_underscore_read_preference_mode(read_pref[:mode] || read_pref['mode'])
end

.validate_underscore_read_preference_mode(mode) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



28
29
30
31
32
33
34
35
# File 'lib/mongo/lint.rb', line 28

def validate_underscore_read_preference_mode(mode)
  return unless enabled?
  if mode
    unless %w(primary primary_preferred secondary secondary_preferred nearest).include?(mode.to_s)
      raise Error::LintError, "Invalid read preference mode: #{mode}"
    end
  end
end