class RestrictedStruct

Constants

ACCESS_LEVELS
ACCESS_RESTRICTIONS
VERSION

Public Class Methods

defaults() click to toggle source
# File lib/restricted_struct/definition.rb, line 15
def defaults
  @defaults ||= {}
end
new(access_level, *properties) click to toggle source
Calls superclass method
# File lib/restricted_struct/definition.rb, line 9
def new(access_level, *properties)
  properties, defaults = Support.extract_keyword_args(properties)
  properties.concat(defaults.keys)
  super(*properties, &access_restriction(access_level, properties)).with_defaults(defaults)
end
new(*values) click to toggle source
Calls superclass method
# File lib/restricted_struct/definition.rb, line 43
def initialize(*values)
  values, keyword_args = Support.extract_keyword_args(values)
  members.each_with_index do |name, index|
    # 1.8 compatibility
    key = name.to_sym
    values[index] = self.class.defaults[key] if nil == values[index]
    values[index] = keyword_args[key] if keyword_args.has_key?(key)
  end
  super(*values)
end

Protected Class Methods

with_defaults(defaults) click to toggle source
# File lib/restricted_struct/definition.rb, line 21
def with_defaults(defaults)
  @defaults = defaults
  self
end

Private Class Methods

access_restriction(access_level, properties) click to toggle source
# File lib/restricted_struct/definition.rb, line 28
def access_restriction(access_level, properties)
  builder_strategy(access_level).call(accessor_methods(properties))
end
accessor_methods(properties) click to toggle source
# File lib/restricted_struct/definition.rb, line 38
def accessor_methods(properties)
  properties + properties.map { |name| :"#{name}=" }
end
builder_strategy(access_level) click to toggle source
# File lib/restricted_struct/definition.rb, line 32
def builder_strategy(access_level)
  ACCESS_RESTRICTIONS.fetch(access_level) do
    raise ArgumentError, "access_level can be only one of #{ACCESS_LEVELS}"
  end
end