Class: AppQuery::Result
- Inherits:
-
ActiveRecord::Result
- Object
- ActiveRecord::Result
- AppQuery::Result
- Defined in:
- lib/app_query.rb
Instance Attribute Summary collapse
-
#cast ⇒ Object
(also: #cast?)
Returns the value of attribute cast.
Class Method Summary collapse
Instance Method Summary collapse
- #column(name = nil) ⇒ Object
-
#initialize(columns, rows, overrides = nil, cast: false) ⇒ Result
constructor
A new instance of Result.
- #size ⇒ Object
Constructor Details
#initialize(columns, rows, overrides = nil, cast: false) ⇒ Result
Returns a new instance of Result.
120 121 122 123 124 125 |
# File 'lib/app_query.rb', line 120 def initialize(columns, rows, overrides = nil, cast: false) super(columns, rows, overrides) @cast = cast # Rails v6.1: prevent mutate on frozen object on #first @hash_rows = [] if columns.empty? end |
Instance Attribute Details
#cast ⇒ Object Also known as: cast?
Returns the value of attribute cast.
117 118 119 |
# File 'lib/app_query.rb', line 117 def cast @cast end |
Class Method Details
.from_ar_result(r, cast = nil) ⇒ Object
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/app_query.rb', line 140 def self.from_ar_result(r, cast = nil) if r.empty? EMPTY else cast &&= case cast when Array r.columns.zip(cast).to_h when Hash cast else {} end if !cast || (cast.empty? && r.column_types.empty?) # nothing to cast new(r.columns, r.rows, r.column_types) else overrides = (r.column_types || {}).merge(cast) rows = r.cast_values(overrides) # One column is special :( ;( # > ActiveRecord::Base.connection.select_all("select array[1,2]").rows # => [["{1,2}"]] # > ActiveRecord::Base.connection.select_all("select array[1,2]").cast_values # => [[1, 2]] rows = rows.zip if r.columns.one? new(r.columns, rows, overrides, cast: true) end end end |
Instance Method Details
#column(name = nil) ⇒ Object
127 128 129 130 131 132 133 134 |
# File 'lib/app_query.rb', line 127 def column(name = nil) return [] if empty? unless name.nil? || includes_column?(name) raise ArgumentError, "Unknown column #{name.inspect}. Should be one of #{columns.inspect}." end ix = name.nil? ? 0 : columns.index(name) rows.map { _1[ix] } end |
#size ⇒ Object
136 137 138 |
# File 'lib/app_query.rb', line 136 def size count end |