lib/sinclair.rb in sinclair-1.3.0 vs lib/sinclair.rb in sinclair-1.3.1
- old
+ new
@@ -22,10 +22,65 @@
#
# instance = MyModel.new
# instance.value # returns 10
# instance.value = 20
# instance.value # returns 20
+#
+# @example Usin cache
+# module DefaultValueable
+# def default_reader(*methods, value:, accept_nil: false)
+# DefaultValueBuilder.new(
+# self, value: value, accept_nil: accept_nil
+# ).add_default_values(*methods)
+# end
+# end
+#
+# class DefaultValueBuilder < Sinclair
+# def add_default_values(*methods)
+# default_value = value
+#
+# methods.each do |method|
+# add_method(method, cached: cache_type) { default_value }
+# end
+#
+# build
+# end
+#
+# private
+#
+# delegate :accept_nil, :value, to: :options_object
+#
+# def cache_type
+# accept_nil ? :full : :simple
+# end
+# end
+#
+# class Server
+# extend DefaultValueable
+#
+# attr_writer :host, :port
+#
+# default_reader :host, value: 'server.com', accept_nil: false
+# default_reader :port, value: 80, accept_nil: true
+#
+# def url
+# return "http://#{host}" unless port
+#
+# "http://#{host}:#{port}"
+# end
+# end
+# server = Server.new
+#
+# server.url # returns 'http://server.com:80'
+#
+# server.host = 'interstella.com'
+# server.port = 5555
+# server.url # returns 'http://interstella.com:5555'
+#
+# server.host = nil
+# server.port = nil
+# server.url # return 'http://server.com'
class Sinclair
require 'sinclair/options_parser'
autoload :VERSION, 'sinclair/version'
autoload :MethodDefinition, 'sinclair/method_definition'
@@ -147,10 +202,10 @@
# builder.build
#
# Person.new('john', 'wick').bond_name # returns 'wick, john wick'
# @return [Array<MethodDefinition>]
def add_method(name, code = nil, **options, &block)
- definitions << MethodDefinition.new(name, code, **options, &block)
+ definitions << MethodDefinition.from(name, code, **options, &block)
end
# Evaluetes a block which will result in a String, the method code
#
# @example Building a initial value class method