app/presenters/interaction_presenter.rb
class InteractionPresenter < SimpleDelegator
attr_accessor :interaction
def initialize(interaction)
@interaction = interaction
super
end
def display_name
"#{@interaction.gene.name} AND #{@interaction.drug.name}"
end
def na_or_types
types = interaction.interaction_types.map{|t| {type: t.type, directionality: t.directionality}}.reject{|t| t['type'] == "n/a"}
types.count > 0 ? types : [{type: "n/a", directionality: nil}]
end
def as_json(opts = {})
{
id: interaction.id,
gene_name: interaction.gene.name,
entrez_id: interaction.gene.entrez_id,
drug_name: interaction.drug.name,
concept_id: interaction.drug.concept_id,
publications: interaction.publications.map(&:pmid),
interaction_types: interaction.interaction_types.map(&:type),
interaction_direction: interaction.interaction_types.map(&:directionality),
sources: interaction.sources.map(&:source_db_name),
score: interaction.interaction_score.round(2),
}
end
end