lib/micro/struct/features.rb in u-struct-1.0.0 vs lib/micro/struct/features.rb in u-struct-1.1.0
- old
+ new
@@ -1,48 +1,43 @@
+# typed: true
# frozen_string_literal: true
module Micro::Struct
module Features
- Names = ->(values) do
- NormalizeNames::AsSymbols.(values, context: 'feature')
- end
-
module Options
- def self.check(to_ary:, to_hash:, to_proc:, readonly:, instance_copy:, exposed_features:)
- { to_ary: to_ary,
- to_hash: to_hash,
- to_proc: to_proc,
- readonly: readonly,
- instance_copy: instance_copy,
- exposed_features: exposed_features }
- end
+ def self.from(names:)
+ options = names.each_with_object({}) { |name, memo| memo[name] = true }
- With = ->(bool, names) { names.each_with_object({}) { |name, memo| memo[name] = bool } }
-
- DISABLED = With.(false, method(:check).parameters.map(&:last)).freeze
-
- def self.from_names(values)
- enabled = With.(true, values)
-
- check(**DISABLED.merge(enabled))
+ {
+ to_ary: options.fetch(:to_ary, false),
+ to_hash: options.fetch(:to_hash, false),
+ to_proc: options.fetch(:to_proc, false),
+ readonly: options.fetch(:readonly, false),
+ instance_copy: options.fetch(:instance_copy, false),
+ exposed_features: options.fetch(:exposed_features, false)
+ }
end
end
Config = ::Struct.new(:names, :options) do
def option?(name)
options.fetch(name)
end
-
+
def options?(*names)
names.all? { |name| option?(name) }
end
end
Exposed = Class.new(Config)
+ Names = ->(values) do
+ NormalizeNames::AsSymbols.(values, context: 'feature')
+ end
+
def self.config(values)
names = Names[values]
- options = Options.from_names(names)
+ options = Options.from(names: names)
return Config.new(names, options) unless options[:exposed_features]
names.delete(:exposed_features)
options.delete(:exposed_features)