rspreadsheet 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3cc3f5ca1cc2aae4f3e64a0bb6d42799a9119a74
4
- data.tar.gz: e9751aa12fd6c75d30ee490d08ca507b09002412
3
+ metadata.gz: b667a14fc5845f86995ec8f260650b47f92fc8b8
4
+ data.tar.gz: d8311461aeb22d2d801f8615bc8d3e43a1b35707
5
5
  SHA512:
6
- metadata.gz: 5f0d59fd7a97e3704a1ef80f10f304a789416147ae00387004d15d0bb8baaa71a451bde562b8b681269c75e306b206af6790b8212385b7841744d7bd4230a123
7
- data.tar.gz: 4544f3128402eb4fea4eb77a82050292d3235882a025611d1f7a8dce48fbd88a7fb8b365130183776ac9156a34acdcf5827d18cc7bd3a326199674b7044f373b
6
+ metadata.gz: e742ce5a232d4d1e4a46c64bbffab4d4607ed3024cb327ad514f9c27f30053d86e2edaef6b3755927136719f667ea9076b9c79f35baf166431315e1fde0e18b7
7
+ data.tar.gz: 778a31e6b50ee4d15873ec6c416361f0f4ea24476608b2555004fb54fac070117612b4bff1747678ea6a25a6e3001176bcdb22866891a6ed13f6889074a5e50a
data/DEVEL_BLOG.md CHANGED
@@ -31,16 +31,17 @@ Guiding ideas
31
31
 
32
32
  ### Local manual testing and releasing (to github released, ).
33
33
 
34
+ gem build rspreadsheet.gemspec
35
+ sudo gem install rspreadsheet-x.y.z.gem
36
+ gem push rspreadsheet-x.y.z.gem
37
+
38
+ alternative way using ``rake`` command - release is more automatic
39
+
34
40
  * ``rake build`` - builds the gem to pkg directory.
35
41
  * ``sudo rake install`` - 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``
36
42
  * Now can locally and manually use/test the gem. This should not be replacement for automated testing.
37
43
  * ``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.
38
44
 
39
- alternative way using ``gem`` command
40
-
41
- gem build rspreadsheet.gemspec
42
- sudo gem install rspreadsheet-x.y.z.gem
43
- gem push rspreadsheet-x.y.z.gem
44
45
 
45
46
 
46
47
  ### Naming conventions
data/GUIDE.md CHANGED
@@ -32,6 +32,9 @@ sheet.cells(1,1).value = value
32
32
 
33
33
  p sheet.A1.class # => Rspreadsheet::Cell
34
34
 
35
+ # relative cells
36
+ sheet.cells(4,7).relative(-1,0) # => cell 3,7
37
+
35
38
  # build the top five list
36
39
  (1..5).each { |i| sheet[i,1] = i }
37
40
  sheet.columns(1).format.bold = true
@@ -23,10 +23,11 @@ class Cell
23
23
  def ns_office; @parent_row.xmlnode.doc.root.namespaces.find_by_prefix('office') end
24
24
  def ns_text; @parent_row.xmlnode.doc.root.namespaces.find_by_prefix('text') end
25
25
  def to_s; value end
26
- def xml; self.source_node.to_s; end
27
- def value_xml; self.source_node.children.first.children.first.to_s; end
26
+ def cell_xml; self.xmlnode.to_s; end
27
+ def xml; self.xmlnode.children.first.andand.inner_xml end
28
28
  def coordinates; [row,col]; end
29
29
  def row; @parent_row.row; end
30
+ def worksheet; @parent_row.worksheet; end
30
31
  def value
31
32
  gt = guess_cell_type
32
33
  if (@mode == :regular) or (@mode == @repeated)
@@ -87,7 +88,23 @@ class Cell
87
88
  def set_type_attribute(typestring)
88
89
  Tools.set_ns_attribute(@xmlnode,'office','value-type',typestring)
89
90
  end
90
-
91
+ def type
92
+ case
93
+ when guess_cell_type == Float then :float
94
+ when guess_cell_type == String then :string
95
+ when guess_cell_type == Date then :date
96
+ when guess_cell_type == 'percentage' then :percentage
97
+ when guess_cell_type == nil then :empty
98
+ else :unknown
99
+ end
100
+ end
101
+ # use this to find node in cell xml. ex. xmlfind('.//text:a') finds all link nodes
102
+ def xmlfindall(path)
103
+ xmlnode.find(path)
104
+ end
105
+ def xmlfindfirst(path)
106
+ xmlfindall(path).first
107
+ end
91
108
  # based on @xmlnode and optionally value which is about to be assigned, guesses which type the result should be
92
109
  def guess_cell_type(avalue=nil)
93
110
  # try guessing by value
@@ -106,7 +123,7 @@ class Cell
106
123
  when 'float' then Float
107
124
  when 'string' then String
108
125
  when 'date' then Date
109
- when 'percentage' then 'percentage'
126
+ when 'percentage' then :percentage
110
127
  else
111
128
  if @xmlnode.children.size == 0
112
129
  nil
@@ -141,26 +158,21 @@ class Cell
141
158
  def inspect
142
159
  "#<Cell:[#{row},#{col}]=#{value}(#{guess_cell_type.to_s})"
143
160
  end
161
+ def relative(rowdiff,coldiff)
162
+ worksheet.cells(self.row+rowdiff, self.col+coldiff)
163
+ end
144
164
  end
145
165
 
146
166
  end
147
167
 
148
- # ## initialize cells
149
- # @cells = Hash.new do |hash, coords|
150
- # # we create empty cell and place it to hash, we do not have to check whether there is a cell in XML already, because it would be in hash as well
151
- # hash[coords]=Cell.new(coords[0],coords[1])
152
- # # TODO: create XML empty node here or upon save?
153
- # end
154
- # rowi = 1
155
- # unless @xmlnode.nil?
156
- # @xmlnode.elements.select{ |node| node.name == 'table-row'}.each do |row_source_node|
157
- # coli = 1
158
- # row_source_node.elements.select{ |node| node.name == 'table-cell'}.each do |cell_source_node|
159
- # initialize_cell(rowi,coli,cell_source_node)
160
- # coli += 1
161
- # end
162
- # rowi += 1
163
- # end
164
- # end
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
165
177
 
166
178
 
@@ -1,12 +1,14 @@
1
1
  require('rspreadsheet/cell')
2
- include Forwardable
2
+ require('forwardable')
3
+
3
4
 
4
5
  # Currently this is only syntax sugar for cells and contains no functionality
5
6
 
6
7
  module Rspreadsheet
7
8
 
8
9
  class RowArray
9
- def initialize(aworksheet_node)
10
+ def initialize(aworksheet,aworksheet_node)
11
+ @worksheet = aworksheet
10
12
  @worksheet_node = aworksheet_node
11
13
 
12
14
  # initialize @rowgroups from @worksheet_node
@@ -106,7 +108,7 @@ class RowArray
106
108
  @rowgroups[index..index]=replaceby
107
109
  result
108
110
  end
109
-
111
+ def worksheet; @worksheet end
110
112
  private
111
113
  def get_row_group_index(rowi)
112
114
  @rowgroups.find_index{ |rowgroup| rowgroup.range.cover?(rowi) }
@@ -119,6 +121,8 @@ class Row
119
121
  def self.empty_row_node
120
122
  LibXML::XML::Node.new('table-row',nil, Tools.get_namespace('table'))
121
123
  end
124
+ def worksheet; @parent_array.worksheet end
125
+ def parent_array; @parent_array end # for debug only
122
126
  end
123
127
 
124
128
  class RowWithXMLNode < Row
@@ -1,3 +1,3 @@
1
1
  module Rspreadsheet
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -26,7 +26,7 @@ class Workbook
26
26
  Zip::File.open(@filename) do |zip|
27
27
  # it is easy, because @xmlnode in in sync with contents all the time
28
28
  zip.get_output_stream('content.xml') do |f|
29
- f.write @content_xml
29
+ f.write @content_xml.to_s(:indent => false)
30
30
  end
31
31
  end
32
32
  end
@@ -23,7 +23,7 @@ class Worksheet
23
23
  end
24
24
 
25
25
  ## initialize rows
26
- @spredsheetrows=RowArray.new(@xmlnode)
26
+ @spredsheetrows=RowArray.new(self,@xmlnode)
27
27
  end
28
28
  def cells(r,c)
29
29
  rows(r).andand.cells(c)
@@ -36,10 +36,10 @@ class Worksheet
36
36
  end
37
37
  ## syntactic sugar follows
38
38
  def [](r,c)
39
- cells(r,c).value
39
+ cells(r,c).andand.value
40
40
  end
41
41
  def []=(r,c,avalue)
42
- cells(r,c).value=avalue
42
+ cells(r,c).andand.value=avalue
43
43
  end
44
44
  # allows syntax like sheet.F15
45
45
  def method_missing method_name, *args, &block
data/reinstall.sh ADDED
@@ -0,0 +1,6 @@
1
+ #!/bin/sh
2
+
3
+ cd rspreadsheet
4
+ gem build rspreadsheet.gemspec
5
+ gem install rspreadsheet-0.1.0.gem
6
+ cd ..
data/rspreadsheet.gemspec CHANGED
@@ -28,8 +28,8 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency "bundler", "~> 1.5"
29
29
  spec.add_development_dependency "rake", '~>0.9'
30
30
  # testig - see http://bit.ly/1n5yM51
31
- spec.add_development_dependency "rspec", '~>2' # testing
32
- spec.add_development_dependency 'pry-nav' # enables pry 'next', 'step' commands
31
+ spec.add_development_dependency "rspec", '~>2' # testing
32
+ spec.add_development_dependency 'pry-nav', '~>0' # enables pry 'next', 'step' commands
33
33
 
34
34
  # optional and testing
35
35
  spec.add_development_dependency "coveralls", '~>0.7'
data/spec/cell_spec.rb CHANGED
@@ -46,4 +46,17 @@ describe Rspreadsheet::Cell do
46
46
  @sheet2.cells(2,-5).should be(nil)
47
47
  @sheet2.cells(-2,-5).should be(nil)
48
48
  end
49
+ it 'has nonempty parents' do
50
+ @cell = @sheet2.cells(13,5)
51
+ @cell.parent_row.should_not be_nil
52
+ @cell.worksheet.should_not be_nil
53
+
54
+ @cell = @sheet1.cells(2,2)
55
+ @cell.parent_row.should_not be_nil
56
+ @cell.worksheet.should_not be_nil
57
+ end
58
+ it 'handles relative correctly' do
59
+ @sheet2.cells(3,3).relative(-1,+2).coordinates.should == [2,5]
60
+ @sheet2.cells(3,3).relative(0,0).coordinates.should == [3,3]
61
+ end
49
62
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Rspreadsheet::Tools do
4
4
  it 'converts correctly cell adresses' do
5
- Rspreadsheet::Tools.convert_cell_address('A1') [0].should == 1
5
+ Rspreadsheet::Tools.convert_cell_address('A1')[0].should == 1
6
6
  Rspreadsheet::Tools.convert_cell_address('A1')[1].should == 1
7
7
  Rspreadsheet::Tools.convert_cell_address('C5')[0].should == 5
8
8
  Rspreadsheet::Tools.convert_cell_address('C5')[1].should == 3
@@ -47,4 +47,9 @@ describe Rspreadsheet::Worksheet do
47
47
  @sheet.name = 'Cofee'
48
48
  @sheet.name.should == 'Cofee'
49
49
  end
50
+ it 'out of range indexes return nil value' do
51
+ @sheet[-1,-1].should == nil
52
+ @sheet[0,0].should == nil
53
+ @sheet[999,999].should == nil
54
+ end
50
55
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspreadsheet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jakub A.Těšínský
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-04 00:00:00.000000000 Z
11
+ date: 2014-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: libxml-ruby
@@ -98,14 +98,14 @@ dependencies:
98
98
  name: pry-nav
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
@@ -180,6 +180,7 @@ files:
180
180
  - lib/rspreadsheet/version.rb
181
181
  - lib/rspreadsheet/workbook.rb
182
182
  - lib/rspreadsheet/worksheet.rb
183
+ - reinstall.sh
183
184
  - rspreadsheet.gemspec
184
185
  - spec/cell_spec.rb
185
186
  - spec/row_spec.rb