makandra / active_type

Make any Ruby object quack like ActiveRecord
MIT License
1.09k stars 74 forks source link

Dirty tracking in ActiveType::Object #107

Closed lcmen closed 5 years ago

lcmen commented 5 years ago

Hi! I'm not sure if this is bug so I want to clarify it first. ActiveType::Object adds dirty tracking related methods via build_dirty_tracking_methods but it still does't seem to work like in ActiveRecord (#{name}_will_change! does not do anything and it's not called automatically).

Given example:

class SignIn < ActiveType::Object
  attribute :email, :string
  attribute :password, :string
end

sign_in = SignIn.new
sign_in.email = "user@example.com"
sign_in.changed? # => false
sign_in.changes # => {}

sign_in.email = "admin@example.com"
sign_in.changed? # => false
sign_in.changes # => {}

Shouldn't sign_in.changed? return true? Is this by design?

I'm trying ActiveType 1.1.0 with Rails 6.0.0beta.2.

kratob commented 5 years ago

It's not by design. ActiveType::Object fakes its dirty tracking (via build_dirty_tracking_methods) as you discovered, but does not do a very good job at it.

lcmen commented 5 years ago

@kratob I believe we can close this as #108 has been merged.