class SvelteOnRails::Lib::SvelteAttributes
def calculate_instance(record, attributes, associations, call_stack: 0, offset: nil, limit: nil)
def calculate_instance(record, attributes, associations, 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, associations, call_stack: next_stack) end else # we have a single record values = {} set_labels(record, attributes, associations) attributes.each do |attr| raise 'Invalid attribute' unless [Symbol, String].include?(attr.class) raise "[svelte-on-rails:to_svelte] #{record.class} does not respond to: #{attr}" unless record.respond_to?(attr) _key = attr.to_s values[_key] = record.send(_key) end associations.each do |key, val| # we have associations val.each do |_key| next if ['offset', 'limit'].include?(_key.to_s) raise "[svelte-on-rails:to_svelte] #{record.class} does not respond to: #{key}" unless record.respond_to?(key) _offset, _limit, _value = extract_limit(val) _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, val) # values recs = record.send(_key) if recs.present? if recs.respond_to?(:each) values[_key] = calculate_instance( recs, val.reject{|v|v.is_a?(Hash)}, {}, call_stack: next_stack, offset: _offset, limit: _limit ) else values[_key] = calculate_instance( recs, val, {}, call_stack: next_stack ) end end end end end if call_stack >= 1 values else [ @labels, values ] end end