Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/controllers/atomic_admin/v1/admin_controller.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module AtomicAdmin::V1
class AdminController < ActionController::API
include RequireJwtToken

before_action :validate_admin_token

rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module AtomicAdmin::V1
class ApplicationInstancesController < AdminController
include Filtering
include AtomicAdmin::Filtering

allowed_sort_columns %w[nickname]
allowed_search_columns %w[nickname]
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/atomic_admin/v1/applications_controller.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module AtomicAdmin::V1
class ApplicationsController < AdminController
include Filtering
include AtomicAdmin::Filtering

allowed_sort_columns %w[name]
allowed_search_columns %w[name]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module AtomicAdmin::V1
class LtiPlatformsController < AdminController
include Filtering
include AtomicAdmin::Filtering

allowed_search_columns %w[iss]
allowed_sort_columns %w[iss]
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/atomic_admin/v1/sites_controller.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module AtomicAdmin::V1
class SitesController < AdminController
include Filtering
include AtomicAdmin::Filtering

allowed_search_columns %w[url]
allowed_sort_columns %w[url]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module AtomicAdmin::V1
class TenantClientIdStrategiesController < AdminController
include Filtering
include AtomicAdmin::Filtering

allowed_search_columns %w[client_id, iss]
allowed_sort_columns %w[client_id, iss]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module AtomicAdmin::V1
class TenantDeploymentsController < AdminController
include Filtering
include AtomicAdmin::Filtering

allowed_search_columns %w[deployment_id, iss]
allowed_sort_columns %w[deployment_id, iss]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module AtomicAdmin::V1
class TenantPlatformGuidStrategiesController < AdminController
include Filtering
include AtomicAdmin::Filtering

allowed_search_columns %w[platform_guid, iss]
allowed_sort_columns %w[platform_guid, iss]
Expand Down
9 changes: 9 additions & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,15 @@
resources :tenant_platform_guid_strategies
resources :tenant_deployments
resources :stats

AtomicAdmin.application_instance_interactions.for_type(:resource).each do |interaction|
controller_name = interaction.key.to_s.pluralize
resources controller_name do
collection do
get :interactions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this used?

end
end
end
end
end
end
Expand Down
1 change: 1 addition & 0 deletions lib/atomic_admin.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
require "atomic_admin/jwt_token"
require "atomic_admin/schema"
require "atomic_admin/interaction"
require "atomic_admin/filtering"

module AtomicAdmin
mattr_accessor :admin_jwks_url
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module Filtering
module AtomicAdmin::Filtering
extend ActiveSupport::Concern

included do
Expand Down
59 changes: 6 additions & 53 deletions lib/atomic_admin/interaction.rb
Original file line number Diff line number Diff line change
@@ -1,55 +1,8 @@
module AtomicAdmin::Interaction
class Manager
def initialize
@interactions = {}
@curr_index = 0
end

def add(key, **kwargs)
@interactions[key] = {
**kwargs,
order: @curr_index,
}

if @interactions[key][:type] == :analytics && @interactions[key][:controller].present?
controller_class = @interactions[key][:controller]
Rails.application.config.to_prepare do
AtomicAdmin::Api::Admin::V1.const_set(:StatsController, controller_class.constantize)
end
end
@curr_index += 1
end

def get(key)
@interactions[key]
end
require_relative 'interaction/base'
require_relative 'interaction/json_form'
require_relative 'interaction/analytics'
require_relative 'interaction/resource'
require_relative 'interaction/manager'

def tap
yield self
self
end

def resolve(**kwargs)
sorted = @interactions.sort_by { |key, interaction| interaction[:order] }
sorted.map do |key, interaction|
type = interaction[:type]
hash = {
key: key,
type: type,
title: interaction[:title],
icon: interaction[:icon],
}

case type
when :jsonform
schema_factory = interaction[:schema]
schema = schema_factory.new(**kwargs)
hash[:schema] = schema.schema
hash[:uischema] = schema.uischema
end

hash
end
end
end
module AtomicAdmin::Interaction
end
13 changes: 13 additions & 0 deletions lib/atomic_admin/interaction/analytics.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module AtomicAdmin::Interaction
class Analytics < AtomicAdmin::Interaction::Base

def initialize(controller:, **kwargs)
super(**kwargs)
@controller = controller

Rails.application.config.to_prepare do
AtomicAdmin::Api::Admin::V1.const_set(:StatsController, @controller.constantize)
end
end
end
end
23 changes: 23 additions & 0 deletions lib/atomic_admin/interaction/base.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
module AtomicAdmin::Interaction
class Base
attr_accessor :key, :type, :key, :title, :icon, :order

def initialize(key:, type:, title: nil, icon: nil, order: 0, **kwargs)
@key = key
@title = title
@icon = icon
@order = order
@data = kwargs
@type = type
end

def resolve(**kwargs)
{
key: key,
type: type,
title: title,
icon: icon,
}
end
end
end
19 changes: 19 additions & 0 deletions lib/atomic_admin/interaction/json_form.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
module AtomicAdmin::Interaction
class JsonForm < AtomicAdmin::Interaction::Base

def initialize(schema:, **kwargs)
super(**kwargs)
@schema_factory = schema
end

def resolve(**kwargs)
hash = super(**kwargs)

schema = @schema_factory.new(**kwargs)
hash[:schema] = schema.schema
hash[:uischema] = schema.uischema

hash
end
end
end
57 changes: 57 additions & 0 deletions lib/atomic_admin/interaction/manager.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
module AtomicAdmin::Interaction
class Manager
include Enumerable

INTERACTIONS = {
analytics: AtomicAdmin::Interaction::Analytics,
jsonform: AtomicAdmin::Interaction::JsonForm,
resource: AtomicAdmin::Interaction::Resource,
}.freeze

def initialize
@interactions = {}
@curr_index = 0
end

def each(&block)
@interactions.each do |key, interaction|
block.call(key, interaction)
end
end

def add(key, type:, **kwargs)
interaction_cls = INTERACTIONS[type] || AtomicAdmin::Interaction::Base

interaction = interaction_cls.new(key:, type:, order: @curr_index, **kwargs)
@interactions[key] = interaction
@curr_index += 1

nil
end

def get(key)
@interactions[key]
end

def [](key)
@interactions[key]
end

def tap
yield self
self
end

def for_type(type)
@interactions.values.select { |interaction| interaction.type == type }
end


def resolve(**kwargs)
sorted = @interactions.sort_by { |key, interaction| interaction.order }
sorted.map do |key, interaction|
interaction.resolve(**kwargs)
end
end
end
end
45 changes: 45 additions & 0 deletions lib/atomic_admin/interaction/resource.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
module AtomicAdmin::Interaction
class Resource < AtomicAdmin::Interaction::Base

def initialize(controller:, table:, actions: [], plural:, singular:, **kwargs)
super(**kwargs)
@controller = controller
@table = table
@actions = actions
@plural = plural
@singular = singular

Rails.application.config.to_prepare do
controller_name = controller.demodulize
AtomicAdmin::Api::Admin::V1.const_set(controller_name, controller.constantize)
end
end

def resolve(**kwargs)
hash = super(**kwargs)

hash[:plural] = @plural
hash[:singular] = @singular
hash[:table] = @table

hash[:actions] = @actions.map do |action|
action_hash = {
type: action[:type],
label: action[:label],
}

if action[:schema]
schema_factory = action[:schema]
schema = schema_factory.new(**kwargs)

action_hash[:schema] = schema.schema
action_hash[:uischema] = schema.uischema
end

action_hash
end

hash
end
end
end