translateable 0.1.8 → 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.
- checksums.yaml +4 -4
- data/.github/workflows/tests.yml +48 -0
- data/README.md +1 -1
- data/gemfiles/7.0.gemfile +7 -0
- data/gemfiles/7.1.gemfile +6 -0
- data/gemfiles/7.2.gemfile +6 -0
- data/gemfiles/8.0.gemfile +6 -0
- data/lib/generators/translateable/migration_generator.rb +2 -17
- data/lib/generators/translateable/templates/migration.rb.erb +4 -4
- data/lib/translateable/version.rb +1 -1
- data/lib/translateable.rb +3 -4
- data/translateable.gemspec +5 -6
- metadata +20 -38
- data/.rubocop.yml +0 -18
- data/.travis.yml +0 -21
- data/gemfiles/4.2.gemfile +0 -7
- data/gemfiles/5.0.gemfile +0 -6
- data/gemfiles/5.2.gemfile +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: defd8be91545d9bcb09d295a8ae09c77c6d8ac54ee98750d0eb147aa7ac5fcca
|
4
|
+
data.tar.gz: 96cbd961acd362feed04bc5f64405c2972fe3449b68967fc8eb4f0a2db4ee70a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7322b573da75338d645a8d5f0b6d772eb9220207ea2bfccf05ef6f8ff918fe23f8dc96fa0bf6985c935d31dd4b43d6ab7b1a384e7a1cef3eb9c66449387dd2cb
|
7
|
+
data.tar.gz: 616042ff3c72df3d6626bc96b5e075d315f7745ac8824aa9852746184df10099946378c90397235ca399c2b6348d04a131715ad81b016d6fa7100452fb280c8d
|
@@ -0,0 +1,48 @@
|
|
1
|
+
name: CI Ruby
|
2
|
+
|
3
|
+
on: [push, pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
test:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
|
9
|
+
services:
|
10
|
+
postgres:
|
11
|
+
image: postgres
|
12
|
+
env:
|
13
|
+
POSTGRES_PASSWORD: postgres
|
14
|
+
# Set health checks to wait until postgres has started
|
15
|
+
options: >-
|
16
|
+
--health-cmd pg_isready
|
17
|
+
--health-interval 10s
|
18
|
+
--health-timeout 5s
|
19
|
+
--health-retries 5
|
20
|
+
ports:
|
21
|
+
# Maps tcp port 5432 on service container to the host
|
22
|
+
- 5432:5432
|
23
|
+
|
24
|
+
strategy:
|
25
|
+
fail-fast: false
|
26
|
+
matrix:
|
27
|
+
ruby-version: ['3.2', '3.3', '3.4']
|
28
|
+
gemfile: ['7.0', '7.1', '7.2', '8.0']
|
29
|
+
exclude:
|
30
|
+
- ruby-version: '3.4'
|
31
|
+
gemfile: '7.0'
|
32
|
+
|
33
|
+
steps:
|
34
|
+
- uses: actions/checkout@v4
|
35
|
+
- uses: ruby/setup-ruby@v1
|
36
|
+
with:
|
37
|
+
ruby-version: ${{ matrix.ruby-version }}
|
38
|
+
- run: bundle install
|
39
|
+
env: # $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
|
40
|
+
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
|
41
|
+
- run: bundle exec rspec
|
42
|
+
env: # $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
|
43
|
+
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
|
44
|
+
# The hostname used to communicate with the PostgreSQL service container
|
45
|
+
POSTGRES_HOST: localhost
|
46
|
+
# The default PostgreSQL port
|
47
|
+
POSTGRES_PORT: 5432
|
48
|
+
POSTGRES_PASSWORD: postgres
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Translateable
|
2
2
|
|
3
|
-
[](https://github.com/olegantonyan/translateable/actions/workflows/tests.yml)
|
4
4
|
[](https://badge.fury.io/rb/translateable)
|
5
5
|
|
6
6
|
Allows you to store text data in multiple languages with your ActiveRecord models. Similar to [globalize](https://github.com/globalize/globalize), but with a few differences:
|
@@ -0,0 +1,7 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'activerecord', '~> 7.0.0'
|
4
|
+
gem 'activesupport', '~> 7.0.0'
|
5
|
+
gem 'concurrent-ruby', '1.3.4' # https://stackoverflow.com/questions/79360526/uninitialized-constant-activesupportloggerthreadsafelevellogger-nameerror
|
6
|
+
|
7
|
+
gemspec path: '../'
|
@@ -10,30 +10,15 @@ if defined?(Rails)
|
|
10
10
|
argument :field_name, type: :string
|
11
11
|
argument :locale, type: :string, default: I18n.default_locale
|
12
12
|
|
13
|
-
# rubocop: disable Metrics/AbcSize
|
14
13
|
def create_migration_file
|
15
14
|
raise ArgumentError, "given locale #{locale} is not available, check I18n.available_locales" unless I18n.available_locales.include?(locale.to_sym)
|
16
|
-
migration_template('migration.rb.erb', "db/migrate/migrate_translateable_#{
|
17
|
-
migration_version: migration_version,
|
18
|
-
table_name: name,
|
19
|
-
field_name: field_name,
|
20
|
-
field_type: name.classify.constantize.columns_hash[field_name].type,
|
21
|
-
locale: locale)
|
15
|
+
migration_template('migration.rb.erb', "db/migrate/migrate_translateable_#{table_name}_#{field_name}.rb", migration_version: migration_version)
|
22
16
|
end
|
23
|
-
# rubocop: enable Metrics/AbcSize
|
24
17
|
|
25
18
|
private
|
26
19
|
|
27
|
-
def rails5?
|
28
|
-
Rails.version.start_with?('5')
|
29
|
-
end
|
30
|
-
|
31
20
|
def migration_version
|
32
|
-
|
33
|
-
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
|
34
|
-
else
|
35
|
-
''
|
36
|
-
end
|
21
|
+
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
|
37
22
|
end
|
38
23
|
end
|
39
24
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class MigrateTranslateable<%= table_name.
|
1
|
+
class MigrateTranslateable<%= table_name.capitalize + field_name.capitalize %> < ActiveRecord::Migration<%= migration_version %>
|
2
2
|
def change
|
3
3
|
reversible do |dir|
|
4
4
|
dir.up do
|
@@ -13,13 +13,13 @@ class MigrateTranslateable<%= table_name.camelize + field_name.camelize %> < Act
|
|
13
13
|
SQL
|
14
14
|
remove_column :<%= table_name %>, :<%= field_name %>
|
15
15
|
rename_column :<%= table_name %>, :<%= field_name + '_t' %>, :<%= field_name %>
|
16
|
-
<% if index_exists?(table_name, field_name) %>
|
16
|
+
<% if ActiveRecord::Base.connection.index_exists?(table_name, field_name) %>
|
17
17
|
add_index :<%= table_name %>, :<%= field_name %>, using: :gin
|
18
18
|
<% end %>
|
19
19
|
end
|
20
20
|
|
21
21
|
dir.down do
|
22
|
-
add_column :<%= table_name %>, :<%= field_name + '_t' %>,
|
22
|
+
add_column :<%= table_name %>, :<%= field_name + '_t' %>, :string, null: false, default: ''
|
23
23
|
execute <<-SQL
|
24
24
|
UPDATE <%= table_name %> AS m1
|
25
25
|
SET <%= field_name + '_t' %> = (
|
@@ -28,7 +28,7 @@ class MigrateTranslateable<%= table_name.camelize + field_name.camelize %> < Act
|
|
28
28
|
SQL
|
29
29
|
remove_column :<%= table_name %>, :<%= field_name %>
|
30
30
|
rename_column :<%= table_name %>, :<%= field_name + '_t' %>, :<%= field_name %>
|
31
|
-
<% if index_exists?(table_name, field_name) %>
|
31
|
+
<% if ActiveRecord::Base.connection.index_exists?(table_name, field_name) %>
|
32
32
|
add_index :<%= table_name %>, :<%= field_name %>
|
33
33
|
<% end %>
|
34
34
|
end
|
data/lib/translateable.rb
CHANGED
@@ -9,6 +9,8 @@ module Translateable
|
|
9
9
|
"#{attr}_translateable"
|
10
10
|
end
|
11
11
|
|
12
|
+
AttributeValue = Struct.new(:locale, :data)
|
13
|
+
|
12
14
|
module ClassMethods
|
13
15
|
def translateable(*attrs)
|
14
16
|
attrs.each do |attr|
|
@@ -23,7 +25,6 @@ module Translateable
|
|
23
25
|
return unless database_connection_exists?
|
24
26
|
attr = attr.to_s
|
25
27
|
raise ArgumentError, "no such column '#{attr}' in '#{name}' model" unless column_names.include?(attr)
|
26
|
-
raise ArgumentError, "'#{attr}' column must be of JSONB type" unless columns_hash[attr].type.to_s.casecmp('jsonb').zero?
|
27
28
|
end
|
28
29
|
|
29
30
|
def define_translateable_strong_params(*attrs)
|
@@ -38,7 +39,6 @@ module Translateable
|
|
38
39
|
false
|
39
40
|
end
|
40
41
|
|
41
|
-
# rubocop: disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
42
42
|
def define_translateable_methods(attr)
|
43
43
|
define_method("#{attr}_fetch_translateable") do
|
44
44
|
value = self[attr]
|
@@ -48,7 +48,7 @@ module Translateable
|
|
48
48
|
|
49
49
|
define_method(Translateable.translateable_attribute_by_name(attr)) do
|
50
50
|
value = send("#{attr}_fetch_translateable")
|
51
|
-
value.map { |k, v|
|
51
|
+
value.map { |k, v| AttributeValue.new(locale: k, data: v) }
|
52
52
|
end
|
53
53
|
|
54
54
|
define_method("#{attr}_translateable_attributes=") do |arg|
|
@@ -69,6 +69,5 @@ module Translateable
|
|
69
69
|
self[attr] = value
|
70
70
|
end
|
71
71
|
end
|
72
|
-
# rubocop: enable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
73
72
|
end
|
74
73
|
end
|
data/translateable.gemspec
CHANGED
@@ -18,13 +18,12 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = %w(lib)
|
20
20
|
|
21
|
-
spec.add_development_dependency 'bundler'
|
22
|
-
spec.add_development_dependency 'rake'
|
23
|
-
spec.add_development_dependency 'rspec'
|
24
|
-
spec.add_development_dependency 'rubocop'
|
21
|
+
spec.add_development_dependency 'bundler'
|
22
|
+
spec.add_development_dependency 'rake'
|
23
|
+
spec.add_development_dependency 'rspec'
|
25
24
|
|
26
|
-
spec.add_dependency 'activerecord', '>=
|
27
|
-
spec.add_dependency 'activesupport', '>=
|
25
|
+
spec.add_dependency 'activerecord', '>= 5.0'
|
26
|
+
spec.add_dependency 'activesupport', '>= 5.0'
|
28
27
|
spec.add_dependency 'i18n'
|
29
28
|
spec.add_dependency 'pg'
|
30
29
|
end
|
metadata
CHANGED
@@ -1,59 +1,44 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: translateable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oleg Antonyan
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-03-29 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: bundler
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
16
15
|
requirements:
|
17
|
-
- - "
|
16
|
+
- - ">="
|
18
17
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
18
|
+
version: '0'
|
20
19
|
type: :development
|
21
20
|
prerelease: false
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
23
22
|
requirements:
|
24
|
-
- - "
|
23
|
+
- - ">="
|
25
24
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
25
|
+
version: '0'
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
27
|
name: rake
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
30
29
|
requirements:
|
31
|
-
- - "
|
30
|
+
- - ">="
|
32
31
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
32
|
+
version: '0'
|
34
33
|
type: :development
|
35
34
|
prerelease: false
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
37
36
|
requirements:
|
38
|
-
- - "
|
37
|
+
- - ">="
|
39
38
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
39
|
+
version: '0'
|
41
40
|
- !ruby/object:Gem::Dependency
|
42
41
|
name: rspec
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '3.0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '3.0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rubocop
|
57
42
|
requirement: !ruby/object:Gem::Requirement
|
58
43
|
requirements:
|
59
44
|
- - ">="
|
@@ -72,28 +57,28 @@ dependencies:
|
|
72
57
|
requirements:
|
73
58
|
- - ">="
|
74
59
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
60
|
+
version: '5.0'
|
76
61
|
type: :runtime
|
77
62
|
prerelease: false
|
78
63
|
version_requirements: !ruby/object:Gem::Requirement
|
79
64
|
requirements:
|
80
65
|
- - ">="
|
81
66
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
67
|
+
version: '5.0'
|
83
68
|
- !ruby/object:Gem::Dependency
|
84
69
|
name: activesupport
|
85
70
|
requirement: !ruby/object:Gem::Requirement
|
86
71
|
requirements:
|
87
72
|
- - ">="
|
88
73
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
74
|
+
version: '5.0'
|
90
75
|
type: :runtime
|
91
76
|
prerelease: false
|
92
77
|
version_requirements: !ruby/object:Gem::Requirement
|
93
78
|
requirements:
|
94
79
|
- - ">="
|
95
80
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
81
|
+
version: '5.0'
|
97
82
|
- !ruby/object:Gem::Dependency
|
98
83
|
name: i18n
|
99
84
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,10 +115,9 @@ executables: []
|
|
130
115
|
extensions: []
|
131
116
|
extra_rdoc_files: []
|
132
117
|
files:
|
118
|
+
- ".github/workflows/tests.yml"
|
133
119
|
- ".gitignore"
|
134
120
|
- ".rspec"
|
135
|
-
- ".rubocop.yml"
|
136
|
-
- ".travis.yml"
|
137
121
|
- CODE_OF_CONDUCT.md
|
138
122
|
- Gemfile
|
139
123
|
- LICENSE.txt
|
@@ -141,9 +125,10 @@ files:
|
|
141
125
|
- Rakefile
|
142
126
|
- bin/console
|
143
127
|
- bin/setup
|
144
|
-
- gemfiles/
|
145
|
-
- gemfiles/
|
146
|
-
- gemfiles/
|
128
|
+
- gemfiles/7.0.gemfile
|
129
|
+
- gemfiles/7.1.gemfile
|
130
|
+
- gemfiles/7.2.gemfile
|
131
|
+
- gemfiles/8.0.gemfile
|
147
132
|
- lib/generators/translateable/migration_generator.rb
|
148
133
|
- lib/generators/translateable/templates/migration.rb.erb
|
149
134
|
- lib/translateable.rb
|
@@ -153,7 +138,6 @@ homepage: https://github.com/olegantonyan/translateable
|
|
153
138
|
licenses:
|
154
139
|
- MIT
|
155
140
|
metadata: {}
|
156
|
-
post_install_message:
|
157
141
|
rdoc_options: []
|
158
142
|
require_paths:
|
159
143
|
- lib
|
@@ -168,9 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
152
|
- !ruby/object:Gem::Version
|
169
153
|
version: '0'
|
170
154
|
requirements: []
|
171
|
-
|
172
|
-
rubygems_version: 2.7.3
|
173
|
-
signing_key:
|
155
|
+
rubygems_version: 3.6.2
|
174
156
|
specification_version: 4
|
175
157
|
summary: Allows to store text data in different languages.
|
176
158
|
test_files: []
|
data/.rubocop.yml
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
Style/Documentation:
|
2
|
-
Enabled: false
|
3
|
-
|
4
|
-
Metrics/LineLength:
|
5
|
-
Max: 162
|
6
|
-
|
7
|
-
Style/Lambda:
|
8
|
-
Enabled: false
|
9
|
-
|
10
|
-
Style/FrozenStringLiteralComment:
|
11
|
-
Enabled: false
|
12
|
-
|
13
|
-
Style/PercentLiteralDelimiters:
|
14
|
-
Enabled: false
|
15
|
-
|
16
|
-
Metrics/BlockLength:
|
17
|
-
Exclude:
|
18
|
-
- 'spec/**/*'
|
data/.travis.yml
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 2.2.2
|
4
|
-
- 2.5.0
|
5
|
-
|
6
|
-
gemfile:
|
7
|
-
- gemfiles/4.2.gemfile
|
8
|
-
- gemfiles/5.0.gemfile
|
9
|
-
- gemfiles/5.2.gemfile
|
10
|
-
|
11
|
-
script:
|
12
|
-
- bundle exec rspec
|
13
|
-
- bundle exec rubocop
|
14
|
-
|
15
|
-
before_install: gem install bundler
|
16
|
-
|
17
|
-
services:
|
18
|
-
- postgresql
|
19
|
-
|
20
|
-
addons:
|
21
|
-
postgresql: "9.4"
|
data/gemfiles/4.2.gemfile
DELETED
data/gemfiles/5.0.gemfile
DELETED