Skip to content

Commit

Permalink
remove duplication in parsers
Browse files Browse the repository at this point in the history
  • Loading branch information
grosser committed Apr 5, 2012
1 parent c51e5ac commit 5c6f695
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 93 deletions.
41 changes: 41 additions & 0 deletions lib/gettext_i18n_rails/base_parser.rb
@@ -0,0 +1,41 @@
require 'gettext/utils'
begin
require 'gettext/tools/rgettext'
rescue LoadError #version prior to 2.0
require 'gettext/rgettext'
end

module GettextI18nRails
class BaseParser
def self.target?(file)
File.extname(file) == ".#{extension}"
end

def self.parse(file, msgids = [])
return msgids unless load_library
code = convert_to_code(File.read(file))
RubyGettextExtractor.parse_string(code, file, msgids)
rescue Racc::ParseError => e
$stderr.puts "file ignored: ruby_parser cannot read #{extension} files with 1.9 syntax --- (#{e.message})"
return msgids
end

def self.load_library
return true if @library_loaded

begin
require "#{::Rails.root.to_s}/vendor/plugins/#{extension}/lib/#{extension}"
rescue LoadError
begin
require extension # From gem
rescue LoadError
puts "A #{extension} file was found, but #{extension} library could not be found, so nothing will be parsed..."
return false
end
end

require 'gettext_i18n_rails/ruby_gettext_extractor'
@library_loaded = true
end
end
end
43 changes: 6 additions & 37 deletions lib/gettext_i18n_rails/haml_parser.rb
@@ -1,44 +1,13 @@
require 'gettext/utils'
begin
require 'gettext/tools/rgettext'
rescue LoadError #version prior to 2.0
require 'gettext/rgettext'
end
require 'gettext_i18n_rails/base_parser'

module GettextI18nRails
module HamlParser
module_function

def target?(file)
File.extname(file) == '.haml'
end

def parse(file, msgids = [])
return msgids unless prepare_haml_parsing
text = File.read(file)
code = Haml::Engine.new(text).precompiled()
RubyGettextExtractor.parse_string(code, file, msgids)
rescue Racc::ParseError => e
$stderr.puts "file ignored: ruby_parser cannot read haml files with 1.9 syntax --- (#{e.message})"
return msgids
class HamlParser < BaseParser
def self.extension
"haml"
end

def prepare_haml_parsing
return true if @haml_loaded

begin
require "#{::Rails.root.to_s}/vendor/plugins/haml/lib/haml"
rescue LoadError
begin
require 'haml' # From gem
rescue LoadError
puts "A haml file was found, but haml library could not be found, so nothing will be parsed..."
return false
end
end

require 'gettext_i18n_rails/ruby_gettext_extractor'
@haml_loaded = true
def self.convert_to_code(text)
Haml::Engine.new(text).precompiled()
end
end
end
Expand Down
34 changes: 6 additions & 28 deletions lib/gettext_i18n_rails/hamlet_parser.rb
@@ -1,35 +1,13 @@
require 'gettext/tools'
begin
require 'gettext/tools/rgettext'
rescue LoadError #version prior to 2.0
require 'gettext/rgettext'
end
require 'gettext_i18n_rails/base_parser'

module GettextI18nRails
module HamletParser
module_function

def target?(file)
File.extname(file) == '.hamlet'
end

def parse(file, msgids = [])
return msgids unless prepare_hamlet_parsing
text = File.read(file)
code = Hamlet::Engine.new.call(text)
RubyGettextExtractor.parse_string(code, file, msgids)
class HamletParser < BaseParser
def self.extension
"hamlet"
end

def prepare_hamlet_parsing
return true if @hamlet_loaded
begin
require 'hamlet'
rescue LoadError
puts "A hamlet file was found, but hamlet library could not be found, so nothing will be parsed..."
return false
end
require 'gettext_i18n_rails/ruby_gettext_extractor'
@hamlet_loaded = true
def self.convert_to_code(text)
Hamlet::Engine.new.call(text)
end
end
end
Expand Down
34 changes: 6 additions & 28 deletions lib/gettext_i18n_rails/slim_parser.rb
@@ -1,35 +1,13 @@
require 'gettext/tools'
begin
require 'gettext/tools/rgettext'
rescue LoadError #version prior to 2.0
require 'gettext/rgettext'
end
require 'gettext_i18n_rails/base_parser'

module GettextI18nRails
module SlimParser
module_function

def target?(file)
File.extname(file) == '.slim'
end

def parse(file, msgids = [])
return msgids unless prepare_slim_parsing
text = File.read(file)
code = Slim::Engine.new.call(text)
RubyGettextExtractor.parse_string(code, file, msgids)
class SlimParser < BaseParser
def self.extension
"slim"
end

def prepare_slim_parsing
return true if @slim_loaded
begin
require 'slim'
rescue LoadError
puts "A slim file was found, but slim library could not be found, so nothing will be parsed..."
return false
end
require 'gettext_i18n_rails/ruby_gettext_extractor'
@slim_loaded = true
def self.convert_to_code(text)
Slim::Engine.new.call(text)
end
end
end
Expand Down

0 comments on commit 5c6f695

Please sign in to comment.