lib/astruct.rb in astruct-2.11.0 vs lib/astruct.rb in astruct-3.0.0

- old
+ new

@@ -1,94 +1,19 @@ -require_relative 'astruct/module' +require_relative "astruct/behavior" -# # = astruct.rb: AltStruct implementation # # Author:: Kurtis Rainbolt-Greene # Documentation:: Kurtis Rainbolt-Greene # # AltStruct is an Class and Module (AltStruct::M) that can be used to # create hash-like classes. Allowing you to create an object that can # dynamically accept accessors and behaves very much like a Hash. # - -# -# An AltStruct is a data structure, similar to a Hash, that allows the -# definition of arbitrary attributes with their accompanying values. This is -# accomplished by using Ruby's metaprogramming to define methods on the class -# itself. -# - -# -# == Examples: -# -# require 'astruct' -# -# class Profile < AltStruct -# -# end -# -# person = Profile.new name: "John Smith" -# person.age = 70 -# -# puts person.name # => "John Smith" -# puts person.age # => 70 -# puts person.dump # => { :name => "John Smith", :age => 70 } -# - -# -# An AltStruct employs a Hash internally to store the methods and values and -# can even be initialized with one: -# -# australia = AltStruct.new country: "Australia", population: 20_000_000 -# puts australia.inspect # => <AltStruct country="Australia", population=20000000> -# - -# -# Hash keys with spaces or characters that would normally not be able to use for -# method calls (e.g. ()[]*) will not be immediately available on the -# AltStruct object as a method for retrieval or assignment, but can be still be -# reached through the Object#send method. -# -# measurements = AltStruct.new "length (in inches)" => 24 -# measurements.send "length (in inches)" # => 24 -# -# data_point = AltStruct.new :queued? => true -# data_point.queued? # => true -# data_point.send "queued?=", false -# data_point.queued? # => false -# - -# -# Removing the presence of a method requires the execution the delete_field -# or delete (like a hash) method as setting the property value to +nil+ -# will not remove the method. -# -# first_pet = AltStruct.new :name => 'Rowdy', :owner => 'John Smith' -# first_pet.owner = nil -# second_pet = AltStruct.new :name => 'Rowdy' -# -# first_pet == second_pet # -> false -# -# first_pet.delete_field(:owner) -# first_pet == second_pet # -> true -# - -# -# == Implementation: -# -# An AltStruct utilizes Ruby's method lookup structure to and find and define -# the necessary methods for properties. This is accomplished through the method -# method_missing and define_method. -# - -# -# This should be a consideration if there is a concern about the performance of -# the objects that are created, as there is much more overhead in the setting -# of these properties compared to using a Hash or a Struct. -# class AltStruct - # We include all of the AltStruct::M Module in order to give AltStruct + # We include all of the AltStruct::Behavior Module in order to give AltStruct # the same behavior as OpenStruct. It's better, however, to simply - # include AltStruct::M into your own class. - include AltStruct::M + # include AltStruct::Behavior into your own class. + include AltStruct::Behavior end + +require_relative "astruct/version"