![38% of CISOs Fear They’re Not Moving Fast Enough on AI](https://cdn.sanity.io/images/cgdhsj6q/production/faa0bc28df98f791e11263f8239b34207f84b86f-1024x1024.webp?w=400&fit=max&auto=format)
Security News
38% of CISOs Fear They’re Not Moving Fast Enough on AI
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Simple, zero-dependant enum
translation gem for Rails
gem install translate_enum
Here is a regular use case. ActiveRecord model:
class Post < ActiveRecord::Base
include TranslateEnum
enum status: { published: 0, archive: 1 }
translate_enum :status
end
Localization file
en:
activerecord:
attributes:
post:
status_list:
published: Was published
archive: Was archived
Or if you wish your locales to be available across all models
en:
attributes:
status_list:
published: Was published
archive: Was archived
Post.translated_status(:published) #=> "Was published"
Post.translated_statuses => [["Was published", :published, 0], ["Was archived", :archive, 1]]
@post = Post.new(status: :published)
@post.translated_status #=> "Was published"
# Each `translated` method supports
# I18n.translate attributes:
Post.translated_status(:published, raise: true, throw: true, locale: :en, count: 10)
= form_for @post do |f|
= f.select :status, options_for_select(f.object.class.translated_statuses.map { |translation, k, _v| [translation, k] })
Be default you should extend each ActiveRecord
model manually by including TranslateEnum
module in it.
You can extend ActiveRecord
by requiring translate_enum/active_record
in initializer or inside yout Gemfile
:
Gemfile:
gem 'translate_enum', require: 'translate_enum/active_record'
Initializer:
# config/initializers/translate_enum.rb
require 'translate_enum/active_record'
class User < ActiveRecord::Base
enum gender: [:male, :female]
translate_enum :gender do |tr|
tr.i18n_scope = 'activerecord.attributes'
tr.i18n_key = 'gender_list'
tr.enum_klass_method_name = 'genders'
tr.enum_instance_method_name = 'gender'
tr.method_name_singular = 'translated_gender'
tr.method_name_plural = 'translated_genders'
end
# Or even provide your own logic
def self.translated_gender(key)
I18n.t(key, scope: 'global.gender_list')
end
end
en:
activerecord:
attributes:
person:
gender_list:
male:
zero: No males
one: One male
other: %{count} males
Person.translated_gender(:make, count: 0) #=> "No males"
Person.translated_genders => [["One male", :male, 0]] # and others
Person.translated_genders(count: 0) => [["No males", :male, 0]] # and others
@person = Person.new(gender: :male)
@person.translated_gender #=> "One male"
@person.translated_gender(count: 10) #=> "10 Males"
Example for Grape:
class Feedback < ApplicationRecord
include TranslateEnum
enum topic: {
question: 'question', issue: 'issue', complaint: 'complaint', offer: 'offer',
investment: 'investment'
}
translate_enum :topic
end
class FeedbacksApi < Grape::API
resource :feedbacks do
get 'enums' do
present Feedback.method(:translated_topics), with: TranslateEnumSerializer
end
end
end
class TranslateEnumSerializer < Grape::Entity
expose :enum, as: ->(method) { method.name[/translated_(.*)/, 1] } do |method|
method.call.map do |translation, key, _value|
{ value: key, translation: translation }
end
end
end
curl http://localhost:3000/feedbacks/enums
{
"topics": [
{
"value": "question",
"translation": "Vopros"
},
{
"value": "issue",
"translation": "Problema"
},
{
"value": "complaint",
"translation": "Zhaloba"
},
{
"value": "offer",
"translation": "Predlozhenie"
},
{
"value": "investment",
"translation": "Invisticii"
}
]
}
FAQs
Unknown package
We found that translate_enum demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Research
Security News
Socket researchers uncovered a backdoored typosquat of BoltDB in the Go ecosystem, exploiting Go Module Proxy caching to persist undetected for years.
Security News
Company News
Socket is joining TC54 to help develop standards for software supply chain security, contributing to the evolution of SBOMs, CycloneDX, and Package URL specifications.