Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save lorenzoplanas/485943 to your computer and use it in GitHub Desktop.

Select an option

Save lorenzoplanas/485943 to your computer and use it in GitHub Desktop.
class Asset
include Mongoid::Document
field :name
field :peer_ids, :type => Array, :default => []
def link_asset(asset_id)
unless self.peer_ids.include?(asset_id) || self.id == asset_id
self.peer_ids << asset_id
Asset.find(asset_id).link_peer(self.id)
end
end
def unlink_asset(asset_id)
unless self.id == asset_id
self.peer_ids.delete asset_id
Asset.find(asset_id).unlink_peer(self.id)
end
end
def link_peer(peer_id)
unless self.peer_ids.include?(peer_id) || self.id == peer_id
self.peer_ids << peer_id
self.save
end
end
def unlink_peer(peer_id)
self.peer_ids.delete peer_id
self.save
end
end
ruby-1.9.2-rc2 > a1 = Asset.create(:name => 'Asset 1')
=> #<Asset _id: 4c4841d64889470bd3000001, name: "Asset 1", peer_ids: []>
ruby-1.9.2-rc2 > a2 = Asset.create(:name => 'Asset 2')
=> #<Asset _id: 4c4841de4889470bd3000002, name: "Asset 2", peer_ids: []>
ruby-1.9.2-rc2 > a1.link_asset(a2.id)
=> true
ruby-1.9.2-rc2 > a1
=> #<Asset _id: 4c4841d64889470bd3000001, name: "Asset 1", peer_ids: [BSON::ObjectID('4c4841de4889470bd3000002')]>
ruby-1.9.2-rc2 > a2
=> #<Asset _id: 4c4841de4889470bd3000002, name: "Asset 2", peer_ids: []>
ruby-1.9.2-rc2 > a2.link_peer(a1.id)
=> true
ruby-1.9.2-rc2 > a2
=> #<Asset _id: 4c4841de4889470bd3000002, name: "Asset 2", peer_ids: [BSON::ObjectID('4c4841d64889470bd3000001')]>
ruby-1.9.2-rc2 >
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment