Sha256: f36a42a8e8303e9e758531c89ec6f78a74b1a6ca220b14ddb322cd5b711e78b7

Contents?: true

Size: 1.1 KB

Versions: 11

Compression:

Stored size: 1.1 KB

Contents

require 'forwardable'

module EfoNelfo

  class Collection
    include Enumerable
    extend Forwardable

    attr_reader :owner, :post_type

    def_delegators :@list, :[], :each, :last, :size, :empty?

    def initialize(owner, post_type)
      @owner     = owner
      @post_type = post_type
      @list      = []
    end

    def <<(obj)
      obj = post_type_class.new(obj) if obj.is_a? Hash
      raise EfoNelfo::InvalidPostType if obj.nil? || (obj.is_a?(EfoNelfo::PostType) && obj.post_type != post_type)

      # Set the index if the post has an index property
      obj.index = size + 1 if obj.has_property?(:index)

      @list << obj
    end

    def delete(index)
      @list.delete_at index
    end

    def to_a
      map(&:to_a).flatten(1)
    end

    # find_by property_name: 'test'
    def find_by(args)
      key = args.keys.first; value = args.values.first
      @list.select { |l| l.respond_to?(key) && l.public_send(key) == value }
    end

    private
    attr_reader :list

    def post_type_class
      Kernel.const_get("EfoNelfo::V#{owner.class.version_from_class}::#{post_type}")
    end


  end

end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
efo_nelfo-2.0.0 lib/efo_nelfo/collection.rb
efo_nelfo-1.7.0 lib/efo_nelfo/collection.rb
efo_nelfo-1.6.2 lib/efo_nelfo/collection.rb
efo_nelfo-1.6.1 lib/efo_nelfo/collection.rb
efo_nelfo-1.6.0 lib/efo_nelfo/collection.rb
efo_nelfo-1.5.5 lib/efo_nelfo/collection.rb
efo_nelfo-1.5.4 lib/efo_nelfo/collection.rb
efo_nelfo-1.5.3 lib/efo_nelfo/collection.rb
efo_nelfo-1.5.2 lib/efo_nelfo/collection.rb
efo_nelfo-1.5.1 lib/efo_nelfo/collection.rb
efo_nelfo-1.5.0 lib/efo_nelfo/collection.rb