Sha256: 96d743da2b31bcc2b6fdc18be86713a1cc4c482ee932a9752e9033a17e71a6d9

Contents?: true

Size: 1.06 KB

Versions: 3

Compression:

Stored size: 1.06 KB

Contents

module EfoNelfo

  class PostType
    include EfoNelfo::Property
    include EfoNelfo::HasMany

    class << self

      def for(type, version)
        klass = "EfoNelfo::V#{version_to_namespace(version)}::#{type}"
        const_get(klass) rescue nil
      end

      # Converts version to module version name
      # Example: version_to_namespace("4.2")   # => "42"
      def version_to_namespace(version)
        version.gsub('.', '')
      end

      # Extracts version number from class namespace.
      # Example: EfoNelfo::V41::Some::Class.version  # => "4.1"
      def version
        (version_from_class.to_f / 10).to_s
      end

      def version_from_class
        self.to_s.match(/::V(?<version>\d+)::/)[:version]
      end

      def post_type
        name.split(/::/).last
      end

      def from(hash)
        self.for(hash[:post_type], hash[:version]).new(hash)
      end

    end

    def initialize(*args)
      initialize_attributes(*args)
    end

    def post_type
      self.class.post_type
    end

    def version
      self.class.version
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
efo_nelfo-1.2.0 lib/efo_nelfo/post_type.rb
efo_nelfo-1.1.0 lib/efo_nelfo/post_type.rb
efo_nelfo-1.0.0 lib/efo_nelfo/post_type.rb