Sha256: 23cba93d80e623747d6870fa9f9837f85dcb427e25887268d51e9f575090b456

Contents?: true

Size: 1.17 KB

Versions: 4

Compression:

Stored size: 1.17 KB

Contents

# -*- encoding : utf-8 -*-
require_dependency "card/env"

require "smart_name"

class Card
  class Name
    class ViewName < SmartName
      @@name2viewnameobject = {}

      class << self
        def new obj
          return obj if self.class === obj
          str = Array === obj ? obj * joint : obj.to_s
          if (known_name = @@name2viewnameobject[str])
            known_name
          else
            super str.strip
          end
        end
      end

      def initialize str
        @s = str.to_s.strip
        @s = @s.encode("UTF-8") if RUBYENCODING
        @key =
          if @s.index(self.class.joint)
            @parts = @s.split(/\s*#{JOINT_RE}\s*/)
            @parts << "" if @s[-1, 1] == self.class.joint
            @simple = false
            @parts.map { |p| p.to_name.key } * self.class.joint
          else
            @parts = [str]
            @simple = true
            str.empty? ? "" : simple_key
          end
        @@name2viewnameobject[str] = self
      end

      def simple_key
        decoded.underscore.gsub(/[^#{OK4KEY_RE}]+/, "_")
               .split(/_+/).reject(&:empty?) * "_"
      end

      def to_viewname
        self
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
card-1.91 lib/card/name/view_name.rb
card-1.21.0 lib/card/name/view_name.rb
card-1.20.4 lib/card/name/view_name.rb
card-1.20.3 lib/card/name/view_name.rb