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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9671e00730e7002e2b1efa1046531933be8008160c7e2828cf0ab7bdb0f17d39
4
- data.tar.gz: 9cf5dc7806bcdab742a5d07adc3729104ebb50d7e7ecf698854b07accafe616c
3
+ metadata.gz: defd8be91545d9bcb09d295a8ae09c77c6d8ac54ee98750d0eb147aa7ac5fcca
4
+ data.tar.gz: 96cbd961acd362feed04bc5f64405c2972fe3449b68967fc8eb4f0a2db4ee70a
5
5
  SHA512:
6
- metadata.gz: 1b2f821a94e70a8cb9e40cb17cb050720cd8a9d3bbc404824837925f556b5bb52368b06c2f2883ce645feef0072c16415e0da2ff36fd92898da2c16c7777ad26
7
- data.tar.gz: e6d5c9c9575d624e2a4860b059cbb8327f42c07747ad382b382cbd8176d5e429d40fc074233b41db237d23cfb709be91d2a8c7402aa8deabf647469e9c3df6c0
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
- [![Build Status](https://travis-ci.org/olegantonyan/translateable.svg)](https://travis-ci.org/olegantonyan/translateable)
3
+ [![CI Ruby](https://github.com/olegantonyan/translateable/actions/workflows/tests.yml/badge.svg)](https://github.com/olegantonyan/translateable/actions/workflows/tests.yml)
4
4
  [![Gem Version](https://badge.fury.io/rb/translateable.svg)](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: '../'
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'activerecord', '~> 7.1.0'
4
+ gem 'activesupport', '~> 7.1.0'
5
+
6
+ gemspec path: '../'
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'activerecord', '~> 7.2.0'
4
+ gem 'activesupport', '~> 7.2.0'
5
+
6
+ gemspec path: '../'
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'activerecord', '~> 8.0.0'
4
+ gem 'activesupport', '~> 8.0.0'
5
+
6
+ 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_#{name}_#{field_name}.rb",
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
- if rails5?
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.camelize + field_name.camelize %> < ActiveRecord::Migration<%= migration_version %>
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' %>, <%= field_type || ':string' %>, null: false, default: ''
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
@@ -1,3 +1,3 @@
1
1
  module Translateable
2
- VERSION = '0.1.8'.freeze
2
+ VERSION = '0.2.1'.freeze
3
3
  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| OpenStruct.new(locale: k, data: 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
@@ -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', '~> 1.11'
22
- spec.add_development_dependency 'rake', '~> 10.0'
23
- spec.add_development_dependency 'rspec', '~> 3.0'
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', '>= 4.2'
27
- spec.add_dependency 'activesupport', '>= 4.2'
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.8
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: 2018-06-02 00:00:00.000000000 Z
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: '1.11'
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: '1.11'
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: '10.0'
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: '10.0'
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: '4.2'
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: '4.2'
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: '4.2'
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: '4.2'
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/4.2.gemfile
145
- - gemfiles/5.0.gemfile
146
- - gemfiles/5.2.gemfile
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
- rubyforge_project:
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
@@ -1,7 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'activerecord', '~> 4.2.0'
4
- gem 'activesupport', '~> 4.2.0'
5
- gem 'pg', '~> 0.21'
6
-
7
- gemspec path: '../'
data/gemfiles/5.0.gemfile DELETED
@@ -1,6 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'activerecord', '~> 5.0.0.beta1'
4
- gem 'activesupport', '~> 5.0.0.beta1'
5
-
6
- gemspec path: '../'
data/gemfiles/5.2.gemfile DELETED
@@ -1,6 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'activerecord', '~> 5.2.0'
4
- gem 'activesupport', '~> 5.2.0'
5
-
6
- gemspec path: '../'