Skip to content

Commit

Permalink
Merge pull request #32 from bdurand/helper-for-value-changed
Browse files Browse the repository at this point in the history
Add value_changed? method
  • Loading branch information
bdurand authored Dec 5, 2024
2 parents e8ea0ee + ae0940f commit 6069431
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 1 deletion.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## 2.2.1

### Added

- Added `SuperSettings::Setting#value_changed?` helper method to return true if the value of the setting has changed.

## 2.2.0

### Changed
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.2.0
2.2.1
8 changes: 8 additions & 0 deletions lib/super_settings/setting.rb
Original file line number Diff line number Diff line change
Expand Up @@ -575,6 +575,14 @@ def changes
@changes.dup
end

# Return true if the value of the setting has changed. In addition to changing the value,
# this will be triggered if the key changed or if the setting was marked as deleted.
#
# @return [Boolean]
def value_changed?
(@changes.keys & %w[key raw_value deleted]).any?
end

private

# Coerce a value for the appropriate value type.
Expand Down
38 changes: 38 additions & 0 deletions spec/super_settings/setting_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,44 @@
end
end

describe "value_changed?" do
it "should return true if the value has changed" do
setting = SuperSettings::Setting.create!(key: "test", value: "foobar")
expect(setting.value_changed?).to eq false
setting.value = "bizbaz"
expect(setting.value_changed?).to eq true
end

it "should return true if the key has changed" do
setting = SuperSettings::Setting.create!(key: "test", value: "foobar")
expect(setting.value_changed?).to eq false
setting.key = "newkey"
expect(setting.value_changed?).to eq true
end

it "should return true if the setting is deleted" do
setting = SuperSettings::Setting.create!(key: "test", value: "foobar")
expect(setting.value_changed?).to eq false
setting.deleted = true
expect(setting.value_changed?).to eq true
end

it "should return true if the setting is undeleted" do
setting = SuperSettings::Setting.create!(key: "test", value: "foobar", deleted: true)
expect(setting.value_changed?).to eq false
setting.deleted = false
expect(setting.value_changed?).to eq true
end

it "should return true if only the type or description is changed" do
setting = SuperSettings::Setting.create!(key: "test", value: "foobar")
setting.value_type = :integer
expect(setting.value_changed?).to eq false
setting.description = "test"
expect(setting.value_changed?).to eq false
end
end

describe "histories" do
it "should create a history record for each change in value" do
setting = SuperSettings::Setting.create!(key: "test", value: "foobar")
Expand Down

0 comments on commit 6069431

Please sign in to comment.