diff --git a/src/__mocks__/fixtures/v3/quarter.js b/src/__mocks__/fixtures/v3/quarter.js index 2ea4359..0f3cf09 100644 --- a/src/__mocks__/fixtures/v3/quarter.js +++ b/src/__mocks__/fixtures/v3/quarter.js @@ -182,7 +182,7 @@ module.exports = { employee_num: null, net_sales_per_employee: null, operating_income_per_employee: null, - segment_member: null, + segment_member: {"segments":[],"periods":[],"values":[]}, increase_in_properties: 346000000, r_and_d_expenses: 35000000, defined_benefit_asset: null, diff --git a/src/custom-functions/v3/bcode-result.test.ts b/src/custom-functions/v3/bcode-result.test.ts index 08bb2ac..1a62991 100644 --- a/src/custom-functions/v3/bcode-result.test.ts +++ b/src/custom-functions/v3/bcode-result.test.ts @@ -50,3 +50,21 @@ test('format (null)', () => { expect(new BcodeResult('net_sales', null, '円').format(true, false)).toBe('') expect(new BcodeResult('net_sales', null, '円').format(true, true)).toBe('') }) + +test('format (object)', () => { + const segmentMember = { + segments: [], + periods: [], + values: [] + } + const result = new BcodeResult('segment_member', segmentMember, 'なし') + + expect(result.format(false, false)).toEqual(JSON.stringify(segmentMember)) + expect(result.format(true, false)).toEqual(JSON.stringify(segmentMember)) + expect(result.format(false, true)).toEqual( + JSON.stringify(segmentMember) + 'なし' + ) + expect(result.format(true, true)).toEqual( + JSON.stringify(segmentMember) + 'なし' + ) +}) diff --git a/src/custom-functions/v3/bcode-result.ts b/src/custom-functions/v3/bcode-result.ts index a11a892..a958cf7 100644 --- a/src/custom-functions/v3/bcode-result.ts +++ b/src/custom-functions/v3/bcode-result.ts @@ -4,7 +4,7 @@ import { Formatter } from '~/services/formatter' export class BcodeResult { constructor( public name: string, - public value: number | string | null, + public value: number | string | object | null, public unit: string ) {} @@ -29,6 +29,10 @@ export class BcodeResult { } } + if (typeof value === 'object') { + value = JSON.stringify(value) + } + if (isWithUnits) { if (typeof value == 'number') { return Formatter.commaStyled(value) + unit diff --git a/src/services/csv-exporter.test.ts b/src/services/csv-exporter.test.ts index 908a8dd..2f26731 100644 --- a/src/services/csv-exporter.test.ts +++ b/src/services/csv-exporter.test.ts @@ -21,6 +21,7 @@ const columnDescription = quarter['column_description'] const propertyNames = Object.keys(columnDescription) const fiscalYearIndex = propertyNames.indexOf('fiscal_year') const fiscalQuarterIndex = propertyNames.indexOf('fiscal_quarter') +const segmentMemberIndex = propertyNames.indexOf('segment_member') describe('generateData', () => { test('uncached', () => { @@ -47,6 +48,12 @@ describe('generateData', () => { 'なし', 1.0 ]) + expect(data[segmentMemberIndex + 1]).toEqual([ + 'segment_member', + 'セグメント情報', + 'なし', + JSON.stringify(quarter['data']['segment_member']) + ]) expect( QuarterCache.getData(ticker, new YearQuarter(2018, 1))['net_sales'] ).toBe(12513000000.0) @@ -78,6 +85,12 @@ describe('generateData', () => { 'なし', 1.0 ]) + expect(data[segmentMemberIndex + 1]).toEqual([ + 'segment_member', + 'セグメント情報', + 'なし', + JSON.stringify(quarter['data']['segment_member']) + ]) expect( QuarterCache.getData(ticker, new YearQuarter(2018, 1))['net_sales'] ).toBe(12513000000.0) diff --git a/src/services/csv-exporter.ts b/src/services/csv-exporter.ts index 9b6d13d..b5d34c0 100644 --- a/src/services/csv-exporter.ts +++ b/src/services/csv-exporter.ts @@ -11,6 +11,16 @@ export class CsvExporter { // } + static format( + value: number | string | object | null + ): number | string | null { + if (typeof value == 'object') { + value = JSON.stringify(value) + } + + return value + } + static generateData( ticker, from: string, @@ -81,7 +91,9 @@ export class CsvExporter { ) const header = [['キー', '項目名', '単位', ...quarterLabels]] const values = quarter.propertyNames().map(name => { - const data = sortedQuarters.map(quarter => quarter.data[name]) + const data = sortedQuarters.map(quarter => + this.format(quarter.data[name]) + ) return [name, quarter.labelOf(name), quarter.unitOf(name), ...data] })