Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Support STI and inheritance(with test)#34

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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Open
unasuke wants to merge3 commits intoamatsuda:master
base:master
Choose a base branch
Loading
fromunasuke:support-sti

Conversation

@unasuke
Copy link

dups#29 .But I wrote test.

Original pull request description is below.

I used the gem on a STI class and got an error which would be solved with using on self.class => self.class.base_class.

It would be nice if you could do a patch release with this fix.

Thank you in advance!!


If use stateful_enum on STI model, raise that error.

/home/unasuke/src/github.com/unasuke/stateful_enum/test/mechanic_machine_test.rb:18:in `test_transition_to_sti'     15:     special_bug = SpecialBug.new     16:     assert_equal 'unassigned', special_bug.status     17:     special_bug.assigned_to = User.create!(name: 'user 1')  => 18:     special_bug.assign     19:     assert_equal 'assigned', special_bug.status     20:   end     21:/home/unasuke/src/github.com/unasuke/stateful_enum/lib/stateful_enum/machine.rb:56:in `block (2 levels) in initialize'/home/unasuke/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activesupport-5.2.0/lib/active_support/callbacks.rb:98:in `run_callbacks'/home/unasuke/src/github.com/unasuke/stateful_enum/lib/stateful_enum/machine.rb:57:in `block (3 levels) in initialize'/home/unasuke/src/github.com/unasuke/stateful_enum/lib/stateful_enum/machine.rb:57:in `instance_method'Error: test_transition_to_sti(StatefulEnumTest): NameError: undefined method `assigned!' for module `#<Module:0x0000564443546130>'=========================================================================================================

@amatsuda
Copy link
Owner

@raskhadafi@unasuke Nice, but what's gonna happen if we created multiple STI child classes, and then declared enums on each of these? e.g.

classBug <ActiveRecord::Baseself.abstract_class=trueendclassNormalBug <Bugenumstatus:{unassigned:0,assigned:1,resolved:2,closed:3}do    ...endendclassCriticalBug <Bugenumstatus:{unassigned:0,assigned:1,resolved:2,closed:3,released:4}do    ...endend

So, maybe we can fallback tobase_class only if the current class has no enum declared?

Moreover, there can be enums with the same name on BOTH parent and children classes, and I'm not sure what's the desired behavior in such case.
You're proposing to fallback on the parent class' method, but I guess that's not how AR built-in enum works (I guess. I mean, I just guess. Haven't actually tried).

unasuke reacted with thumbs up emoji

@unasuke
Copy link
Author

I confirmed the current behavior of stateful_enum and it seems good for me.
(STI doesn't work when base_class is an abstract class)

How do you think@amatsuda ? Is it test cases lack some edge-case?

and...@raskhadafi, do you think about this?

classBug <ActiveRecord::Baseenumstatus:{unassigned:0,assigned:1,resolved:2,closed:3}doevent:assigndotransition:unassigned=>:assignedendendendclassNormalBug <Bugenumstatus:{unassigned:0,assigned:1,resolved:2,closed:3}doevent:assigndotransition:closed=>:assignedendevent:resolvedotransition[:unassigned,:assigned]=>:resolvedendendendclassCriticalBug <Bugenumstatus:{unassigned:0,assigned:1,resolved:2,closed:3,released:4}doevent:assigndotransition:closed=>:assignedendevent:releasedotransition:resolved=>:releasedendendendclassBugTest <Minitest::Testdeftest_bug_cannnot_resolvebug=Bug.create!(status::unassigned)assert_raises(NoMethodError)dobug.resolveendenddeftest_normal_bug_can_resolvenormal_bug=NormalBug.create!(status::unassigned)normal_bug.resolveassert_equal'resolved',normal_bug.statusenddeftest_unassigned_critical_big_cannot_assigncritical_bug=CriticalBug.create!(status::unassigned)critical_bug.assignassert_equal'unassigned',critical_bug.statusendend
sample code(full)
# frozen_string_literal: truebeginrequire"bundler/inline"rescueLoadError=>e  $stderr.puts"Bundler version 1.10 or later is required. Please update your Bundler"raiseeendgemfile(true)dosource"https://rubygems.org"git_source(:github){ |repo|"https://github.com/#{repo}.git"}#gem "rails", github: "rails/rails"gem"rails",'5.2.0'gem"sqlite3"gem'stateful_enum',git:'https://github.com/unasuke/stateful_enum.git',ref:'6f6e18b1d'endrequire"active_record"require"minitest/autorun"require"logger"# This connection will do for database-independent bug reports.ActiveRecord::Base.establish_connection(adapter:"sqlite3",database:":memory:")ActiveRecord::Base.logger=Logger.new(STDOUT)ActiveRecord::Schema.definedocreate_table:bugs,force:truedo |t|t.integer:statust.string:typeendendclassBug <ActiveRecord::Baseenumstatus:{unassigned:0,assigned:1,resolved:2,closed:3}doevent:assigndotransition:unassigned=>:assignedendendendclassNormalBug <Bugenumstatus:{unassigned:0,assigned:1,resolved:2,closed:3}doevent:assigndotransition:closed=>:assignedendevent:resolvedotransition[:unassigned,:assigned]=>:resolvedendendendclassCriticalBug <Bugenumstatus:{unassigned:0,assigned:1,resolved:2,closed:3,released:4}doevent:assigndotransition:closed=>:assignedendevent:releasedotransition:resolved=>:releasedendendendclassBugTest <Minitest::Testdeftest_bug_cannnot_resolvebug=Bug.create!(status::unassigned)assert_raises(NoMethodError)dobug.resolveendenddeftest_normal_bug_can_resolvenormal_bug=NormalBug.create!(status::unassigned)normal_bug.resolveassert_equal'resolved',normal_bug.statusenddeftest_unassigned_critical_big_cannot_assigncritical_bug=CriticalBug.create!(status::unassigned)critical_bug.assignassert_equal'unassigned',critical_bug.statusendend

Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

No reviews

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

2 participants

@unasuke@amatsuda

[8]ページ先頭

©2009-2025 Movatter.jp