merb_global 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Alex Coles, Ikonoklastik Productions
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,4 @@
1
+ = merb_global
2
+ == Localization (L10n) and Internationalization (i18n) support for the Merb MVC Framework
3
+
4
+ Please see README.markdown.
data/Rakefile ADDED
@@ -0,0 +1,68 @@
1
+ require 'rubygems'
2
+ require 'rake/gempackagetask'
3
+ require 'rake/rdoctask'
4
+ require 'spec/rake/spectask'
5
+
6
+ PLUGIN = "merb_global"
7
+ NAME = "merb_global"
8
+ GEM_VERSION = "0.0.1"
9
+ AUTHOR = "Alex Coles"
10
+ EMAIL = "alex@alexcolesportfolio.com"
11
+ HOMEPAGE = "http://github.com/myabc/merb_global/wikis"
12
+ SUMMARY = "Localization (L10n) and Internationalization (i18n) support for the Merb MVC Framework"
13
+
14
+ spec = Gem::Specification.new do |s|
15
+ s.name = NAME
16
+ s.version = GEM_VERSION
17
+ s.platform = Gem::Platform::RUBY
18
+ s.has_rdoc = true
19
+ s.extra_rdoc_files = ["README", "LICENSE", 'TODO']
20
+ s.summary = SUMMARY
21
+ s.description = s.summary
22
+ s.author = AUTHOR
23
+ s.email = EMAIL
24
+ s.homepage = HOMEPAGE
25
+ s.add_dependency('merb-core', '>= 0.9.1')
26
+ s.require_path = 'lib'
27
+ s.autorequire = PLUGIN
28
+ s.files = %w(LICENSE README Rakefile TODO) +
29
+ Dir.glob("{lib,specs,*_generators}/**/*")
30
+
31
+ # rdoc
32
+ s.has_rdoc = true
33
+ s.extra_rdoc_files = %w( README LICENSE TODO )
34
+ end
35
+
36
+ windows = (PLATFORM =~ /win32|cygwin/) rescue nil
37
+
38
+ SUDO = windows ? "" : "sudo"
39
+
40
+ Rake::GemPackageTask.new(spec) do |pkg|
41
+ pkg.gem_spec = spec
42
+ end
43
+
44
+ desc "Install merb_global"
45
+ task :install => [:package] do
46
+ sh %{#{SUDO} gem install pkg/#{NAME}-#{VERSION}}
47
+ end
48
+
49
+ Rake::RDocTask.new do |rd|
50
+ rd.rdoc_dir = "doc"
51
+ rd.rdoc_files.include "lib/**/*.rb"
52
+ end
53
+
54
+ desc "Run all specs"
55
+ Spec::Rake::SpecTask.new('specs') do |st|
56
+ st.libs = ['lib', 'spec']
57
+ st.spec_files = FileList['spec/**/*.rb']
58
+ st.spec_opts = ['--format specdoc', '--color']
59
+ end
60
+
61
+ desc "Run rcov"
62
+ Spec::Rake::SpecTask.new('rcov') do |rct|
63
+ rct.libs = ['lib', 'spec']
64
+ rct.rcov = true
65
+ rct.rcov_opts = ['-x gems', '-x usr', '-x spec']
66
+ rct.spec_files = FileList['spec/**/*.rb']
67
+ rct.spec_opts = ['--format specdoc', '--color']
68
+ end
data/TODO ADDED
@@ -0,0 +1,3 @@
1
+ = TODO
2
+
3
+ This list will be added shortly. The list of things to do is long.
@@ -0,0 +1,4 @@
1
+ Description:
2
+
3
+
4
+ Usage:
@@ -0,0 +1,28 @@
1
+ #<% if false %>
2
+ class Merb::Global::Providers::ActiveRecord
3
+ #<% end %>
4
+ class AddTranslationsMigration < ActiveRecord::Migration
5
+ def self.up
6
+ create_table :merb_global_languages do |t|
7
+ t.string :name, :limit => 16
8
+ t.string :plural, :size => 128
9
+ end
10
+ add_index :merb_global_languages, :name, :unique => true
11
+ create_table :merb_global_translations,
12
+ :id => false, :primary_key => [:language_id,
13
+ :msgid_hash,
14
+ :msgstr_index] do |t|
15
+ t.integer :language_id, :null => false
16
+ t.integer :msgid_hash, :null => false
17
+ t.text :msgstr, :null => false
18
+ t.integer :msgstr_index, :null => false
19
+ end
20
+ end
21
+ def self.down
22
+ drop_table :merb_global_languages
23
+ drop_table :merb_global_translations
24
+ end
25
+ end
26
+ #<% if false %>
27
+ end
28
+ #<% end %>
@@ -0,0 +1,29 @@
1
+ class TranslationMigrationGenerator < Merb::GeneratorBase
2
+ def initialize runtime_args, runtime_options = {}
3
+ runtime_args.push ""
4
+ super
5
+ @name = 'translations'
6
+ end
7
+ def mainfest
8
+ record do |m|
9
+ m.directory 'schema/migrations'
10
+ highest_migration = Dir[Dir.pwd+'/schema/migrations/*'].map do |f|
11
+ File.basename(f) =~ /^(\d+)/
12
+ $1
13
+ end.max
14
+ filename = format "%03d_%s", (highest_migration.to_i+1), @name.snake_case
15
+ m.template "translation_migration.erb",
16
+ "schema/migrations/#{filename}.rb"
17
+ puts banner
18
+ end
19
+ end
20
+
21
+ protected :banner
22
+ def banner
23
+ <<-EOS
24
+ A migration to add translation tables to your database has been created.
25
+ Run 'rake sequel:db:migrate' to add the translations migration to your database.
26
+
27
+ EOS
28
+ end
29
+ end
@@ -0,0 +1,45 @@
1
+ require 'merb_global/plural'
2
+ require 'merb_global/provider'
3
+ require 'merb_global/providers'
4
+
5
+ module Merb
6
+ module Global
7
+ attr_accessor :lang, :provider
8
+ def lang #:nodoc:
9
+ @lang ||= "en"
10
+ end
11
+ def provider #:nodoc:
12
+ @provider ||= Merb::Global::Providers.provider
13
+ end
14
+ # call-seq:
15
+ # _(singular, opts) => translated
16
+ # _(singlular, plural, opts) => translated
17
+ #
18
+ # Translate a string.
19
+ # ==== Parameters
20
+ # singular<String>:: A string to translate
21
+ # plural<String>:: A plural form of string
22
+ # opts<Hash>:: An options hash (see below)
23
+ #
24
+ # ==== Options (opts)
25
+ # :lang<String>:: A language to translate on
26
+ # :n<Fixnum>:: A number of objects
27
+ #
28
+ # ==== Returns
29
+ # translated<String>:: A translated string
30
+ #
31
+ # ==== Example
32
+ # <tt>render _("%d file deleted", "%d files deleted", :n => del) % del</tt>
33
+ def _(*args)
34
+ opts = {:lang => self.lang, :n => 1}
35
+ opts.merge! args.pop if args.last.is_a? Hash
36
+ if args.size == 1
37
+ self.provider.translate_to args[0], args[0], opts
38
+ elsif args.size == 2
39
+ self.provider.translate_to args[0], args[1], opts
40
+ else
41
+ raise ArgumentError, "wrong number of arguments (#{args.size} for 1-2)"
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,28 @@
1
+ require 'merb_global/base'
2
+
3
+ module Merb
4
+ class Controller #:nodoc:
5
+ include Merb::Global
6
+ before do
7
+ accept_language = self.request.env['HTTP_ACCEPT_LANGUAGE']
8
+ self.lang = "en"
9
+ unless accept_language.nil?
10
+ accept_language = accept_language.split(',')
11
+ accept_language.collect! {|lang| lang.delete " " "\n" "\r" "\t"}
12
+ accept_language.reject! {|lang| lang.empty?}
13
+ accept_language.collect! {|lang| lang.split ';q='}
14
+ accept_language.collect! do |lang|
15
+ if lang.size == 1
16
+ [lang[0], 1.0]
17
+ else
18
+ [lang[0], lang[1].to_f]
19
+ end
20
+ end
21
+ accept_language.sort! {|lang_a, lang_b| lang_a[1] <=> lang_b[1]}
22
+ accept_language.collect! {|lang| lang[0]}
23
+ accept_language.reject! {|lang| not self.provider.support? lang}
24
+ self.lang = accept_language.last unless accept_language.empty?
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,10 @@
1
+ namespace :merb_global do
2
+ task :merb_start do
3
+ Merb.start_environment :adapter => 'runner',
4
+ :environment => ENV['MERB_ENV'] || 'development'
5
+ end
6
+ desc "create migration"
7
+ task :migration => :merb_start do
8
+ Merb::Global::Providers.provider.create!
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ module Merb
2
+ module Global
3
+ module Plural
4
+ # Returns which form should be returned
5
+ # ==== Parameters
6
+ # n<Fixnum>:: A number of elements
7
+ # plural<String>:: Expression
8
+ # ==== Returns
9
+ # Fixnum:: Which form should be translated
10
+ def self.which_form(n, plural)
11
+ eval plural
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,62 @@
1
+ module Merb
2
+ module Global
3
+ # Merb-global is able to store the translations in different types of
4
+ # storage. An interface betwean merb-global and those storages are
5
+ # providers.
6
+ class Provider
7
+ # call-seq:
8
+ # translate_to(singular, plural, opts) => translated
9
+ #
10
+ # Translate string using specific provider.
11
+ # It should be overloaded by the implementator.
12
+ #
13
+ # Do not use this method directly - use Merb::Global._ instead
14
+ #
15
+ # ==== Parameters
16
+ # singular<String>:: A string to translate
17
+ # plural<String>:: A plural form of string
18
+ # opts<Hash>:: An options hash (see below)
19
+ #
20
+ # ==== Options (opts)
21
+ # :lang<String>:: A language to translate on
22
+ # :n<Fixnum>:: A number of objects
23
+ #
24
+ # ==== Returns
25
+ # translated<String>:: A translated string
26
+ #
27
+ # ==== Raises
28
+ # NoMethodError:: Raised by default implementation. Should not be thrown.
29
+ def translate_to(singular, plural, opts)
30
+ raise NoMethodError.new('method translate_to has not been implemented')
31
+ end
32
+
33
+ # call-seq:
34
+ # support?(lang) => supported
35
+ #
36
+ # Checks if the language is supported (i.e. if the translation exists).
37
+ #
38
+ # In normal merb app the language is checked automatically in controller
39
+ # so probably you don't have to use this method
40
+ #
41
+ # ==== Parameters
42
+ # lang<String>:: A code of language
43
+ #
44
+ # ==== Returns
45
+ # supported<Boolean>:: Is a program translated to this language
46
+ #
47
+ # ==== Raises
48
+ # NoMethodError:: Raised by default implementation. Should not be thrown.
49
+ def support?(lang)
50
+ raise NoMethodError.new('method support? has not been implemented')
51
+ end
52
+
53
+ # This method creates basic files and/or directory structures
54
+ # (for example it adds migration) needed for provider to work.
55
+ #
56
+ # It is called from Rakefile.
57
+ def create!
58
+ raise NoMethodError.new('method create! has not been implemented')
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,46 @@
1
+ require 'activerecord'
2
+ # As far as I understend we need it to have compostie keys
3
+ # However it may be better idea to drop them.
4
+ # As far I implement it in this way - then we will see
5
+ require 'composite_primary_keys' # As far as I understend we need
6
+ require 'merb_global/plural'
7
+
8
+ module Merb
9
+ module Global
10
+ module Providers
11
+ class ActiveRecord < Merb::Global::Provider #:nodoc: all
12
+ def translate_to(singular, plural, opts)
13
+ language = Language.find :first,
14
+ :conditions => {:name => opts[:lang]}
15
+ unless language.nil?
16
+ n = Plural.which_form opts[:n], language.plural
17
+ translation = Translation.find [language.id, singular.hash, n]
18
+ return translation.msgstr
19
+ end rescue nil
20
+ return opts[:n] > 1 ? plural : singular # Fallback if not in database
21
+ end
22
+ def support?(lang)
23
+ Language.count(:conditions => {:name => lang}) != 0
24
+ end
25
+ def create!
26
+ migration_exists = Dir[File.join(Merb.root,"schema",
27
+ "migrations", "*.rb")].detect do |f|
28
+ f =~ /translations\.rb/
29
+ end
30
+ if migration_exists
31
+ puts "\nThe Translation Migration File already exists\n\n"
32
+ else
33
+ sh %{merb-gen translations_migration}
34
+ end
35
+ end
36
+ class Language < ::ActiveRecord::Base
37
+ set_table_name :merb_global_languages
38
+ end
39
+ class Translation < ::ActiveRecord::Base
40
+ set_table_name :merb_global_translations
41
+ set_primary_keys :language_id, :msgid_hash, :msgstr_index
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,52 @@
1
+ require 'data_mapper'
2
+ require 'merb_global/plural'
3
+
4
+ module Merb
5
+ module Global
6
+ module Providers
7
+ class DataMapper < Merb::Global::Provider #:nodoc: all
8
+ def translate_to(singular, plural, opts)
9
+ # I hope it's from MemCache
10
+ language = Language.first :name => opts[:lang]
11
+ unless language.nil?
12
+ n = Plural.which_form opts[:n], language.plural
13
+ translation = Translation.first :language_id => language.id,
14
+ :msgid_hash => singular.hash,
15
+ :msgstr_index => n
16
+ return translation.msgstr unless translation.nil?
17
+ end
18
+ # Fallback if not in database
19
+ return opts[:n] != 1 ? plural : singular
20
+ end
21
+ def support?(lang)
22
+ Language.count(:name => lang) != 0
23
+ end
24
+ def create!
25
+ Language.auto_migrate!
26
+ Translation.auto_migrate!
27
+ end
28
+ # When table structure becomes stable it *should* be documented
29
+ class Language < ::DataMapper::Base
30
+ set_table_name 'merb_global_languages'
31
+ property :name, :string, :index => true # It should be unique
32
+ property :plural, :text, :lazy => false
33
+ validates_uniqueness_of :name
34
+ end
35
+ class Translation < ::DataMapper::Base
36
+ set_table_name 'merb_global_translations'
37
+ property :language_id, :integer, :nullable => false, :key => true
38
+ # Sould it be propery :msgid, :text?
39
+ # This form should be faster. However:
40
+ # - collision may appear (despite being unpropable)
41
+ # - it may be wrong optimalisation
42
+ # As far I'll leave it in this form. If anybody could measure the
43
+ # speed of both methods it will be appreciate.
44
+ property :msgid_hash, :integer, :nullable => false, :key => true
45
+ property :msgstr, :text, :nullable => false, :lazy => false
46
+ property :msgstr_index, :integer, :nullable => false, :key => true
47
+ #belongs_to :language
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,36 @@
1
+ require 'gettext'
2
+
3
+ # I'm not sure if it is the correct way of doing it.
4
+ # As far it seems to be simpler.
5
+ class Thread #:nodoc:
6
+ def gettext_context
7
+ @gettext_context ||= Merb::Global::Providers::Gettext::GettextContext.new
8
+ end
9
+ end
10
+
11
+ module Merb
12
+ module Global
13
+ module Providers
14
+ class Gettext < Merb::Global::Provider #:nodoc: all
15
+ def translate_to(singular, plural, opts)
16
+ context = Thread.current.gettext_context
17
+ context.set_locale opts[:lang], true
18
+ context.ngettext(singular, plural, opts[:n])
19
+ end
20
+ def support?(lang)
21
+ puts File.join(Merb::Global::Providers.localedir, lang)
22
+ File.exist? File.join(Merb::Global::Providers.localedir, lang)
23
+ end
24
+ def create!
25
+ File.mkdirs Merb::Global::Providers.localedir
26
+ end
27
+ class GettextContext
28
+ include ::GetText
29
+ # Please change it to proper location
30
+ bindtextdomain "merbapp", Merb::Global::Providers.localedir
31
+ public :set_locale, :ngettext
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,17 @@
1
+ module Merb
2
+ module Global
3
+ module Providers
4
+ class Mock < Merb::Global::Provider #:nodoc:
5
+ def translate_to(singular, plural, opts)
6
+ opts[:n] > 1 ? plural : singular
7
+ end
8
+ def support?(lang)
9
+ true
10
+ end
11
+ def create!
12
+ nil # It's mock after all ;)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,39 @@
1
+ require 'sequel'
2
+ require 'merb_global/plural'
3
+
4
+ module Merb
5
+ module Global
6
+ module Providers
7
+ class Sequel < Merb::Global::Provider #:nodoc: all
8
+ def translate_to(singular, plural, opts)
9
+ language = Language[:name => opts[:lang]] # I hope it's from MemCache
10
+ unless language.nil?
11
+ n = Plural.which_form opts[:n], language.plural
12
+ translation = Translation[language.pk, singular.hash, n]
13
+ return translation.msgstr unless translation.nil?
14
+ end
15
+ return opts[:n] > 1 ? plural : singular # Fallback if not in database
16
+ end
17
+ def support?(lang)
18
+ Language.filter(:name => lang).count != 0
19
+ end
20
+ def create!
21
+ migration_exists = Dir[File.join(Merb.root,"schema",
22
+ "migrations", "*.rb")].detect do |f|
23
+ f =~ /translations\.rb/
24
+ end
25
+ if migration_exists
26
+ puts "\nThe Translation Migration File already exists\n\n"
27
+ else
28
+ sh %{merb-gen translations_migration}
29
+ end
30
+ end
31
+ class Language < ::Sequel::Model(:merb_global_languages)
32
+ end
33
+ class Translation < ::Sequel::Model(:merb_global_translations)
34
+ set_primary_key :language_id, :msgid_hash, :msgstr_index
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,46 @@
1
+ require 'yaml'
2
+
3
+ module Merb
4
+ module Global
5
+ module Providers
6
+ class Yaml < Merb::Global::Provider #:nodoc:
7
+ def initialize
8
+ # Not synchronized - make GC do it's work (may be not optimal
9
+ # but I don't think that some problem will occure).
10
+ # Shouldn't it be sort of cache with some expiration limit?
11
+ @lang = Hash.new
12
+ end
13
+ def translate_to(singular, plural, opts)
14
+ unless @lang.include? opts[:lang]
15
+ file = File.join Merb::Global::Providers.localedir,
16
+ opts[:lang] + '.yaml'
17
+ if File.exist? file
18
+ @lang[opts[:lang]] = YAML.load_file file
19
+ else
20
+ @lang[opts[:lang]] = nil
21
+ end
22
+ end
23
+ unless @lang[opts[:lang]].nil?
24
+ lang = @lang[opts[:lang]]
25
+ n = Merb::Global::Plural.which_form opts[:n], lang[:plural]
26
+ unless lang[singular].nil?
27
+ return lang[singular][n] unless lang[singular][n].nil?
28
+ end
29
+ end
30
+ return opts[:n] > 1 ? plural : singular
31
+ end
32
+ def support?(lang)
33
+ unless @lang.include? lang
34
+ file = File.join Merb::Global::Providers.localedir, lang + '.yaml'
35
+ @lang[lang] = YAML.load_file file if File.exist? file
36
+ end
37
+ not @lang[lang].nil?
38
+ end
39
+ def create!
40
+ require 'ftools'
41
+ File.mkdirs Merb::Global::Providers.localedir
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,52 @@
1
+ module Merb
2
+ module Global
3
+ module Providers
4
+ # call-seq:
5
+ # localedir => localdir
6
+ #
7
+ # Returns the directory where locales are stored for file-backended
8
+ # providers (such as gettext or yaml)
9
+ #
10
+ # ==== Returns
11
+ # localedir<String>>:: Directory where the locales are stored
12
+ def self.localedir
13
+ localedir = nil
14
+ unless Merb::Plugins.config[:merb_global].nil?
15
+ if not Merb::Plugins.config[:merb_global][:localedir].nil?
16
+ localedir = Merb::Plugins.config[:merb_global][:localedir]
17
+ elsif Merb::Plugins.config[:merb_global][:flat]
18
+ localedir = 'locale'
19
+ end
20
+ end
21
+ localedir ||= File.join('app', 'locale')
22
+ File.join Merb.root, localedir
23
+ end
24
+ # Is there a way to mark static methods as private?
25
+ @@provider_name = lambda do
26
+ provider = 'gettext'
27
+ unless Merb::Plugins.config[:merb_global].nil?
28
+ unless Merb::Plugins.config[:merb_global][:provider].nil?
29
+ provider = Merb::Plugins.config[:merb_global][:provider].to_s
30
+ end
31
+ end
32
+ return provider
33
+ end
34
+ @@provider_loading = lambda do |provider|
35
+ # Should it be like that or should the provider be renamed?
36
+ require 'merb_global/providers/' + provider
37
+ @@provider = eval "Merb::Global::Providers::#{provider.camel_case}.new"
38
+ end
39
+ @@provider_loading.call @@provider_name.call
40
+ # call-seq:
41
+ # provider => provider
42
+ #
43
+ # Returns the provider of required type
44
+ #
45
+ # ==== Returns
46
+ # provider<Provider>:: Returns provider
47
+ def self.provider
48
+ @@provider
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,6 @@
1
+ if defined? Merb::Plugins
2
+ require 'merb_global/base'
3
+ require 'merb_global/controller'
4
+
5
+ Merb::Plugins.add_rakefiles 'merb_global/rake'
6
+ end
@@ -0,0 +1,4 @@
1
+ Description:
2
+
3
+
4
+ Usage:
@@ -0,0 +1,25 @@
1
+ #<% if false %>
2
+ # This is quick hack to avoid naming confict in specs
3
+ class Merb::Global::Providers::Sequel
4
+ #<% end %>
5
+ class AddTranslationsMigration < Sequel::Migration
6
+ def up
7
+ create_table :merb_global_languages do
8
+ primary_key :id
9
+ varchar :name, :size => 16, :unique => true
10
+ varchar :plural, :size => 128
11
+ end
12
+ create_table :merb_global_translations do
13
+ foreign_key :language_id, :null => false, :key => true
14
+ integer :msgid_hash, :null => false, :key => true
15
+ text :msgstr, :null => false
16
+ integer :msgstr_index, :null => false, :key => true
17
+ end
18
+ end
19
+ def down
20
+ drop_table :merb_global_languages, :merb_global_translations
21
+ end
22
+ end
23
+ #<% if false %>
24
+ end
25
+ #<% end %>
@@ -0,0 +1,29 @@
1
+ class TranslationMigrationGenerator < Merb::GeneratorBase
2
+ def initialize runtime_args, runtime_options = {}
3
+ runtime_args.push ""
4
+ super
5
+ @name = 'translations'
6
+ end
7
+ def mainfest
8
+ record do |m|
9
+ m.directory 'schema/migrations'
10
+ highest_migration = Dir[Dir.pwd+'/schema/migrations/*'].map do |f|
11
+ File.basename(f) =~ /^(\d+)/
12
+ $1
13
+ end.max
14
+ filename = format "%03d_%s", (highest_migration.to_i+1), @name.snake_case
15
+ m.template "translation_migration.erb",
16
+ "schema/migrations/#{filename}.rb"
17
+ puts banner
18
+ end
19
+ end
20
+
21
+ protected :banner
22
+ def banner
23
+ <<-EOS
24
+ A migration to add translation tables to your database has been created.
25
+ Run 'rake sequel:db:migrate' to add the translations migration to your database.
26
+
27
+ EOS
28
+ end
29
+ end
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: merb_global
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Alex Coles
8
+ autorequire: merb_global
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-05-20 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: merb-core
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.9.1
23
+ version:
24
+ description: Localization (L10n) and Internationalization (i18n) support for the Merb MVC Framework
25
+ email: alex@alexcolesportfolio.com
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files:
31
+ - README
32
+ - LICENSE
33
+ - TODO
34
+ files:
35
+ - LICENSE
36
+ - README
37
+ - Rakefile
38
+ - TODO
39
+ - lib/merb_global
40
+ - lib/merb_global/plural.rb
41
+ - lib/merb_global/providers.rb
42
+ - lib/merb_global/provider.rb
43
+ - lib/merb_global/controller.rb
44
+ - lib/merb_global/base.rb
45
+ - lib/merb_global/merbrake.rb
46
+ - lib/merb_global/providers
47
+ - lib/merb_global/providers/yaml.rb
48
+ - lib/merb_global/providers/sequel.rb
49
+ - lib/merb_global/providers/gettext.rb
50
+ - lib/merb_global/providers/data_mapper.rb
51
+ - lib/merb_global/providers/mock.rb
52
+ - lib/merb_global/providers/active_record.rb
53
+ - lib/merb_global.rb
54
+ - sequel_generators/translations_migration
55
+ - sequel_generators/translations_migration/USAGE
56
+ - sequel_generators/translations_migration/translations_migration_generator.rb
57
+ - sequel_generators/translations_migration/templates
58
+ - sequel_generators/translations_migration/templates/translations_migration.erb
59
+ - activerecord_generators/translations_migration
60
+ - activerecord_generators/translations_migration/USAGE
61
+ - activerecord_generators/translations_migration/translations_migration_generator.rb
62
+ - activerecord_generators/translations_migration/templates
63
+ - activerecord_generators/translations_migration/templates/translations_migration.erb
64
+ has_rdoc: true
65
+ homepage: http://github.com/myabc/merb_global/wikis
66
+ post_install_message:
67
+ rdoc_options: []
68
+
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: "0"
76
+ version:
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: "0"
82
+ version:
83
+ requirements: []
84
+
85
+ rubyforge_project:
86
+ rubygems_version: 1.1.1
87
+ signing_key:
88
+ specification_version: 2
89
+ summary: Localization (L10n) and Internationalization (i18n) support for the Merb MVC Framework
90
+ test_files: []
91
+