Skip to content

Commit a575bde

Browse files
committed
WIP: fix read_value method in Administrate::Field::Base
1 parent f377679 commit a575bde

File tree

3 files changed

+45
-7
lines changed

3 files changed

+45
-7
lines changed

lib/administrate/field/base.rb

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,10 @@ def self.permitted_attribute(attr, _options = nil)
3434

3535
def initialize(attribute, data, page, options = {})
3636
@attribute = attribute
37-
@data = data
3837
@page = page
3938
@resource = options.delete(:resource)
4039
@options = options
41-
@data = read_value if @data.nil?
40+
@data = read_value(data)
4241
end
4342

4443
def html_class
@@ -53,15 +52,17 @@ def name
5352
attribute.to_s
5453
end
5554

56-
def read_value
55+
def read_value(data = nil)
5756
if options.key?(:getter)
5857
if options[:getter].respond_to?(:call)
5958
options[:getter].call(self)
6059
else
61-
resource&.public_send(options[:getter])
60+
resource.try(options[:getter])
6261
end
62+
elsif data.nil?
63+
resource.try(attribute)
6364
else
64-
resource&.public_send(attribute)
65+
data
6566
end
6667
end
6768

spec/lib/fields/base_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,11 +184,11 @@
184184
end
185185

186186
it "reads the value from the resource with a custom getter block" do
187-
resource = double
187+
resource = double("Model", custom_getter: "value")
188188
field = field_class.new(:attribute, :date, :page, resource: resource, getter: ->(field) { field.resource.custom_getter })
189189

190190
expect(resource).to receive(:custom_getter)
191-
field.read_value
191+
expect(field.read_value).to eq("value")
192192
end
193193

194194
it "returns nil if the resource is nil" do
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
require "rails_helper"
2+
require "administrate/field/base"
3+
4+
module Administrate
5+
module Field
6+
class VirtualField < Field::Base
7+
def self.searchable?
8+
false
9+
end
10+
11+
def read_value(data = nil)
12+
resource.inspect
13+
end
14+
15+
def foobar
16+
"This is a Foobar: #{data}"
17+
end
18+
end
19+
end
20+
end
21+
22+
describe Administrate::Field::VirtualField do
23+
describe "#foobar" do
24+
it "displays the foobar" do
25+
resource = double("Model", inspect: "Inspecting")
26+
27+
field = Administrate::Field::VirtualField.new(
28+
:virtual_field,
29+
nil,
30+
:show,
31+
resource: resource
32+
)
33+
34+
expect(field.foobar).to eq("This is a Foobar: Inspecting")
35+
end
36+
end
37+
end

0 commit comments

Comments
 (0)