Sha256: 1fdab6e4121e0c42d995ba50977d58eebc0b631552718845e90270a09454044f
Contents?: true
Size: 998 Bytes
Versions: 1
Compression:
Stored size: 998 Bytes
Contents
module RelationToStruct::ActiveRecordRelationExtension extend ::ActiveSupport::Concern def to_structs(struct_class) raise '' unless self.select_values.present? relation = spawn result = klass.connection.select_all(relation.arel, nil, relation.arel.bind_values + bind_values) if result.columns.size != struct_class.members.size raise ArgumentError, 'Expected struct fields and columns lengths to be equal' end if result.columns.size != result.column_types.size raise ArgumentError, 'Expected unique column names count and column count to be equal' end result.cast_values(klass.column_types) if result.columns.size == 1 result.cast_values(klass.column_types).map do |tuple| struct_class.new(tuple) end else result.cast_values(klass.column_types).map do |tuple| struct_class.new(*tuple) end end end end ::ActiveRecord::Relation.send(:include, RelationToStruct::ActiveRecordRelationExtension)
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
relation_to_struct-0.0.5 | lib/relation_to_struct/active_record_relation_extension.rb |