File: value.rb

package info (click to toggle)
ruby-enumerize 2.8.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 432 kB
  • sloc: ruby: 3,712; makefile: 6
file content (51 lines) | stat: -rw-r--r-- 1,110 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# frozen_string_literal: true

require 'i18n'
require 'active_support/inflector'

module Enumerize
  class Value < String
    include Predicatable

    attr_reader :value

    def initialize(attr, name, value=nil)
      @attr  = attr
      @value = value.nil? ? name.to_s : value

      super(name.to_s)

      @i18n_keys = @attr.i18n_scopes.map do |s|
        scope = Utils.call_if_callable(s, @value)

        :"#{scope}.#{self}"
      end
      @i18n_keys << :"enumerize.defaults.#{@attr.name}.#{self}"
      @i18n_keys << :"enumerize.#{@attr.name}.#{self}"
      @i18n_keys << ActiveSupport::Inflector.humanize(ActiveSupport::Inflector.underscore(self)) # humanize value if there are no translations
      @i18n_keys
    end

    def text
      I18n.t(@i18n_keys[0], :default => @i18n_keys[1..-1]) if @i18n_keys
    end

    def ==(other)
      super(other.to_s) || value == other
    end

    def encode_with(coder)
      coder.represent_object(self.class.superclass, @value)
    end

    def as_json(*)
      to_s
    end

    private

    def predicate_call(value)
      value == self
    end
  end
end