Class: Avo::App
- Inherits:
-
Object
- Object
- Avo::App
- Includes:
- Concerns::FetchesThings
- Defined in:
- lib/avo/app.rb
Class Method Summary collapse
- .boot ⇒ Object
- .check_bad_resources ⇒ Object
- .debug_report(request = nil) ⇒ Object
- .get_thread_count ⇒ Object
- .has_main_menu? ⇒ Boolean
- .has_profile_menu? ⇒ Boolean
- .init(request:, context:, current_user:, view_context:, params:) ⇒ Object
- .init_dashboards ⇒ Object
-
.init_fields ⇒ Object
This method will find all fields available in the Avo::Fields namespace and add them to the fields class_variable array so later we can instantiate them on our resources.
- .init_resources ⇒ Object
- .load_field(method_name, klass) ⇒ Object
- .main_menu ⇒ Object
- .profile_menu ⇒ Object
-
.root_path(paths: [], query: {}, **args) ⇒ Object
Renerate a dynamic root path using the URIService.
Class Method Details
.boot ⇒ Object
20 21 22 23 24 25 26 27 28 |
# File 'lib/avo/app.rb', line 20 def boot init_fields if Rails.cache.instance_of?(ActiveSupport::Cache::NullStore) self.cache_store ||= ActiveSupport::Cache::MemoryStore.new else self.cache_store = Rails.cache end end |
.check_bad_resources ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/avo/app.rb', line 89 def check_bad_resources resources.each do |resource| has_model = resource.model_class.present? unless has_model possible_model = resource.class.to_s.gsub 'Resource', '' Avo::App..push({ url: "https://docs.avohq.io/2.0/resources.html#custom-model-class", target: "_blank", message: "#{resource.class.to_s} does not have a valid model assigned. It failed to find the #{possible_model} model. \n\r Please create that model or assign one using self.model_class = YOUR_MODEL" }) end end end |
.debug_report(request = nil) ⇒ Object
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/avo/app.rb', line 159 def debug_report(request = nil) payload = {} hq = Avo::Licensing::HQ.new(request) payload[:thread_count] = get_thread_count payload[:hq_payload] = hq&.payload payload[:license_id] = Avo::App&.license&.id payload[:license_valid] = Avo::App&.license&.valid? payload[:license_payload] = Avo::App&.license&.payload payload[:license_response] = Avo::App&.license&.response payload[:license_abilities] = Avo::App&.license&.abilities payload[:cache_store] = self.cache_store&.class&.to_s payload[:avo_metadata] = hq&. payload[:app_timezone] = Time.current.zone payload[:cache_key] = Avo::Licensing::HQ.cache_key payload[:cache_key_contents] = hq&.cached_response payload rescue => e e end |
.get_thread_count ⇒ Object
182 183 184 185 186 |
# File 'lib/avo/app.rb', line 182 def get_thread_count Thread.list.select {|thread| thread.status == "run"}.count rescue => e e end |
.has_main_menu? ⇒ Boolean
131 132 133 134 135 136 |
# File 'lib/avo/app.rb', line 131 def return false if Avo::App.license.lacks_with_trial(:menu_editor) return false if Avo.configuration..nil? true end |
.has_profile_menu? ⇒ Boolean
138 139 140 141 142 143 |
# File 'lib/avo/app.rb', line 138 def return false if Avo::App.license.lacks_with_trial(:menu_editor) return false if Avo.configuration..nil? true end |
.init(request:, context:, current_user:, view_context:, params:) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/avo/app.rb', line 38 def init(request:, context:, current_user:, view_context:, params:) self. = [] self.context = context self.current_user = current_user self.params = params self.request = request self.view_context = view_context self.license = Licensing::LicenseManager.new(Licensing::HQ.new(request).response).license self.translation_enabled = license.has(:localization) # Set the current host for ActiveStorage begin if Rails::VERSION::MAJOR === 6 ActiveStorage::Current.host = request.base_url elsif Rails::VERSION::MAJOR === 7 ActiveStorage::Current. = request.base_url end rescue => exception Rails.logger.debug "[Avo] Failed to set ActiveStorage::Current.url_options, #{exception.inspect}" end check_bad_resources init_resources init_dashboards if license.has_with_trial(:dashboards) end |
.init_dashboards ⇒ Object
121 122 123 124 125 126 127 128 129 |
# File 'lib/avo/app.rb', line 121 def init_dashboards self.dashboards = Dashboards::BaseDashboard.descendants .select do |dashboard| dashboard != Dashboards::BaseDashboard end .uniq do |dashboard| dashboard.id end end |
.init_fields ⇒ Object
This method will find all fields available in the Avo::Fields namespace and add them to the fields class_variable array so later we can instantiate them on our resources.
If the field has their `def_method` set up it will follow that convention, if not it will snake_case the name:
Avo::Fields::TextField -> text Avo::Fields::DateTimeField -> date_time
72 73 74 75 76 77 78 79 80 |
# File 'lib/avo/app.rb', line 72 def init_fields Avo::Fields::BaseField.descendants.each do |class_name| next if class_name.to_s == "BaseField" if class_name.to_s.end_with? "Field" load_field class_name.get_field_name, class_name end end end |
.init_resources ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/avo/app.rb', line 105 def init_resources self.resources = BaseResource.descendants .select do |resource| # Remove the BaseResource. We only need the descendants resource != BaseResource end .uniq do |klass| # On invalid resource configuration the resource classes get duplicated in `ObjectSpace` # We need to de-duplicate them klass.name end .map do |resource| resource.new if resource.is_a? Class end end |
.load_field(method_name, klass) ⇒ Object
82 83 84 85 86 87 |
# File 'lib/avo/app.rb', line 82 def load_field(method_name, klass) fields.push( name: method_name, class: klass ) end |
.main_menu ⇒ Object
145 146 147 148 149 150 |
# File 'lib/avo/app.rb', line 145 def # Return empty menu if the app doesn't have the profile menu configured return Avo::Menu::Builder.new.build unless Avo::Menu::Builder.(&Avo.configuration.) end |
.profile_menu ⇒ Object
152 153 154 155 156 157 |
# File 'lib/avo/app.rb', line 152 def # Return empty menu if the app doesn't have the profile menu configured return Avo::Menu::Builder.new.build unless Avo::Menu::Builder.(&Avo.configuration.) end |
.root_path(paths: [], query: {}, **args) ⇒ Object
Renerate a dynamic root path using the URIService
31 32 33 34 35 36 |
# File 'lib/avo/app.rb', line 31 def root_path(paths: [], query: {}, **args) Avo::Services::URIService.parse(view_context.avo.root_url.to_s) .append_paths(paths) .append_query(query) .to_s end |