Class: Internationalize::Adapters::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/internationalize/adapters/base.rb

Overview

Base adapter class defining the interface for database-specific SQL generation

Direct Known Subclasses

MySQL, PostgreSQL, SQLite

Instance Method Summary collapse

Instance Method Details

#glob_pattern(term) ⇒ String

Wrap a term with pattern wildcards for case-sensitive search Default implementation uses LIKE pattern (PostgreSQL/MySQL) SQLite overrides this to use GLOB pattern

Parameters:

  • term (String)

    the search term

Returns:

  • (String)

    pattern with wildcards



58
59
60
# File 'lib/internationalize/adapters/base.rb', line 58

def glob_pattern(term)
  like_pattern(term)
end

#json_extract(column, locale) ⇒ String

Extract a value from a JSON column

Parameters:

  • column (String)

    the JSON column name

  • locale (String, Symbol)

    the locale key

Returns:

  • (String)

    SQL fragment for extracting the value

Raises:

  • (NotImplementedError)


21
22
23
# File 'lib/internationalize/adapters/base.rb', line 21

def json_extract(column, locale)
  raise NotImplementedError, "#{self.class} must implement #json_extract"
end

#like_insensitive(column, locale) ⇒ Array<String, Symbol>

Generate a case-insensitive LIKE condition

Parameters:

  • column (String)

    the JSON column name

  • locale (String, Symbol)

    the locale key

Returns:

  • (Array<String, Symbol>)

    SQL fragment and pattern type

Raises:

  • (NotImplementedError)


30
31
32
# File 'lib/internationalize/adapters/base.rb', line 30

def like_insensitive(column, locale)
  raise NotImplementedError, "#{self.class} must implement #like_insensitive"
end

#like_pattern(term) ⇒ String

Wrap a LIKE pattern with wildcards Uses ActiveRecord's built-in sanitize_sql_like for escaping

Parameters:

  • term (String)

    the search term

Returns:

  • (String)

    pattern with wildcards



48
49
50
# File 'lib/internationalize/adapters/base.rb', line 48

def like_pattern(term)
  "%#{ActiveRecord::Base.sanitize_sql_like(term.to_s)}%"
end

#like_sensitive(column, locale) ⇒ Array<String, Symbol>

Generate a case-sensitive LIKE/GLOB condition

Parameters:

  • column (String)

    the JSON column name

  • locale (String, Symbol)

    the locale key

Returns:

  • (Array<String, Symbol>)

    SQL fragment and pattern type

Raises:

  • (NotImplementedError)


39
40
41
# File 'lib/internationalize/adapters/base.rb', line 39

def like_sensitive(column, locale)
  raise NotImplementedError, "#{self.class} must implement #like_sensitive"
end

#sanitize_locale(locale) ⇒ String

Sanitize a locale for safe SQL interpolation Only allows alphanumeric characters, underscores, and hyphens

Parameters:

  • locale (String, Symbol)

    the locale key

Returns:

  • (String)

    sanitized locale safe for SQL interpolation



12
13
14
# File 'lib/internationalize/adapters/base.rb', line 12

def sanitize_locale(locale)
  locale.to_s.gsub(/[^a-zA-Z0-9_\-]/, "")
end