poppycock 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/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
+