Class: DiverDown::Web
- Inherits:
-
Object
- Object
- DiverDown::Web
- Defined in:
- lib/diver_down/web.rb,
lib/diver_down/web/action.rb,
lib/diver_down/web/bit_id.rb,
lib/diver_down/web/metadata.rb,
lib/diver_down/web/definition_store.rb,
lib/diver_down/web/definition_filter.rb,
lib/diver_down/web/definition_loader.rb,
lib/diver_down/web/definition_to_dot.rb,
lib/diver_down/web/indented_string_io.rb,
lib/diver_down/web/definition_enumerator.rb,
lib/diver_down/web/dev_server_middleware.rb,
lib/diver_down/web/metadata/source_alias.rb,
lib/diver_down/web/source_alias_resolver.rb,
lib/diver_down/web/metadata/source_metadata.rb,
lib/diver_down/web/definition_module_dependencies.rb
Defined Under Namespace
Modules: BitId Classes: Action, DefinitionEnumerator, DefinitionFilter, DefinitionLoader, DefinitionModuleDependencies, DefinitionStore, DefinitionToDot, DevServerMiddleware, IndentedStringIo, Metadata, SourceAliasResolver
Constant Summary collapse
- WEB_DIR =
File.('../../web', __dir__)
Class Method Summary collapse
Instance Method Summary collapse
- #call(env) ⇒ Array[Integer, Hash, Array]
-
#initialize(definition_dir:, metadata:, blob_prefix:) ⇒ Web
constructor
A new instance of Web.
Constructor Details
#initialize(definition_dir:, metadata:, blob_prefix:) ⇒ Web
Returns a new instance of Web.
34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/diver_down/web.rb', line 34 def initialize(definition_dir:, metadata:, blob_prefix:) @metadata = @blob_prefix = blob_prefix&.sub(%r{/+$}, '') @files_server = Rack::Files.new(File.join(WEB_DIR)) definition_files = ::Dir["#{definition_dir}/**/*.{yml,yaml,msgpack,json}"].sort @total_definition_files_size = definition_files.size @action = nil load_definition_files_on_thread(definition_files) end |
Class Method Details
.store ⇒ DiverDown::Web::DefinitionStore
26 27 28 |
# File 'lib/diver_down/web.rb', line 26 def self.store @store ||= DiverDown::Web::DefinitionStore.new end |
Instance Method Details
#call(env) ⇒ Array[Integer, Hash, Array]
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/diver_down/web.rb', line 48 def call(env) request = Rack::Request.new(env) if @action&.store.object_id != self.class.store.object_id @action = DiverDown::Web::Action.new(store: self.class.store, metadata: @metadata, blob_prefix: @blob_prefix) end case [request.request_method, request.path] in ['GET', %r{\A/api/definitions\.json\z}] @action.definitions( page: request.params['page']&.to_i || 1, per: request.params['per']&.to_i || 100, title: request.params['title'] || '', source: request.params['source'] || '', definition_group: request.params['definition_group'] || '' ) in ['GET', %r{\A/api/sources\.json\z}] @action.sources in ['GET', %r{\A/api/modules\.json\z}] @action.modules in ['GET', %r{\A/api/modules/(?<modulee>[^/]+)\.json\z}] modulee = CGI.unescape(Regexp.last_match[:modulee]) @action.module(modulee) in ['GET', %r{\A/api/definitions/(?<bit_id>\d+)\.json\z}] bit_id = Regexp.last_match[:bit_id].to_i compound = request.params['compound'] == '1' concentrate = request.params['concentrate'] == '1' only_module = request.params['only_module'] == '1' remove_internal_sources = request.params['remove_internal_sources'] == '1' focus_modules = request.params['focus_modules'] || [] modules = request.params['modules'] || [] @action.combine_definitions(bit_id, compound, concentrate, only_module, remove_internal_sources, focus_modules, modules) in ['GET', %r{\A/api/sources/(?<source>[^/]+)\.json\z}] source = Regexp.last_match[:source] @action.source(source) in ['GET', %r{\A/api/reload\.json\z}] @action.reload_cache in ['POST', %r{\A/api/sources/(?<source>[^/]+)/module.json\z}] source = Regexp.last_match[:source] modulee = request.params['module'] || '' @action.set_module(source, modulee) in ['POST', %r{\A/api/sources/(?<source>[^/]+)/memo.json\z}] source = Regexp.last_match[:source] memo = request.params['memo'] || '' @action.set_memo(source, memo) in ['POST', %r{\A/api/modules/(?<from_module>[^/]+)/dependency_types/(?<to_module>[^/]+)\.json\z}] from_module = CGI.unescape(Regexp.last_match[:from_module]) to_module = CGI.unescape(Regexp.last_match[:to_module]) dependency_type = request.params['dependency_type'] @action.update_module_dependency_type(from_module, to_module, dependency_type) in ['POST', %r{\A/api/sources/(?<from_source>[^/]+)/dependency_types/(?<to_source>[^/]+)\.json\z}] from_source = Regexp.last_match[:from_source] to_source = Regexp.last_match[:to_source] dependency_type = request.params['dependency_type'] @action.update_source_dependency_type(from_source, to_source, dependency_type) in ['GET', %r{\A/api/pid\.json\z}] @action.pid in ['GET', %r{\A/api/initialization_status\.json\z}] @action.initialization_status(@total_definition_files_size) in ['GET', %r{\A/api/configuration\.json\z}] @action.configuration in ['GET', %r{\A/api/source_aliases\.json\z}] @action.source_aliases in ['POST', %r{\A/api/source_aliases\.json\z}] alias_name = request.params['alias_name'] old_alias_name = request.params['old_alias_name'] # NOTE: nillable source_names = request.params['source_names'] || [] @action.update_source_alias(alias_name, old_alias_name, source_names) in ['GET', %r{\A/assets/}] @files_server.call(env) in ['GET', /\.json\z/], ['POST', /\.json\z/] @action.not_found else @files_server.call(env.merge('PATH_INFO' => '/index.html')) end end |