August 30th, 2008 No Comments »
While the acts_as_tree rails plugin ( http://dev.rubyonrails.com/svn/rails/plugins/acts_as_tree ) provides some basic methods for accessing tree like data structure, I found that it lacks some basic ones, for example – has_children? and has_siblings?
Other than that, it would have been nice to know the tree width and depth (especially if you need to draw it, and need to calculate the scaling.
module ActiveRecord
module Acts
module Tree
module InstanceMethods
def has_children?
!self.children.size.zero?
end
def has_siblings?
!self.siblings.size.zero?
end
# Return the tree depth
def depth
return 0 unless has_children?
children.inject(0) {|dep,c| dep > c.depth ? dep : c.depth} + 1
end
# Return the tree width
def width
return 1 unless has_children?
children.inject(0) {|sum,c| sum + c.width}
end
end
end
end
end
Maybe if I won’t be lazy, I’ll write some tests and send this for inclusion in the plugin…
June 24th, 2008 2 Comments »
The dhtmlxTabbar is a nice tab-bar component from http://www.dhtmlx.com/
In order to use the AJAX loading feature I had to make a small change in the dhtmlxcommon.js so it mimics the behavior of Prototype by adding a X-Requested-With HTTP header. Thus, it’s possible to use request.xhr? in Rails.
dhtmlxcommon.js
August 27th, 2007 2 Comments »
I needed to present products and their corresponding branches and tags in Subversion in a Rails app. So I’ve come up with this quite simple solution.
The GenericModel class (attached) is ihnerited by Tag, Branch and Product.
The Product class supports methods find, branches and tags for which it uses ‘svn/client’.
The config.yml (which is read into OpenStruct) is very simple:
svn:
url: http://svn/svn/repos
user: roman
password: roman
The Product class tries to provide interface similar to the ActiveRecord (of course I didn’t immitate everything, just the basic stuff). Implementing interfaces in a contract-less language is an adventure
generic_model.rb
product.rb
August 14th, 2007 3 Comments »
I finally posted my Bugzilla plugin on Rubyforge.
The project page is:
http://rubyforge.org/projects/rubzilla/
The source can be found here:
svn://rubyforge.org/var/svn/rubzilla/bugzilla/trunk
License:
BSD
It is probably not complete, and has some bugs, and surely lacks documentation, but this is better than nothing