gettext_test_log 0.2.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/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ group :dev do
4
+ gem 'rake'
5
+ gem 'rspec', '~>2'
6
+ gem 'jeweler'
7
+ end
@@ -0,0 +1,26 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.3)
5
+ git (1.2.5)
6
+ jeweler (1.6.4)
7
+ bundler (~> 1.0)
8
+ git (>= 1.2.5)
9
+ rake
10
+ rake (0.9.2)
11
+ rspec (2.6.0)
12
+ rspec-core (~> 2.6.0)
13
+ rspec-expectations (~> 2.6.0)
14
+ rspec-mocks (~> 2.6.0)
15
+ rspec-core (2.6.4)
16
+ rspec-expectations (2.6.0)
17
+ diff-lcs (~> 1.1.2)
18
+ rspec-mocks (2.6.0)
19
+
20
+ PLATFORMS
21
+ ruby
22
+
23
+ DEPENDENCIES
24
+ jeweler
25
+ rake
26
+ rspec (~> 2)
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+
3
+ task :default do
4
+ sh "bundle exec rspec spec"
5
+ end
6
+
7
+ begin
8
+ require 'jeweler'
9
+ Jeweler::Tasks.new do |gem|
10
+ gem.name = "gettext_test_log"
11
+ gem.summary = "Logs all gettext translations during test execution, to a GetText readable format"
12
+ gem.email = "grosser.michael@gmail.com"
13
+ gem.homepage = "http://github.com/grosser/#{gem.name}"
14
+ gem.authors = ["Michael Grosser"]
15
+ end
16
+
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler, or one of its dependencies, is not available. Install it with: gem install jeweler"
20
+ end
@@ -0,0 +1,69 @@
1
+ Problem
2
+ =======
3
+ - Finding all translations by parsing is impossible for dynamic calls
4
+ - often even static calls are not found
5
+ - some file formats do not have a gettext parser
6
+
7
+ Solution
8
+ ========
9
+ - log all translations during test execution
10
+ - write them to an parseable temp file
11
+ - use gettext:find / gettext:pack as usual
12
+ - missing translation = missing test, write tests!
13
+
14
+ This will only work with [FastGettext](http://github.com/grosser/fast_gettext) and RSpec for now!
15
+
16
+ Install
17
+ =======
18
+ - `rails plugin install git://github.com/grosser/gettext_test_log.git `
19
+ - Gem: `gem install gettext_test_log`
20
+
21
+ Usage
22
+ =====
23
+ rake gettext:test_log
24
+
25
+ Optionally copy+modify task with options:
26
+ :exclude_msgids_in_po_files=>[
27
+ 'some_po_file_that_contains_translations_you_do_not_need.po'
28
+ ]
29
+
30
+ Add to your spec_helper:
31
+ #spec/spec_helper.rb
32
+ GettextTestLog::activate_test_logging
33
+
34
+ Run:
35
+ rake gettext:test_log
36
+ rake gettext:find #find new translations
37
+ #fill newly found translations
38
+ rake gettext:pack #write translations
39
+
40
+ Examples output
41
+ ===============
42
+ #locale/testlog_phrases.rb
43
+ _("Add to favorites")
44
+ _("Added a subtitle to %{name}")
45
+ _("Additional Information")
46
+ _("Address")
47
+ ...
48
+
49
+ Unwanted translations
50
+ =====================
51
+ When using gettext_i18n_rails, most of the columns of a model will be translated during model tests
52
+ this can be annoying since normally no user will see them.
53
+ To disable this, add to `spec/spec_helper.rb` :
54
+ class ActiveRecord::Base
55
+ def self.human_attribute_name(attr)
56
+ attr.to_s
57
+ end
58
+ end
59
+
60
+ TODO
61
+ ====
62
+ - needs tests... :(
63
+ - make compatible with GetText and FastGettext at the same time ?
64
+
65
+ Author
66
+ ======
67
+ [Michael Grosser](http://grosser.it)<br/>
68
+ michael@grosser.it<br/>
69
+ Hereby placed under public domain, do what you want, just do not hold me accountable...
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.2.1
@@ -0,0 +1,42 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{gettext_test_log}
8
+ s.version = "0.2.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Michael Grosser"]
12
+ s.date = %q{2011-09-23}
13
+ s.email = %q{grosser.michael@gmail.com}
14
+ s.files = [
15
+ "Gemfile",
16
+ "Gemfile.lock",
17
+ "Rakefile",
18
+ "Readme.md",
19
+ "VERSION",
20
+ "gettext_test_log.gemspec",
21
+ "init.rb",
22
+ "lib/gettext_test_log.rb",
23
+ "lib/gettext_test_log/fast_gettext_stub.rb",
24
+ "spec/gettext_test_log_spec.rb",
25
+ "spec/spec_helper.rb",
26
+ "tasks/gettext_test_log.rake"
27
+ ]
28
+ s.homepage = %q{http://github.com/grosser/gettext_test_log}
29
+ s.require_paths = ["lib"]
30
+ s.rubygems_version = %q{1.6.2}
31
+ s.summary = %q{Logs all gettext translations during test execution, to a GetText readable format}
32
+
33
+ if s.respond_to? :specification_version then
34
+ s.specification_version = 3
35
+
36
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
37
+ else
38
+ end
39
+ else
40
+ end
41
+ end
42
+
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'gettext_test_log' if Rails.env.test?
@@ -0,0 +1,67 @@
1
+ module GettextTestLog
2
+ extend self
3
+ SEPERATOR = "\nNEXT-WORD\n"
4
+
5
+ # write to a given file, which msgids where found
6
+ # in the `rake updatepo` recogniseable format _("msgid")
7
+ def write_test_log(storage_file,options={})
8
+ messages = messages_from_test_run
9
+ if excluded = options[:exclude_msgids_in_po_files]
10
+ messages -= msgids_in_po_files(excluded)
11
+ end
12
+ store_messages(messages,storage_file)
13
+ end
14
+
15
+ # call this inside your spec_helper.rb
16
+ # to activate test message storage
17
+ def activate_test_logging
18
+ if ENV['LOG_GETTEXT']
19
+ require 'gettext_test_log/fast_gettext_stub'
20
+ Spec::Runner.configure do |config|
21
+ #TODO only call after the 'last' test was executed
22
+ config.after(:all) do
23
+ File.open(ENV['LOG_GETTEXT'],'w') do |f|
24
+ f.puts FastGettext::Translation::TRANSLATIONS_USED * SEPERATOR
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def messages_from_test_run
34
+ logfile = 'tmp_gettext_test_log.txt'
35
+ run_tests(logfile)
36
+ ids = used_msgids(logfile)
37
+ `rm #{logfile}`
38
+ ids
39
+ end
40
+
41
+ def used_msgids(logfile)
42
+ File.read(logfile).split(/#{SEPERATOR}/m).map(&:strip).reject(&:blank?).uniq
43
+ end
44
+
45
+ def run_tests(logfile)
46
+ ENV['LOG_GETTEXT']=logfile
47
+ Rake::Task["spec"].invoke rescue nil
48
+ end
49
+
50
+ def msgids_in_po_files(files)
51
+ [*files].map{|file| messages_from_po_file(file).keys}.flatten
52
+ end
53
+
54
+ #returns a hash of all msgid => msgstr
55
+ def messages_from_po_file(file)
56
+ require 'fast_gettext/po_file'
57
+ FastGettext::PoFile.conver_to_mo(file).instance_variable_get('@data')
58
+ end
59
+
60
+ def store_messages(messages,file)
61
+ File.open(file,'w') do |f|
62
+ f.puts "#GENERATED FILE DO NOT MODIFY"
63
+ f.puts messages.uniq.sort.map{|message| %Q[_("#{message}")].gsub("\n","\\n")} * "\n"
64
+ f.puts "#GENERATED FILE DO NOT MODIFY"
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,15 @@
1
+ module FastGettext::Translation
2
+ TRANSLATIONS_USED = []
3
+
4
+ def __with_log(x)
5
+ TRANSLATIONS_USED << x
6
+ __without_log(x)
7
+ end
8
+ alias_method_chain :_, :log
9
+
10
+ def s__with_log(x)
11
+ TRANSLATIONS_USED << x
12
+ s__without_log(x)
13
+ end
14
+ alias_method_chain :s_, :log
15
+ end
@@ -0,0 +1,4 @@
1
+ require File.expand_path("spec_helper", File.dirname(__FILE__))
2
+
3
+ describe GettextTestLog do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'rspec'
2
+
3
+ $LOAD_PATH << File.expand_path("../lib", File.dirname(__FILE__))
4
+ require 'gettext_test_log'
@@ -0,0 +1,6 @@
1
+ namespace :gettext do
2
+ desc "write all msgids used into testlog_phrases.rb"
3
+ task :test_log => :environment do
4
+ GettextTestLog::write_test_log("locale/testlog_phrases.rb")
5
+ end
6
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gettext_test_log
3
+ version: !ruby/object:Gem::Version
4
+ hash: 21
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 1
10
+ version: 0.2.1
11
+ platform: ruby
12
+ authors:
13
+ - Michael Grosser
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-09-23 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description:
23
+ email: grosser.michael@gmail.com
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files: []
29
+
30
+ files:
31
+ - Gemfile
32
+ - Gemfile.lock
33
+ - Rakefile
34
+ - Readme.md
35
+ - VERSION
36
+ - gettext_test_log.gemspec
37
+ - init.rb
38
+ - lib/gettext_test_log.rb
39
+ - lib/gettext_test_log/fast_gettext_stub.rb
40
+ - spec/gettext_test_log_spec.rb
41
+ - spec/spec_helper.rb
42
+ - tasks/gettext_test_log.rake
43
+ has_rdoc: true
44
+ homepage: http://github.com/grosser/gettext_test_log
45
+ licenses: []
46
+
47
+ post_install_message:
48
+ rdoc_options: []
49
+
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ hash: 3
67
+ segments:
68
+ - 0
69
+ version: "0"
70
+ requirements: []
71
+
72
+ rubyforge_project:
73
+ rubygems_version: 1.6.2
74
+ signing_key:
75
+ specification_version: 3
76
+ summary: Logs all gettext translations during test execution, to a GetText readable format
77
+ test_files: []
78
+