Class: Striuct Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/striuct.rb,
lib/striuct/structs.rb,
lib/striuct/singleton_class.rb,
lib/striuct/classmethods/fix.rb,
lib/striuct/classmethods/copy.rb,
lib/striuct/classmethods/enum.rb,
lib/striuct/classmethods/inner.rb,
lib/striuct/classmethods/macro.rb,
lib/striuct/classmethods/names.rb,
lib/striuct/classmethods/length.rb,
lib/striuct/classmethods/default.rb,
lib/striuct/instancemethods/cast.rb,
lib/striuct/instancemethods/enum.rb,
lib/striuct/instancemethods/lock.rb,
lib/striuct/instancemethods/to_s.rb,
lib/striuct/instancemethods/hashy.rb,
lib/striuct/classmethods/predicate.rb,
lib/striuct/classmethods/to_struct.rb,
lib/striuct/instancemethods/assign.rb,
lib/striuct/instancemethods/getter.rb,
lib/striuct/instancemethods/object.rb,
lib/striuct/instancemethods/safety.rb,
lib/striuct/instancemethods/setter.rb,
lib/striuct/instancemethods/values.rb,
lib/striuct/classmethods/adjustment.rb,
lib/striuct/classmethods/validation.rb,
lib/striuct/instancemethods/compare.rb,
lib/striuct/instancemethods/default.rb,
lib/striuct/classmethods/constructor.rb,
lib/striuct/instancemethods/validation.rb,
lib/striuct/instancemethods/requirements.rb,
lib/striuct/instancemethods/keyvalidatable.rb,
lib/striuct/classmethods/conflict_management.rb,
lib/striuct/instancemethods/delegate_class_methods.rb

Overview

This class is abstract.

Defined Under Namespace

Modules: ClassMethods, InstanceMethods, Structs Classes: Error, InvalidOperationError

Constructors for Subclassies collapse

Class Method Summary collapse

Class Method Details

.define(&block) ⇒ void

This method returns an undefined value.

Yield Returns:

  • (Class)

    (see Striuct.new) - reject floating class

Raises:

  • (ArgumentError)


33
34
35
36
37
38
39
40
41
42
# File 'lib/striuct/singleton_class.rb', line 33

def define(&block)
  raise ArgumentError, 'block not supplied' unless block_given?

  new(&block).tap {|subclass|
    subclass.class_eval {
      raise 'not yet finished' if @autonyms.empty?
      close
    }
  }
end

.inherited(subclass) ⇒ Object (private)



48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/striuct/singleton_class.rb', line 48

def inherited(subclass)
  ret = super subclass

  subclass.class_eval {
    extend ClassMethods
    include Enumerable
    include Validation
    include InstanceMethods
    
    _init
  }

  ret
end

.new(*autonyms, &block) ⇒ Class

Parameters:

  • autonyms (Symbol, String)

Yield Returns:

  • (Class)

Returns:

  • (Class)


15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/striuct/singleton_class.rb', line 15

def new(*autonyms, &block)
  # warning for Ruby's Struct.new user
  first = autonyms.first
  if first.instance_of?(String) and /\A[A-Z]/ =~ first
    warn "no define constant first-arg(#{first}), the Struct behavior is not supported in Striuct"
  end

  Class.new(self) {
    autonyms.each do |autonym|
      add_member autonym
    end

    class_eval(&block) if block_given?
  }
end

.new_instanceObject



7
# File 'lib/striuct/singleton_class.rb', line 7

alias_method :new_instance, :new