Class: IronAdmin::Adapters::Http
- Inherits:
-
Base
- Object
- Base
- IronAdmin::Adapters::Http
show all
- Defined in:
- lib/iron_admin/adapters/http.rb,
lib/iron_admin/adapters/http/query.rb,
lib/iron_admin/adapters/http/record.rb,
lib/iron_admin/adapters/http/connection.rb,
lib/iron_admin/adapters/http/model_proxy.rb,
lib/iron_admin/adapters/http/configuration.rb,
lib/iron_admin/adapters/http/type_inferrer.rb,
lib/iron_admin/adapters/http/column_descriptor.rb
Overview
HTTP REST API adapter — enables IronAdmin to manage resources
from external REST APIs with convention-over-configuration.
Fields are auto-discovered from the first API response.
Faraday is used as the HTTP transport (lazy loaded).
Defined Under Namespace
Modules: TypeInferrer
Classes: Configuration, Connection, ModelProxy, Query, Record
Constant Summary
collapse
- ColumnDescriptor =
Uses the shared ColumnDescriptor from Adapters::Base.
IronAdmin::Adapters::Base::ColumnDescriptor
Constants inherited
from Base
Base::TRUTHY_VALUES
Instance Attribute Summary collapse
-
#http_config ⇒ Object
writeonly
Allows injecting a pre-built configuration (for testing or per-resource override).
Attributes inherited from Base
#model_class
Instance Method Summary
collapse
-
#all ⇒ Object
-
#association(_name) ⇒ Object
-
#associations(_kind = nil) ⇒ Object
-
#attachments ⇒ Object
-
#build(attrs = {}) ⇒ Object
-
#column_names ⇒ Object
-
#columns ⇒ Object
--- Schema Introspection ---.
-
#count(scope = nil) ⇒ Object
-
#destroy!(record) ⇒ Object
-
#distinct_values(column) ⇒ Object
-
#enums ⇒ Object
-
#filter(scope, column, value) ⇒ Object
-
#find(id) ⇒ Object
-
#find_by(attrs) ⇒ Object
-
#find_each(scope) ⇒ Object
-
#has_column?(name) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix.
-
#limit(scope, max) ⇒ Object
-
#order_by(scope, column, direction) ⇒ Object
-
#pagy_method ⇒ Object
-
#pluck(scope, column) ⇒ Object
-
#preload(scope, _association_names) ⇒ Object
-
#query_builder_class ⇒ Object
-
#record_changes(record) ⇒ Object
--- Adapter-Agnostic Interface ---.
-
#rich_text_attributes ⇒ Object
-
#save(record) ⇒ Object
-
#search_column(scope, column, query) ⇒ Object
-
#search_columns(scope, columns, query) ⇒ Object
-
#table_name ⇒ Object
-
#transaction ⇒ Object
-
#unscope_column(scope, _column) ⇒ Object
--- Scope Manipulation ---.
-
#update(record, attrs) ⇒ Object
-
#wrap_rollback ⇒ Object
Methods inherited from Base
#cast_boolean, #create_record, #find_by_keys, #human_name, #initialize, #polymorphic_inverse_classes, #primary_key, #resource_name, #update_record
Instance Attribute Details
#http_config=(value) ⇒ Object
Allows injecting a pre-built configuration (for testing or per-resource override).
190
191
192
|
# File 'lib/iron_admin/adapters/http.rb', line 190
def http_config=(value)
@http_config = value
end
|
Instance Method Details
#all ⇒ Object
61
62
63
|
# File 'lib/iron_admin/adapters/http.rb', line 61
def all
Query.new(connection)
end
|
#association(_name) ⇒ Object
41
42
43
|
# File 'lib/iron_admin/adapters/http.rb', line 41
def association(_name)
nil
end
|
#associations(_kind = nil) ⇒ Object
37
38
39
|
# File 'lib/iron_admin/adapters/http.rb', line 37
def associations(_kind = nil)
[]
end
|
#attachments ⇒ Object
45
46
47
|
# File 'lib/iron_admin/adapters/http.rb', line 45
def attachments
{}
end
|
#build(attrs = {}) ⇒ Object
114
115
116
|
# File 'lib/iron_admin/adapters/http.rb', line 114
def build(attrs = {})
Record.new(attrs.merge(_persisted: false))
end
|
#column_names ⇒ Object
25
26
27
|
# File 'lib/iron_admin/adapters/http.rb', line 25
def column_names
discovered_columns.map(&:name)
end
|
#columns ⇒ Object
--- Schema Introspection ---
21
22
23
|
# File 'lib/iron_admin/adapters/http.rb', line 21
def columns
discovered_columns
end
|
#count(scope = nil) ⇒ Object
98
99
100
|
# File 'lib/iron_admin/adapters/http.rb', line 98
def count(scope = nil)
(scope || all).count
end
|
#destroy!(record) ⇒ Object
147
148
149
|
# File 'lib/iron_admin/adapters/http.rb', line 147
def destroy!(record)
connection.delete(record.id.to_s)
end
|
#distinct_values(column) ⇒ Object
90
91
92
|
# File 'lib/iron_admin/adapters/http.rb', line 90
def distinct_values(column)
all.pluck(column).compact.uniq.sort_by(&:to_s)
end
|
#enums ⇒ Object
33
34
35
|
# File 'lib/iron_admin/adapters/http.rb', line 33
def enums
{}
end
|
#filter(scope, column, value) ⇒ Object
74
75
76
|
# File 'lib/iron_admin/adapters/http.rb', line 74
def filter(scope, column, value)
scope.where(column => value)
end
|
#find(id) ⇒ Object
65
66
67
68
|
# File 'lib/iron_admin/adapters/http.rb', line 65
def find(id)
data = connection.get_one(id.to_s)
Record.new(data)
end
|
#find_by(attrs) ⇒ Object
70
71
72
|
# File 'lib/iron_admin/adapters/http.rb', line 70
def find_by(attrs)
all.where(attrs).first
end
|
#find_each(scope) ⇒ Object
165
166
167
|
# File 'lib/iron_admin/adapters/http.rb', line 165
def find_each(scope, &)
scope.each(&)
end
|
#has_column?(name) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix
29
30
31
|
# File 'lib/iron_admin/adapters/http.rb', line 29
def has_column?(name) column_names.include?(name.to_s)
end
|
#limit(scope, max) ⇒ Object
82
83
84
|
# File 'lib/iron_admin/adapters/http.rb', line 82
def limit(scope, max)
scope.limit(max)
end
|
#order_by(scope, column, direction) ⇒ Object
78
79
80
|
# File 'lib/iron_admin/adapters/http.rb', line 78
def order_by(scope, column, direction)
scope.order(column => direction)
end
|
#pagy_method ⇒ Object
185
186
187
|
# File 'lib/iron_admin/adapters/http.rb', line 185
def pagy_method
:pagy
end
|
#pluck(scope, column) ⇒ Object
94
95
96
|
# File 'lib/iron_admin/adapters/http.rb', line 94
def pluck(scope, column)
scope.pluck(column)
end
|
#preload(scope, _association_names) ⇒ Object
86
87
88
|
# File 'lib/iron_admin/adapters/http.rb', line 86
def preload(scope, _association_names)
scope
end
|
#query_builder_class ⇒ Object
#record_changes(record) ⇒ Object
--- Adapter-Agnostic Interface ---
171
172
173
|
# File 'lib/iron_admin/adapters/http.rb', line 171
def record_changes(record)
record.previous_changes
end
|
#rich_text_attributes ⇒ Object
49
50
51
|
# File 'lib/iron_admin/adapters/http.rb', line 49
def rich_text_attributes
[]
end
|
#save(record) ⇒ Object
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
# File 'lib/iron_admin/adapters/http.rb', line 118
def save(record)
if record.persisted?
data = connection.patch(record.id.to_s, record.attributes.except("id"))
else
data = connection.post(record.attributes.except("id"))
return add_api_errors(record, data) unless data.is_a?(Hash) && data["id"]
end
return add_api_errors(record, data) if data.is_a?(Hash) && data.key?("errors")
record.assign_attributes(data) if data.is_a?(Hash)
record.mark_as_persisted
true
rescue IronAdmin::AdapterError
false
end
|
#search_column(scope, column, query) ⇒ Object
104
105
106
|
# File 'lib/iron_admin/adapters/http.rb', line 104
def search_column(scope, column, query)
scope.where("search[#{column}]" => query)
end
|
#search_columns(scope, columns, query) ⇒ Object
108
109
110
|
# File 'lib/iron_admin/adapters/http.rb', line 108
def search_columns(scope, columns, query)
scope.where(q: query, search_fields: columns.join(","))
end
|
#table_name ⇒ Object
55
56
57
|
# File 'lib/iron_admin/adapters/http.rb', line 55
def table_name
nil
end
|
#transaction ⇒ Object
153
154
155
|
# File 'lib/iron_admin/adapters/http.rb', line 153
def transaction
yield
end
|
#unscope_column(scope, _column) ⇒ Object
--- Scope Manipulation ---
159
160
161
|
# File 'lib/iron_admin/adapters/http.rb', line 159
def unscope_column(scope, _column)
scope
end
|
#update(record, attrs) ⇒ Object
135
136
137
138
139
140
141
142
143
144
145
|
# File 'lib/iron_admin/adapters/http.rb', line 135
def update(record, attrs)
data = connection.patch(record.id.to_s, attrs)
return add_api_errors(record, data) if data.is_a?(Hash) && data.key?("errors")
record.assign_attributes(attrs)
record.assign_attributes(data) if data.is_a?(Hash)
record.mark_as_persisted
true
rescue IronAdmin::AdapterError
false
end
|
#wrap_rollback ⇒ Object
175
176
177
178
179
|
# File 'lib/iron_admin/adapters/http.rb', line 175
def wrap_rollback
yield
rescue IronAdmin::Rollback
nil
end
|