Sha256: e63fec6ed9e2a396d19726de9f025b8204c45142e57f20147aa1b1494ebb9af6

Contents?: true

Size: 1.97 KB

Versions: 23

Compression:

Stored size: 1.97 KB

Contents

require 'concurrent/synchronization/abstract_struct'
require 'concurrent/synchronization'

module Concurrent

  # A thread-safe, immutable variation of Ruby's standard `Struct`.
  #
  # @see http://ruby-doc.org/core-2.2.0/Struct.html Ruby standard library `Struct`
  module ImmutableStruct
    include Synchronization::AbstractStruct

    # @!macro struct_values
    def values
      ns_values
    end

    alias_method :to_a, :values

    # @!macro struct_values_at
    def values_at(*indexes)
      ns_values_at(indexes)
    end

    # @!macro struct_inspect
    def inspect
      ns_inspect
    end

    alias_method :to_s, :inspect

    # @!macro struct_merge
    def merge(other, &block)
      ns_merge(other, &block)
    end

    # @!macro struct_to_h
    def to_h
      ns_to_h
    end

    # @!macro struct_get
    def [](member)
      ns_get(member)
    end

    # @!macro struct_equality
    def ==(other)
      ns_equality(other)
    end

    # @!macro struct_each
    def each(&block)
      return enum_for(:each) unless block_given?
      ns_each(&block)
    end

    # @!macro struct_each_pair
    def each_pair(&block)
      return enum_for(:each_pair) unless block_given?
      ns_each_pair(&block)
    end

    # @!macro struct_select
    def select(&block)
      return enum_for(:select) unless block_given?
      ns_select(&block)
    end

    # @!macro struct_new
    def self.new(*args, &block)
      clazz_name = nil
      if args.length == 0
        raise ArgumentError.new('wrong number of arguments (0 for 1+)')
      elsif args.length > 0 && args.first.is_a?(String)
        clazz_name = args.shift
      end
      FACTORY.define_struct(clazz_name, args, &block)
    end

    FACTORY = Class.new(Synchronization::Object) do
      def define_struct(name, members, &block)
        synchronize do
          Synchronization::AbstractStruct.define_struct_class(ImmutableStruct, Synchronization::Object, name, members, &block)
        end
      end
    end.new
    private_constant :FACTORY
  end
end

Version data entries

23 entries across 21 versions & 5 rubygems

Version Path
logstash-filter-zabbix-0.1.2 vendor/bundle/jruby/1.9/gems/concurrent-ruby-0.9.2-java/lib/concurrent/immutable_struct.rb
logstash-filter-zabbix-0.1.1 vendor/bundle/jruby/1.9/gems/concurrent-ruby-0.9.2-java/lib/concurrent/immutable_struct.rb
ivanvc-logstash-input-s3-3.1.1.4 vendor/local/gems/concurrent-ruby-0.9.2-java/lib/concurrent/immutable_struct.rb
ivanvc-logstash-input-s3-3.1.1.3 vendor/local/gems/concurrent-ruby-0.9.2-java/lib/concurrent/immutable_struct.rb
ivanvc-logstash-input-s3-3.1.1.2 vendor/local/gems/concurrent-ruby-0.9.2-java/lib/concurrent/immutable_struct.rb
logstash-input-beats-2.0.2 vendor/jruby/1.9/gems/concurrent-ruby-0.9.2-java/lib/concurrent/immutable_struct.rb
logstash-input-beats-2.0.2 vendor/jruby/1.9/gems/logstash-codec-json-2.0.3/vendor/gems/concurrent-ruby-0.9.1-java/lib/concurrent/immutable_struct.rb
logstash-input-beats-2.0.2 vendor/jruby/1.9/gems/concurrent-ruby-0.9.1-java/lib/concurrent/immutable_struct.rb
logstash-codec-json-2.0.3 vendor/gems/concurrent-ruby-0.9.1-java/lib/concurrent/immutable_struct.rb
concurrent-ruby-0.9.2-java lib/concurrent/immutable_struct.rb
concurrent-ruby-0.9.2 lib/concurrent/immutable_struct.rb
logstash-input-beats-0.9.2 vendor/jruby/1.9/gems/concurrent-ruby-0.9.1-java/lib/concurrent/immutable_struct.rb
logstash-input-beats-0.9.1 vendor/jruby/1.9/gems/concurrent-ruby-0.9.1-java/lib/concurrent/immutable_struct.rb
concurrent-ruby-1.0.0.pre1 lib/concurrent/immutable_struct.rb
concurrent-ruby-1.0.0.pre1-java lib/concurrent/immutable_struct.rb
concurrent-ruby-0.9.1 lib/concurrent/immutable_struct.rb
concurrent-ruby-0.9.1-java lib/concurrent/immutable_struct.rb
concurrent-ruby-0.9.0 lib/concurrent/immutable_struct.rb
concurrent-ruby-0.9.0-java lib/concurrent/immutable_struct.rb
concurrent-ruby-0.9.0.pre3-java lib/concurrent/immutable_struct.rb