translate_enum 0.1.2 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e77857ff770931aacd8caa9d704f2678d6befd15cf830a33821fe6a594c61558
4
- data.tar.gz: 5741720d55c013d5b7490a56eecb5fccf9a7e60f53ff1c9e578939c651b2e44a
3
+ metadata.gz: 150acd115290af056b50713506f5a273ceac5404a61d9504afae6af9c29d7cc4
4
+ data.tar.gz: ccd7d29f340f1e336271ffd282a984a9e322639d5ddf4a381c3fa5eed49d0006
5
5
  SHA512:
6
- metadata.gz: 8eb9415674c8b1cb5d768243c10468ad5b57682501000beaf304fa3074e10d7ec06c55d71dbf6c0bb72024fb31af6b2ef73ecef2f9c51746a1e89450de2ff728
7
- data.tar.gz: 4d6556564500f1bf540b7b02359d2b15ee0422327a6ece5afd3d95650da1ed51a8542873bd8b9967ab933507f2480b9658c366982d85173a40e08645d72d7997
6
+ metadata.gz: 0abc8185f91ddcd8b7afee3492eeb812bc007a5af0bc969bb8a9d66a924b200d5dcfe555845e3700d7e59dc03db2ec882af31f2cb60c7b486f76e028919b0cff
7
+ data.tar.gz: ad53963f3780993a3d4b56c20006a8fc8fe4a7942b9157733635a2e714125abf4f3fcdb052a8dbc8d63c3000518c4d6e9b9e7a530201e731c3c8a6fd8eebe34f
@@ -0,0 +1,62 @@
1
+ name: CI
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ rspec:
7
+ runs-on: ubuntu-latest
8
+
9
+ strategy:
10
+ matrix:
11
+ ruby-version: [3.0, 2.7, 2.6]
12
+
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+
16
+ - name: Set up Ruby ${{ matrix.ruby-version }}
17
+ uses: ruby/setup-ruby@v1
18
+ with:
19
+ ruby-version: ${{ matrix.ruby-version }}
20
+
21
+ - name: Cache gems
22
+ uses: actions/cache@v1
23
+ with:
24
+ path: vendor/bundle
25
+ key: ${{ runner.os }}-${{ matrix.ruby-version }}-bundler-${{ hashFiles('**/Gemfile.lock') }}
26
+ restore-keys: |
27
+ ${{ runner.os }}-${{ matrix.ruby-version }}-bundler-
28
+
29
+ - name: Install gems
30
+ run: |
31
+ bundle config path vendor/bundle
32
+ bundle install --jobs 4 --retry 3
33
+
34
+ - name: Run tests
35
+ run: bundle exec rspec
36
+
37
+ rubocop:
38
+ runs-on: ubuntu-latest
39
+
40
+ steps:
41
+ - uses: actions/checkout@v2
42
+
43
+ - name: Set up Ruby
44
+ uses: ruby/setup-ruby@v1
45
+ with:
46
+ ruby-version: 3.0
47
+
48
+ - name: Cache gems
49
+ uses: actions/cache@v1
50
+ with:
51
+ path: vendor/bundle
52
+ key: ${{ runner.os }}-bundler-${{ hashFiles('**/Gemfile.lock') }}
53
+ restore-keys: |
54
+ ${{ runner.os }}-bundler-
55
+
56
+ - name: Install gems
57
+ run: |
58
+ bundle config path vendor/bundle
59
+ bundle install --jobs 4 --retry 3
60
+
61
+ - name: Run Rubocop
62
+ run: bundle exec rubocop
data/.rubocop.yml ADDED
@@ -0,0 +1,413 @@
1
+ require:
2
+ - rubocop-performance
3
+
4
+ AllCops:
5
+ AutoCorrect: false
6
+ SuggestExtensions: false
7
+ Exclude:
8
+ - 'click_house.gemspec'
9
+ - 'bin/*'
10
+ - 'spec/**/*'
11
+ - 'vendor/**/*'
12
+ TargetRubyVersion: 2.6
13
+ Bundler/OrderedGems:
14
+ Enabled: false
15
+
16
+ # ============================== Gemspec ======================
17
+ Gemspec/DeprecatedAttributeAssignment:
18
+ Enabled: true
19
+ Gemspec/RequireMFA: # new in 1.23
20
+ Enabled: true
21
+
22
+ # =============================== Performance =======================
23
+ Performance/AncestorsInclude:
24
+ Enabled: true
25
+ Performance/BigDecimalWithNumericArgument:
26
+ Enabled: true
27
+ Performance/RedundantSortBlock:
28
+ Enabled: true
29
+ Performance/RedundantStringChars:
30
+ Enabled: true
31
+ Performance/ReverseFirst:
32
+ Enabled: true
33
+ Performance/SortReverse:
34
+ Enabled: true
35
+ Performance/Squeeze:
36
+ Enabled: true
37
+ Performance/StringInclude:
38
+ Enabled: true
39
+ Performance/Sum:
40
+ Enabled: true
41
+ Performance/ArraySemiInfiniteRangeSlice:
42
+ Enabled: true
43
+ Performance/BlockGivenWithExplicitBlock:
44
+ Enabled: true
45
+ Performance/CollectionLiteralInLoop:
46
+ Enabled: true
47
+ Performance/ConstantRegexp:
48
+ Enabled: true
49
+ Performance/MethodObjectAsBlock:
50
+ Enabled: false
51
+ Performance/RedundantEqualityComparisonBlock:
52
+ Enabled: true
53
+ Performance/RedundantSplitRegexpArgument:
54
+ Enabled: true
55
+ Performance/MapCompact:
56
+ Enabled: true
57
+ Performance/ConcurrentMonotonicTime: # new in 1.12
58
+ Enabled: true
59
+ Performance/StringIdentifierArgument: # new in 1.13
60
+ Enabled: true
61
+
62
+ # ============================== Metrics ============================
63
+ Metrics/ClassLength:
64
+ Max: 180
65
+ Metrics/BlockLength:
66
+ Enabled: true
67
+ Metrics/MethodLength:
68
+ Max: 25
69
+ Metrics/AbcSize:
70
+ Max: 40
71
+
72
+ # ============================== Naming =============================
73
+ Naming/PredicateName:
74
+ ForbiddenPrefixes:
75
+ - is_
76
+ Naming/FileName:
77
+ Enabled: true
78
+ Exclude:
79
+ - 'Gemfile'
80
+ Naming/MethodParameterName:
81
+ Enabled: false
82
+ Naming/AccessorMethodName:
83
+ Enabled: false
84
+ Naming/InclusiveLanguage:
85
+ Enabled: true
86
+ Naming/BlockForwarding: # new in 1.24
87
+ Enabled: true
88
+
89
+ # ============================== Layout =============================
90
+ Layout/LineLength:
91
+ Max: 140
92
+ Layout/HashAlignment:
93
+ EnforcedHashRocketStyle: key
94
+ EnforcedColonStyle: key
95
+ Layout/ParameterAlignment:
96
+ EnforcedStyle: with_fixed_indentation
97
+ Layout/CaseIndentation:
98
+ EnforcedStyle: case
99
+ IndentOneStep: false
100
+ Layout/MultilineMethodCallIndentation:
101
+ Enabled: true
102
+ EnforcedStyle: indented
103
+ Layout/SpaceBeforeBlockBraces:
104
+ EnforcedStyle: space
105
+ EnforcedStyleForEmptyBraces: space
106
+ Layout/EmptyLines:
107
+ Enabled: true
108
+ Layout/EmptyLineAfterMagicComment:
109
+ Enabled: false
110
+ Layout/EmptyLinesAroundBlockBody:
111
+ Enabled: true
112
+ Layout/EndAlignment:
113
+ EnforcedStyleAlignWith: variable
114
+ Layout/FirstHashElementIndentation:
115
+ EnforcedStyle: consistent
116
+ Layout/HeredocIndentation:
117
+ Enabled: false
118
+ Layout/RescueEnsureAlignment:
119
+ Enabled: false
120
+ Layout/EmptyLinesAroundAttributeAccessor:
121
+ Enabled: true
122
+ Layout/SpaceAroundMethodCallOperator:
123
+ Enabled: true
124
+ Layout/SpaceBeforeBrackets:
125
+ Enabled: true
126
+ Layout/LineEndStringConcatenationIndentation:
127
+ Enabled: true
128
+ Layout/LineContinuationLeadingSpace: # new in 1.31
129
+ Enabled: true
130
+ Layout/LineContinuationSpacing: # new in 1.31
131
+ Enabled: true
132
+
133
+ # ============================== Style ==============================
134
+ Style/RescueModifier:
135
+ Enabled: true
136
+ Style/PercentLiteralDelimiters:
137
+ PreferredDelimiters:
138
+ default: '[]'
139
+ '%i': '[]'
140
+ '%w': '[]'
141
+ Exclude:
142
+ - 'config/routes.rb'
143
+ Style/StringLiterals:
144
+ Enabled: true
145
+ Style/AsciiComments:
146
+ Enabled: false
147
+ Style/Copyright:
148
+ Enabled: false
149
+ Style/SafeNavigation:
150
+ Enabled: false
151
+ Style/Lambda:
152
+ Enabled: false
153
+ Style/Alias:
154
+ Enabled: true
155
+ EnforcedStyle: prefer_alias_method
156
+ Style/ClassAndModuleChildren:
157
+ Enabled: true
158
+ EnforcedStyle: nested
159
+ Style/TrailingCommaInArrayLiteral:
160
+ Enabled: true
161
+ EnforcedStyleForMultiline: no_comma
162
+ Style/RescueStandardError:
163
+ Enabled: true
164
+ EnforcedStyle: explicit
165
+ Style/InverseMethods:
166
+ AutoCorrect: false
167
+ Enabled: true
168
+ Style/IfUnlessModifier:
169
+ Enabled: false
170
+ Style/SpecialGlobalVars:
171
+ Enabled: false
172
+ Style/BlockComments:
173
+ Enabled: false
174
+ Style/GuardClause:
175
+ Enabled: false
176
+ Style/TrailingCommaInHashLiteral:
177
+ Enabled: false
178
+ Style/ExponentialNotation:
179
+ Enabled: true
180
+ Style/HashEachMethods:
181
+ Enabled: true
182
+ Style/HashTransformKeys:
183
+ Enabled: true
184
+ Style/HashTransformValues:
185
+ Enabled: true
186
+ Style/RedundantFetchBlock:
187
+ Enabled: true
188
+ Style/RedundantRegexpCharacterClass:
189
+ Enabled: true
190
+ Style/RedundantRegexpEscape:
191
+ Enabled: true
192
+ Style/SlicingWithRange:
193
+ Enabled: true
194
+ Style/AccessorGrouping:
195
+ Enabled: false
196
+ Style/ArrayCoercion:
197
+ Enabled: true
198
+ Style/BisectedAttrAccessor:
199
+ Enabled: true
200
+ Style/CaseLikeIf:
201
+ Enabled: true
202
+ Style/HashAsLastArrayItem:
203
+ Enabled: true
204
+ Style/HashLikeCase:
205
+ Enabled: true
206
+ Style/RedundantAssignment:
207
+ Enabled: true
208
+ Style/RedundantFileExtensionInRequire:
209
+ Enabled: true
210
+ Style/ExplicitBlockArgument:
211
+ Enabled: true
212
+ Style/GlobalStdStream:
213
+ Enabled: true
214
+ Style/OptionalBooleanParameter:
215
+ Enabled: true
216
+ Style/SingleArgumentDig:
217
+ Enabled: true
218
+ Style/StringConcatenation:
219
+ Enabled: true
220
+ Style/ClassEqualityComparison:
221
+ Enabled: true
222
+ Style/CombinableLoops:
223
+ Enabled: true
224
+ Style/KeywordParametersOrder:
225
+ Enabled: false
226
+ Style/RedundantSelfAssignment:
227
+ Enabled: true
228
+ Style/SoleNestedConditional:
229
+ Enabled: true
230
+ Style/ArgumentsForwarding:
231
+ Enabled: true
232
+ Style/CollectionCompact:
233
+ Enabled: true
234
+ Style/DocumentDynamicEvalDefinition:
235
+ Enabled: false
236
+ Style/NegatedIfElseCondition:
237
+ Enabled: true
238
+ Style/NilLambda:
239
+ Enabled: true
240
+ Style/SwapValues:
241
+ Enabled: true
242
+ Style/RedundantArgument:
243
+ Enabled: true
244
+ Style/HashExcept:
245
+ Enabled: true
246
+ Style/EndlessMethod:
247
+ Enabled: true
248
+ Style/IfWithBooleanLiteralBranches:
249
+ Enabled: true
250
+ Style/HashConversion:
251
+ Enabled: true
252
+ Style/Documentation:
253
+ Enabled: false
254
+ Style/InPatternThen:
255
+ Enabled: true
256
+ Style/MultilineInPatternThen:
257
+ Enabled: true
258
+ Style/QuotedSymbols:
259
+ Enabled: true
260
+ Style/StringChars:
261
+ Enabled: true
262
+ Style/EmptyHeredoc: # new in 1.32
263
+ Enabled: true
264
+ Style/EnvHome: # new in 1.29
265
+ Enabled: true
266
+ Style/FetchEnvVar: # new in 1.28
267
+ Enabled: true
268
+ Style/FileRead: # new in 1.24
269
+ Enabled: true
270
+ Style/FileWrite: # new in 1.24
271
+ Enabled: true
272
+ Style/MagicCommentFormat: # new in 1.35
273
+ Enabled: true
274
+ Style/MapCompactWithConditionalBlock: # new in 1.30
275
+ Enabled: true
276
+ Style/MapToHash: # new in 1.24
277
+ Enabled: true
278
+ Style/NestedFileDirname: # new in 1.26
279
+ Enabled: true
280
+ Style/NumberedParameters: # new in 1.22
281
+ Enabled: true
282
+ Style/NumberedParametersLimit: # new in 1.22
283
+ Enabled: true
284
+ Style/ObjectThen: # new in 1.28
285
+ Enabled: true
286
+ Style/OpenStructUse: # new in 1.23
287
+ Enabled: true
288
+ Style/OperatorMethodCall: # new in 1.37
289
+ Enabled: true
290
+ Style/RedundantEach: # new in 1.38
291
+ Enabled: true
292
+ Style/RedundantInitialize: # new in 1.27
293
+ Enabled: true
294
+ Style/RedundantSelfAssignmentBranch: # new in 1.19
295
+ Enabled: true
296
+ Style/RedundantStringEscape: # new in 1.37
297
+ Enabled: true
298
+ Style/SelectByRegexp: # new in 1.22
299
+ Enabled: true
300
+
301
+ # ============================== Security ==============================
302
+ Security/CompoundHash: # new in 1.28
303
+ Enabled: true
304
+ Security/IoMethods: # new in 1.22
305
+ Enabled: true
306
+
307
+ # ============================== Lint ==============================
308
+ Lint/DuplicateMethods:
309
+ Enabled: false
310
+ Lint/AmbiguousOperator:
311
+ Enabled: false
312
+ Lint/DeprecatedOpenSSLConstant:
313
+ Enabled: true
314
+ Lint/MixedRegexpCaptureTypes:
315
+ Enabled: true
316
+ Lint/RaiseException:
317
+ Enabled: true
318
+ Lint/StructNewOverride:
319
+ Enabled: true
320
+ Lint/DuplicateElsifCondition:
321
+ Enabled: true
322
+ Lint/BinaryOperatorWithIdenticalOperands:
323
+ Enabled: true
324
+ Lint/DuplicateRescueException:
325
+ Enabled: true
326
+ Lint/EmptyConditionalBody:
327
+ Enabled: true
328
+ Lint/FloatComparison:
329
+ Enabled: true
330
+ Lint/MissingSuper:
331
+ Enabled: false
332
+ Lint/OutOfRangeRegexpRef:
333
+ Enabled: true
334
+ Lint/SelfAssignment:
335
+ Enabled: true
336
+ Lint/TopLevelReturnWithArgument:
337
+ Enabled: true
338
+ Lint/UnreachableLoop:
339
+ Enabled: true
340
+ Layout/BeginEndAlignment:
341
+ Enabled: true
342
+ Lint/ConstantDefinitionInBlock:
343
+ Enabled: true
344
+ Lint/DuplicateRequire:
345
+ Enabled: true
346
+ Lint/EmptyFile:
347
+ Enabled: true
348
+ Lint/HashCompareByIdentity:
349
+ Enabled: true
350
+ Lint/IdentityComparison:
351
+ Enabled: true
352
+ Lint/RedundantSafeNavigation:
353
+ Enabled: true
354
+ Lint/TrailingCommaInAttributeDeclaration:
355
+ Enabled: true
356
+ Lint/UselessMethodDefinition:
357
+ Enabled: true
358
+ Lint/UselessTimes:
359
+ Enabled: true
360
+ Lint/DuplicateBranch:
361
+ Enabled: true
362
+ Lint/DuplicateRegexpCharacterClassElement:
363
+ Enabled: true
364
+ Lint/EmptyBlock:
365
+ Enabled: true
366
+ Lint/EmptyClass:
367
+ Enabled: true
368
+ Lint/NoReturnInBeginEndBlocks:
369
+ Enabled: true
370
+ Lint/ToEnumArguments:
371
+ Enabled: true
372
+ Lint/UnmodifiedReduceAccumulator:
373
+ Enabled: true
374
+ Lint/UnexpectedBlockArity:
375
+ Enabled: true
376
+ Lint/DeprecatedConstants:
377
+ Enabled: true
378
+ Lint/LambdaWithoutLiteralBlock:
379
+ Enabled: true
380
+ Lint/NumberedParameterAssignment:
381
+ Enabled: true
382
+ Lint/OrAssignmentToConstant:
383
+ Enabled: true
384
+ Lint/RedundantDirGlobSort:
385
+ Enabled: true
386
+ Lint/SymbolConversion:
387
+ Enabled: true
388
+ Lint/TripleQuotes:
389
+ Enabled: true
390
+ Lint/AmbiguousAssignment:
391
+ Enabled: true
392
+ Lint/EmptyInPattern:
393
+ Enabled: true
394
+ Lint/AmbiguousOperatorPrecedence: # new in 1.21
395
+ Enabled: true
396
+ Lint/AmbiguousRange: # new in 1.19
397
+ Enabled: true
398
+ Lint/ConstantOverwrittenInRescue: # new in 1.31
399
+ Enabled: true
400
+ Lint/DuplicateMagicComment: # new in 1.37
401
+ Enabled: true
402
+ Lint/IncompatibleIoSelectWithFiberScheduler: # new in 1.21
403
+ Enabled: true
404
+ Lint/NonAtomicFileOperation: # new in 1.31
405
+ Enabled: true
406
+ Lint/RefinementImportMethods: # new in 1.27
407
+ Enabled: true
408
+ Lint/RequireRangeParentheses: # new in 1.32
409
+ Enabled: true
410
+ Lint/RequireRelativeSelfPath: # new in 1.22
411
+ Enabled: true
412
+ Lint/UselessRuby2Keywords: # new in 1.23
413
+ Enabled: true
data/CHANGELOG.md CHANGED
@@ -1,2 +1,8 @@
1
+ ## 0.2.0
2
+ * [ISSUE](https://github.com/shlima/translate_enum/issues/9) Added pluralization
3
+
4
+ ## 0.1.3
5
+ * add licence file
6
+
1
7
  ## 0.1.2
2
8
  * add support of default locale lookup (en.attributes) to share locales between models
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in translate_enum.gemspec
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2018 Aliaksandr Shylau
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
- [![Build Status](https://semaphoreci.com/api/v1/shlima/translate_enum/branches/master/shields_badge.svg)](https://semaphoreci.com/shlima/translate_enum)
1
+ ![CI](https://github.com/shlima/translate_enum/workflows/CI/badge.svg)
2
2
  [![Code Climate](https://codeclimate.com/github/shlima/translate_enum/badges/gpa.svg)](https://codeclimate.com/github/shlima/translate_enum)
3
+ [![gem version](https://badge.fury.io/rb/health_bit.svg)](https://rubygems.org/gems/translate_enum)
3
4
 
4
5
  # TranslateEnum
5
6
 
@@ -50,6 +51,11 @@ Post.translated_statuses => [["Was published", :published, 0], ["Was archived",
50
51
 
51
52
  @post = Post.new(status: :published)
52
53
  @post.translated_status #=> "Was published"
54
+
55
+ # Each `translated` method supports
56
+ # I18n.translate attributes:
57
+
58
+ Post.translated_status(:published, raise: true, throw: true, locale: :en, count: 10)
53
59
  ```
54
60
 
55
61
  ### Use in a Form
@@ -98,3 +104,95 @@ class User < ActiveRecord::Base
98
104
  end
99
105
  end
100
106
  ```
107
+ # How To?
108
+ ## How to use pluralization
109
+ ```yaml
110
+ en:
111
+ activerecord:
112
+ attributes:
113
+ person:
114
+ gender_list:
115
+ male:
116
+ zero: No males
117
+ one: One male
118
+ other: %{count} males
119
+
120
+ ```
121
+
122
+ ```ruby
123
+ Person.translated_gender(:make, count: 0) #=> "No males"
124
+ Person.translated_genders => [["One male", :male, 0]] # and others
125
+ Person.translated_genders(count: 0) => [["No males", :male, 0]] # and others
126
+
127
+ @person = Person.new(gender: :male)
128
+ @person.translated_gender #=> "One male"
129
+ @person.translated_gender(count: 10) #=> "10 Males"
130
+ ```
131
+
132
+ ## How use translate enum in serializer
133
+
134
+ Example for Grape:
135
+
136
+ ```ruby
137
+ class Feedback < ApplicationRecord
138
+ include TranslateEnum
139
+
140
+ enum topic: {
141
+ question: 'question', issue: 'issue', complaint: 'complaint', offer: 'offer',
142
+ investment: 'investment'
143
+ }
144
+
145
+ translate_enum :topic
146
+ end
147
+ ```
148
+
149
+ ```ruby
150
+ class FeedbacksApi < Grape::API
151
+ resource :feedbacks do
152
+ get 'enums' do
153
+ present Feedback.method(:translated_topics), with: TranslateEnumSerializer
154
+ end
155
+ end
156
+ end
157
+ ```
158
+
159
+ ```ruby
160
+ class TranslateEnumSerializer < Grape::Entity
161
+ expose :enum, as: ->(method) { method.name[/translated_(.*)/, 1] } do |method|
162
+ method.call.map do |translation, key, _value|
163
+ { value: key, translation: translation }
164
+ end
165
+ end
166
+ end
167
+ ```
168
+
169
+ ```bash
170
+ curl http://localhost:3000/feedbacks/enums
171
+ ```
172
+
173
+ ```json
174
+ {
175
+ "topics": [
176
+ {
177
+ "value": "question",
178
+ "translation": "Vopros"
179
+ },
180
+ {
181
+ "value": "issue",
182
+ "translation": "Problema"
183
+ },
184
+ {
185
+ "value": "complaint",
186
+ "translation": "Zhaloba"
187
+ },
188
+ {
189
+ "value": "offer",
190
+ "translation": "Predlozhenie"
191
+ },
192
+ {
193
+ "value": "investment",
194
+ "translation": "Invisticii"
195
+ }
196
+ ]
197
+ }
198
+ ```
data/Rakefile CHANGED
@@ -1,2 +1,4 @@
1
- require "bundler/gem_tasks"
2
- task :default => :spec
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ task default: :spec
data/bin/release.sh ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env bash
2
+
3
+ rm ./*.gem
4
+ gem build translate_enum.gemspec
5
+ gem push translate_enum-*
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Require this fle in order to be +TranslateEnum+ included in +ActiveRecord::Base+
2
3
  # @example
3
4
  # require 'translate_enum/active_record'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module TranslateEnum
2
4
  class Builder
3
5
  attr_accessor :i18n_scope
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module TranslateEnum
2
- VERSION = '0.1.2'
4
+ VERSION = '0.2.0'
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support/concern'
2
4
  require 'active_support/core_ext/string'
3
5
  require 'translate_enum/version'
@@ -20,25 +22,29 @@ module TranslateEnum
20
22
  builder = Builder.new(self, attribute, &block)
21
23
 
22
24
  # User.translated_status(:active)
23
- define_singleton_method(builder.method_name_singular) do |key|
24
- I18n.translate("#{builder.i18n_scope}.#{builder.i18n_location(key)}", default: builder.i18n_default_location(key))
25
+ define_singleton_method(builder.method_name_singular) do |key, throw: false, raise: false, locale: nil, **options|
26
+ opts = { default: builder.i18n_default_location(key) }.merge(options)
27
+ I18n.translate("#{builder.i18n_scope}.#{builder.i18n_location(key)}", throw: throw, raise: raise, locale: locale, **opts)
25
28
  end
26
29
 
27
30
  # @return [Array]
28
31
  # @example
29
32
  # f.select_field :gender, f.object.class.translated_genders
30
- define_singleton_method(builder.method_name_plural) do
33
+ define_singleton_method(builder.method_name_plural) do |throw: false, raise: false, locale: nil, **options|
34
+ options = { count: 1 }.merge(options)
31
35
  public_send(builder.enum_klass_method_name).map do |key, value|
32
- [public_send(builder.method_name_singular, key), key, value]
36
+ translation = public_send(builder.method_name_singular, key, throw: throw, raise: raise, locale: locale, **options)
37
+ [translation, key, value]
33
38
  end
34
39
  end
35
40
 
36
41
  # @return [String]
37
42
  # @example
38
43
  # @user.translated_gender
39
- define_method(builder.method_name_singular) do
44
+ define_method(builder.method_name_singular) do |throw: false, raise: false, locale: nil, **options|
40
45
  if (key = public_send(builder.enum_instance_method_name)).present?
41
- self.class.public_send(builder.method_name_singular, key)
46
+ options = { count: 1 }.merge(options)
47
+ self.class.public_send(builder.method_name_singular, key, throw: throw, raise: raise, locale: locale, **options)
42
48
  end
43
49
  end
44
50
  end
@@ -1,6 +1,6 @@
1
- lib = File.expand_path('../lib', __FILE__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'translate_enum/version'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/translate_enum/version'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'translate_enum'
@@ -10,21 +10,25 @@ Gem::Specification.new do |spec|
10
10
  spec.summary = 'Rails translate enum'
11
11
  spec.description = 'Simple, zero-dependant enum translation gem for Rails'
12
12
  spec.homepage = 'https://github.com/shlima/translate_enum'
13
+ spec.license = 'MIT'
14
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
15
+ spec.metadata['rubygems_mfa_required'] = 'true'
13
16
 
14
-
15
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
- f.match(%r{^(test|spec|features)/})
17
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
18
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
19
  end
18
20
 
19
21
  spec.bindir = 'exe'
20
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
- spec.require_paths = ['lib']
23
+ spec.require_paths = %w[lib]
22
24
 
23
25
  spec.add_dependency 'activesupport'
24
- spec.add_development_dependency 'pry'
26
+ spec.add_development_dependency 'actionview'
27
+ spec.add_development_dependency 'activemodel'
25
28
  spec.add_development_dependency 'bundler'
29
+ spec.add_development_dependency 'pry'
26
30
  spec.add_development_dependency 'rake'
27
31
  spec.add_development_dependency 'rspec'
28
- spec.add_development_dependency 'activemodel'
29
- spec.add_development_dependency 'actionview'
32
+ spec.add_development_dependency 'rubocop'
33
+ spec.add_development_dependency 'rubocop-performance'
30
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: translate_enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aliaksandr Shylau
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-01 00:00:00.000000000 Z
11
+ date: 2022-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -25,7 +25,21 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: pry
28
+ name: actionview
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activemodel
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
@@ -52,6 +66,20 @@ dependencies:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rake
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +109,7 @@ dependencies:
81
109
  - !ruby/object:Gem::Version
82
110
  version: '0'
83
111
  - !ruby/object:Gem::Dependency
84
- name: activemodel
112
+ name: rubocop
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - ">="
@@ -95,7 +123,7 @@ dependencies:
95
123
  - !ruby/object:Gem::Version
96
124
  version: '0'
97
125
  - !ruby/object:Gem::Dependency
98
- name: actionview
126
+ name: rubocop-performance
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - ">="
@@ -115,13 +143,17 @@ executables: []
115
143
  extensions: []
116
144
  extra_rdoc_files: []
117
145
  files:
146
+ - ".github/workflows/main.yml"
118
147
  - ".gitignore"
119
148
  - ".rspec"
149
+ - ".rubocop.yml"
120
150
  - CHANGELOG.md
121
151
  - Gemfile
152
+ - MIT-LICENSE
122
153
  - README.md
123
154
  - Rakefile
124
155
  - bin/console
156
+ - bin/release.sh
125
157
  - bin/setup
126
158
  - lib/translate_enum.rb
127
159
  - lib/translate_enum/active_record.rb
@@ -129,9 +161,11 @@ files:
129
161
  - lib/translate_enum/version.rb
130
162
  - translate_enum.gemspec
131
163
  homepage: https://github.com/shlima/translate_enum
132
- licenses: []
133
- metadata: {}
134
- post_install_message:
164
+ licenses:
165
+ - MIT
166
+ metadata:
167
+ rubygems_mfa_required: 'true'
168
+ post_install_message:
135
169
  rdoc_options: []
136
170
  require_paths:
137
171
  - lib
@@ -139,16 +173,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
139
173
  requirements:
140
174
  - - ">="
141
175
  - !ruby/object:Gem::Version
142
- version: '0'
176
+ version: 2.6.0
143
177
  required_rubygems_version: !ruby/object:Gem::Requirement
144
178
  requirements:
145
179
  - - ">="
146
180
  - !ruby/object:Gem::Version
147
181
  version: '0'
148
182
  requirements: []
149
- rubyforge_project:
150
- rubygems_version: 2.7.3
151
- signing_key:
183
+ rubygems_version: 3.3.7
184
+ signing_key:
152
185
  specification_version: 4
153
186
  summary: Rails translate enum
154
187
  test_files: []