Sha256: 73eaa0ab0002a8c0ea6c04b88ac72855d3a5ae6d4280b18fddbaf7fdb4233d08
Contents?: true
Size: 1.91 KB
Versions: 4
Compression:
Stored size: 1.91 KB
Contents
class ThinkingSphinx::ActiveRecord::Attribute::Type UPDATEABLE_TYPES = [:integer, :timestamp, :boolean, :float] def initialize(attribute, model) @attribute, @model = attribute, model end def multi? @multi ||= attribute.options[:multi] || multi_from_associations end def timestamp? type == :timestamp end def type @type ||= attribute.options[:type] || type_from_database end def type=(value) @type = attribute.options[:type] = value end def updateable? UPDATEABLE_TYPES.include?(type) && single_column_reference? end private attr_reader :attribute, :model def associations @associations ||= begin klass = model attribute.columns.first.__stack.collect { |name| association = klass.reflect_on_association(name) klass = association.klass association } end end def big_integer? database_column.type == :integer && database_column.sql_type[/bigint/i] end def column_name attribute.columns.first.__name.to_s end def database_column @database_column ||= klass.columns.detect { |db_column| db_column.name == column_name } end def klass @klass ||= associations.any? ? associations.last.klass : model end def multi_from_associations associations.any? { |association| [:has_many, :has_and_belongs_to_many].include?(association.macro) } end def single_column_reference? attribute.columns.length == 1 && attribute.columns.first.__stack.length == 0 && !attribute.columns.first.string? end def type_from_database raise ThinkingSphinx::MissingColumnError, "column #{column_name} does not exist" if database_column.nil? return :bigint if big_integer? case database_column.type when :datetime, :date :timestamp when :text :string when :decimal :float else database_column.type end end end
Version data entries
4 entries across 4 versions & 1 rubygems