poppycock 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/bin/poppycock ADDED
File without changes
data/lib/poppycock.rb ADDED
@@ -0,0 +1,26 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require 'yaml'
4
+
5
+ require 'poppycock/ext'
6
+ require 'poppycock/localize'
7
+
8
+ String.send(:include, Poppycock::StringExt)
9
+
10
+ module Poppycock
11
+ extend Localize
12
+
13
+ VERSION = '0.0.1'
14
+ DEFAULT_OPTIONS = {
15
+ :languages => File.join(Dir.pwd, 'languages'),
16
+ :default_language => :en
17
+ }
18
+
19
+ def self.options
20
+ @@options ||= DEFAULT_OPTIONS.dup
21
+ end
22
+
23
+ def self.setup(options = {})
24
+ self.options.merge!(options)
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ module Poppycock
2
+ module StringExt
3
+ def translate(*args)
4
+ return old_brackets(*args) unless args.first.is_a? Symbol
5
+ Poppycock.translate(self, args.shift, *args)
6
+ end
7
+
8
+ def self.included(base)
9
+ base.class_eval do
10
+ alias :old_brackets :[]
11
+ alias :[] :translate
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,62 @@
1
+ module Poppycock
2
+ module Localize
3
+ def current_language; @@current_language ||= Poppycock.options[:default_language] end
4
+
5
+ def current_language=(language)
6
+ load_languages! if Poppycock.options[:reload_languages]
7
+ @@current_language = language
8
+ end
9
+
10
+ def languages
11
+ (@@languages ||= load_languages!).keys
12
+ end
13
+
14
+ # do i need a list of reserved keys like gibberish? I DON'T KNOW!!
15
+ def translate(default, key, *args)
16
+ target = translations[key] || default
17
+ interpolate(target.dup, *args.dup)
18
+ end
19
+
20
+ def with_language(language, &block)
21
+ tmp = current_language
22
+ self.current_language = language
23
+ yield
24
+ self.current_language = tmp
25
+ end
26
+
27
+ private
28
+ def translations
29
+ @@languages[current_language] || {}
30
+ end
31
+
32
+ def interpolate(string, *args)
33
+ if args.last.is_a? Hash
34
+ hash_interpolate(string, args.last)
35
+ else
36
+ string_interpolate(string, args)
37
+ end
38
+ end
39
+
40
+ def hash_interpolate(string, hash)
41
+ hash.inject(string) do |target, (search, replace)|
42
+ target.sub("{#{search}}", replace)
43
+ end
44
+ end
45
+
46
+ def string_interpolate(string, strings)
47
+ string.gsub(/\{\w+\}/) { strings.shift }
48
+ end
49
+
50
+ def language_files
51
+ Dir["#{Poppycock.options[:languages]}/**/*.lang.yaml"]
52
+ end
53
+
54
+ def load_languages!
55
+ language_files.inject({}) do |languages, file|
56
+ id = File.basename(file, '.lang.yaml').to_sym
57
+ languages[id] ||= {}
58
+ languages.update(id => YAML.load_file(file))
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,7 @@
1
+ require File.join(File.dirname(__FILE__), '../poppycock')
2
+
3
+ Merb.after_app_load do
4
+ Poppycock.setup({
5
+ :languages => File.join(Merb.root, 'languages')
6
+ })
7
+ end
@@ -0,0 +1 @@
1
+ :good_day: こんいちは
@@ -0,0 +1 @@
1
+ :good_day: God dag!
@@ -0,0 +1,48 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Poppycock::Localize do
4
+ before(:all) do
5
+ Poppycock.setup(:languages => File.join(File.dirname(__FILE__), 'fixtures'))
6
+ end
7
+
8
+ it 'should know which languages are available' do
9
+ Poppycock.languages.should include(:no, :ja)
10
+ end
11
+
12
+ it 'should translate simple strings' do
13
+ Poppycock.with_language(:no) do
14
+ "Good day!"[:good_day].should == "God dag!"
15
+ end
16
+ end
17
+
18
+ it "shouldn't barf on an unknown language" do
19
+ Poppycock.with_language(:es) do
20
+ "Good day!"[:good_day].should == "Good day!"
21
+ end
22
+ end
23
+
24
+ it "should handle those wacky unicodes" do
25
+ Poppycock.with_language(:ja) do
26
+ "Good day!"[:good_day].should == "こんいちは"
27
+ end
28
+ end
29
+
30
+ it 'should do string interpolation' do
31
+ "Good day {man}!"[:good_day, "YOU!"].should == "Good day YOU!!"
32
+ end
33
+
34
+ it 'should do hash interpolation' do
35
+ "I want {food} and {drink}!"[:empty, { :drink => "melon soda", :food => 'ramen'}].should == "I want ramen and melon soda!"
36
+ end
37
+
38
+ it "shouldn't normally reload the language files" do
39
+ Poppycock.should_not_receive(:load_languages!)
40
+ Poppycock.with_language(:ja) { nil }
41
+ end
42
+
43
+ it "should reload the language files when reloading is enabled" do
44
+ Poppycock.setup(:reload_languages => true)
45
+ Poppycock.should_receive(:load_languages!).twice # Once when going japanese, once after teh block
46
+ Poppycock.with_language(:ja) { nil }
47
+ end
48
+ end
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Poppycock do
4
+ it 'should set the language path' do
5
+ Poppycock.setup(:languages => 'a path')
6
+ Poppycock.options[:languages].should == 'a path'
7
+ end
8
+ end
@@ -0,0 +1,2 @@
1
+ require File.dirname(__FILE__) + '/../lib/poppycock'
2
+ require 'spec'
@@ -0,0 +1,18 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe 'Poppycock::StringExt' do
4
+ before(:all) do
5
+ Poppycock.stub!(:translate)
6
+ end
7
+
8
+ it 'should call Poppycock.translate when called with a symbol' do
9
+ Poppycock.should_receive(:translate).with('A very important string', :hello, 5)
10
+ "A very important string"[:hello, 5]
11
+ end
12
+
13
+ it 'should call the old [] method when not called with a symbol' do
14
+ string = "abcde"
15
+ Poppycock.should_not_receive(:translate)
16
+ string[2].should == "c"[0]
17
+ end
18
+ end
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: poppycock
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - raspberry lemon
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-05-07 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: lemon@raspberry-style.net
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - bin/poppycock
26
+ - lib/poppycock
27
+ - lib/poppycock/ext.rb
28
+ - lib/poppycock/localize.rb
29
+ - lib/poppycock/merb.rb
30
+ - lib/poppycock.rb
31
+ - spec/fixtures
32
+ - spec/fixtures/ja.lang.yaml
33
+ - spec/fixtures/no.lang.yaml
34
+ - spec/localize_spec.rb
35
+ - spec/poppycock_spec.rb
36
+ - spec/spec_helper.rb
37
+ - spec/string_spec.rb
38
+ has_rdoc: false
39
+ homepage: ""
40
+ post_install_message:
41
+ rdoc_options: []
42
+
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ version:
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
56
+ version:
57
+ requirements: []
58
+
59
+ rubyforge_project:
60
+ rubygems_version: 1.1.1
61
+ signing_key:
62
+ specification_version: 2
63
+ summary: gibberish for merb...and other stuff
64
+ test_files: []
65
+