require 'disposable'
require 'minitest/autorun'
require "pp"
require "representable/debug"

class Track
  def initialize(options={})
    @title = options[:title]
  end

  attr_reader :title
end


# require 'active_record'
# require 'database_cleaner'
# DatabaseCleaner.strategy = :truncation

require 'active_record'
class Artist < ActiveRecord::Base
  has_many :albums
end

class Song < ActiveRecord::Base
  belongs_to :artist
end

class Album < ActiveRecord::Base
  has_many :songs
  belongs_to :artist
end

ActiveRecord::Base.establish_connection(
  :adapter => "sqlite3",
  :database => "#{Dir.pwd}/database.sqlite3"
)

# uncomment this once to create a database for testing:

# ActiveRecord::Schema.define do
#   create_table :artists do |table|
#     table.column :name, :string
#     table.timestamps
#   end
#   create_table :songs do |table|
#     table.column :title, :string
#     table.column :artist_id, :integer
#     table.column :album_id, :integer
#     table.timestamps
#   end
#   create_table :albums do |table|
#     table.column :name, :string
# table.column :artist_id, :integer
#     table.timestamps
#   end
# end

module Disposable
  module Comparable
    def attributes(source)
      source.instance_variable_get(:@fields)
    end

    def ==(other)
      self.class == other.class and attributes(self) == attributes(other)
    end
  end

  module Saveable
    def save
      @saved = true
    end

    def saved?
      @saved
    end
  end
end

