Module: GrapeOAS::ApiModelBuilders::Concerns::OasUtilities

Overview

Shared utility methods for OpenAPI schema building.

Constant Summary collapse

VALID_CONSTANT_PATTERN =

Regex pattern for valid Ruby constant names (used for entity resolution)

/\A[A-Z][A-Za-z0-9_]*(::[A-Z][A-Za-z0-9_]*)*\z/

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extract_extensions(hash) ⇒ Hash?

Extracts OpenAPI extension fields (x-* prefixed keys) from a hash.

Parameters:

  • hash (Hash)

    the source hash

Returns:

  • (Hash, nil)

    hash of extension fields, or nil if empty



15
16
17
18
19
20
# File 'lib/grape_oas/api_model_builders/concerns/oas_utilities.rb', line 15

def self.extract_extensions(hash)
  return nil unless hash.is_a?(Hash)

  ext = hash.select { |k, _| k.to_s.start_with?("x-") }
  ext.empty? ? nil : ext
end

.pluralize(key) ⇒ String

Simple pluralization (basic English rules).

Parameters:

  • key (String)

    the string to pluralize

Returns:

  • (String)

    the pluralized string



48
49
50
51
52
53
# File 'lib/grape_oas/api_model_builders/concerns/oas_utilities.rb', line 48

def self.pluralize(key)
  return "#{key}es" if key.end_with?("s", "x", "z", "ch", "sh")
  return "#{key[0..-2]}ies" if key.end_with?("y") && !%w[a e i o u].include?(key[-2])

  "#{key}s"
end

.underscore(str) ⇒ String

Converts a CamelCase string to snake_case.

Parameters:

  • str (String)

    the string to convert

Returns:

  • (String)

    the underscored string



31
32
33
34
35
36
37
# File 'lib/grape_oas/api_model_builders/concerns/oas_utilities.rb', line 31

def self.underscore(str)
  str.gsub("::", "/")
     .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
     .gsub(/([a-z\d])([A-Z])/, '\1_\2')
     .tr("-", "_")
     .downcase
end

.valid_constant_name?(str) ⇒ Boolean

Checks if a string matches the valid Ruby constant pattern.

Parameters:

  • str (String)

    the string to check

Returns:

  • (Boolean)

    true if valid constant name



64
65
66
# File 'lib/grape_oas/api_model_builders/concerns/oas_utilities.rb', line 64

def self.valid_constant_name?(str)
  str.is_a?(String) && str.match?(VALID_CONSTANT_PATTERN)
end

Instance Method Details

#extract_extensions(hash) ⇒ Object

Instance method version for including in classes



23
24
25
# File 'lib/grape_oas/api_model_builders/concerns/oas_utilities.rb', line 23

def extract_extensions(hash)
  OasUtilities.extract_extensions(hash)
end

#pluralize(key) ⇒ Object

Instance method version



56
57
58
# File 'lib/grape_oas/api_model_builders/concerns/oas_utilities.rb', line 56

def pluralize(key)
  OasUtilities.pluralize(key)
end

#underscore(str) ⇒ Object

Instance method version



40
41
42
# File 'lib/grape_oas/api_model_builders/concerns/oas_utilities.rb', line 40

def underscore(str)
  OasUtilities.underscore(str)
end

#valid_constant_name?(str) ⇒ Boolean

Instance method version

Returns:

  • (Boolean)


69
70
71
# File 'lib/grape_oas/api_model_builders/concerns/oas_utilities.rb', line 69

def valid_constant_name?(str)
  OasUtilities.valid_constant_name?(str)
end