27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/exploration.rb', line 27
def initialize(object, depth: 5, class_filter: nil, attribute_filter: nil, attribute_limit: nil, association_filter: nil, parent_object: nil)
raise TypeError, "Parameter 'class_filter' must be Array or Hash but is #{class_filter.class}." unless class_filter.nil? || class_filter.is_a?(Array) || class_filter.is_a?(Hash)
raise TypeError, "Parameter 'association_filter' must be Array but is #{association_filter.class}." unless association_filter.nil? || association_filter.is_a?(Array)
raise TypeError, "Parameter 'association_filter' must only contain values #{ASSOCIATION_FILTER_VALUES.to_s[1..-2]}." unless association_filter.nil? || association_filter.empty? || (association_filter & ASSOCIATION_FILTER_VALUES).any?
@object = object
@depth = depth
@parent_object = parent_object
@attribute_limit = attribute_limit || ActiveExplorer::Config.attribute_limit
@attribute_filter = attribute_filter || ActiveExplorer::Config.attribute_filter
@hash = { class_name: make_safe(@object.class.name),
attributes: attributes }
unless @depth.zero?
@class_filter = class_filter || ActiveExplorer::Config.class_filter
@class_filter = { show: @class_filter } if @class_filter.is_a?(Array)
if @class_filter
[:show, :ignore].each do |group|
@class_filter[group] = @class_filter[group].present? ? each_val_to_s(@class_filter[group]) : []
end
end
@association_filter = association_filter || ActiveExplorer::Config.association_filter
@association_filter = ASSOCIATION_FILTER_VALUES if @association_filter.present? && @association_filter.include?(:all)
@associations = associtations(@object, @class_filter, @association_filter)
subobject_hash = subobjects_hash(@object, @associations)
@hash[:subobjects] = subobject_hash unless subobject_hash.empty?
end
end
|