active-hash / active_hash

A readonly ActiveRecord-esque base class that lets you use a hash, a Yaml file or a custom file as the datasource
MIT License
1.2k stars 179 forks source link

Add ActiveHash::Relation#size method for compatibily #227

Closed sluceno closed 3 years ago

sluceno commented 3 years ago

With Rails 6.1.3.1 ActionView::Renderer::CollectionRenderer calls size method over collections. Adding the size method makes ActiveHash compatible with it.

This is the stacktrace from Rails after trying to render a collection of items (from ActiveHash, not an ActiveRecordRelation for example) in a view.

 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/renderer/collection_renderer.rb:48:in `size'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/renderer/collection_renderer.rb:178:in `collection_with_template'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/renderer/collection_renderer.rb:162:in `block (2 levels) in render_collection'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/renderer/partial_renderer/collection_caching.rb:21:in `cache_collection_render'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/renderer/collection_renderer.rb:161:in `block in render_collection'",
 "/usr/local/bundle/gems/activesupport-6.1.3.1/lib/active_support/notifications.rb:203:in `block in instrument'",
 "/usr/local/bundle/gems/activesupport-6.1.3.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'",
 "/usr/local/bundle/gems/activesupport-6.1.3.1/lib/active_support/notifications.rb:203:in `instrument'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/renderer/collection_renderer.rb:147:in `render_collection'",
 "/usr/local/bundle/gems/jb-0.8.0/lib/jb/action_view_monkeys.rb:19:in `render_collection'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/renderer/collection_renderer.rb:119:in `render_collection_with_partial'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/renderer/renderer.rb:72:in `render_partial_to_object'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/renderer/renderer.rb:27:in `render_to_object'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/renderer/renderer.rb:22:in `render'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/helpers/rendering_helper.rb:38:in `block in render'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/base.rb:273:in `in_rendering_context'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/helpers/rendering_helper.rb:34:in `render'",
 "/opt/app/app/views/v1/opportunity_types/index.json.jb:3:in `_app_views_v__opportunity_types_index_json_jb__2175721135940786817_71520'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/base.rb:247:in `public_send'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/base.rb:247:in `_run'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/template.rb:154:in `block in render'",
 "/usr/local/bundle/gems/activesupport-6.1.3.1/lib/active_support/notifications.rb:205:in `instrument'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/template.rb:345:in `instrument_render_template'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/template.rb:152:in `render'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/renderer/template_renderer.rb:61:in `block (2 levels) in render_template'",
 "/usr/local/bundle/gems/activesupport-6.1.3.1/lib/active_support/notifications.rb:203:in `block in instrument'",
 "/usr/local/bundle/gems/activesupport-6.1.3.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'",
 "/usr/local/bundle/gems/activesupport-6.1.3.1/lib/active_support/notifications.rb:203:in `instrument'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/renderer/template_renderer.rb:56:in `block in render_template'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/renderer/template_renderer.rb:75:in `render_with_layout'",
 "/usr/local/bundle/gems/actionview-6.1.3.1/lib/action_view/renderer/template_renderer.rb:55:in `render_template'",
 "/usr/local/bundle/gems/jb-0.8.0/lib/jb/action_view_monkeys.rb:9:in `render_template'"