ContractAcceptanceFramework
This gem is meant to be used to allow ActiveRecord objects to signify agreement with versioned contracts. It requires some database tables.
To that end, you need a migration that looks something like this:
class CreateContractAcceptanceFrameworkTables < ActiveRecord::Migration
def self.up
create_table :contracts do |t|
t.string :key
t.text :content
t.integer :major_version
t.integer :minor_version
t.integer :maintenance_version
t.
end
add_index :contracts, [:major_version, :minor_version, :maintenance_version, :key], :name => 'contracts_version_index'
add_index :contracts, [:key]
create_table :contract_acceptances do |t|
t.integer :contract_id
t.
t.integer :acceptable_id
t.string :acceptable_type
end
add_index :contract_acceptances, [:acceptable_id, :acceptable_type]
add_index :contract_acceptances, :contract_id
end
def self.down
remove_index :contract_acceptances, :column => :contract_id
remove_index :contract_acceptances, :column => [:acceptable_id, :acceptable_type]
drop_table :contract_acceptances
remove_index :contracts, :column => [:key]
remove_index :contracts, 'contracts_version_index'
drop_table :contracts
end
end
After that, you just include a module in your class that accepts contracts like so:
class SomeClass < ActiveRecord::Base
include ContractAcceptanceFramework
end
That’s it, you’re done. Now the class will respond to the following methods:
# where version looks like '1.2.3' and will be parsed into the appropriate major, minor, maintenance query
- has_agreed_to?(contract)
- agree_to!(contract)
If you’ve already agreed to a contract and try to agree again, it will raise a ContractDuplicateAgreementError