Je suis en train de convertir une application Rails en Sinatra. L'application reposait sur ActiveRecord qui supporte les attributs virtuels, cependant, j'ai du mal à trouver un support similaire dans DataMapper. Dans Rails, j'ai utilisé un algorithme pour générer des scores et trier des enregistrements en fonction d'un score. Les attributs virtuels étaient au cœur de ce processus. Est-ce que quelqu'un sait comment reproduire cette fonctionnalité dans Sinatra/DM?Attributs virtuels avec Sinatra et Datamapper
Je suis ouvert à toutes les solutions de contournement. Le refactoring peut venir plus tard, car je ne m'intéresse qu'à la fonctionnalité pour le moment.
En théorie, la solution fonctionnerait quelque chose comme ceci:
require 'sinatra'
require 'data_mapper'
require 'haml'
DataMapper::setup(:default,"sqlite3://#{Dir.pwd}/example.db")
class Link
include DataMapper::Resource
property :id, Serial
property :title, Text
property :url, String
property :points, Integer, :default => 0
property :created_at, Time
attr_accessor :score
def calculate_score
time_elapsed = (Time.now - self.created_at)/3600
self.score = (self.points-1)/(time_elapsed+2)**1.8
end
end
DataMapper.finalize.auto_upgrade!
get '/hot' do
@links = Link.all :order => :score.desc
haml :index
end