i18n_yaml_generator 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in i18n_yaml_generator.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,106 @@
1
+ # I18n yaml generator (for Rails 3)
2
+
3
+ ## Description
4
+
5
+ Creates yaml locale files for models and views when using the model / scaffold_controller generators.
6
+
7
+ Locale files are generated for all locales listed in I18n.available_locales.
8
+
9
+ #### Currently support ORMs
10
+
11
+ * ActiveRecord
12
+ * ActiveModel
13
+ * Mongoid
14
+
15
+ ## Usage
16
+
17
+ Add the gem to Gemfile
18
+
19
+ gem 'i18n_yaml_generator'
20
+
21
+ Make sure you have something like this in application.rb:
22
+
23
+ config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
24
+
25
+ ## Configuration
26
+
27
+ Create config/initializers/i18n_yaml_generators.rb
28
+
29
+ MyApplication::Application.config.i18n_yaml_generator.tap do |g|
30
+
31
+ # Whether content in the generated locale files should be commented out (default: false)
32
+ g.commented = true
33
+
34
+ end
35
+
36
+ ## Example
37
+
38
+ rails g scaffold Article title:string body:text
39
+ invoke active_record
40
+ create db/migrate/20110329004811_create_articles.rb
41
+ create app/models/article.rb
42
+ invoke test_unit
43
+ create test/unit/article_test.rb
44
+ create test/fixtures/articles.yml
45
+ invoke i18n_yaml
46
+ create config/locales/models/article.en.yml
47
+ route resources :articles
48
+ invoke scaffold_controller
49
+ create app/controllers/articles_controller.rb
50
+ invoke erb
51
+ create app/views/articles
52
+ create app/views/articles/index.html.erb
53
+ create app/views/articles/edit.html.erb
54
+ create app/views/articles/show.html.erb
55
+ create app/views/articles/new.html.erb
56
+ create app/views/articles/_form.html.erb
57
+ invoke test_unit
58
+ create test/functional/articles_controller_test.rb
59
+ invoke helper
60
+ create app/helpers/articles_helper.rb
61
+ invoke test_unit
62
+ create test/unit/helpers/articles_helper_test.rb
63
+ invoke i18n_yaml
64
+ create config/locales/views/articles.en.yml
65
+ invoke stylesheets
66
+ create public/stylesheets/scaffold.css
67
+
68
+ ### config/locales/models/article.en.yml
69
+
70
+ ---
71
+ en:
72
+ active_record:
73
+ models:
74
+ article: Article
75
+ attributes:
76
+ article:
77
+ title: Title
78
+ body: Body
79
+ errors:
80
+ article:
81
+ helpers:
82
+ article:
83
+
84
+ ### config/locales/views/articles.en.yml
85
+
86
+ ---
87
+ en:
88
+ articles:
89
+ index:
90
+ title: Articles
91
+ show:
92
+ title: Article
93
+ edit:
94
+ title: Editing Article
95
+ new:
96
+ title: New Article
97
+ flash:
98
+ articles:
99
+ create:
100
+ notice: "%{resource_name} was successfully created."
101
+ update:
102
+ notice: "%{resource_name} was successfully updated."
103
+ destroy:
104
+ notice: "%{resource_name} was successfully deleted."
105
+ alert: "%{resource_name} could not be deleted."
106
+
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "i18n_yaml_generator/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "i18n_yaml_generator"
7
+ s.version = I18nYamlGenerator::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Trym Skaar"]
10
+ s.email = ["ts@skalar.no"]
11
+ s.homepage = ""
12
+ s.summary = %q{Nuff said}
13
+ s.description = %q{Generates i18n yaml locale files for models and resources/views}
14
+
15
+ s.rubyforge_project = "i18n-yaml-generator"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+ end
@@ -0,0 +1,56 @@
1
+ module I18nYaml
2
+ module Generators #:nodoc:
3
+ class ModelGenerator < Rails::Generators::NamedBase #:nodoc:
4
+ class_option :orm, :required => true
5
+ class_option :commented, :default => Rails.application.config.i18n_yaml_generator.commented
6
+ argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
7
+
8
+ include Rails::Generators::ResourceHelpers
9
+ include I18nYamlGenerator::Helpers
10
+
11
+ SUPPORTED_ORMS = %w(active_record active_model mongoid)
12
+
13
+ def model_i18n_yaml_file
14
+ current_orm = options.orm.to_s
15
+
16
+ unless SUPPORTED_ORMS.include? current_orm
17
+ say "Not creating translation file - '#{current_orm}' not supported"
18
+ return
19
+ end
20
+
21
+ config = Rails.application.config.i18n_yaml_generator
22
+
23
+ I18n.available_locales.each do |locale|
24
+ hash_for_yaml = {}
25
+
26
+ # Model name
27
+ hash_for_yaml.deep_merge! wrap_hash(human_name, [current_orm, 'models'] + i18n_scope.split('.'))
28
+
29
+ # Attributes
30
+ hash_for_yaml.deep_merge! wrap_hash(attributes_hash, [current_orm, 'attributes'] + i18n_scope.split('.'))
31
+
32
+ # Errors
33
+ hash_for_yaml.deep_merge! wrap_hash({ singular_name => nil }, [current_orm, 'errors'])
34
+
35
+ # Helpers
36
+ hash_for_yaml.deep_merge! wrap_hash({ singular_name => nil }, ['helpers'])
37
+
38
+ yaml_content = { locale.to_s => hash_for_yaml }.to_yaml
39
+
40
+ destination_path = File.join('config/locales/models', "#{file_path}.#{locale}.yml")
41
+
42
+ create_file destination_path, options.commented ? comment_yaml_body(yaml_content) : yaml_content
43
+ end
44
+ end
45
+
46
+ protected
47
+
48
+ def attributes_hash
49
+ attributes.inject({}) { |hsh, a| hsh.merge(a.name => a.human_name) }
50
+ end
51
+
52
+ end
53
+ end
54
+ end
55
+
56
+
@@ -0,0 +1,49 @@
1
+ module I18nYaml
2
+ module Generators #:nodoc:
3
+ class ScaffoldControllerGenerator < Rails::Generators::NamedBase #:nodoc:
4
+ include Rails::Generators::ResourceHelpers
5
+ include I18nYamlGenerator::Helpers
6
+ class_option :commented, :default => Rails.application.config.i18n_yaml_generator.commented
7
+
8
+ def views_i18n_yaml_file
9
+ titles_hash = {
10
+ 'index' => { 'title' => "#{human_name.pluralize}" },
11
+ 'show' => { 'title' => human_name },
12
+ 'edit' => { 'title' => "Editing #{human_name}" },
13
+ 'new' => { 'title' => "New #{human_name}" }
14
+ }
15
+
16
+ flash_hash = {
17
+ 'create' => {
18
+ 'notice' => '%{resource_name} was successfully created.'
19
+ },
20
+ 'update' => {
21
+ 'notice' => '%{resource_name} was successfully updated.'
22
+ },
23
+ 'destroy' => {
24
+ 'notice' => '%{resource_name} was successfully deleted.',
25
+ 'alert' => '%{resource_name} could not be deleted.'
26
+ }
27
+ }
28
+
29
+ scope_array = controller_i18n_scope.split('.')
30
+
31
+ I18n.available_locales.each do |locale|
32
+ hash_for_yaml = {}
33
+
34
+ hash_for_yaml.deep_merge! wrap_hash(titles_hash, scope_array)
35
+ hash_for_yaml.deep_merge! wrap_hash(flash_hash, %w(flash) + scope_array)
36
+
37
+ yaml_content = { locale.to_s => hash_for_yaml }.to_yaml
38
+
39
+ destination_path = File.join('config/locales/views/', "#{controller_file_path}.#{locale}.yml")
40
+ create_file destination_path, options.commented ? comment_yaml_body(yaml_content) : yaml_content
41
+ end
42
+ end
43
+
44
+ end
45
+ end
46
+ end
47
+
48
+
49
+
@@ -0,0 +1,18 @@
1
+ module I18nYamlGenerator
2
+ Configuration = Struct.new(:commented)
3
+
4
+ class Railtie < ::Rails::Railtie
5
+ config.i18n_yaml_generator = I18nYamlGenerator::Configuration.new(false)
6
+
7
+ generators do
8
+ require 'i18n_yaml_generator/helpers'
9
+ require 'rails/generators/rails/scaffold_controller/scaffold_controller_generator'
10
+ require 'rails/generators/rails/model/model_generator'
11
+ Rails::Generators::ModelGenerator.send(:hook_for, :i18n_yaml)
12
+ Rails::Generators::ModelGenerator.send(:class_option, :i18n_yaml, :default => 'i18n_yaml')
13
+ Rails::Generators::ScaffoldControllerGenerator.send(:hook_for, :i18n_yaml)
14
+ Rails::Generators::ScaffoldControllerGenerator.send(:class_option, :i18n_yaml, :default => 'i18n_yaml')
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,18 @@
1
+ module I18nYamlGenerator
2
+ module Helpers
3
+ def wrap_hash(obj, scope)
4
+ hsh = nil
5
+ scope.reverse.each do |scope_node|
6
+ hsh = { scope_node => hsh || obj }
7
+ end
8
+ return hsh
9
+ end
10
+
11
+ def comment_yaml_body(string)
12
+ lines = string.lines.to_a
13
+ new_lines = lines[0..1] + lines[2..-1].collect{ |line| line.gsub(/^(.?)/, '#\1') }
14
+ new_lines.join
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,3 @@
1
+ module I18nYamlGenerator
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: i18n_yaml_generator
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Trym Skaar
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-05-02 00:00:00 +02:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: Generates i18n yaml locale files for models and resources/views
18
+ email:
19
+ - ts@skalar.no
20
+ executables: []
21
+
22
+ extensions: []
23
+
24
+ extra_rdoc_files: []
25
+
26
+ files:
27
+ - .gitignore
28
+ - Gemfile
29
+ - README.md
30
+ - Rakefile
31
+ - i18n_yaml_generator.gemspec
32
+ - lib/generators/i18n_yaml/model/model_generator.rb
33
+ - lib/generators/i18n_yaml/scaffold_controller/scaffold_controller_generator.rb
34
+ - lib/i18n_yaml_generator.rb
35
+ - lib/i18n_yaml_generator/helpers.rb
36
+ - lib/i18n_yaml_generator/version.rb
37
+ has_rdoc: true
38
+ homepage: ""
39
+ licenses: []
40
+
41
+ post_install_message:
42
+ rdoc_options: []
43
+
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: "0"
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ requirements: []
59
+
60
+ rubyforge_project: i18n-yaml-generator
61
+ rubygems_version: 1.6.2
62
+ signing_key:
63
+ specification_version: 3
64
+ summary: Nuff said
65
+ test_files: []
66
+