Sha256: d196daab6a07db13b714675bf6286644cd8257ce431029295ce94a8f864fa6df

Contents?: true

Size: 1.57 KB

Versions: 9

Compression:

Stored size: 1.57 KB

Contents

module Makura
  module Plugin
    # Automatically store/retrieve values for different languages.
    # Useful especially if combined with the locale gem.
    #
    # Default language is 'en'.
    #
    # Usage:
    #
    #   class Page
    #     include Makura::Model
    #
    #     plugin :localize
    #     localized :title, :text
    #   end
    #
    #   page = Page.new
    #   page.title = 'english title'
    #   page.title # => 'english title'
    #
    #   page.language = 'de'
    #   page.title # => nil
    #   page.title = 'deutscher titel'
    #   page.title # => 'deutscher titel'
    #
    #   page.language = 'en'
    #   page.title # => 'english title'
    module Localize
      LOCALIZE_GET = '
def %key%
  raise(ArgumentError, "No language set") unless language
  self["%key%_#{language}"] || self["%key%_#{self.class.default_language}"]
end'.strip

      LOCALIZE_SET = '
def %key%=(data)
  raise(ArgumentError, "No language set") unless language
  self["%key%_#{language}"] = data
end'.strip

      module SingletonMethods
        def localized(*keys)
          keys.each do |key|
            key = key.to_s
            class_eval(LOCALIZE_GET.gsub('%key%', key))
            class_eval(LOCALIZE_SET.gsub('%key%', key))
          end
        end

        def default_language=(dl)
          @default_language = dl
        end

        def default_language
          @default_language ||= 'en'
        end
      end

      module InstanceMethods
        attr_writer :language

        def language
          @language || self.class.default_language
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 2 rubygems

Version Path
manveru-makura-2009.03.01 lib/makura/plugin/localize.rb
manveru-makura-2009.03.28 lib/makura/plugin/localize.rb
manveru-makura-2009.04.22 lib/makura/plugin/localize.rb
manveru-makura-2009.05.27 lib/makura/plugin/localize.rb
makura-2012.01 lib/makura/plugin/localize.rb
makura-2011.01.21 lib/makura/plugin/localize.rb
makura-2010.08.26 lib/makura/plugin/localize.rb
makura-2010.08 lib/makura/plugin/localize.rb
makura-2009.05.27 lib/makura/plugin/localize.rb