Create Api to create document and add,edit,delete text and t

Sub: Create Api to create document and add, edit, delete text and
table(add row, modify and delete row)

Can somebody please tell me how to implement this using inheritence /
composition / patterns ?

Thanks,
skrithikaa

Krithika San wrote:

Sub: Create Api to create document and add, edit, delete text and
table(add row, modify and delete row)

Can somebody please tell me how to implement this using inheritence /
composition / patterns ?

Do your own homework. :slight_smile: If you’re stuck, let us know what you’ve tried
and what isn’t working.

Thanks,
skrithikaa

Best,

Marnen Laibow-Koser
http://www.marnen.org
[email protected]

This is what I coded and I need to change so that it accepts the text,
and table rows and columns in a dynamic way.

This was the comments I obtained. Can you please correct the mistake.

Table and Text are not “is-a” DocumentBuilder
It is not clear how TableElt and TextElt contribute to the requirements
The DataTable class (which appears to be how you addressed the Table
requirements) is not related to the DocumentBuilder stuff. In fact, I’m
not sure how to create a document with a working table in it at all
Also, I don’t see how to add a Text element to a document

Please put your classes in separate .rb files in the future.
The design document includes a lot of boilerplate text about the
components of an abstract factory, but it is not clear to me how any of
this relates to fulfilling the requirements of the core classes in the
assignment.
The “alter” method should just accept the row/column to “alter” rather
than have to set them prior.

Hope you can help me with this.

class DocumentBuilder
def new_document
end
end

class Table < DocumentBuilder
end

class Text < DocumentBuilder
end

2. implementations of specializations

class TableElt < Table
def new_document
puts "I am a word document "
end
end

class TextElt < Text
def new_document
puts “I am a word document”
end
end

3. interface for factory (abstract factory)

class DocumentBuilderFactory
def create_doc
end
end

4. different factories implementations

class TableFactory < DocumentBuilderFactory
def create_doc
TableElt.new
end
end

class TextFactory < DocumentBuilderFactory
def create_doc
TextElt.new
end
end

class DynamicFactory
def initialize(doc_class)
@doc_class = doc_class
end

def create_doc
@doc_class.new
end
end

5. factories manager (optional)

class DocumentBuilderManager
def create_doc_factory(type)
if(type == :Table)
TableFactory.new
elsif(type == :Text)
TextFactory.new
end
end
end

6. test

doc_manager = DocumentBuilderManager.new

DocumentBuilder_factory1 = doc_manager.create_doc_factory(:Table)
DocumentBuilder_factory2 = doc_manager.create_doc_factory(:Text)
DocumentBuilder_factory3 = DynamicFactory.new(TableElt)

DocumentBuilder1 = DocumentBuilder_factory1.create_doc
DocumentBuilder2 = DocumentBuilder_factory2.create_doc
DocumentBuilder3 = DocumentBuilder_factory3.create_doc

DocumentBuilder1.new_document
DocumentBuilder2.new_document
DocumentBuilder3.new_document

creating table entries

class DataTable
attr_accessor :current_line, :current_column
attr_reader :file_name

A table is basically an array of arrays.

So start by creating the host array.

def initialize
@table = Array.new
@current_line = 0
@current_column = 0
end

Allows to add elements into the table

def add_line(*entries)
@table << entries
end

Alters the content in a table

(note first line = 0, and first cell = 0)

def alter_current_cell(entry)
@table[@current_line][@current_column] = entry
end

Deletes a row in a table

def remove_line(line_number)
@table.delete_at(line_number)
end

Create an output file

def output_to_file(file_name)
@file_name = file_name
create_file
put_data_into_file
end

private
def create_file
File.delete(@file_name) if File.exist?(@file_name)
File.new(@file_name, ‘w+’)
end

Add the table info, and close

def put_data_into_file
output_file = File.open(@file_name, ‘w+’)
for line in @table
output_file.puts line.join(" ")
end
output_file.close
end
end

data_table = DataTable.new
data_table.add_line(‘Country’, ‘Animal’, ‘Fruit’)
data_table.add_line(‘India’, ’ Tiger ‘, ’ Mango’)
data_table.add_line(‘China’, ’ Cheeta ‘, ‘Apple’)
data_table.add_line(‘Japan’,’ Monkey ‘,‘Orange’)
puts “View display_table.txt to see the contents of the table”
data_table.output_to_file(‘display_table.txt’)
data_table.current_line = 2 # entry in this cell is changed
data_table.current_column = 1 # entry in this cell is changed
data_table.alter_current_cell(’ DONKEY ') # entry in this cell is
changed to DONKEY
puts “View modified_ouput.txt to see modified content”
data_table.output_to_file(‘modified_ouput.txt’)
data_table.current_line = 1
data_table.current_column = 2
data_table.remove_line(1)
puts “View output_without_line_1.txt to see the final output with the
removal of row 1”
data_table.output_to_file(‘output_without_line_1.txt’)

Marnen Laibow-Koser wrote:

Krithika San wrote:

Sub: Create Api to create document and add, edit, delete text and
table(add row, modify and delete row)

Can somebody please tell me how to implement this using inheritence /
composition / patterns ?

Do your own homework. :slight_smile: If you’re stuck, let us know what you’ve tried
and what isn’t working.

Thanks,
skrithikaa

Best,

Marnen Laibow-Koser
http://www.marnen.org
[email protected]

Krithika San wrote:

This is what I coded and I need to change so that it accepts the text,
and table rows and columns in a dynamic way.

This was the comments I obtained. Can you please correct the mistake.

No! The comments provide all the information you need for you to do
your own correcting. Try it yourself first. If you’re stuck, read a
reference book, search the Web, or ask your professor. If you have a
specific question to ask, most of us here will be happy to answer it,
but simply dumping a homework assignment that you obviously haven’t even
tried to work on is not OK.

Best,

Marnen Laibow-Koser
http://www.marnen.org
[email protected]