Tag ‘Ruby’

Using Raw SQL snippets to create Thinking-Sphinx Indexes

We have used Thinking-Sphinx in several projects to implement search engines. Thinking-Sphinx is a wrapper in Ruby to use ActiveRecord with Sphinx. But in the project I’m working right now I had to solve a different problem: the user should be able to search for formatted values, however without using the formatting characters, i.e, suppose a field containing 111.444.777-35, the user should be able to find it searching for 11144477735 (or a substring of it).

The default behaviour for Thinking-Sphinx is to index the exact values for each column it scans, but we can by-pass it. The Thinking-Sphinx index definition allows us to use raw SQL to define which values should be indexed for each attribute. In my case, I used the native PostgreSQL regular expressions functions to get rid of the punctuation characters, indexing only the “clean” version of each value. My database column is called “entity_number”:

define_index

Continue reading

Code blocks with optional arguments in Ruby 1.8.x

Ruby 1.9 has some cool new features. One of them is the ability to define default values for the arguments passed to code blocks, like in the following example:

pow = proc { |a, b = 2| a**b }
 
pow.call 3, 3
# 27
 
pow.call 3
# 9

This is very useful, for instance, when we dynamically create new methods using metaprogramming and want some of the arguments for these methods to be optional.

class MyMath
  class < < self
    define_method :pow do |base, exponent = 2|
      base**exponent
    end
  end
end
 
MyMath.pow 3 # 9
MyMath.pow 2, 3 # 8

But in Ruby 1.8.x we can’t do that, we can’t define default values the arguments of a code block. So what if your application runs on 1.8.x and you need to dynamically create methods with optional arguments? There is a solution, not so elegant as the

Continue reading

Using cucumber and webrat for remote web testing

Cucumber and webrat serve as a powerful combination of tools for testing your web applications, but in its most common mode webrat can only test your application locally. Is it possible, you may ask, to use webrat to test a remote web site? The answer is yes, with a little tweaking. Webrat has a configuration option that tells it to use mechanize (a screen-scraping tool for ruby) instead of the built-in rails view testing system.

Continue reading

best railsconf title

Brad Midgley

The best title had to be When to Tell Your Kids About Client Caching. Parents might identify more with this. Interesting stuff in any case.

Continue reading

Ruby performance work

Brad Midgley

Railsconf had several performance-related talks. This one went over a lot of interesting territory.

  • Who knew the Date class performed so badly?? Use equivalent ops in Time or get date::performance
  • Use String::<< instead of String::+=
  • Tune your custom sql with virtual attributes

It’s surprising that things we might not think are performance issues are problematic in ruby. One reason to optimize after you gather metrics that identify problem areas.

rowing

(Image courtesy of rowingbike.com)

Continue reading

RubyMine

Brad Midgley

During his talk at railsconf, Gregg Pollack showed off Jetbrains Rubymine, an awesome IDE for ruby & rails. I wouldn’t be surprised to find out Jetbrains had a spike in their downloads coinciding with the talk. It is a nice IDE. I was happy to see it includes git support out of the box (I only had to set the path to the git executable).  I like the web preview for rails applications. On the downside, I had difficulty opening a large project. I had to stick to more typical rails applications.

It might be time for me to try eclipse again and see how RDT stacks up now.

Contact your usergroup and you can get a deal with Jetbrains to get discounts if you go that route.

Continue reading