Sha256: 25ddbc7fb0345b154a84b39106d919e70103193c4e2cfdbed3ea1fe7d013ad99

Contents?: true

Size: 1.43 KB

Versions: 32

Compression:

Stored size: 1.43 KB

Contents

# frozen_string_literal: true
require "mobility/backends/sequel"
require "mobility/backends/column"

module Mobility
  module Backends
=begin

Implements the {Mobility::Backends::Column} backend for Sequel models.

=end
    class Sequel::Column
      include Sequel
      include Column

      # @!group Backend Accessors
      # @!macro backend_reader
      def read(locale, _options = nil)
        column = column(locale)
        model[column] if model.columns.include?(column)
      end

      # @!group Backend Accessors
      # @!macro backend_writer
      def write(locale, value, _options = nil)
        column = column(locale)
        model[column] = value if model.columns.include?(column)
      end

      # @!macro backend_iterator
      def each_locale
        available_locales.each { |l| yield(l) if present?(l) }
      end

      def self.build_op(attr, locale)
        ::Sequel::SQL::QualifiedIdentifier.new(model_class.table_name,
                                               Column.column_name_for(attr, locale))
      end

      private

      def available_locales
        @available_locales ||= get_column_locales
      end

      def get_column_locales
        column_name_regex = /\A#{attribute}_([a-z]{2}(_[a-z]{2})?)\z/.freeze
        model.columns.map do |c|
          (match = c.to_s.match(column_name_regex)) && match[1].to_sym
        end.compact
      end
    end

    register_backend(:sequel_column, Sequel::Column)
  end
end

Version data entries

32 entries across 32 versions & 1 rubygems

Version Path
mobility-1.3.2 lib/mobility/backends/sequel/column.rb
mobility-1.3.1 lib/mobility/backends/sequel/column.rb
mobility-1.3.0 lib/mobility/backends/sequel/column.rb
mobility-1.3.0.rc3 lib/mobility/backends/sequel/column.rb
mobility-1.3.0.rc2 lib/mobility/backends/sequel/column.rb
mobility-1.3.0.rc1 lib/mobility/backends/sequel/column.rb
mobility-1.2.9 lib/mobility/backends/sequel/column.rb
mobility-1.2.8 lib/mobility/backends/sequel/column.rb
mobility-1.2.7 lib/mobility/backends/sequel/column.rb
mobility-1.2.6 lib/mobility/backends/sequel/column.rb
mobility-1.2.5 lib/mobility/backends/sequel/column.rb
mobility-1.2.4 lib/mobility/backends/sequel/column.rb
mobility-1.2.3 lib/mobility/backends/sequel/column.rb
mobility-1.2.2 lib/mobility/backends/sequel/column.rb
mobility-1.2.1 lib/mobility/backends/sequel/column.rb
mobility-1.2.0 lib/mobility/backends/sequel/column.rb
mobility-1.1.3 lib/mobility/backends/sequel/column.rb
mobility-1.1.2 lib/mobility/backends/sequel/column.rb
mobility-1.1.1 lib/mobility/backends/sequel/column.rb
mobility-1.1.0 lib/mobility/backends/sequel/column.rb