acts_as_translated 0.0.2 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4d64595d0a9517ba19cc3a8265e5a9e2fe24b43
4
- data.tar.gz: 3fb8bafa1b863462ac85296e23a4cae29d330794
3
+ metadata.gz: e7bcf85b91c371dc0de79182b7cc0ae764db8be7
4
+ data.tar.gz: d4bd339971fef7736eded1b1fbaae2261e2fdd6e
5
5
  SHA512:
6
- metadata.gz: 73632959c1a3838f70486ef1b177f85393405554344a22570659d5b8ce3447e45f8d18213961f87fcc4c8786ea214f3b035b16f0a4e0c159c4c06ce2ef864894
7
- data.tar.gz: ca3a0156fab58f916eeb33626cd892a089257b36613864ee0c544f2b8a983d8013da77c971984629722cd72ab963606113ef091087a5a6ad0bab040dc29e5cb5
6
+ metadata.gz: 7daf028af2e8b1d3244fd3a6613865a0dfe70e9a92c97397cfc3ef6504f8155147ec51d6cd6ed1436ff2a606f2b89472b91819feff7e4b2be399e5689252bc15
7
+ data.tar.gz: 4f6468e62efe8b5cd2e43d6eaafaec10dbcab1db039a1fa1be8fd069654a01cc4d790230e2f443ba37f5bc6f39ab566e032b949033b638f921b208961b45e70b
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ tmp
20
20
  *.o
21
21
  *.a
22
22
  mkmf.log
23
+ .ruby-version
data/README.md CHANGED
@@ -6,6 +6,7 @@ This acts_as extension allows easy attribute translation.
6
6
 
7
7
  Your migration file should look like this;
8
8
 
9
+ ```
9
10
  create_table :countries do |t|
10
11
  t.string :name_nl
11
12
  t.string :name_fr
@@ -13,36 +14,43 @@ create_table :countries do |t|
13
14
 
14
15
  t.timestamps
15
16
  end
17
+ ```
16
18
 
17
19
  Create a class;
18
20
 
21
+ ```
19
22
  class Country < ActiveRecord::Base
20
23
  acts_as_translated :name #, :default => :nl
21
24
  end
25
+ ```
22
26
 
23
27
  Use it in your views, controllers, ...
24
28
 
29
+ ```
25
30
  <% Country.all.each do |country| %>
26
31
  <%= country.name %>
27
32
  <% end %>
28
-
33
+ ```
29
34
 
30
35
  # Form Example
31
36
 
32
37
  Build a dynamic form that extends, based on the number of languages available;
33
38
 
34
- <% form_for @country do %>
39
+ ```
40
+ <%= form_for @country do %>
35
41
  ...
36
42
  <% @country.translated_fields_to_attributes.each do |attribute| %>
37
43
  <p><%= f.label attribute %><br/>
38
- <%= f.text_field attribute %></p>
44
+ <%= f.text_field attribute %></p>
39
45
  <% end %>
40
46
  ...
41
47
  <% end %>
42
-
48
+ ```
43
49
 
44
50
  # Install
45
51
 
46
52
  In your bundler Gemfile
47
53
 
48
- gem 'acts_as_translated'
54
+ ```
55
+ gem 'acts_as_translated'
56
+ ```
data/Rakefile CHANGED
@@ -1,2 +1,12 @@
1
+ #!/usr/bin/env rake
1
2
  require "bundler/gem_tasks"
2
3
 
4
+ require 'rake/testtask'
5
+
6
+ desc "Run the tests."
7
+ task :test do
8
+ $: << "lib" << "test"
9
+ Dir["test/*_test.rb"].each { |f| require f[5..-4] }
10
+ end
11
+
12
+ task :default => :test
@@ -1,6 +1,5 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
2
+ $:.push File.expand_path("../lib", __FILE__)
4
3
  require 'acts_as_translated/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
@@ -9,14 +8,18 @@ Gem::Specification.new do |spec|
9
8
  spec.authors = ["Stijn Mathysen"]
10
9
  spec.email = ["stijn@skylight.be"]
11
10
  spec.summary = %q{This acts_as extension allows easy attribute translation.}
12
- spec.homepage = ""
11
+ spec.homepage = "https://github.com/stijnster/acts_as_translated"
13
12
  spec.license = "MIT"
13
+ spec.description = %q{ActsAsTranslated is an acts_as for ActiveRecord that allows easy attribute translation.}
14
14
 
15
15
  spec.files = `git ls-files -z`.split("\x0")
16
16
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_development_dependency "bundler", "~> 1.6"
21
- spec.add_development_dependency "rake"
20
+ spec.add_dependency 'activerecord', '>= 3.0.0'
21
+
22
+ spec.add_development_dependency 'sqlite3', '~> 0'
23
+ spec.add_development_dependency 'rake', '~> 0'
24
+ spec.add_development_dependency 'minitest', '~> 5.8'
22
25
  end
@@ -1,16 +1,22 @@
1
- require "acts_as_translated/version"
1
+ require 'acts_as_translated/version'
2
+
2
3
 
3
4
  module ActsAsTranslated
5
+
6
+ require 'acts_as_translated/railtie' if defined? Rails::Railtie
7
+
4
8
  def self.included(base)
9
+
5
10
  class << base
6
11
  attr_accessor :language
7
12
  attr_accessor :translated_fields
8
13
  end
9
-
14
+
10
15
  base.extend(ClassMethods)
11
16
  end
12
17
 
13
18
  module ClassMethods
19
+
14
20
  def acts_as_translated(fields, options = {})
15
21
  self.language = options[:default] || 'en'
16
22
  self.translated_fields = Array.new if self.translated_fields.blank?
@@ -20,13 +26,15 @@ module ActsAsTranslated
20
26
  include InstanceMethods
21
27
  end
22
28
  end
29
+
23
30
  end
24
-
31
+
25
32
  module InstanceMethods
33
+
26
34
  def translated_field_exists(field)
27
35
  self.class.translated_fields.member?(field.to_sym) && attributes.member?("#{field}_#{self.class.language}")
28
36
  end
29
-
37
+
30
38
  def translated_fields_to_attributes
31
39
  result = Array.new
32
40
  self.class.translated_fields.each do |field|
@@ -36,22 +44,18 @@ module ActsAsTranslated
36
44
  end
37
45
  end
38
46
  end
39
-
47
+
40
48
  result.sort
41
49
  end
42
-
50
+
43
51
  def respond_to?(field, include_priv = false)
44
52
  return true if translated_field_exists(field)
45
53
  super
46
54
  end
47
-
55
+
48
56
  def method_missing(field, *args)
49
57
  return self["#{field}_#{self.class.language}".to_sym] if translated_field_exists(field)
50
58
  super
51
59
  end
52
60
  end
53
- end
54
-
55
- class ActiveRecord::Base
56
- include ActsAsTranslated
57
61
  end
@@ -0,0 +1,13 @@
1
+ module ActsAsTranslated
2
+
3
+ class Railtie < Rails::Railtie
4
+
5
+ initializer 'acts_as_translated.insert_into_active_record' do
6
+ ActiveSupport.on_load :active_record do
7
+ ActiveRecord::Base.send(:include, ActsAsTranslated)
8
+ end
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -1,3 +1,5 @@
1
1
  module ActsAsTranslated
2
- VERSION = '0.0.2'
2
+
3
+ VERSION = '0.0.5'
4
+
3
5
  end
@@ -1,31 +1,41 @@
1
- require 'test/unit'
2
-
3
- require 'rubygems'
4
- gem 'activerecord', '>= 1.15.4.7794'
1
+ require 'minitest/autorun'
2
+ require 'minitest/pride'
5
3
  require 'active_record'
4
+ require 'acts_as_translated'
5
+
6
+ ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
6
7
 
7
- require "#{File.dirname(__FILE__)}/../init"
8
+ def capture_stdout(&block)
9
+ real_stdout = $stdout
8
10
 
9
- ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
11
+ $stdout = StringIO.new
12
+ yield
13
+ $stdout.string
14
+ ensure
15
+ $stdout = real_stdout
16
+ end
10
17
 
11
18
  def setup_db
12
- ActiveRecord::Schema.define(:version => 1) do
13
- create_table :countries do |t|
14
- t.column :name_nl, :string
15
- t.column :name_fr, :string
16
- t.column :name_en, :string
17
- t.column :description_nl, :text
18
- t.column :description_fr, :text
19
- t.column :description_en, :text
20
- t.column :created_at, :datetime
21
- t.column :updated_at, :datetime
22
- t.column :position, :integer
19
+ capture_stdout do
20
+ ActiveRecord::Base.logger
21
+ ActiveRecord::Schema.define(:version => 1) do
22
+ create_table :countries do |t|
23
+ t.column :name_nl, :string
24
+ t.column :name_fr, :string
25
+ t.column :name_en, :string
26
+ t.column :description_nl, :text
27
+ t.column :description_fr, :text
28
+ t.column :description_en, :text
29
+ t.column :created_at, :datetime
30
+ t.column :updated_at, :datetime
31
+ t.column :position, :integer
32
+ end
23
33
  end
24
34
  end
25
35
  end
26
36
 
27
37
  def fixtures(filename)
28
- records = YAML.load_file("#{filename}.yml")
38
+ records = YAML.load_file(File.join(__dir__, "#{filename}.yml"))
29
39
  records.each do |key, record|
30
40
  Country.create!(record)
31
41
  end
@@ -38,13 +48,16 @@ def teardown_db
38
48
  end
39
49
 
40
50
  class Country < ActiveRecord::Base
51
+ include ActsAsTranslated
52
+
41
53
  acts_as_translated :name
42
54
  acts_as_translated :description
43
-
44
- default_scope :order => 'position'
45
55
  end
46
56
 
47
- class TranslatedTest < Test::Unit::TestCase
57
+
58
+
59
+ class ActsAsTranslatedTest < Minitest::Test
60
+
48
61
  def setup
49
62
  setup_db
50
63
  fixtures :countries
@@ -54,29 +67,33 @@ class TranslatedTest < Test::Unit::TestCase
54
67
  teardown_db
55
68
  end
56
69
 
70
+ def test_version
71
+ refute_nil ActsAsTranslated::VERSION
72
+ end
73
+
57
74
  def test_fixtures
58
75
  assert_equal 2, Country.count
59
76
  assert_equal 'Belgium', Country.first.name_en
60
77
  assert_equal 'Netherlands', Country.last.name_en
61
78
  end
62
79
 
63
- def test_translated_name
80
+ def test_translated_attributes
64
81
  @belgium = Country.first
65
82
  @netherlands = Country.last
66
-
83
+
67
84
  # test default language
68
85
  assert_equal 'Belgium', @belgium.name
69
86
  assert_equal 'Netherlands', @netherlands.name
70
87
  assert_equal 'Kingdom of Belgium', @belgium.description
71
88
  assert_equal 'Kingdom of the Netherlands', @netherlands.description
72
-
89
+
73
90
  # change language to dutch
74
91
  Country.language = 'nl'
75
92
  assert_equal 'België', @belgium.name
76
93
  assert_equal 'Nederland', @netherlands.name
77
94
  assert_equal 'Koninkrijk België', @belgium.description
78
95
  assert_equal 'Koninkrijk der Nederlanden', @netherlands.description
79
-
96
+
80
97
  # change language to french
81
98
  Country.language = 'fr'
82
99
  assert_equal 'Belgique', @belgium.name
@@ -91,4 +108,14 @@ class TranslatedTest < Test::Unit::TestCase
91
108
  assert_equal 'Kingdom of Belgium', @belgium.description
92
109
  assert_equal 'Kingdom of the Netherlands', @netherlands.description
93
110
  end
111
+
112
+ def test_class_helpers
113
+ @country = Country.first
114
+
115
+ assert @country.translated_field_exists('name')
116
+ refute @country.translated_field_exists('position')
117
+
118
+ assert_equal %w(description_en description_fr description_nl name_en name_fr name_nl), @country.translated_fields_to_attributes
119
+ end
120
+
94
121
  end
@@ -6,7 +6,6 @@ belgium:
6
6
  description_fr: Royaume de Belgique
7
7
  description_en: Kingdom of Belgium
8
8
  position: 1
9
-
10
9
  holland:
11
10
  name_nl: Nederland
12
11
  name_fr: Pays-Bas
metadata CHANGED
@@ -1,44 +1,73 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_translated
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stijn Mathysen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-29 00:00:00.000000000 Z
11
+ date: 2015-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: '1.6'
33
+ version: '0'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
- version: '1.6'
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - ">="
45
+ - - "~>"
32
46
  - !ruby/object:Gem::Version
33
47
  version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - ">="
52
+ - - "~>"
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
- description:
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '5.8'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '5.8'
69
+ description: ActsAsTranslated is an acts_as for ActiveRecord that allows easy attribute
70
+ translation.
42
71
  email:
43
72
  - stijn@skylight.be
44
73
  executables: []
@@ -52,10 +81,11 @@ files:
52
81
  - Rakefile
53
82
  - acts_as_translated.gemspec
54
83
  - lib/acts_as_translated.rb
84
+ - lib/acts_as_translated/railtie.rb
55
85
  - lib/acts_as_translated/version.rb
56
- - tests/countries.yml
57
- - tests/translated_test.rb
58
- homepage: ''
86
+ - test/acts_as_translated_test.rb
87
+ - test/countries.yml
88
+ homepage: https://github.com/stijnster/acts_as_translated
59
89
  licenses:
60
90
  - MIT
61
91
  metadata: {}
@@ -75,8 +105,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
105
  version: '0'
76
106
  requirements: []
77
107
  rubyforge_project:
78
- rubygems_version: 2.4.3
108
+ rubygems_version: 2.2.2
79
109
  signing_key:
80
110
  specification_version: 4
81
111
  summary: This acts_as extension allows easy attribute translation.
82
- test_files: []
112
+ test_files:
113
+ - test/acts_as_translated_test.rb
114
+ - test/countries.yml