Sha256: 93e4c3a8fc1774f306eb0e578f64df06d088098e0e0d22b1f31f2a3c1271771e

Contents?: true

Size: 1.49 KB

Versions: 34

Compression:

Stored size: 1.49 KB

Contents

module ActiveScaffold::DataStructures
  class Set
    include Enumerable
    include ActiveScaffold::Configurable

    def initialize(*args)
      set_values(*args)
    end

    def initialize_dup(other)
      @set = other.set.dup
    end

    def set_values(*args)
      @set = []
      add(*args)
    end

    # the way to add items to the set.
    def add(*args)
      args.flatten! # allow [] as a param
      args.each do |arg|
        arg = arg.to_sym if arg.is_a? String
        @set << arg unless @set.include? arg # avoid duplicates
      end
    end
    alias << add

    # the way to remove items from the set.
    def exclude(*args)
      args.flatten! # allow [] as a param
      args.collect!(&:to_sym) # symbolize the args
      # check respond_to? :to_sym, ActionColumns doesn't respond to to_sym
      @set.reject! { |c| c.respond_to?(:to_sym) && args.include?(c.to_sym) } # reject all items specified
    end
    alias remove exclude

    # returns an array of items with the provided names
    def find_by_names(*names)
      @set.find_all { |item| names.include? item }
    end

    # returns the item of the given name.
    def find_by_name(name)
      # this works because of `def item.=='
      item = @set.find { |c| c == name }
      item
    end
    alias [] find_by_name

    def each
      @set.each { |i| yield i }
    end

    # returns the number of items in the set
    def length
      @set.length
    end

    def empty?
      @set.empty?
    end

    protected

    attr_reader :set
  end
end

Version data entries

34 entries across 34 versions & 1 rubygems

Version Path
active_scaffold-3.7.12 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.7.11.1 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.7.11 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.7.10 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.7.8 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.7.7 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.7.6 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.7.5 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.7.2 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.7.1 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.7.0 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.6.20 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.6.19 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.6.17 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.6.15 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.6.14 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.6.13 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.6.12 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.6.11.1 lib/active_scaffold/data_structures/set.rb
active_scaffold-3.6.11 lib/active_scaffold/data_structures/set.rb