Class: ObjectInspector::Scope

Inherits:
Object
  • Object
show all
Defined in:
lib/object_inspector/scope.rb

Overview

Defines a predicate method that matches #names and responds with ‘true`. This is a prettier way to test for a given type of “scope” within objects.

It is possible to pass in multiple scope names to match on.

‘:all` is a “wild card” scope name, and will match on all scope names.

Passing a block to a scope predicate falls back to the out-of-scope placeholder (‘*` by default) if the scope does not match.

Examples:

ObjectInspector::Scope.new
# => <ObjectInspector::Scope :: ["self"]>

ObjectInspector::Scope.new(:my_custom_scope)
# => <ObjectInspector::Scope :: ["my_custom_scope"]>

ObjectInspector::Scope.new(%w[verbose complex])
# => <ObjectInspector::Scope :: ["complex", "verbose"]>

See Also:

  • http://api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*names) ⇒ Scope

:reek:FeatureEnvy



34
35
36
37
# File 'lib/object_inspector/scope.rb', line 34

def initialize(*names)
  names = names.empty? ? %w[self] : names.flatten
  @names = names.map! { |name| String(name) }.sort!
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args) ⇒ Object (private)



109
110
111
112
113
114
115
116
# File 'lib/object_inspector/scope.rb', line 109

def method_missing(method_name, *args, &)
  if method_name[-1] == "?"
    scope_name = method_name[0..-2]
    evaluate_match(scope_name, &)
  else
    super
  end
end

Instance Attribute Details

#namesArray<#to_s>



29
30
31
# File 'lib/object_inspector/scope.rb', line 29

def names
  @names
end

Instance Method Details

#==(other) ⇒ TrueClass, FalseClass Also known as: eql?

Compare self with the passed in object.



88
89
90
# File 'lib/object_inspector/scope.rb', line 88

def ==(other)
  names == Array(other).map(&:to_s).sort!
end

#inspectObject



103
104
105
# File 'lib/object_inspector/scope.rb', line 103

def inspect
  "<#{self.class.name} :: #{names.inspect}>"
end

#join_flags(flags, separator: ObjectInspector.configuration.flags_separator) ⇒ Object

Join the passed in flags with the passed in separator.



54
55
56
57
58
59
# File 'lib/object_inspector/scope.rb', line 54

def join_flags(
  flags,
  separator: ObjectInspector.configuration.flags_separator
)
  _join(flags, separator)
end

#join_info(items, separator: ObjectInspector.configuration.info_separator) ⇒ Object

Join the passed in items with the passed in separator.



76
77
78
79
80
81
# File 'lib/object_inspector/scope.rb', line 76

def join_info(
  items,
  separator: ObjectInspector.configuration.info_separator
)
  _join(items, separator)
end

#join_issues(issues, separator: ObjectInspector.configuration.issues_separator) ⇒ Object

Join the passed in issues with the passed in separator.



65
66
67
68
69
70
# File 'lib/object_inspector/scope.rb', line 65

def join_issues(
  issues,
  separator: ObjectInspector.configuration.issues_separator
)
  _join(issues, separator)
end

#join_name(parts, separator: ObjectInspector.configuration.name_separator) ⇒ Object

Join the passed in name parts with the passed in separator.



43
44
45
46
47
48
# File 'lib/object_inspector/scope.rb', line 43

def join_name(
  parts,
  separator: ObjectInspector.configuration.name_separator
)
  _join(parts, separator)
end

#to_aArray<#to_s>



99
100
101
# File 'lib/object_inspector/scope.rb', line 99

def to_a
  names
end

#to_s(separator: ", ") ⇒ String



94
95
96
# File 'lib/object_inspector/scope.rb', line 94

def to_s(separator: ", ")
  to_a.join(separator)
end