Skip to content

Commit cc72125

Browse files
authored
refactor: abstract resources (#3777)
* refactor: abstract resources * lint
1 parent 21a2aeb commit cc72125

File tree

5 files changed

+24
-5
lines changed

5 files changed

+24
-5
lines changed

app/avo/base_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
module Avo
22
class BaseResource < Avo::Resources::Base
3+
abstract_resource!
4+
35
# Users can override this class to add custom methods for all resources.
46
end
57
end

lib/avo/concerns/abstract_resource.rb

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module Avo
2+
module Concerns
3+
module AbstractResource
4+
extend ActiveSupport::Concern
5+
6+
class_methods do
7+
def abstract_resource! = @abstract_resource = true
8+
9+
def is_abstract? = @abstract_resource == true
10+
end
11+
end
12+
end
13+
end

lib/avo/resources/array_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
module Avo
22
module Resources
33
class ArrayResource < Base
4+
abstract_resource!
5+
46
extend ActiveSupport::DescendantsTracker
57

68
include Avo::Concerns::FindAssociationField

lib/avo/resources/base.rb

+5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ class Base
1919
include Avo::Concerns::HasDiscreetInformation
2020
include Avo::Concerns::RowControlsConfiguration
2121
include Avo::Concerns::SafeCall
22+
include Avo::Concerns::AbstractResource
23+
24+
abstract_resource!
2225

2326
# Avo::Current methods
2427
delegate :context, to: Avo::Current
@@ -84,6 +87,8 @@ def current_user
8487
class_attribute :default_sort_direction, default: :desc
8588
class_attribute :external_link, default: nil
8689

90+
class_attribute :abstract, default: false
91+
8792
# EXTRACT:
8893
class_attribute :ordering
8994

lib/avo/resources/resource_manager.rb

+2-5
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,9 @@ def fetch_resources
4040
load_resources_namespace
4141
end
4242

43-
# All descendants from Avo::Resources::Base except the internal ones
44-
Base.descendants - internal_resources
45-
end
43+
# All descendants from Avo::Resources::Base except the internal abstract ones
4644

47-
def internal_resources
48-
[Avo::BaseResource, Avo::Resources::ArrayResource]
45+
Base.descendants.reject { _1.is_abstract? }
4946
end
5047

5148
def load_resources_namespace

0 commit comments

Comments
 (0)