sequel_translatable 0.1.0

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,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
data/README.md ADDED
@@ -0,0 +1,53 @@
1
+ sequel_translatable
2
+ ===================
3
+
4
+ Translate model attributes for sequel.
5
+
6
+ Dependencies
7
+ ------------
8
+
9
+ * Ruby >= 1.9.2
10
+ * gem "i18n"
11
+ * gem "sequel"
12
+
13
+ Usage
14
+ -----
15
+
16
+ * Declare translatable attribute inside your model:
17
+
18
+ class MyModel < Sequel::Model
19
+ plugin :translatable, :value
20
+ end
21
+
22
+ * or for multiple attributes:
23
+
24
+ class MyModel < Sequel::Model
25
+ plugin :translatable, [:name, :value]
26
+ end
27
+
28
+ * then:
29
+
30
+ I18n.locale
31
+ -> :en
32
+ m = MyModel.new value_en: "Item", value_fr: "Objet"
33
+ m.value
34
+ -> "Item"
35
+ I18n.locale = :fr
36
+ m.value
37
+ -> "Objet"
38
+ I18n.locale = :en_master
39
+ m.value
40
+ -> "Item"
41
+ m.value = "Object"
42
+ m.all_values
43
+ -> {en: "Object", fr: "Objet"}
44
+
45
+ Build Status
46
+ ------------
47
+
48
+ [![Build Status](http://travis-ci.org/TalentBox/sequel_bitemporal.png)](http://travis-ci.org/TalentBox/sequel_translatable)
49
+
50
+ License
51
+ -------
52
+
53
+ sequel_translatable is Copyright © 2011 TalentBox SA. It is free software, and may be redistributed under the terms specified in the LICENSE file.
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ RSpec::Core::RakeTask.new("spec").tap do |config|
4
+ config.rspec_opts = "--color"
5
+ end
6
+ task :default => :spec
@@ -0,0 +1,40 @@
1
+ module Sequel
2
+ module Plugins
3
+ module Translatable
4
+ def self.configure(model, attributes = [])
5
+ attributes = [*attributes]
6
+ raise Error, "please specify attributes to use for translatable plugin" if attributes.empty?
7
+ attributes.each do |attribute|
8
+ model.class_eval <<-EOS, __FILE__, __LINE__
9
+ def #{attribute}=(value)
10
+ send "#{attribute}_\#{base_locale}=", value
11
+ end
12
+ def #{attribute}
13
+ send "#{attribute}_\#{base_locale}"
14
+ end
15
+ def #{attribute}_hash
16
+ @#{attribute}_columns ||= columns.collect do |column|
17
+ $1 if column=~/\\A#{Regexp.escape attribute}_(.+)\\z/
18
+ end.compact.sort.collect(&:to_sym)
19
+ hash = {}
20
+ @#{attribute}_columns.each do |column|
21
+ hash[column] = send "#{attribute}_\#{column}"
22
+ end
23
+ hash
24
+ end
25
+ EOS
26
+ end
27
+ end
28
+ module ClassMethods
29
+ end
30
+ module DatasetMethods
31
+ end
32
+ module InstanceMethods
33
+ private
34
+ def base_locale
35
+ I18n.locale.to_s[0..1]
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1 @@
1
+ require "sequel/plugins/translatable"
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "sequel_translatable"
6
+ s.version = "0.1.0"
7
+ s.authors = ["Joseph HALTER"]
8
+ s.email = ["joseph.halter@thetalentbox.com"]
9
+ s.homepage = "https://github.com/TalentBox/sequel_translatable"
10
+ s.summary = "Translate model attributes for sequel."
11
+ s.description = "Translate model attributes for sequel, fully tested."
12
+
13
+ s.files = `git ls-files`.split("\n")
14
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ s.require_paths = ["lib"]
17
+
18
+ s.add_development_dependency "sqlite3"
19
+ s.add_development_dependency "rspec"
20
+ s.add_runtime_dependency "i18n"
21
+ s.add_runtime_dependency "sequel"
22
+ end
@@ -0,0 +1,3 @@
1
+ require "i18n"
2
+ require "sequel"
3
+ DB = Sequel.sqlite
@@ -0,0 +1,54 @@
1
+ require "spec_helper"
2
+
3
+ describe "Sequel::Plugins::Translatable" do
4
+ before :all do
5
+ DB.create_table! :items do
6
+ primary_key :id
7
+ String :name_fr
8
+ String :name_en
9
+ String :value_fr
10
+ String :value_en
11
+ end
12
+ @klass = Class.new Sequel::Model do
13
+ set_dataset :items
14
+ end
15
+ end
16
+ after{ @klass.truncate }
17
+ it "checks at least one attribute is given" do
18
+ lambda{
19
+ @klass.plugin :translatable
20
+ }.should raise_error Sequel::Error, "please specify attributes to use for translatable plugin"
21
+ end
22
+ it "checks value isn't defined before plugin" do
23
+ @klass.new.should_not respond_to :value
24
+ end
25
+ it "allows defining a single attribute" do
26
+ @klass.plugin :translatable, :value
27
+ @klass.new.should respond_to :value
28
+ end
29
+ it "allows defining multiple attributes" do
30
+ @klass.plugin :translatable, [:name, :value]
31
+ @klass.new.should respond_to :name
32
+ @klass.new.should respond_to :value
33
+ end
34
+ it "gets value from current locale" do
35
+ I18n.locale = :en
36
+ @klass.plugin :translatable, :value
37
+ m = @klass.new value_en: "Items", value_fr: "Objets"
38
+ m.value.should == "Items"
39
+ I18n.locale = :fr
40
+ m.value.should == "Objets"
41
+ I18n.locale = :en_master
42
+ m.value.should == "Items"
43
+ I18n.locale = :nl
44
+ lambda{ m.value }.should raise_error NoMethodError
45
+ end
46
+ it "sets value from current locale" do
47
+ I18n.locale = :en
48
+ @klass.plugin :translatable, :value
49
+ m = @klass.new value_en: "Items", value_fr: "Objets"
50
+ m.value = "Objects"
51
+ m.value_en.should == "Objects"
52
+ m.value_hash.should == {en: "Objects", fr: "Objets"}
53
+ end
54
+ end
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sequel_translatable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Joseph HALTER
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-07 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sqlite3
16
+ requirement: &2157761100 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *2157761100
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &2157760660 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2157760660
36
+ - !ruby/object:Gem::Dependency
37
+ name: i18n
38
+ requirement: &2157760240 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *2157760240
47
+ - !ruby/object:Gem::Dependency
48
+ name: sequel
49
+ requirement: &2157759820 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *2157759820
58
+ description: Translate model attributes for sequel, fully tested.
59
+ email:
60
+ - joseph.halter@thetalentbox.com
61
+ executables: []
62
+ extensions: []
63
+ extra_rdoc_files: []
64
+ files:
65
+ - .gitignore
66
+ - Gemfile
67
+ - README.md
68
+ - Rakefile
69
+ - lib/sequel/plugins/translatable.rb
70
+ - lib/sequel_translatable.rb
71
+ - sequel_translatable.gemspec
72
+ - spec/spec_helper.rb
73
+ - spec/translatable_spec.rb
74
+ homepage: https://github.com/TalentBox/sequel_translatable
75
+ licenses: []
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ requirements: []
93
+ rubyforge_project:
94
+ rubygems_version: 1.8.6
95
+ signing_key:
96
+ specification_version: 3
97
+ summary: Translate model attributes for sequel.
98
+ test_files:
99
+ - spec/spec_helper.rb
100
+ - spec/translatable_spec.rb