https://github.com/marcoroth/conventional_extensions-repro
https://github.com/marcoroth/conventional_extensions-repro
Last synced: over 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/marcoroth/conventional_extensions-repro
- Owner: marcoroth
- Created: 2022-11-11T23:11:28.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2022-11-11T23:25:07.000Z (over 3 years ago)
- Last Synced: 2025-02-22T23:32:50.836Z (over 1 year ago)
- Language: Ruby
- Homepage:
- Size: 26.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## conventional_extensions-repro
### Versions
conventional_extensions Version: 0.3.0
Ruby Version: 3.1.2
Rails Version: 7.0.4
### Relevant Files
* [`app/models/post.rb`](https://github.com/marcoroth/conventional_extensions-bug/blob/main/app/models/post.rb)
* [`app/models/post/extensions/mailroom.rb`](https://github.com/marcoroth/conventional_extensions-bug/blob/main/app/models/post/extensions/mailroom.rb)
### Reproducion Steps
```shell
bundle install
```
```shell
rails db:create db:migrate
```
```shell
rails c
```
```
Loading development environment (Rails 7.0.4)
irb(main):001:0> Post.new.mailroom
/Users/marcoroth/.anyenv/envs/rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/conventional_extensions-0.3.0/lib/conventional_extensions.rb:15:in `load_extensions': private method `load' called for nil:NilClass (NoMethodError)
@loader.load(*extensions)
^^^^^
```
### Possible fix?
This seems to fix it locally, but honestly I haven't fully grokked why `@loader` wouldn't need to be defined in some cases. This "fix" possibly also has some unwanted side-effects since `@loader` is not going to be cleaned up in the `ensure` block because of the `loader_defined_before_entrance` condition.
```diff
def load_extensions(*extensions, from: Frame.previous.path)
- @loader = Loader.new(self, from) unless loader_defined_before_entrance = defined?(@loader)
+ loader_defined_before_entrance = defined?(@loader)
+ @loader = Loader.new(self, from) unless loader_defined_before_entrance
+ @loader = Loader.new(self, from) if @loader.nil
@loader.load(*extensions)
ensure
@loader = nil unless loader_defined_before_entrance
end
```
Am I even supposed to use `load_exentions` inside a model class under `app/models/`?