Hello, I got a lot of Ruby constants spread over a couple of models.
Is it possible to throw them all into environment.rb instead? I’d
really enjoy having things in one place. Thanks.
Save The Vinyls wrote:
Hello, I got a lot of Ruby constants spread over a couple of models.
Is it possible to throw them all into environment.rb instead? I’d
really enjoy having things in one place. Thanks.
I would guess you have more than constants “spread over a couple of
models”! If
your design is indeed not clear and DRY, you ought to work to put each
operation
into the model where it belongs.
The same with constants; each must have a model that needs it most. Put
it
inside that model, and access it with Model:: notation.
–
Phlip
Save The Vinyls wrote:
Hello, I got a lot of Ruby constants spread over a couple of models.
Is it possible to throw them all into environment.rb instead? I’d
really enjoy having things in one place. Thanks.
Think it depends on what those constants are…
if they are environment specific stuff like
SITE_LOCKOUT_TIME = 15.minutes
which you may want to change to 30.seconds in development,
then I’d probably put the default in environment.rb
and do a
SITE_LOCKOUT_TIME = 15.minutes unless defined?(SITE_LOCKOUT_TIME)
then, you can override it for the development environment in in
environments/development.rb
however,
if it’s something that isn’t global, and isnt environment specific,
then you should keep it in the relevant model.
eg.
class User
LOCKOUT_TIME = 15.minutes
def is_locked_out?
self.locked_at && self.locked_at > self.class::LOCKOUT_TIME.ago
end
end
say for people.rb:
MAX_EMAIL = MAX_PASSWORD = SMALL_STRING_LENGTH
MAX_NAME = SMALL_STRING_LENGTH
MAX_NICKNAME = 15
EMAIL_REGEX = /\A[A-Z0-9._%-]+@([A-Z0-9-]+.)+[A-Z]{2,4}\z/i
DESCRIPTION_LENGTH = 2000
TRASH_TIME_AGO = 1.month.ago
SEARCH_LIMIT = 20
SEARCH_PER_PAGE = 8
MESSAGES_PER_PAGE = 5
NUM_RECENT_MESSAGES = 4
NUM_WALL_COMMENTS = 10
NUM_RECENT = 8
FEED_SIZE = 10
TIME_AGO_FOR_MOSTLY_ACTIVE = 1.month.ago
On Jul 6, 11:20 pm, Matthew R. Jacobs <rails-mailing-l…@andreas-
say for people.rb:
MAX_EMAIL = MAX_PASSWORD = SMALL_STRING_LENGTH
MAX_NAME = SMALL_STRING_LENGTH
MAX_NICKNAME = 15
EMAIL_REGEX = /\A[A-Z0-9._%-]+@([A-Z0-9-]+.)+[A-Z]{2,4}\z/i
DESCRIPTION_LENGTH = 2000
TRASH_TIME_AGO = 1.month.ago
SEARCH_LIMIT = 20
SEARCH_PER_PAGE = 8
MESSAGES_PER_PAGE = 5
NUM_RECENT_MESSAGES = 4
NUM_WALL_COMMENTS = 10
NUM_RECENT = 8
FEED_SIZE = 10
TIME_AGO_FOR_MOSTLY_ACTIVE = 1.month.ago
On Jul 6, 11:20 pm, Matthew R. Jacobs <rails-mailing-l…@andreas-
thanks a lot for the response guys. i no longer feel this is
necessary, i’ll keep the constants where they are.
On Jul 7, 1:23Â pm, Matthew R. Jacobs <rails-mailing-l…@andreas-
Save The Vinyls wrote:
say for people.rb:
MAX_EMAIL = MAX_PASSWORD = SMALL_STRING_LENGTH
EMAIL_REGEX = /\A[A-Z0-9._%-]+@([A-Z0-9-]+.)+[A-Z]{2,4}\z/i
DESCRIPTION_LENGTH = 2000
TRASH_TIME_AGO = 1.month.ago
SEARCH_LIMIT = 20
SEARCH_PER_PAGE = 8
MESSAGES_PER_PAGE = 5
NUM_RECENT_MESSAGES = 4
NUM_WALL_COMMENTS = 10
NUM_RECENT = 8
FEED_SIZE = 10
TIME_AGO_FOR_MOSTLY_ACTIVE = 1.month.agoOn Jul 6, 11:20�pm, Matthew R. Jacobs <rails-mailing-l…@andreas-
depends if you need to reuse this stuff or not.
think it’s probably unecessary to freeze some of these as constants.
would probably rewrite it
class People
validates_length_of :email, :password, :name, :maximum =>
SMALL_STRING_LENGTH
validates_length_of :nickname, :maximum => 15
validates_format_of :email,
/\A[A-Z0-9._%-]+@([A-Z0-9-]+.)+[A-Z]{2,4}\z/i
validates_length_of :description, :maximum => 2000
note: TRASH_TIME_AGO = 1.month.ago will break
as the constant is set at class load time
def self.to_trash(time=1.month)
self.find(:all, [“created_at < ?”, time.ago])
end
named_scope :mostly_active, lambda{:conditions => [“updated_at > ?”,
1.month.ago]}
end
the stuff about number of messages to display and such
are probably view variables,
and you may want override with params…
hope that helps.
http://www.workingwithrails.com/person/12394-matthew-rudy-jacobs