class Superhosting::Controller::Site
Constants
- DOMAIN_NAME_FORMAT
Public Class Methods
new(**kwargs)
click to toggle source
Calls superclass method
Superhosting::Base::new
# File lib/superhosting/controller/site.rb, line 6 def initialize(**kwargs) super(**kwargs) @container_controller = self.get_controller(Container) self.index end
Public Instance Methods
_config_options(name:, on_reconfig:, on_config:)
click to toggle source
# File lib/superhosting/controller/site/states.rb, line 29 def _config_options(name:, on_reconfig:, on_config:) mapper = self.index[name][:mapper] container_mapper = self.index[name][:container_mapper] registry_mapper = container_mapper.lib.registry.sites.f(name) @container_controller._config_options(name: container_mapper.name, on_reconfig: on_reconfig, on_config: on_config).merge! ({ site: mapper, registry_mapper: registry_mapper }) end
_list(container_name: nil)
click to toggle source
# File lib/superhosting/controller/site.rb, line 20 def _list(container_name: nil) def data(name) mapper = self.index[name][:mapper] docker_options = mapper.docker.grep_files.map {|f| [f.name, f.value] }.to_h configs = mapper.f('config.rb', overlay: false).reverse.map {|f| f.value } { docker: docker_options, configs: configs, aliases: self.index[name][:aliases]-[name] } end sites = {} if container_name container_mapper = @container_controller.index[container_name][:mapper] container_mapper.sites.grep_dirs.each do |mapper| name = mapper.name if (state = container_mapper.lib.sites.f(name).state).file? sites[name] = { state: state.value, container: container_name }.merge(data(name)) end end else self.index.values.each do |index| name = index[:mapper].name if (state = index[:state_mapper]).file? sites[name] = { state: state.value, container: index[:container_mapper].name }.merge(data(name)) end end end sites end
_reconfigure(name:, **kwargs)
click to toggle source
# File lib/superhosting/controller/site.rb, line 157 def _reconfigure(name:, **kwargs) lib_sites_mapper = if (container_name = kwargs[:container_name]) @container_controller.index[container_name][:mapper].lib.sites else self.index[name][:container_mapper].lib.sites end state_mapper = lib_sites_mapper.f(name) states = { none: { action: :install_data, undo: :uninstall_data, next: :data_installed }, data_installed: { action: :configure_with_apply, undo: :unconfigure_with_unapply, next: :up }, } self.on_state(state_mapper: state_mapper, states: states, name: name, container_name: container_name, **kwargs) end
add(name:, container_name:)
click to toggle source
# File lib/superhosting/controller/site.rb, line 59 def add(name:, container_name:) if (resp = @container_controller.available_validation(name: container_name)).net_status_ok? and (resp = self.adding_validation(name: name)).net_status_ok? resp = self._reconfigure(name: name, container_name: container_name) end resp end
adding_validation(name:)
click to toggle source
# File lib/superhosting/controller/site.rb, line 178 def adding_validation(name:) return { error: :input_error, code: :invalid_site_name, data: { name: name, regex: DOMAIN_NAME_FORMAT } } if name !~ DOMAIN_NAME_FORMAT self.not_existing_validation(name: name) end
alias(name:)
click to toggle source
# File lib/superhosting/controller/site.rb, line 174 def alias(name:) self.get_controller(Alias, name: name) end
alias_existing_validation(name:, alias_name:)
click to toggle source
# File lib/superhosting/controller/site.rb, line 187 def alias_existing_validation(name:, alias_name:) self.index[name][:mapper].aliases.include?(alias_name) end
available_validation(name:)
click to toggle source
# File lib/superhosting/controller/site.rb, line 195 def available_validation(name:) if (resp = self.existing_validation(name: name)).net_status_ok? resp = (self.index[name][:state_mapper].value == 'up') ? {} : { error: :logical_error, code: :site_is_not_available, data: { name: name } } end resp end
container(name:)
click to toggle source
# File lib/superhosting/controller/site.rb, line 75 def container(name:) if (resp = self.existing_validation(name: name)).net_status_ok? { data: self.index[name][:container_mapper].name } else resp end end
data(name)
click to toggle source
# File lib/superhosting/controller/site.rb, line 21 def data(name) mapper = self.index[name][:mapper] docker_options = mapper.docker.grep_files.map {|f| [f.name, f.value] }.to_h configs = mapper.f('config.rb', overlay: false).reverse.map {|f| f.value } { docker: docker_options, configs: configs, aliases: self.index[name][:aliases]-[name] } end
delete(name:)
click to toggle source
# File lib/superhosting/controller/site.rb, line 83 def delete(name:) if (resp = self.existing_validation(name: name)).net_status_ok? lib_sites_mapper = self.index[name][:container_mapper].lib.sites actual_name = self.index[name][:mapper].name state_mapper = lib_sites_mapper.f(actual_name) states = { up: { action: :unapply, undo: :apply, next: :configured }, configured: { action: :unconfigure, next: :data_installed }, data_installed: { action: :uninstall_data }, } self.on_state(state_mapper: state_mapper, states: states, name: actual_name) end resp end
existing_validation(name:)
click to toggle source
# File lib/superhosting/controller/site.rb, line 183 def existing_validation(name:) self.index[name].nil? ? { error: :logical_error, code: :site_does_not_exists, data: { name: name } } : {} end
index()
click to toggle source
# File lib/superhosting/controller/site.rb, line 202 def index @@index ||= self.reindex end
inspect(name:)
click to toggle source
# File lib/superhosting/controller/site.rb, line 49 def inspect(name:) if (resp = self.existing_validation(name: name)).net_status_ok? actual_name = self.index[name][:mapper].name container_mapper = self.index[name][:container_mapper] { data: self._list(container_name: container_mapper.name)[actual_name] } else resp end end
install_data(name:, container_name:)
click to toggle source
# File lib/superhosting/controller/site/states.rb, line 6 def install_data(name:, container_name:) container_mapper = @container_controller.index[container_name][:mapper] container_mapper.sites.f(name).create! site_lib_mapper = container_mapper.lib.web.f(name).create! chown_r!(container_name, container_name, site_lib_mapper.path) self.reindex_site(name: name, container_name: container_name) {} end
list(container_name: nil)
click to toggle source
# File lib/superhosting/controller/site.rb, line 12 def list(container_name: nil) if container_name.nil? or (resp = @container_controller.available_validation(name: container_name)).net_status_ok? { data: self._list(container_name: container_name) } else resp end end
name(name:)
click to toggle source
# File lib/superhosting/controller/site.rb, line 67 def name(name:) if (resp = self.existing_validation(name: name)).net_status_ok? { data: self.index[name][:mapper].name } else resp end end
not_existing_validation(name:)
click to toggle source
# File lib/superhosting/controller/site.rb, line 191 def not_existing_validation(name:) self.existing_validation(name: name).net_status_ok? ? { error: :logical_error, code: :site_exists, data: { name: name} } : {} end
reconfigure(name:)
click to toggle source
# File lib/superhosting/controller/site.rb, line 148 def reconfigure(name:) if (resp = self.existing_validation(name: name)).net_status_ok? actual_name = self.index[name][:mapper].name self.set_state(name: actual_name, state: :data_installed) self._reconfigure(name: actual_name) end resp end
reindex()
click to toggle source
# File lib/superhosting/controller/site.rb, line 206 def reindex @config.containers.grep_dirs.each do |container_mapper| reindex_container_sites(container_name: container_mapper.name) end @@index ||= {} end
reindex_container_sites(container_name:)
click to toggle source
# File lib/superhosting/controller/site.rb, line 213 def reindex_container_sites(container_name:) @config.containers.f(container_name).sites.grep_dirs.each do |site_mapper| self.reindex_site(name: site_mapper.name, container_name: container_name) end end
reindex_site(name:, container_name:)
click to toggle source
# File lib/superhosting/controller/site.rb, line 219 def reindex_site(name:, container_name:) @@index ||= {} @@index[name][:aliases].each{|n| @@index.delete(n) } if @@index[name] container_mapper = @container_controller.index[container_name][:mapper] etc_mapper = container_mapper.sites.f(name) lib_mapper = container_mapper.lib.web.f(name) web_mapper = container_mapper.web.f(name) state_mapper = container_mapper.lib.sites.f(name).state if etc_mapper.nil? @@index.delete(name) return end model_name = container_mapper.f('model', default: @config.default_model) model_mapper = @config.models.f(model_name) etc_mapper = MapperInheritance::Model.new(model_mapper).set_inheritors(etc_mapper) mapper = CompositeMapper.new(etc_mapper: etc_mapper, lib_mapper: lib_mapper, web_mapper: web_mapper) etc_mapper.erb_options = { site: mapper, container: mapper } if @@index.key? name and @@index[name][:mapper].path != mapper.path raise NetStatus::Exception, { code: :container_site_name_conflict, data: { site1: @@index[name][:mapper].path, site2: mapper.path } } end names = ([mapper.name] + mapper.aliases) names.each {|name| @@index[name] = { mapper: mapper, container_mapper: container_mapper, state_mapper: state_mapper, aliases: names } } end
rename(name:, new_name:, alias_name: false)
click to toggle source
# File lib/superhosting/controller/site.rb, line 100 def rename(name:, new_name:, alias_name: false) if (resp = self.available_validation(name: name)).net_status_ok? and ((resp = self.adding_validation(name: new_name)).net_status_ok? or (is_alias = alias_existing_validation(name: name, alias_name: new_name))) mapper = self.index[name][:mapper] container_mapper = self.index[name][:container_mapper] actual_name = mapper.name mapper.aliases_mapper.remove_line!(new_name) if defined? is_alias and is_alias self.reindex_container_sites(container_name: container_mapper.name) begin self.unconfigure_with_unapply(name: actual_name).net_status_ok! if (resp = self._reconfigure(name: new_name, container_name: container_mapper.name)).net_status_ok? new_mapper = self.index[new_name][:mapper] mapper.etc.rename!(new_mapper.etc.path) mapper.lib.rename!(new_mapper.lib.path) mapper.aliases_mapper.rename!(new_mapper.aliases_mapper.path) self.reconfigure(name: new_name).net_status_ok! self.delete(name: actual_name).net_status_ok! new_mapper.aliases_mapper.append_line!(actual_name) if alias_name self.reindex_container_sites(container_name: container_mapper.name) end rescue Exception => e resp = e.net_status raise ensure unless resp.net_status_ok? unless new_mapper.nil? mapper.aliases_mapper.append_line!(new_name) if defined? is_alias and is_alias mapper.aliases_mapper.remove_line!(name) if alias_name new_mapper.etc.rename!(mapper.path) new_mapper.lib.rename!(mapper.lib.path) self.reconfigure(name: name) end self.delete(name: new_name) end end end resp end
uninstall_data(name:)
click to toggle source
# File lib/superhosting/controller/site/states.rb, line 17 def uninstall_data(name:) if self.index.include? name container_mapper = self.index[name][:container_mapper] container_mapper.sites.f(name).delete! container_mapper.lib.web.f(name).delete! container_mapper.lib.sites.f(name).aliases.delete! self.reindex_site(name: name, container_name: container_mapper.name) end {} end