2011-06-21 2 views
25

Certains livres ont mentionné quelques gemmes pour décorer des nombres avec #days, #megabytes, #minutes etc. Est-ce seulement dans ActiveSupport, ou y a-t-il une gemme plus petite qui fournit cette fonctionnalité pour l'usage dans (petit) gems non-rails? Je veux utiliser cette fonctionnalité dans le cadre d'un DSL dans un tout petit bijou.3.days.ago, 2.hours.from_now etc sans Rails?

+0

J'aime ce comportement aussi, et ont souvent voulu l'utiliser dans mes non-rails rubis projets. Bonne question ... – jaydel

Répondre

34

Je ne sais pas s'il y a un autre petit bijou d'ailleurs disponible ActiveSupport, mais ce serait vraiment straight-forward pour faire une petite version vous:

class Fixnum 
    SECONDS_IN_DAY = 24 * 60 * 60 

    def days 
    self * SECONDS_IN_DAY 
    end 

    def ago 
    Time.now - self 
    end 
end 

3.days.ago #=> 2011-06-18 08:45:29 0200 

from_now peut être mis en œuvre comme ago mais avec + self et weeks , hours etc. comme days en utilisant différentes constantes.

+1

Cela semble être la façon dont je finis par aller, merci. Je pensais que la chose numérique avait commencé dans le projet de quelqu'un d'autre et qu'ActiveSupport l'a fusionné dans sa propre source. Je suis probablement en train de l'imaginer. – d11wtq

+1

très beau travail !! –

9

ActiveSupport a cette fonctionnalité. Il faisait à l'origine partie de Rails mais peut maintenant être utilisé séparément.

+18

Ceci est correct mais notez aussi que vous ne pouvez plus simplement '' 'require 'activesupport''''. L'OP devra être un peu plus explicite sur ce qu'il veut "exiger" de l'aide active. Si vous voulez juste du temps, vous pouvez '' require '' support_active/core_ext/numeric/time "' '' –

+0

Je ne veux pas vraiment dépendre de tout ActiveSupport pour ça :) C'était en quelque sorte ce que j'essayais d'éviter . Mon Gem est juste une seule classe avec environ 30 lignes de code: P Mais merci pour la confirmation :) – d11wtq

+0

@ d11wtq alors la réponse de Michael Kohl serait la voie à suivre. Il suffit d'étendre la classe fixnum avec quelque chose comme une méthode '' '' '''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' –