Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduces an Elements finder class #1544

Merged
merged 7 commits into from
Feb 22, 2019
Merged

Conversation

tvdeyen
Copy link
Member

@tvdeyen tvdeyen commented Feb 20, 2019

What is this pull request for?

Introduce an elements finder class.

This class abstracts elements finding logic that we currently have in render_elements helper and Page#find_elements method. But with pure active record finders and a clean testable interface. It now returns an ActiveRecord::Relation that later materializes in the view.

Notable changes

The sort_by option and "show hidden elements" options have been removed. As this uses a very opinionated way of loading and sorting elements that only few people use - if at all.

Please implement your own elements finder in your project instead and pass this as options[:finder] to those methods.

@tvdeyen tvdeyen force-pushed the elements-finder branch 2 times, most recently from a73d069 to 9b9a315 Compare February 20, 2019 21:43
@tvdeyen tvdeyen added this to the 4.2 milestone Feb 20, 2019
@tvdeyen tvdeyen force-pushed the elements-finder branch 3 times, most recently from 7bcd9bf to 1fce2f9 Compare February 20, 2019 22:24
@tvdeyen tvdeyen self-assigned this Feb 20, 2019
ActiveRecord supports this now, we do not need to use Arel here.
This controller actions spec leaks global state into subsequent specs that lead to very hard to debug spec errors.
Please implement your own sorting
This class abstracts elements finding logic that we currently have in `render_elements` helper and `Page#find_elements` method. But with pure active record finders and a clean testable interface. It now returns an `ActiveRecord::Relation` that later materializes in the view.

The sort_by option and show hidden elements options have been removed. As this uses a very opinionated way of loading and sorting elements that only few people use - if at all.

Please implement your own elements finder in your project instead and pass this as options[:finder] to those methods.
The element find logic is now abstracted into the elements finder.

If you have custom element finding logic, you can pass your own elements finder instance to the method as options[:finder]. This custom class needs to implement the interface of Alchemy::ElementsFinder.
If you have custom element finding logic, you can pass your own elements finder instance to the helper as options[:finder]. This custom class needs to implement the interface of Alchemy::ElementsFinder.
Copy link
Contributor

@mamhoff mamhoff left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sweet. This will clean up views around the world :)

@tvdeyen tvdeyen merged commit 6b4b8e7 into AlchemyCMS:master Feb 22, 2019
@tvdeyen tvdeyen deleted the elements-finder branch February 22, 2019 22:09
tvdeyen added a commit to tvdeyen/alchemy_cms that referenced this pull request Mar 29, 2019
- Use element name local in generators [AlchemyCMS#1556](AlchemyCMS#1556) ([tvdeyen](https://github.com/tvdeyen))
- Remove invalid bytecode handler [AlchemyCMS#1555](AlchemyCMS#1555) ([tvdeyen](https://github.com/tvdeyen))
- Separate render element calls [AlchemyCMS#1554](AlchemyCMS#1554) ([tvdeyen](https://github.com/tvdeyen))
- Expose the element into partials as local object [AlchemyCMS#1553](AlchemyCMS#1553) ([tvdeyen](https://github.com/tvdeyen))
- Allow admins to switch all languages [AlchemyCMS#1552](AlchemyCMS#1552) ([tvdeyen](https://github.com/tvdeyen))
- Raise targeted Ruby version to 2.3 [AlchemyCMS#1545](AlchemyCMS#1545) ([tvdeyen](https://github.com/tvdeyen))
- Introduces an Elements finder class [AlchemyCMS#1544](AlchemyCMS#1544) ([tvdeyen](https://github.com/tvdeyen))
- Fixate sqlite dep for bug fix [AlchemyCMS#1543](AlchemyCMS#1543) ([tvdeyen](https://github.com/tvdeyen))
- Upgrade shoulda-matchers to version 4.0.0 [AlchemyCMS#1542](AlchemyCMS#1542) ([depfu](https://github.com/apps/depfu))
- Upgrade factory_bot_rails to version 5.0.1 [AlchemyCMS#1540](AlchemyCMS#1540) ([depfu](https://github.com/apps/depfu))
- Use Flatpickr as Datepicker [AlchemyCMS#1533](AlchemyCMS#1533) ([mamhoff](https://github.com/mamhoff))
-  Use system tests over feature specs [AlchemyCMS#1528](AlchemyCMS#1528) ([tvdeyen](https://github.com/tvdeyen))
- Flexible width for admin navigation entry labels [AlchemyCMS#1527](AlchemyCMS#1527) ([tvdeyen](https://github.com/tvdeyen))
- Responsive elements window and sidebar [AlchemyCMS#1519](AlchemyCMS#1519) ([tvdeyen](https://github.com/tvdeyen))
- Change element eye icon on public state [AlchemyCMS#1517](AlchemyCMS#1517) ([oniram88](https://github.com/oniram88))
- Maximize element window if Tinymce is fullscreen [AlchemyCMS#1515](AlchemyCMS#1515) ([tvdeyen](https://github.com/tvdeyen))
- Remove cells in favour of fixed elements [AlchemyCMS#1514](AlchemyCMS#1514) ([tvdeyen](https://github.com/tvdeyen))
- Feature: Autogenerate nestable elements [AlchemyCMS#1513](AlchemyCMS#1513) ([tvdeyen](https://github.com/tvdeyen))
- Allow "data" key for module navigations [AlchemyCMS#1512](AlchemyCMS#1512) ([mamhoff](https://github.com/mamhoff))
- Allow to define layout for page previews [AlchemyCMS#1500](AlchemyCMS#1500) ([westonganger](https://github.com/westonganger))
- Fix capitalization for login/logout/leave [AlchemyCMS#1497](AlchemyCMS#1497) ([westonganger](https://github.com/westonganger))
- Verify controller keys within `register_module` [AlchemyCMS#1495](AlchemyCMS#1495) ([westonganger](https://github.com/westonganger))
- Update bundled Tinymce to 4.8.3 [AlchemyCMS#1491](AlchemyCMS#1491) ([tvdeyen](https://github.com/tvdeyen))
- Use dynamic attributes in factories [AlchemyCMS#1484](AlchemyCMS#1484) ([tvdeyen](https://github.com/tvdeyen))
- Migrating to active_model_serializers ~> 0.10.0 [AlchemyCMS#1478](AlchemyCMS#1478) ([pmashchak](https://github.com/pmashchak))
- Replace picture galleries with nestable elements [AlchemyCMS#1358](AlchemyCMS#1358) ([tvdeyen](https://github.com/tvdeyen))
- Add a compact nested element style [AlchemyCMS#1357](AlchemyCMS#1357) by [tvdeyen](https://github.com/tvdeyen)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants