[ANN] attributes-3.2.0

A

ara.t.howard

NAME

attributes.rb

URIS

http://rubyforge.org/projects/codeforpeople/
http://codeforpeople.com/lib/ruby

SYNOPSIS

attributes.rb provides an attr_* like method will several user friendly
additions. attributes.rb is similar to the traits.rb package but sacrafices
a few features for simplicity of implementation: attributes.rb is only 42
lines of code.

the implimentation of attributes.rb borrows many of the best ideas from the
metakoans.rb ruby quiz

http://www.rubyquiz.com/quiz67.html

in particular the solutions of Christian Neukirchen and Florian Gross.

SAMPLES

<========< samples/a.rb >========>

~ > cat samples/a.rb

#
# basic usage is like attr, but note that attribute defines three methods,
# getter, setter, and query
#
require 'attributes'

class C
attribute 'a'
end

c = C.new

c.a = 42 # setter
p c.a # getter
p 'forty-two' if c.a? # query

#
# also not that attribute(s) works as well for objects as classes
#
o = Object.new
o.attribute 'answer' => 42
p o.answer

~ > ruby samples/a.rb

42
"forty-two"
42


<========< samples/b.rb >========>

~ > cat samples/b.rb

#
# default values may be given either directly or as a block which will be
# evaluated in the context of self. in both cases (value or block) the
# default is set only once and only if needed - it's a lazy evaluation.
#
require 'attributes'

class C
attribute :a => 42
attribute:)b){ Float a }
end

c = C.new

p c.a
p c.b

~ > ruby samples/b.rb

42
42.0


<========< samples/c.rb >========>

~ > cat samples/c.rb

#
# multiple values may by given, plain names and key/val pairs may be mixed.
#
require 'attributes'

class C
attributes 'x', 'y' => 0b101000, 'z' => 0b10
end

c = C.new
c.x = c.y + c.z
p c.x

~ > ruby samples/c.rb

42


<========< samples/d.rb >========>

~ > cat samples/d.rb

#
# a nice feature is that all attributes are enumerated in the class. this,
# combined with the fact that the getter method is defined so as to delegate
# to the setter when an argument is given, means bulk initialization and/or
# attribute traversal is very easy.
#
require 'attributes'

class C
attributes %w( x y z )

def attributes
self.class.attributes
end

def initialize
attributes.each_with_index{|a,i| send a, i}
end

def to_hash
attributes.inject({}){|h,a| h.update a => send(a)}
end

def inspect
to_hash.inspect
end
end

c = C.new
p c.attributes
p c

c.x 'forty-two'
p c.x

~ > ruby samples/d.rb

["x", "y", "z"]
{"x"=>0, "y"=>1, "z"=>2}
"forty-two"


<========< samples/e.rb >========>

~ > cat samples/e.rb

#
# my favourite element of attributes is that getters can also be setters.
# this allows incredibly clean looking code like
#
require 'attributes'

class Config
attributes %w( host port)
def initialize(&block) instance_eval &block end
end

conf = Config.new{
host 'codeforpeople.org'

port 80
}

p conf

~ > ruby samples/e.rb

#<Config:0xb75cc6bc @port=80, @host="codeforpeople.org">


enjoy.

-a
 
U

Une Bévue

NAME

attributes.rb


with :

~/Desktop%> sudo gem install attributes

i get :
ERROR: Error installing gem attributes[.gem]: undefined method
`required_ruby_version' for nil:NilClass

over MacOS X 1O.4.8

and :
ruby -version
ruby 1.8.5 (2006-08-25) [powerpc-darwin8.8.0]

and :
~/Desktop%> gem -v
0.9.0
 
P

Phrogz

Une said:
ERROR: Error installing gem attributes[.gem]: undefined method
`required_ruby_version' for nil:NilClass

I'm also on Mac OS X 10.4.8, and it works for me, but with an older
version of gems:

Slim:~ gavinkistner$ ruby -v && gem -v
ruby 1.8.5 (2006-08-25) [powerpc-darwin8.7.0]
0.8.11
Slim:~ gavinkistner$ sudo gem install attributes
Password:
Attempting local installation of 'attributes'
Local gem file not found: attributes*.gem
Attempting remote installation of 'attributes'
Updating Gem source index for: http://gems.rubyforge.org
Successfully installed attributes-3.2.0


In fact, I can't seem to upgrade gems (but let's not hijack the thread
with that bit of info).
 
U

Une Bévue

Phrogz said:
In fact, I can't seem to upgrade gems (but let's not hijack the thread
with that bit of info).

i can'y downgrade )))

but i think i could install it "manually" by myself, don't worry ;-)
 
A

ara.t.howard

NAME

attributes.rb


with :

~/Desktop%> sudo gem install attributes

i get :
ERROR: Error installing gem attributes[.gem]: undefined method
`required_ruby_version' for nil:NilClass

over MacOS X 1O.4.8

and :
ruby -version
ruby 1.8.5 (2006-08-25) [powerpc-darwin8.8.0]

and :
~/Desktop%> gem -v
0.9.0

sorry, must be on your end mac/ruby/gem:


harp:~ > gem install attributes
[]
Attempting local installation of 'attributes'
Local gem file not found: attributes*.gem
Attempting remote installation of 'attributes'
Updating Gem source index for: http://gems.rubyforge.org
Successfully installed attributes-3.2.0

harp:~ > ruby -v
ruby 1.8.4 (2005-12-01) [i686-linux]

harp:~ > gem -v
0.8.11


try to get a backtrace and send to the gem team.

cheers.


-a
--=20
my religion is very simple. my religion is kindness. -- the dalai lama
 
B

Bob Hutchison

NAME

attributes.rb


with :

~/Desktop%> sudo gem install attributes

i get :
ERROR: Error installing gem attributes[.gem]: undefined method
`required_ruby_version' for nil:NilClass

over MacOS X 1O.4.8

and :
ruby -version
ruby 1.8.5 (2006-08-25) [powerpc-darwin8.8.0]

and :
~/Desktop%> gem -v
0.9.0

No problem here and I have almost the same configuration (I have i686-=20=

darwin8.8.1)

Cheers,
Bob

----
Bob Hutchison -- blogs at <http://www.recursive.ca/=20
hutch/>
Recursive Design Inc. -- <http://www.recursive.ca/>
Raconteur -- <http://www.raconteur.info/>
xampl for Ruby -- <http://rubyforge.org/projects/xampl/>
 
U

Une Bévue

try to get a backtrace and send to the gem team.


i'd like (i'm also a gem modest designer) to help the gem community but
i don't know how to do a backtrace...

i get about the same prob attempting a remote install :

~/Desktop%> sudo gem install -r attributes
Password:
Bulk updating Gem source index for: http://gems.rubyforge.org
ERROR: While executing gem ... (NoMethodError)
undefined method `each' for #<Object:0x67518d0>
 
A

ara.t.howard

i'd like (i'm also a gem modest designer) to help the gem community but
i don't know how to do a backtrace...

i get about the same prob attempting a remote install :

~/Desktop%> sudo gem install -r attributes
Password:
Bulk updating Gem source index for: http://gems.rubyforge.org
ERROR: While executing gem ... (NoMethodError)
undefined method `each' for #<Object:0x67518d0>

try

~/Desktop%> sudo gem --debug install -r attributes

-a
--=20
my religion is very simple. my religion is kindness. -- the dalai lama
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,074
Latest member
StanleyFra

Latest Threads

Top