class SvelteOnRails::Lib::SvelteAttributes
def calculate_instance(record, attributes, call_stack: 0, offset: nil, limit: nil)
def calculate_instance(record, attributes, call_stack: 0, offset: nil, limit: nil) next_stack = call_stack + 1 if record.respond_to?(:each) recs2 = if offset || limit if (record.is_a?(ActiveRecord::Relation) || record.is_a?(ActiveRecord::Associations::CollectionProxy) rescue false) _recs = (offset ? record.offset(offset) : record) (limit ? _recs.limit(limit) : _recs) elsif record.respond_to?(:drop) && record.respond_to?(:take) # that might be a array _recs = offset ? record.drop(offset) : record limit ? _recs.take(limit) : _recs else raise "[svelte-on-rails:to_svelte] unknown class for records: #{record}" end else record end set_labels(record.first, attributes) values = recs2.map do |rec| calculate_instance(rec, attributes, call_stack: next_stack) end else # we have a single record values = {} set_labels(record, attributes) attributes.each do |attr| if attr.is_a? Hash # we have associations attr.each do |key, value| next if ['offset', 'limit'].include?(key.to_s) _offset, _limit, _value = extract_limit(value) _key = key.to_s # inspect association and set_labels reflect = record.class.reflect_on_association(_key) raise "invalid association: #{_key}" unless reflect set_labels(reflect, value) # values recs = record.send(_key) if recs.present? if recs.respond_to?(:each) values[_key] = calculate_instance( recs, value, call_stack: next_stack, offset: _offset, limit: _limit ) else values[_key] = calculate_instance( recs, value, call_stack: next_stack ) end end end else # we have attributes raise 'Invalid attribute' unless [Symbol, String].include?(attr.class) _key = attr.to_s values[_key] = record.send(_key) end end end if call_stack >= 1 values else { 'values' => values }.merge(@labels) end end