Como usar as extensões principais do Active Support

96

Tenho o Active Support 3.0.3 instalado e Rails 3.0.3 com Ruby 1.8.7.

Quando tento usar 1.week.agoeu consigo

NoMethodError: undefined method 'week' for 1:Fixnum
from (irb):2

As outras extensões principais parecem funcionar. Eu tentei no computador de um amigo (as mesmas especificações de instalação e versões legadas estão no computador dele) com os mesmos resultados.

O que da?

Tudo isso está no IRB.

griotspeak
fonte
Você não diz se o seu código está rodando dentro de um aplicativo Rails, ou em um aplicativo Ruby no qual deseja usar algumas extensões Rails.
the Tin Man

Respostas:

136

Já que usar Rails deve lidar com isso automaticamente, vou assumir que você está tentando adicionar suporte ativo a um script não-Rails.

Leia " Como carregar extensões principais ".

Os métodos do Active Support foram divididos em grupos menores no Rails 3, então não acabamos carregando muitas coisas desnecessárias com um simples require 'activesupport'. Agora temos que fazer coisas como

require 'active_support/core_ext/object/blank'

Se você não se importa com a granularidade, pode escolher carregar blocos maiores. Se você quer tudo em um grande gole, use ...

Para 1.9.2:

rvm 1.9.2
irb -f
irb(main):001:0> require 'active_support/all'
=> true
irb(main):002:0> 1.week.ago
=> 2010-11-14 17:56:16 -0700
irb(main):003:0> 

Para 1.8.7:

rvm 1.8.7
irb -f
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'active_support/all'
=> true
irb(main):003:0> 1.week.ago
=> Sun Nov 14 17:54:19 -0700 2010
irb(main):004:0> 
o homem de lata
fonte
eu tenho que exigir rubygems e active_record primeiro, mas essa correção funcionou no irb depois disso.
griotspeak de
Tudo o que fiz foi o que está no exemplo. Vou adicionar o que fiz para executá-lo no 1.8.7 também.
The Tin Man de
1
se você precisa disso o tempo todo - digamos que você esteja brincando com algum código ou algo assim, você pode adicionar ou modificar o arquivo .irbrc para exigir todas as bibliotecas que você usa o tempo todo. Ele os carregará automaticamente na inicialização. Ou seja, eu uso awesome_print, hirb e alguns métodos personalizados o tempo todo - então eu apenas os coloco lá e não tenho que pensar duas vezes por coisas como 1.hour.ago ou ap {: a => 3,: b => " nick "} para trabalhar.
konung
1
Confira irbtools. Inclui todos os tipos de ajustes no IRB. E, se precisar desabilitá-los temporariamente, ligue irb -fe não os carregará.
The Tin Man
Acrescentarei que o novo atrativo é Pry para uma sessão interativa de Ruby. Muito impressionante.
The Tin Man de
28

Você pode adicionar bibliotecas granularmente por meio do já mencionado

require 'active_support/core_ext/some_class/some_file'

Há também outro nível acima, onde você pode

require 'active_support/core_ext/some_class'

Mas, de momento, infelizmente não está disponível para Time, Datee DateTime.

Uma maneira de contornar isso é require 'active_support/time'o que lhe dará Time, Datee DateTimeque iria resolver o OP estava pedindo sem a necessidade de tudo.


O patch do My Rails , que adicionaactive_support/core_ext/dateedate_timefaz parte do Rails v4.0.0 , agora você pode solicitá- los individualmente. YAY!

Mraaroncruz
fonte
-3

Isso funciona no console? Isso está funcionando para mim:

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.6.5
BuildVersion:   10H574

$ rails c
Loading development environment (Rails 3.0.3)
>> 1.week.ago
=> Sun, 14 Nov 2010 16:57:18 UTC +00:00
Paul Schreiber
fonte
-4

Você pode:
require 'active_support / core_ext'
ou:
require 'active_support / all'

faixa
fonte