Search my site
Twitter
Flickr
Archives

Blog Posts

Entries in ruby (2)

Tuesday
Nov162010

Convert YAML to JSON i18n internationalization locale files

This is a convenient ruby script that I use to transform Rails i18n YAML locales into JSON for use in javascript UI. I've been developeing a lot thick client ExtJS interfaces

Download the GIST

# Transform a YAML i18n local files into JSON object.
# suitable when using Rails YAML for javascript UI translations.
#
# This takes files DIR_ROOT/locale and outputs DIR_ROOT/js/locale
# filenames are determined by YAML filename.  
#
# Mark Young @zarzax http://www.zarzax.com Nov 2010
#
# Transforms YAML en.yml:
# en:
#   home:
#     link_name: 'testing'
# Into compressed JSON en.js:
# Ext.locale = {'home': {'home': {'link_name': 'testing'}}

require 'rubygems'
require 'json'
require 'yaml'

DIR_ROOT = File.expand_path(File.dirname(__FILE__))
YAML_ROOT = File.join(DIR_ROOT, 'locales')
JS_ROOT = File.join(DIR_ROOT, 'js', 'locales')

# locale javascript namespace
JS_NAMESPACE = 'Ext.locale = '

Dir[File.join(YAML_ROOT, '*.yml')].sort.each { |locale| 
  locale_yml = YAML::load(IO.read(locale))
  puts 'Filename: ' + locale
  puts 'Filename JSON: ' + locale_yml.to_json
  File.open(
    File.join(JS_ROOT, File.basename(locale, '.*') + '.js'), 'w') {
      |f| f.write(JS_NAMESPACE + locale_yml[File.basename(locale, '.*')].to_json)
  }
}
Monday
Nov152010

Find the current_controller? in Rails

Fine Current Creative Commons License photo credit: spacesuitcatalyst

Rails provides a very useful current_page?(link) function but I needed a way to find if I was on the current_controller?(link) for adding a css class to menu links. This was useful for when I'm on a deeplink 'users/1/edit' but want to match a menu link to 'users/'. They share the same controller but not a the whole page link.

Download the GIST

#
# A rails helper snippet I find helpful for building main navigation
# when you want to highlight main pages (controllers) when browser
# requests a subpage.
#
# eg. current request '/users/1/edit' but we want to highlight
# the menu link to '/users'. current_page? will be false but
# the current_controller? function will be true
#

# Find if a link is uses the current controller.
# Used in building main navigation to include
# sublinks.
def current_controller?(link)
  url_for(link).include? @controller.controller_name
end

# Create list elements for building navigation
def menu_link_li(text, link, classes = "", include_separator = false, new_tab = false)
  begin
    if current_controller? link
   classes += " selected"
    end
  rescue Exception => e
    # deal with a potential error of not using the helper with a request first being made.
  end
  
  if new_tab
    link_text = link_to text, link, :target => "_blank"
  else
    link_text = link_to text, link
  end
  
  html = %{
  • #{link_text}
  • } if include_separator html += %{
  • } end return html end