Class: HakumiComponents::Rails::ModelReflection
- Inherits:
-
Object
- Object
- HakumiComponents::Rails::ModelReflection
- Extended by:
- T::Sig
- Defined in:
- lib/hakumi_components/rails/model_reflection.rb
Defined Under Namespace
Classes: ColumnInfo
Class Method Summary collapse
Instance Method Summary collapse
- #active_record_object? ⇒ Boolean
- #anonymous_class? ⇒ Boolean
- #attribute_value(attribute) ⇒ Object
- #column_for(attribute) ⇒ Object
- #errors ⇒ Object
- #human_attribute_name(attribute) ⇒ Object
-
#initialize(object) ⇒ ModelReflection
constructor
A new instance of ModelReflection.
- #model_i18n_key ⇒ Object
- #validations_available? ⇒ Boolean
- #validators_for(attribute) ⇒ Object
Constructor Details
#initialize(object) ⇒ ModelReflection
Returns a new instance of ModelReflection.
33 34 35 |
# File 'lib/hakumi_components/rails/model_reflection.rb', line 33 def initialize(object) @object = T.let(object, T.untyped) end |
Class Method Details
.for(object) ⇒ Object
28 29 30 |
# File 'lib/hakumi_components/rails/model_reflection.rb', line 28 def self.for(object) new(object) end |
Instance Method Details
#active_record_object? ⇒ Boolean
90 91 92 93 94 95 |
# File 'lib/hakumi_components/rails/model_reflection.rb', line 90 def active_record_object? return false unless defined?(ActiveRecord::Base) return false unless @object @object.is_a?(ActiveRecord::Base) end |
#anonymous_class? ⇒ Boolean
82 83 84 85 86 87 |
# File 'lib/hakumi_components/rails/model_reflection.rb', line 82 def anonymous_class? return true unless @object class_name = @object.class.name class_name.nil? || class_name.empty? end |
#attribute_value(attribute) ⇒ Object
116 117 118 119 120 121 122 |
# File 'lib/hakumi_components/rails/model_reflection.rb', line 116 def attribute_value(attribute) return nil unless @object&.respond_to?(attribute) @object.public_send(attribute) rescue StandardError nil end |
#column_for(attribute) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/hakumi_components/rails/model_reflection.rb', line 103 def column_for(attribute) return nil unless active_record_object? owner = @object&.class return nil unless owner&.respond_to?(:columns_hash) columns_hash = owner.public_send(:columns_hash) return nil unless columns_hash.is_a?(Hash) build_column_info(columns_hash[attribute.to_s]) end |
#errors ⇒ Object
74 75 76 77 78 79 |
# File 'lib/hakumi_components/rails/model_reflection.rb', line 74 def errors return nil unless @object&.respond_to?(:errors) value = @object.public_send(:errors) value.is_a?(ActiveModel::Errors) ? value : nil end |
#human_attribute_name(attribute) ⇒ Object
51 52 53 54 55 56 57 |
# File 'lib/hakumi_components/rails/model_reflection.rb', line 51 def human_attribute_name(attribute) owner = @object&.class return nil unless owner&.respond_to?(:human_attribute_name) value = owner.public_send(:human_attribute_name, attribute) value.is_a?(String) ? value : nil end |
#model_i18n_key ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/hakumi_components/rails/model_reflection.rb', line 60 def model_i18n_key owner = @object&.class return nil unless owner&.respond_to?(:model_name) model_name = owner.public_send(:model_name) return nil unless model_name.respond_to?(:i18n_key) key = model_name.public_send(:i18n_key) return key.to_sym if key.is_a?(String) || key.is_a?(Symbol) nil end |
#validations_available? ⇒ Boolean
98 99 100 |
# File 'lib/hakumi_components/rails/model_reflection.rb', line 98 def validations_available? !validator_owner.nil? end |
#validators_for(attribute) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/hakumi_components/rails/model_reflection.rb', line 38 def validators_for(attribute) owner = validator_owner return [] unless owner raw_validators = owner.public_send(:validators_on, attribute) return [] unless raw_validators.is_a?(Array) raw_validators.filter_map do |validator| validator if validator.is_a?(ActiveModel::Validator) end end |