Sha256: d908662cf281ffc359befb2495c5f892fe82898d72a079a99be2a0cbc12373b4
Contents?: true
Size: 1.38 KB
Versions: 1
Compression:
Stored size: 1.38 KB
Contents
# frozen_string_literal: true require "active_support/concern" require_relative "./props/base" require_relative "./props/boolean" require_relative "./props/enum" require_relative "./props/hash" require_relative "./props/number" require_relative "./props/number_array" require_relative "./props/string" require_relative "./props/proc" module Playbook module Props extend ActiveSupport::Concern def initialize(prop_values, &block) @values = { children: block }.merge(prop_values) self.class.props.each do |key, definition| definition.validate! @values[key] end end def prop(name) self.class.props[name].value @values[name] end def generate_classname(*name_parts) [ name_parts.compact.join("_"), prop(:classname), ].compact.join(" ") end included do prop :id prop :data, type: Playbook::Props::Hash, default: {} prop :classname prop :aria, type: Playbook::Props::Hash, default: {} prop :children, type: Playbook::Props::Proc end class_methods do def props @props end def prop(name, type: Playbook::Props::String, **options) @props ||= {} @props[name] = type.new(**options) define_method(name) { prop(name) } end def partial(path) define_method(:to_partial_path) { path } end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
playbook_ui-2.9.3 | app/pb_kits/playbook/props.rb |