Class: Grape::Entity::Exposure::Base
- Inherits:
-
Object
- Object
- Grape::Entity::Exposure::Base
show all
- Defined in:
- lib/grape_entity/exposure/base.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(attribute, options, conditions) ⇒ Base
Returns a new instance of Base.
13
14
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/grape_entity/exposure/base.rb', line 13
def initialize(attribute, options, conditions)
@attribute = attribute.try(:to_sym)
@options = options
key = options[:as] || attribute
@key = key.respond_to?(:to_sym) ? key.to_sym : key
@is_safe = options[:safe]
@for_merge = options[:merge]
@attr_path_proc = options[:attr_path]
@documentation = options[:documentation]
@override = options[:override]
@conditions = conditions
end
|
Instance Attribute Details
#attribute ⇒ Object
Returns the value of attribute attribute.
7
8
9
|
# File 'lib/grape_entity/exposure/base.rb', line 7
def attribute
@attribute
end
|
#conditions ⇒ Object
Returns the value of attribute conditions.
7
8
9
|
# File 'lib/grape_entity/exposure/base.rb', line 7
def conditions
@conditions
end
|
#documentation ⇒ Object
Returns the value of attribute documentation.
7
8
9
|
# File 'lib/grape_entity/exposure/base.rb', line 7
def documentation
@documentation
end
|
#for_merge ⇒ Object
Returns the value of attribute for_merge.
7
8
9
|
# File 'lib/grape_entity/exposure/base.rb', line 7
def for_merge
@for_merge
end
|
#is_safe ⇒ Object
Returns the value of attribute is_safe.
7
8
9
|
# File 'lib/grape_entity/exposure/base.rb', line 7
def is_safe
@is_safe
end
|
#override ⇒ Object
Returns the value of attribute override.
7
8
9
|
# File 'lib/grape_entity/exposure/base.rb', line 7
def override
@override
end
|
Class Method Details
.new(attribute, options, conditions, *args, &block) ⇒ Object
9
10
11
|
# File 'lib/grape_entity/exposure/base.rb', line 9
def self.new(attribute, options, conditions, *args, &block)
super(attribute, options, conditions).tap { |e| e.setup(*args, &block) }
end
|
Instance Method Details
#==(other) ⇒ Object
34
35
36
37
38
39
|
# File 'lib/grape_entity/exposure/base.rb', line 34
def ==(other)
self.class == other.class &&
@attribute == other.attribute &&
@options == other.options &&
@conditions == other.conditions
end
|
#attr_path(entity, options) ⇒ Object
101
102
103
104
105
106
107
|
# File 'lib/grape_entity/exposure/base.rb', line 101
def attr_path(entity, options)
if @attr_path_proc
entity.exec_with_object(options, &@attr_path_proc)
else
@key
end
end
|
#conditional? ⇒ Boolean
89
90
91
|
# File 'lib/grape_entity/exposure/base.rb', line 89
def conditional?
!@conditions.empty?
end
|
#conditions_met?(entity, options) ⇒ Boolean
93
94
95
|
# File 'lib/grape_entity/exposure/base.rb', line 93
def conditions_met?(entity, options)
@conditions.all? { |condition| condition.met? entity, options }
end
|
#deep_complex_nesting?(entity) ⇒ Boolean
if we have any nesting exposures with the same name.
48
49
50
|
# File 'lib/grape_entity/exposure/base.rb', line 48
def deep_complex_nesting?(entity)
false
end
|
#dup(&block) ⇒ Object
26
27
28
|
# File 'lib/grape_entity/exposure/base.rb', line 26
def dup(&block)
self.class.new(*dup_args, &block)
end
|
#dup_args ⇒ Object
30
31
32
|
# File 'lib/grape_entity/exposure/base.rb', line 30
def dup_args
[@attribute, @options, @conditions.map(&:dup)]
end
|
#key(entity = nil) ⇒ Object
109
110
111
|
# File 'lib/grape_entity/exposure/base.rb', line 109
def key(entity = nil)
@key.respond_to?(:call) ? entity.exec_with_object(@options, &@key) : @key
end
|
#nesting? ⇒ Boolean
43
44
45
|
# File 'lib/grape_entity/exposure/base.rb', line 43
def nesting?
false
end
|
#override? ⇒ Boolean
120
121
122
|
# File 'lib/grape_entity/exposure/base.rb', line 120
def override?
@override
end
|
#serializable_value(entity, options) ⇒ Object
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
# File 'lib/grape_entity/exposure/base.rb', line 65
def serializable_value(entity, options)
partial_output = valid_value(entity, options)
if partial_output.respond_to?(:serializable_hash)
partial_output.serializable_hash
elsif partial_output.is_a?(Array) && partial_output.all? { |o| o.respond_to?(:serializable_hash) }
partial_output.map(&:serializable_hash)
elsif partial_output.is_a?(Hash)
partial_output.each do |key, value|
partial_output[key] = value.serializable_hash if value.respond_to?(:serializable_hash)
end
else
partial_output
end
end
|
#setup ⇒ Object
41
|
# File 'lib/grape_entity/exposure/base.rb', line 41
def setup; end
|
#should_expose?(entity, options) ⇒ Boolean
97
98
99
|
# File 'lib/grape_entity/exposure/base.rb', line 97
def should_expose?(entity, options)
should_return_key?(options) && conditions_met?(entity, options)
end
|
#should_return_key?(options) ⇒ Boolean
85
86
87
|
# File 'lib/grape_entity/exposure/base.rb', line 85
def should_return_key?(options)
options.should_return_key?(@key)
end
|
#valid?(entity) ⇒ Boolean
52
53
54
55
56
57
58
59
|
# File 'lib/grape_entity/exposure/base.rb', line 52
def valid?(entity)
is_delegatable = entity.delegator.delegatable?(@attribute) || entity.respond_to?(@attribute, true)
if @is_safe
is_delegatable
else
is_delegatable || raise(NoMethodError, "#{entity.class.name} missing attribute `#{@attribute}' on #{entity.object}")
end
end
|
#valid_value(entity, options) ⇒ Object
81
82
83
|
# File 'lib/grape_entity/exposure/base.rb', line 81
def valid_value(entity, options)
value(entity, options) if valid?(entity)
end
|
#value(_entity, _options) ⇒ Object
61
62
63
|
# File 'lib/grape_entity/exposure/base.rb', line 61
def value(_entity, _options)
raise NotImplementedError
end
|
#with_attr_path(entity, options) ⇒ Object
113
114
115
116
117
118
|
# File 'lib/grape_entity/exposure/base.rb', line 113
def with_attr_path(entity, options)
path_part = attr_path(entity, options)
options.with_attr_path(path_part) do
yield
end
end
|