Class: HakumiComponents::Rails::ModelReflection

Inherits:
Object
  • Object
show all
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

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

Returns:

  • (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

Returns:

  • (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

#errorsObject



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_keyObject



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

Returns:

  • (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