DEVEL_BLOG.md in rspreadsheet-0.2.10 vs DEVEL_BLOG.md in rspreadsheet-0.2.11

- old
+ new

@@ -10,12 +10,48 @@ * allow `sheet.cells.sum { |cell| cell.value } * allow `sheet.rows(1).cells.each {} iterate through nonempty cells ??? or all of them until last used * `sheet.rows(1).cells` returns list of cells objects and `sheet.rows(1).cellvalues` return array of values with nils when empty * implement to_csv * longterm plan - go through other used libraries and try to find out whose syntax could be adopted, so this library is drop in replacement (possibly with some config options) for them + * iterative generation like this + + ```ruby +RSpreadsheet.generate('pricelist.ods') do + row 'icecream name', 'price' + { 'Vanilla' => 2, 'Banana' => 3, 'Strawbery' => 2.7 }.each do |icecream, price| + row icecream, price + row '2x 'icecream, price * 1.8 + end + skip_row + row 'Menu made by rspreadsheet', :format => {:font => {:size => 5}} + move_to A5 + cell 'Have a nice day!' + end +``` -Guiding ideas +* possible ideas from [Google Spreadsheet API](https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet) (issue #9). For now just raw list of what could be used + * appendRaw(rowContents) + * concept of active sheets with methods like - deleteActiveSheet, getActiveSheet, duplicateActiveSheet(), getActiveCell() + * `@sheet.delete_column(2), @sheet.delete_columns(from, howmany), @sheet.delete_row(2), ...` + * GS API uses `@workbook.deletesheet(@sheet)` but it is nor very ruby way. What about `@worksheet.delete` or `@workbook.delete_sheet(2)` as syntactic shugar to `@workbook.worksheets(2).delete` + * getAs(contentType) - Return the data inside this object as a blob converted to the specified content type. Maybe something like `@workbook.worksheets(2).to_pdf` or `@workbook.worksheets(2).to_blob('application/pdf')`. Is there anything like Blob in ruby? + * getDataRange() - Returns a Range corresponding to the dimensions in which data is present + * setActiveRange(range), setActiveSelection(range) - ? what is the difference + * @sheet. getFrozenColumns(), @sheet.getFrozenColumns() + * getLastColumn(), getLastRow() + * getRange(a1Notation), getRangeByName(name), range.get_values + * getRowHeight(rowPosition) + * hideColumn(column), unhideColumn(column), insertColumnAfter(afterPosition), insertColumnsAfter(afterPosition, howMany), insertImage(blob, column, row) + * moveActiveSheet(pos) + * sort(columnPosition,ascending=true) - Sorts a sheet by column. + * Range#breakApart() - Break any multi-column cells in the range into individual cells again. + * Range#canEdit() + * Range#copyTo(destination) + * Range#merge() - Merges the cells in the range together into a single block. +* @book.sheet_names - Array of names of sheets. + +##Guiding ideas * xml document is always synchronized with the data. So the save is trivial. * no duplication of data. Objects like RowArray should containg minimum information. This one exists solely to speed up cell search. Taken to extream it is questionable, whether we need such objects at all, it might be possible to always work with xml directly. * all cells and rows only server as proxy. they hold index and worksheet pointer and everytime read or write is done, the xml is newly searched. until there is a xmlnode caching we have no problem * all cells returned for particular coordinates are **always the same object**. This way we have no problem to synchronize changes. @@ -35,25 +71,21 @@ * [github](https://github.com/gorn/rspreadsheet) hosts the repository where you can get the code * [coverals](https://coveralls.io/r/gorn/rspreadsheet) checks how well source is covered by tests ### Local testing and releasing (to github and rubygems). -1. make changes -2. test if all tests pass (run `bundle exec guard` to test automatically). If not go to 1 -3. build and install locally - * ``rake build`` - builds the gem to pkg directory (if something gets wrong, sometimes comit go git gelps) - * ``sudo rake install`` - installs gem to local system [^1] +1. Make changes +2. Test if all tests pass (run `bundle exec guard` to test automatically). If not go to 1. +3. Build and install locally using script `./reinstall_local_gem.sh` (see [details](reinstall_local_gem.sh)) 4. Now can locally and manually use/test the gem. This should not be replacement for automated testing. If you make some changes, go to 1. 5. When happy, increment the version number and `git add .; git commit -am'commit message'; git push` 6. ``rake release`` - creates a version tag in git and pushes the code to github + Rubygems. After this is succesfull the new version appears as release in Github and RubyGems. gem alternativa to points 3-6 gem build rspreadsheet.gemspec -\ These two lines together are in install.sh sudo gem install rspreadsheet-x.y.z.gem -/ which should be invoked from parent directory gem push rspreadsheet-x.y.z.gem releases the gem, do not forgot to update version in rspreadsheet.gemspec before doing this - -[^1]: if this fails with "mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h" you may want to ``sudo aptitude install ruby-dev`` ### Naming conventions * create_xxx - creates object and inserts it where necessary * prepare_xxx - create object, but does not insert it anywhere