June 17th, 2007 by ahsan
Well, this is weird.
I wrote a rake task to import data from a csv file (output from a legacy system) into my development database for testing. The catch was that I wanted to extend my model class by adding a custom method only in the rake file.
require File.expand_path(File.dirname(__FILE__) + "/../../config/environment")
class Customer < ActiveRecord::Base
def my_custom_method
end
end
But here, for some reason, rake tries to define a _new_ activerecord model, not redefine the existing model I’ve written. So, what I tried was to precede the class definition with:
c = Customer.new # which really goes to waste
and it worked ! Rake now recognizes that I’m trying to add a method to my existing rails model !
June 13th, 2007 by ahsan
I tried out Apple’s Safari for Windows (beta). It’s not bad at all.
However, I did uncover the annoyance of being unable to minimize it by clicking on the taskbar ! You have to either use the shortcut CTRL+M or Windows+D. Worse, when you maximize it, the window is ‘restored‘ instead of being maximized. I hope they fix this in the final release.
I would like:
- To view RSS item headings in a menu as in firefox. Safari opens an admittedly nifty Feed Viewer with all the feed items. But I’d really like to see the headlines at a glance.
- To use CTRL+TAB to cycle through the tabs instead of the given shortcut, which is CTRL+{ or CTRL+}. On my keyboard, this entails pressing three keys: CTRL + SHIFT + [
- A lighter theme ? The current one is too dark and gray. An option to switch to the Macintosh theme would be nice.
- To be able to click on an item in the auto-completion menu for the address bar. You have to press ENTER in Safari.
- The status bar to be visible, by default, upon installation.
Otherwise, I like Safari.
- Compared to IE, Safari is swift (to the naked eye).
- Font smoothing is configurable.
- There is an amnesiac mode called Private Browsing where, like TorPark, Safari does not record anything in the History or Downloads and form entries are not saved in AutoFill.
- History items are accessible date-wise from a recursive menu (History -> ‘Wednesday, June 13th 2007′ -> Item …. ), which, in my opinion, is far easier than opening a sidebar and navigating a tree menu.
- I haven’t noticed any website rendering incorrectly, so far.
I need Firebug at work, so I’ll probably stay with Firefox. I’m on Linux at home, so I don’t have the option of Safari there.
That said, I’ll definitely give Safari’s final release another chance.
June 12th, 2007 by ahsan
Today I discovered the following Rails oddity.
Models created in a test fixture don’t have their created_at attributes auto-updated. They need to be specified like this:
created_at: <%=Time.now.to_s(:db)%>
Thanks to toretore on #rubyonrails (irc.freenode.net) for this tip.
June 6th, 2007 by ahsan
I know this is perverse but I wish the Django Template language was available for Rails.
Beat this:
{%extends ‘base’%}
{%block leftnav} a link {%endblock%}
{% block content %} this is the content {% endblock %}
{% block footer%} another link{%endblock%}
If you leave out a ‘block’ it will pick up the default content from its parent ‘base’ template. Everything between the blocks is rendered as per the parent template. In short, you can ‘extend’ the bits you want, or just render the parent template. A more detailed explanation is available here.
Compared to that, Rails lacks nested layouts. You can only have one level of inheritance: application-wide. There’s a nested_layout plugin that provides the required functionality, but it isn’t as elegant as the above Django example.
I’ve been looking at liquid, which looks similar to Django’s Templates, but it doesn’t seem to be documented well. I’m now looking at HAML, which seems promising, but I may just be too deep into the project to change now. I may have to survive on partials !
June 3rd, 2007 by ahsan
Dreamweaver CS 3 has a facility to rearrange inline styles in a <style> tag. Well, here’s a utility that does the opposite: it converts css in style tags to inline css. Yeah, I hear you. Why would anyone want to do that ?!
Sending HTML Newsletters is a nightmare. Most of the email clients, bar Eudora Light, support css. However, not all properties are supported, and Gmail, one of the major web-based email clients, supports only inline styles.
You need Ruby, and Hpricot installed to run this. Duh, it runs on windows too !
EDIT: fixed a bug & added NOTES
Here’s the code:
#!/bin/env ruby
# style2inline.rb - v0.2
# http://tech.bytefull.com
# NOTES:
# CSS must not contain any comments
# the last attribute-value pair must end in a semi-colon, example:
# a {font-family: Verdana; font-size: 18pt;}
# uncomment this if you have hpricot installed as a gem
# require 'rubygems'
require 'hpricot'
def style_to_inline(filename)
doc = open(filename) {|f| Hpricot(f)}
css = ""
elems = doc.search('head/style')
# combine the content of all style tags
elems.map {|x| css << x.inner_html}
# remove the style tags - we don't need them in our output doc
elems.remove
# collapse all newlines
css.gsub!("\n", " ")
# Regexp by Nick Franceschina
# http://regexlib.com/REDetails.aspx?regexp_id=916
dec_block = '((\s*([^,{]+)\s*,?\s*)*?){((\s*([^:]+)\s*:\s*([^;]+?)\s*;\s*)*?)}'
regexp = Regexp.new(dec_block, Regexp::IGNORECASE)
results = css.scan(regexp)
results.each do |res|
res[0].split(',').each do |css_sel|
doc.search(css_sel.strip).each do |elem|
if elem.elem? # added in version 0.2,
# to avoid operating on a Hpricot::Text element
if elem[:style] then
# append to the existing style information
elem[:style] = elem[:style] + res[3]
else
# add a style attribute
elem[:style] = res[3]
end
# we don't need the class attribute
elem.remove_attribute(:class)
end
end
end
end
# output
File.open("s2i_#{filename}", 'w') {|file| file.write(doc) }
end
ARGV.each {|x| style_to_inline(x)}
Invoke it with ruby style2inline.rb [FILENAME], and it will output a file of the same name prepended with ’s2i’, e.g s2i-filename.html.
June 3rd, 2007 by ahsan
Hi,
I intend to jot down stuff that people might find useful, code snippets, links, and my thoughts on the latest technologies.
I’m currently working on a Ruby on Rails project, so expect to see that covered.