I am extremely pleased to announce the first release of Ribs.
Ribs is a library for JRuby, that allows you to persist Ruby objects using Hibernate. Some time ago I wrote about ActiveHibernate. I have now decided to implement this myself, and the result is the Ribs project.
The first release is quite minimal in scope. You can define and work with models that have primitive values only – there is no support for associations. You can find, create, update and delete model objects. All of this uses Hibernate and JDBC.
To get started, you just define that an object is to be a Ribs model:
class Artist Ribs! end
Once that’s done, you can start working with it.
Of course, this is just the beginning. I have a quite long list of things I’d like to have in the project, but I felt the need to release quickly and often to be more important than to implement everything first.
This release is not really for production usage, but I would appreciate if people tried it out and came with suggestions. The current planned features can be found in the PLAN file, in the git repository.
More documentation can be found here: http://olabini.com/projects/ribs/doc.
You can download the gem at: http://olabini.com/projects/ribs/downloads/ribs-0.0.1.gem.
The git repository is at: git://github.com/olabini/ribs.git.
Ribs will soon be available in the regular gem repositories – as soon as my Rubyforge project has been approved.
The project is released under the MIT license.
5 Comments, Comment or Ping
This is a great idea, but I found the Ribs! syntax to be confusing for 3 reasons: 1) it’s camel case, which generally means a class. 2) it’s got a bang(!), but it’s not really dangerous. I don’t want to speak for most ruby developers out there, but i think most of them don’t consider method using metaprogramming as “dangerous”. 3) defining Kernel#Ribs! seems inelegant.
Also, passing a block to Ribs! is a bit confusing:
class Blog
Ribs! do |r|
r.table :blogs
r.primary_key :blog_id
r.col :title, :blog_title
r.avoid :irrelevant_column
end
end
what’s this ‘r’ variable, and why am i defining the table name and schema on ‘r’ and not the actual class? what about this:
class Blog
include Ribs::Model
table :blogs
primary_key :blog_id
col :title, :blog_title
avoid :irrelevant_column
end
Seems more explicit and reads better too, IMHO. Or maybe that’s the syntax I prefer b/c of DataMapper. :)
September 1st, 2008
Yeah, I knew the names I choose for methods would be a bit controversial. Using a capital R felt right, I don’t want to use a module or a class, but I basically want it to say that this is something that puts lots of functionality into the class, just like a module or class.
The bang is there for two reasons, first, it’s definitely dangerous. It modifies the class it’s part of. That’s what I look for when I decide if I should have a bang or not. The second reason for the bang is that this allows me to have a capital letter in the word.
I like having Kernel#Ribs!, because it’s not at all intrusive. That’s the only way to make something into a Ribs model. I generally avoid module hooks like included and append_features. I find them unintuitive and definitely against what a mixin should do.
Finally, the reason I want to collect all the definitions in a block is because it gives me more flexibility. I don’t have to pollute the name space of the class with every method needed for definitions, and I can also do things like copy definitions between classes very easily. I can define Ribs on a metaclass if I want to.
September 1st, 2008
Also, in addition to the above, I feel that all those things would be way more inelegant if I used the approach you detail. And in fact, the reason I did it this way is because I feel that ActiveRecord and DataMapper got this totally wrong. I don’t like how it looks and the way it pollutes things for me.
September 1st, 2008
sorry to post my question here ,but i’m wondering how can u profile rails apps using jruby, is there any ruby-prof like tool in jruby?
Thanks
September 2nd, 2008
This looks pretty cool. How would you compare it GORM, if at all?
September 10th, 2008
Reply to “Announcing Ribs 0.0.1”