The proposed Ruby Package Standard states:
File names and directory structure SHOULD correspond like this:
Library: foo-bar
Directory: lib/foo/bar
Namespace: Foo::Bar
Library: foo_bar
Directory: lib/foo_bar
Namespace: FooBar
That being the case I think Ruby needs to include methods to make it
easy to translate between these. In ActiveSupport these methods are
String#pathize and String#methodize. I would think there would also be
something like String#modulize.
Without such methods I think it is a bit much to ask of developers to
keep this correspondence. I have code that needs to do such
translations dynamically and because Ruby does not have such methods,
I used a FooBar -> foobar.rb correspondence instead (easily
transformed via #downcase). A fact that has led me to generally use
this correspondence throughout all my projects.
I’m all for the proposed standard, but Ruby needs to support it too.
Thomas S. wrote:
Library: foo-bar
Directory: lib/foo/bar
Namespace: Foo::Bar
Library: foo_bar
Directory: lib/foo_bar
Namespace: FooBar
That being the case I think Ruby needs to include methods to make it
easy to translate between these. In ActiveSupport these methods are
String#pathize and String#methodize. I would think there would also be
something like String#modulize.
Perhaps you’re thinking of camelize and underscore in
lib/active_support/inflector.rb
# Examples:
# "active_record".camelize # => "ActiveRecord"
# "active_record".camelize(:lower) # => "activeRecord"
# "active_record/errors".camelize # =>
“ActiveRecord::Errors”
# “active_record/errors”.camelize(:lower) # =>
“activeRecord::Errors”
# Examples:
# "ActiveRecord".underscore # => "active_record"
# "ActiveRecord::Errors".underscore # => active_record/errors
Each of these methods is only a few lines. I’ve seen them copy-pasted in
several projects…
On Mon, Jul 5, 2010 at 6:25 AM, Brian C. [email protected]
wrote:
easy to translate between these. In ActiveSupport these methods are
“ActiveRecord::Errors”
“active_record/errors”.camelize(:lower) # =>
“activeRecord::Errors”
Examples:
“ActiveRecord”.underscore # => “active_record”
“ActiveRecord::Errors”.underscore # => active_record/errors
Each of these methods is only a few lines. I’ve seen them copy-pasted in
several projects…
There’s also constantize
ruby-1.8.7-p173 > “ActiveRecord”.constantize
=> ActiveRecord
ruby-1.8.7-p173 > “active_record”.camelize.constantize
=> ActiveRecord
ruby-1.8.7-p173 > “ActiveRecord::Errors”.constantize
=> ActiveRecord::Errors
Also a few lines of code, although there are two versions one for Ruby
1.9.2 because of changes to Module#const_get
–
Rick DeNatale
Blog: http://talklikeaduck.denhaven2.com/
Github: rubyredrick (Rick DeNatale) · GitHub
Twitter: @RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale
On Jul 5, 6:25 am, Brian C. [email protected] wrote:
easy to translate between these. In ActiveSupport these methods are
String#pathize and String#methodize. I would think there would also be
something like String#modulize.
Perhaps you’re thinking of camelize and underscore in
lib/active_support/inflector.rb
Oh? My bad, I thought it had #pathize and #methodize too.
# "ActiveRecord::Errors".underscore # => active_record/errors
Each of these methods is only a few lines. I’ve seen them copy-pasted in
several projects…
In Facets those are #camelcase and #snakecase, but it also has the
other methods – No problem getting access to such methods. Just think
Ruby needs to support something along these lines out the box if the
correspondence should be considered a standard.