Sha256: e1478564dfcc6a66cd84c6ab2ba8784de56379444cdfbfdcf41639738f9e9936
Contents?: true
Size: 1.36 KB
Versions: 2
Compression:
Stored size: 1.36 KB
Contents
module SugarCube # A subclass of Hash that allows its keys to be accessed and assigned by # method name. Useful to quickly mock objects. To that end, a # `NoMethodError` is raised anytime the key doesn't exist (getter or setter) # # You can convert an existing Hash or NSDictionary into a Anonymous using the # constructor `SugarCube::Anonymous[hash]`, or you can call `to_object` on a # dictionary or hash. # # @example # obj = { # 'first_name': 'Katsuyoshi', # strings # company: 'Ito Soft Design', # and symbols are supported # }.to_object # # obj.first_name # # => 'Katsuyoshi' # obj.company # # => 'Ito Soft Design' # obj.bla # => raises NoMethodError # obj.bla = 'bla' # => raises NoMethodError class Anonymous < Hash def method_missing(symbol, *args) if args.size == 0 key = symbol key = symbol.to_s unless self.include? key if self.include?(key) return self[key] end elsif args.size == 1 && /(.*)=$/ =~ symbol.to_s key = $1.to_sym key = key.to_s unless self.include? key if self.include?(key) return self[key] = args.first end end return super end def to_object self end end end class NSDictionary def to_object SugarCube::Anonymous[self] end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
sugarcube-0.20.1 | lib/sugarcube-anonymous/anonymous.rb |
sugarcube-0.20.0 | lib/sugarcube-anonymous/anonymous.rb |