diff --git a/frontend/components/DefinitionSources/DefinitionSources.tsx b/frontend/components/DefinitionSources/DefinitionSources.tsx index 55a0453..c80745e 100644 --- a/frontend/components/DefinitionSources/DefinitionSources.tsx +++ b/frontend/components/DefinitionSources/DefinitionSources.tsx @@ -144,9 +144,7 @@ const DefinitionSourceTr: FC = ({ source, combinedDefin
{source.modules.map((module, index) => ( - mod.moduleName))}> - {module.moduleName} - + {module} ))}
diff --git a/frontend/components/DotMetadataDialog/DotMetadataDialog.tsx b/frontend/components/DotMetadataDialog/DotMetadataDialog.tsx index 678451d..85e5d9e 100644 --- a/frontend/components/DotMetadataDialog/DotMetadataDialog.tsx +++ b/frontend/components/DotMetadataDialog/DotMetadataDialog.tsx @@ -103,7 +103,7 @@ const SourceDotMetadataContent: FC<{ dotMetadata: DotSourceMetadata } & Pick
{dotMetadata.modules.map((module) => ( -

{module.moduleName}

+

{module}

))}
diff --git a/frontend/models/module.ts b/frontend/models/module.ts index 640aed3..5e6ed7c 100644 --- a/frontend/models/module.ts +++ b/frontend/models/module.ts @@ -1,11 +1,7 @@ -export type Module = { - moduleName: string -} +export type Module = string export type SpecificModule = { - modules: Array<{ - moduleName: string - }> + modules: Module[] sources: Array<{ sourceName: string memo: string diff --git a/frontend/models/source.ts b/frontend/models/source.ts index 85e3de1..d3047e8 100644 --- a/frontend/models/source.ts +++ b/frontend/models/source.ts @@ -51,9 +51,7 @@ export const sortSources = (sources: Source[], key: 'sourceName' | 'modules', so break } case 'modules': { - sorted = sorted.sort((a, b) => - ascString(a.modules.map((module) => module.moduleName).join('-'), b.modules.map((module) => module.moduleName).join('-')), - ) + sorted = sorted.sort((a, b) => ascString(a.modules.join('---'), b.modules.join('---'))) } } diff --git a/frontend/pages/Modules/List.tsx b/frontend/pages/Modules/List.tsx index 2b00808..eefd602 100644 --- a/frontend/pages/Modules/List.tsx +++ b/frontend/pages/Modules/List.tsx @@ -13,12 +13,11 @@ const ModuleRow: FC<{ modules: Module[] }> = ({ modules }) => ( {modules.map((module, index) => { const current = modules.slice(0, index + 1) - const moduleNames: string[] = current.map((mod) => mod.moduleName) return ( {index > 0 && ' / '} - {module.moduleName} + {module} ) })} diff --git a/frontend/pages/Sources/List.tsx b/frontend/pages/Sources/List.tsx index 0f0f8b0..30ac067 100644 --- a/frontend/pages/Sources/List.tsx +++ b/frontend/pages/Sources/List.tsx @@ -97,9 +97,7 @@ const Row: FC = ({ source, recentModules, onUpdated, setRecentModules
{source.modules.map((module, index) => ( - mod.moduleName))}> - {module.moduleName} - + {module} ))}
diff --git a/frontend/pages/Sources/Show.tsx b/frontend/pages/Sources/Show.tsx index dbc246c..e2c3320 100644 --- a/frontend/pages/Sources/Show.tsx +++ b/frontend/pages/Sources/Show.tsx @@ -69,13 +69,9 @@ export const Show: React.FC = () => { ) : ( {specificSource.modules.map((module, index) => ( - + - mod.moduleName))} - > - {module.moduleName} - + {module} ))} diff --git a/frontend/repositories/combinedDefinitionRepository.ts b/frontend/repositories/combinedDefinitionRepository.ts index 27e6f4f..10ae2be 100644 --- a/frontend/repositories/combinedDefinitionRepository.ts +++ b/frontend/repositories/combinedDefinitionRepository.ts @@ -12,9 +12,7 @@ type DotSourceMetadataResponse = { type: 'source' memo: string source_name: string - modules: Array<{ - module_name: string - }> + modules: string[] } type DotDependencyMetadataResponse = { @@ -32,9 +30,7 @@ type DotDependencyMetadataResponse = { type DotModuleMetadataResponse = { id: string type: 'module' - modules: Array<{ - module_name: string - }> + modules: string[] } type DotMetadataResponse = DotSourceMetadataResponse | DotDependencyMetadataResponse | DotModuleMetadataResponse @@ -48,9 +44,7 @@ type CombinedDefinitionReponse = { source_name: string resolved_alias: string | null memo: string - modules: Array<{ - module_name: string - }> + modules: string[] }> } @@ -62,9 +56,7 @@ const parseDotMetadata = (metadata: DotMetadataResponse): DotMetadata => { type: metadata.type, sourceName: metadata.source_name, memo: metadata.memo, - modules: metadata.modules.map((module) => ({ - moduleName: module.module_name, - })), + modules: metadata.modules, } } case 'dependency': { @@ -85,9 +77,7 @@ const parseDotMetadata = (metadata: DotMetadataResponse): DotMetadata => { return { id: metadata.id, type: metadata.type, - modules: metadata.modules.map((module) => ({ - moduleName: module.module_name, - })), + modules: metadata.modules, } } } @@ -105,9 +95,7 @@ export const fetchCombinedDefinition = async (requestPath: string): Promise ({ - moduleName: module.module_name, - })), + modules: source.modules, })), } } diff --git a/frontend/repositories/moduleRepository.ts b/frontend/repositories/moduleRepository.ts index ffd9ff1..1d413ee 100644 --- a/frontend/repositories/moduleRepository.ts +++ b/frontend/repositories/moduleRepository.ts @@ -6,22 +6,20 @@ import { Module, SpecificModule } from '@/models/module' import { get } from './httpRequest' type ModulesReponse = { - modules: Array> + modules: string[][] } export const useModules = () => { const { data, isLoading, mutate } = useSWR(path.api.modules.index(), async () => { const response = await get(path.api.modules.index()) - return response.modules.map((moduleList) => moduleList.map((module) => ({ moduleName: module.module_name }))) + return response.modules }) return { data, isLoading, mutate } } type SpecificModuleResponse = { - modules: Array<{ - module_name: string - }> + modules: string[] related_definitions: Array<{ id: number title: string @@ -37,9 +35,7 @@ export const useModule = (moduleNames: string[]) => { const response = await get(path.api.modules.show(moduleNames)) return { - modules: response.modules.map((mod) => ({ - moduleName: mod.module_name, - })), + modules: response.modules, sources: response.sources.map((source) => ({ sourceName: source.source_name, memo: source.memo, diff --git a/frontend/repositories/sourceModulesRepository.ts b/frontend/repositories/sourceModulesRepository.ts index 7cec5d4..ad5c295 100644 --- a/frontend/repositories/sourceModulesRepository.ts +++ b/frontend/repositories/sourceModulesRepository.ts @@ -7,10 +7,9 @@ import { post } from './httpRequest' const updateModules = async (url: string, { arg }: { arg: { modules: Module[] } }) => { const { modules } = arg - const moduleNames = modules.map((mod) => mod.moduleName) await post(url, { - modules: moduleNames, + modules, }) } diff --git a/frontend/repositories/sourceRepository.ts b/frontend/repositories/sourceRepository.ts index 34bd3df..7883944 100644 --- a/frontend/repositories/sourceRepository.ts +++ b/frontend/repositories/sourceRepository.ts @@ -10,9 +10,7 @@ type SourcesReponse = { source_name: string resolved_alias: string | null memo: string - modules: Array<{ - module_name: string - }> + modules: string[] }> classified_sources_count: number } @@ -25,7 +23,7 @@ export const useSources = () => { sourceName: source.source_name, resolvedAlias: source.resolved_alias, memo: source.memo, - modules: source.modules.map((module) => ({ moduleName: module.module_name })), + modules: source.modules, })), classifiedSourcesCount: response.classified_sources_count, } @@ -38,9 +36,7 @@ type SpecificSourceResponse = { source_name: string resolved_alias: string | null memo: string - modules: Array<{ - module_name: string - }> + modules: string[] related_definitions: Array<{ id: number title: string @@ -63,7 +59,7 @@ export const useSource = (sourceName: string) => { sourceName: response.source_name, resolvedAlias: response.resolved_alias, memo: response.memo, - modules: response.modules.map((module) => ({ moduleName: module.module_name })), + modules: response.modules, relatedDefinitions: response.related_definitions.map((definition) => ({ id: definition.id, title: definition.title })), reverseDependencies: response.reverse_dependencies.map((dependency) => ({ sourceName: dependency.source_name, diff --git a/lib/diver_down/web.rb b/lib/diver_down/web.rb index 56bec4a..71e1577 100644 --- a/lib/diver_down/web.rb +++ b/lib/diver_down/web.rb @@ -109,20 +109,24 @@ def call(env) def load_definition_files_on_thread(definition_files) definition_loader = DiverDown::Web::DefinitionLoader.new + store = self.class.store Thread.new do loop do break if definition_files.empty? + # If store is changed in test, stop loading. + break if store != self.class.store + definition_file = definition_files.shift definition = definition_loader.load_file(definition_file) # No needed to synchronize because this is executed on a single thread. - self.class.store.set(definition) + store.set(definition) end # Cache combined_definition - self.class.store.combined_definition + store.combined_definition end end end diff --git a/lib/diver_down/web/action.rb b/lib/diver_down/web/action.rb index 9f34207..6c8f7ed 100644 --- a/lib/diver_down/web/action.rb +++ b/lib/diver_down/web/action.rb @@ -79,9 +79,7 @@ def sources source_name:, resolved_alias: @metadata.source_alias.resolve_alias(source_name), memo: source_metadata.memo, - modules: source_metadata.modules.map do |module_name| - { module_name: } - end, + modules: source_metadata.modules, } end, classified_sources_count: @@ -103,13 +101,7 @@ def modules # rubocop:enable Style/HashEachMethods json( - modules: module_set.sort.map do - _1.map do |module_name| - { - module_name:, - } - end - end + modules: module_set.sort ) end @@ -140,11 +132,7 @@ def module(module_names) related_definitions = related_definition_store_ids.map { @store.get(_1) } json( - modules: module_names.map do - { - module_name: _1, - } - end, + modules: module_names, sources: source_names.sort.map do |source_name| { source_name:, @@ -315,9 +303,7 @@ def source(source_name) source_name:, resolved_alias: @metadata.source_alias.resolve_alias(source_name), memo: @metadata.source(source_name).memo, - modules: module_names.map do - { module_name: _1 } - end, + modules: module_names, related_definitions: related_definitions.map do |id, definition| { id:, @@ -451,9 +437,7 @@ def render_combined_definition(ids, definition, titles, compound:, concentrate:, source_name: _1.source_name, resolved_alias: @metadata.source_alias.resolve_alias(_1.source_name), memo: @metadata.source(_1.source_name).memo, - modules: @metadata.source(_1.source_name).modules.map do |module_name| - { module_name: } - end, + modules: @metadata.source(_1.source_name).modules, } end ) diff --git a/lib/diver_down/web/definition_to_dot.rb b/lib/diver_down/web/definition_to_dot.rb index b79b237..809af40 100644 --- a/lib/diver_down/web/definition_to_dot.rb +++ b/lib/diver_down/web/definition_to_dot.rb @@ -31,11 +31,7 @@ def to_h private def source_to_h - modules = metadata.source(data.source_name).modules.map do - { - module_name: _1, - } - end + modules = metadata.source(data.source_name).modules { id:, @@ -68,11 +64,7 @@ def module_to_h { id:, type: 'module', - modules: data.map do - { - module_name: _1, - } - end, + modules: data, } end end diff --git a/spec/diver_down/web/definition_to_dot_spec.rb b/spec/diver_down/web/definition_to_dot_spec.rb index 09b0571..429a9b8 100644 --- a/spec/diver_down/web/definition_to_dot_spec.rb +++ b/spec/diver_down/web/definition_to_dot_spec.rb @@ -167,30 +167,17 @@ def build_definition(title: 'title', sources: []) { id: 'graph_1', type: 'module', - modules: [ - { - module_name: 'A', - }, - ], + modules: ['A'], }, { id: 'graph_2', type: 'module', - modules: [ - { - module_name: 'A', - }, { - module_name: 'B', - }, - ], + modules: ['A', 'B'], }, { id: 'graph_3', type: 'source', source_name: 'a.rb', memo: '', - modules: [ - { module_name: 'A' }, - { module_name: 'B' }, - ], + modules: ['A', 'B'], }, ] ) @@ -334,43 +321,29 @@ def build_definition(title: 'title', sources: []) { id: 'graph_1', type: 'module', - modules: [ - { - module_name: 'A', - }, - ], + modules: ['A'], }, { id: 'graph_2', type: 'source', source_name: 'a.rb', memo: '', - modules: [ - { module_name: 'A' }, - ], + modules: ['A'], }, { id: 'graph_3', type: 'module', - modules: [ - { - module_name: 'B', - }, - ], + modules: ['B'], }, { id: 'graph_4', type: 'source', source_name: 'b.rb', memo: '', - modules: [ - { module_name: 'B' }, - ], + modules: ['B'], }, { id: 'graph_5', type: 'source', source_name: 'c.rb', memo: '', - modules: [ - { module_name: 'B' }, - ], + modules: ['B'], }, { id: 'graph_6', type: 'dependency', @@ -450,43 +423,29 @@ def build_definition(title: 'title', sources: []) { id: 'graph_1', type: 'module', - modules: [ - { - module_name: 'A', - }, - ], + modules: ['A'], }, { id: 'graph_2', type: 'source', source_name: 'a.rb', memo: '', - modules: [ - { module_name: 'A' }, - ], + modules: ['A'], }, { id: 'graph_3', type: 'module', - modules: [ - { - module_name: 'B', - }, - ], + modules: ['B'], }, { id: 'graph_4', type: 'source', source_name: 'b.rb', memo: '', - modules: [ - { module_name: 'B' }, - ], + modules: ['B'], }, { id: 'graph_5', type: 'source', source_name: 'c.rb', memo: '', - modules: [ - { module_name: 'B' }, - ], + modules: ['B'], }, { id: 'graph_6', type: 'dependency', @@ -591,9 +550,9 @@ def build_definition(title: 'title', sources: []) expect(instance.dot_metadata).to eq( [ - { id: 'graph_1', type: 'module', modules: [{ module_name: 'A' }] }, - { id: 'graph_2', type: 'module', modules: [{ module_name: 'B' }] }, - { id: 'graph_3', type: 'module', modules: [{ module_name: 'B' }, { module_name: 'C' }] }, + { id: 'graph_1', type: 'module', modules: ['A'] }, + { id: 'graph_2', type: 'module', modules: ['B'] }, + { id: 'graph_3', type: 'module', modules: ['B', 'C'] }, { id: 'graph_4', type: 'dependency', @@ -695,12 +654,12 @@ def build_definition(title: 'title', sources: []) expect(instance.dot_metadata).to eq( [ { id: 'graph_1', type: 'source', source_name: 'a.rb', memo: '', modules: [] }, - { id: 'graph_2', type: 'module', modules: [{ module_name: 'A' }] }, - { id: 'graph_3', type: 'source', source_name: 'b.rb', memo: '', modules: [{ module_name: 'A' }] }, - { id: 'graph_4', type: 'module', modules: [{ module_name: 'A' }, { module_name: 'C' }] }, - { id: 'graph_5', type: 'source', source_name: 'c.rb', memo: '', modules: [{ module_name: 'A' }, { module_name: 'C' }] }, - { id: 'graph_6', type: 'module', modules: [{ module_name: 'B' }] }, - { id: 'graph_7', type: 'source', source_name: 'd.rb', memo: '', modules: [{ module_name: 'B' }] }, + { id: 'graph_2', type: 'module', modules: ['A'] }, + { id: 'graph_3', type: 'source', source_name: 'b.rb', memo: '', modules: ['A'] }, + { id: 'graph_4', type: 'module', modules: ['A', 'C'] }, + { id: 'graph_5', type: 'source', source_name: 'c.rb', memo: '', modules: ['A', 'C'] }, + { id: 'graph_6', type: 'module', modules: ['B'] }, + { id: 'graph_7', type: 'source', source_name: 'd.rb', memo: '', modules: ['B'] }, ] ) end diff --git a/spec/diver_down/web_spec.rb b/spec/diver_down/web_spec.rb index daeb847..1919b61 100644 --- a/spec/diver_down/web_spec.rb +++ b/spec/diver_down/web_spec.rb @@ -333,7 +333,7 @@ def assert_definition_group(definition_group, expected_ids) 'source_name' => 'a.rb', 'resolved_alias' => 'b.rb', 'memo' => 'memo', - 'modules' => [{ 'module_name' => 'A' }], + 'modules' => ['A'], }, { 'source_name' => 'b.rb', @@ -387,19 +387,8 @@ def assert_definition_group(definition_group, expected_ids) expect(last_response.status).to eq(200) expect(JSON.parse(last_response.body)).to eq({ 'modules' => [ - [ - { - 'module_name' => 'A', - }, { - 'module_name' => 'B', - }, - ], [ - { - 'module_name' => 'B', - }, { - 'module_name' => 'C', - }, - ], + ['A', 'B'], + ['B', 'C'], ], }) end @@ -439,11 +428,7 @@ def assert_definition_group(definition_group, expected_ids) expect(last_response.status).to eq(200) expect(JSON.parse(last_response.body)).to eq({ - 'modules' => [ - { - 'module_name' => 'A', - }, - ], + 'modules' => ['A'], 'sources' => [ { 'source_name' => 'a.rb', @@ -470,13 +455,7 @@ def assert_definition_group(definition_group, expected_ids) expect(last_response.status).to eq(200) expect(JSON.parse(last_response.body)).to eq({ - 'modules' => [ - { - 'module_name' => 'A', - }, { - 'module_name' => 'B', - }, - ], + 'modules' => ['A', 'B'], 'sources' => [ { 'source_name' => 'b.rb', @@ -510,11 +489,7 @@ def assert_definition_group(definition_group, expected_ids) expect(last_response.status).to eq(200) expect(JSON.parse(last_response.body)).to eq({ - 'modules' => [ - { - 'module_name' => 'グローバル', - }, - ], + 'modules' => ['グローバル'], 'sources' => [ { 'source_name' => 'a.rb',