diff --git a/lib/attr_json/record.rb b/lib/attr_json/record.rb index 408ecaa..8411890 100644 --- a/lib/attr_json/record.rb +++ b/lib/attr_json/record.rb @@ -186,6 +186,18 @@ def attr_json(name, type, **options) # implementation of `query_store_attribute` is based on Rails `query_attribute` implementation AttrJson::Record.attr_json_query_method(self, name) end + + define_method("#{name}_changed?") do + if !defined?(attr_json_changes) + raise NotImplementedError, <<~TXT + Please add the following line to #{self.class}: + include AttrJson::Record::Dirty + TXT + end + + # see lib/attr_json/record/dirty.rb + attr_json_changes.send("will_save_change_to_#{name}?") + end end # Default attr_json_accepts_nested_attributes_for values diff --git a/spec/record_spec.rb b/spec/record_spec.rb index 281361e..245916d 100644 --- a/spec/record_spec.rb +++ b/spec/record_spec.rb @@ -68,12 +68,21 @@ expect(instance.value).to eq(cast_value) expect(instance.json_attributes["value"]).to eq(cast_value) end - it "generates a query method #{type}?" do + it "generates a query method value?" do instance.value = cast_value expect(instance.value?).to be(true) instance.value = falsey_value expect(instance.value?).to be(false) end + it "generates a dirty tracking method value_changed?" do + expect { instance.value_changed? }.to raise_error(NotImplementedError) + klass.include AttrJson::Record::Dirty + expect(instance.value_changed?).to be(false) + instance.value = cast_value + expect(instance.value_changed?).to be(true) + instance.value = nil + expect(instance.value_changed?).to be(false) + end end end