This should finally allow us to adopt code style lints, as well
as others such as performance linting, and have them enforced by
the Github Actions continuous integration (CI) jobs.
For now, I'm choosing to depend on the 'panolint' gem from
Panorama Education, which is my current workplace, as I'd like
to adopt and stay consistent with the setting used there.
Changes
* Move development and test dependencies from gemspec to Gemfile
* Add dependency on 'panolint' gem
* Add .rubocop.yml
* Fix all existing issues
* Run rubocop in github actions CI
when the DSL object is the same object as the block context object.
This short-circuits prior to performing setup (like copying ivars
from the block context to the proxy) that is unnecessary when the block
context and DSL object "match".
Add test that runs non-mutative code on frozen DSL object to check that
no FrozenError is raised, as it would have been if a
FallbackContextProxy tried to dynamically add methods to the DSL object.
Previously, it turns out that this wasn't possible, which made
refactoring code that used Docile to extract common helper methods,
and re-use them in different blocks, a painful experience.
This change should make it possible to extract methods from blocks
into the context around the block, and have those extracted helper
methods still able to call methods on the DSL object.