rspreadsheet 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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