Class: Opencdd::Parcel::Workbook
- Inherits:
-
Object
- Object
- Opencdd::Parcel::Workbook
show all
- Defined in:
- lib/opencdd/parcel/workbook.rb
Defined Under Namespace
Classes: ProjectInfo, SheetMapEntry
Constant Summary
collapse
%i[
class_id class_name source_language translation_language
property_id property_name datatype value_format pattern
default_value requirement unit
].freeze
- MANDATORY_HEADER_ROWS =
%i[class_id property_id].freeze
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(sheets:, sheetmap: [], project: nil, source_path: nil, hidden_header_rows: nil) ⇒ Workbook
Returns a new instance of Workbook.
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/opencdd/parcel/workbook.rb', line 23
def initialize(sheets:, sheetmap: [], project: nil, source_path: nil,
hidden_header_rows: nil)
@sheets = sheets
@sheetmap = sheetmap
@project = project
@source_path = source_path
@hidden_header_rows = validate_hidden()
reindex
freeze
end
|
Instance Attribute Details
#project ⇒ Object
Returns the value of attribute project.
21
22
23
|
# File 'lib/opencdd/parcel/workbook.rb', line 21
def project
@project
end
|
#sheetmap ⇒ Object
Returns the value of attribute sheetmap.
21
22
23
|
# File 'lib/opencdd/parcel/workbook.rb', line 21
def sheetmap
@sheetmap
end
|
#sheets ⇒ Object
Returns the value of attribute sheets.
21
22
23
|
# File 'lib/opencdd/parcel/workbook.rb', line 21
def sheets
@sheets
end
|
#source_path ⇒ Object
Returns the value of attribute source_path.
21
22
23
|
# File 'lib/opencdd/parcel/workbook.rb', line 21
def source_path
@source_path
end
|
Instance Method Details
#base_language ⇒ Object
111
112
113
|
# File 'lib/opencdd/parcel/workbook.rb', line 111
def base_language
@project&.base_language || "en"
end
|
#class_sheet ⇒ Object
91
|
# File 'lib/opencdd/parcel/workbook.rb', line 91
def class_sheet ; sheets_of_type(:class).first ; end
|
#each_sheet(&block) ⇒ Object
99
100
101
|
# File 'lib/opencdd/parcel/workbook.rb', line 99
def each_sheet(&block)
@sheets.each(&block)
end
|
34
35
36
|
# File 'lib/opencdd/parcel/workbook.rb', line 34
def
@hidden_header_rows.dup
end
|
38
39
40
41
42
43
44
|
# File 'lib/opencdd/parcel/workbook.rb', line 38
def (name)
sym = name.to_sym
raise ArgumentError, "unknown header row: #{sym.inspect}" unless HEADER_ROW_NAMES.include?(sym)
raise ArgumentError, "cannot hide mandatory header row: #{sym.inspect}" if MANDATORY_HEADER_ROWS.include?(sym)
@hidden_header_rows << sym
self
end
|
#import_into(sheet_name, file_path, format: nil) ⇒ Object
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/opencdd/parcel/workbook.rb', line 68
def import_into(sheet_name, file_path, format: nil)
target = sheet(sheet_name)
raise ArgumentError, "unknown sheet: #{sheet_name.inspect}" unless target
format ||= detect_format(file_path)
temp = read_external_sheet(file_path, format, target.meta_class_irdi)
unless meta_codes_match?(target.meta_class_irdi, temp.meta_class_irdi)
raise ArgumentError,
"meta-class mismatch: target=#{target.meta_class_irdi} source=#{temp.meta_class_irdi}"
end
target.merge_rows_from(temp)
self
end
|
#merge(other) ⇒ Object
115
116
117
118
119
120
121
|
# File 'lib/opencdd/parcel/workbook.rb', line 115
def merge(other)
merged_sheets = @sheets + other.sheets
merged_map = @sheetmap + other.sheetmap
merged_proj = @project || other.project
Workbook.new(sheets: merged_sheets, sheetmap: merged_map, project: merged_proj,
source_path: @source_path)
end
|
#parcel_id ⇒ Object
103
104
105
|
# File 'lib/opencdd/parcel/workbook.rb', line 103
def parcel_id
@project&.parcel_id
end
|
#project_id ⇒ Object
107
108
109
|
# File 'lib/opencdd/parcel/workbook.rb', line 107
def project_id
@project&.project_id
end
|
#property_sheet ⇒ Object
92
|
# File 'lib/opencdd/parcel/workbook.rb', line 92
def property_sheet ; sheets_of_type(:property).first ; end
|
#register_sheet(sheet) ⇒ Object
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/opencdd/parcel/workbook.rb', line 51
def register_sheet(sheet)
raise ArgumentError, "sheet already registered: #{sheet.name}" if @sheets_by_name.key?(sheet.name.to_s)
@sheets << sheet
@sheets_by_name[sheet.name.to_s] = sheet
@sheetmap << SheetMapEntry.new(
project_id: @project&.project_id || "LOCAL",
parcel_id: @project&.parcel_id,
class_irdi: sheet.meta_class_irdi,
content_no: 0,
sheet_no: @sheets.size,
sheet_name: sheet.name,
type: parcel_type_label_for(sheet.type),
target: "",
)
self
end
|
#relation_sheet ⇒ Object
96
|
# File 'lib/opencdd/parcel/workbook.rb', line 96
def relation_sheet ; sheets_of_type(:relation).first ; end
|
#sheet(name) ⇒ Object
82
83
84
|
# File 'lib/opencdd/parcel/workbook.rb', line 82
def sheet(name)
@sheets_by_name[name.to_s]
end
|
#sheets_of_type(type) ⇒ Object
86
87
88
89
|
# File 'lib/opencdd/parcel/workbook.rb', line 86
def sheets_of_type(type)
type = type.to_sym
@sheets.select { |s| s.type == type }
end
|
46
47
48
49
|
# File 'lib/opencdd/parcel/workbook.rb', line 46
def (name)
@hidden_header_rows.delete(name.to_sym)
self
end
|
#unit_sheet ⇒ Object
93
|
# File 'lib/opencdd/parcel/workbook.rb', line 93
def unit_sheet ; sheets_of_type(:unit).first ; end
|
#value_list_sheet ⇒ Object
94
|
# File 'lib/opencdd/parcel/workbook.rb', line 94
def value_list_sheet ; sheets_of_type(:value_list).first ; end
|
#value_term_sheet ⇒ Object
95
|
# File 'lib/opencdd/parcel/workbook.rb', line 95
def value_term_sheet ; sheets_of_type(:value_term).first ; end
|
#view_control_sheet ⇒ Object
97
|
# File 'lib/opencdd/parcel/workbook.rb', line 97
def view_control_sheet; sheets_of_type(:view_control).first; end
|