extract 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.
Files changed (54) hide show
  1. data/.document +5 -0
  2. data/.lre +1 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +27 -0
  5. data/Gemfile.lock +108 -0
  6. data/Guardfile +27 -0
  7. data/LICENSE.txt +20 -0
  8. data/README.rdoc +19 -0
  9. data/Rakefile +49 -0
  10. data/VERSION +1 -0
  11. data/extract.gemspec +128 -0
  12. data/lib/extract.rb +39 -0
  13. data/lib/extract/excel_formulas.rb +44 -0
  14. data/lib/extract/formula.treetop +66 -0
  15. data/lib/extract/math.treetop +33 -0
  16. data/lib/extract/math_calc.rb +111 -0
  17. data/lib/extract/parser.rb +90 -0
  18. data/lib/extract/persist/sheet.rb +26 -0
  19. data/lib/extract/sheet.rb +85 -0
  20. data/lib/extract/sheet_comp.rb +7 -0
  21. data/lib/extract/sheet_definition.rb +127 -0
  22. data/lib/extract/tree/base.rb +7 -0
  23. data/lib/extract/tree/cell.rb +33 -0
  24. data/lib/extract/tree/cond_exp.rb +25 -0
  25. data/lib/extract/tree/formula.rb +24 -0
  26. data/lib/extract/tree/formula_args.rb +30 -0
  27. data/lib/extract/tree/math.rb +106 -0
  28. data/lib/extract/tree/num.rb +18 -0
  29. data/lib/extract/tree/operator.rb +9 -0
  30. data/lib/extract/tree/range.rb +58 -0
  31. data/lib/extract/tree/string.rb +12 -0
  32. data/samples/baseball.xlsx +0 -0
  33. data/samples/div.xlsx +0 -0
  34. data/spec/config/mongoid.yml +6 -0
  35. data/spec/deps_spec.rb +48 -0
  36. data/spec/extract_spec.rb +44 -0
  37. data/spec/math_spec.rb +52 -0
  38. data/spec/parser_spec.rb +145 -0
  39. data/spec/persist_spec.rb +34 -0
  40. data/spec/sheet_definition_spec.rb +46 -0
  41. data/spec/sheet_spec.rb +51 -0
  42. data/spec/spec_helper.rb +68 -0
  43. data/vol/excel_test.rb +55 -0
  44. data/vol/parse_test.rb +8 -0
  45. data/vol/scratch.rb +61 -0
  46. data/vol/web.rb +0 -0
  47. data/vol/yaml_test.rb +4 -0
  48. data/web/file.tmp +0 -0
  49. data/web/file.xlsx +0 -0
  50. data/web/main.rb +59 -0
  51. data/web/mongoid.yml +6 -0
  52. data/web/views/index.haml +39 -0
  53. data/web/views/upload.haml +13 -0
  54. metadata +311 -0
data/vol/parse_test.rb ADDED
@@ -0,0 +1,8 @@
1
+ begin
2
+ res = Extract::Parser.new(:str => "=SUM(A1,A2)").excel_value
3
+ rescue => exp
4
+ end
5
+
6
+ e = $thing.rest.elements.first.elements[1]
7
+ puts e.inspect
8
+ puts e.excel_value
data/vol/scratch.rb ADDED
@@ -0,0 +1,61 @@
1
+ def shunting_yard(input)
2
+ [].tap do |rpn|
3
+
4
+ # where I store operators before putting them onto final rpn list
5
+ operator_stack = []
6
+
7
+ input.each do |object|
8
+
9
+ if object.operator?
10
+ op1 = object
11
+
12
+ # while we have an operator on the temp stack
13
+ # and that op on the temp stack has a higher precedence than the current op
14
+ while (op2 = operator_stack.last) && (op1.left_associative? ? op1.precedence <= op2.precedence : op1.precedence < op2.precedence)
15
+ rpn << operator_stack.pop
16
+ end
17
+ operator_stack << op1
18
+ else
19
+ rpn << object
20
+ end
21
+ end
22
+ rpn << operator_stack.pop until operator_stack.empty?
23
+ end
24
+ end
25
+
26
+ def rpn(input)
27
+ results = []
28
+ input.each do |object|
29
+ if object.operator?
30
+ r, l = results.pop, results.pop
31
+ results << object.apply(l, r)
32
+ else
33
+ results << object
34
+ end
35
+ end
36
+ results.first
37
+ end
38
+
39
+ class String
40
+ def operator?
41
+ %w(+ - * /).include?(self)
42
+ end
43
+ def left_associative?
44
+ false
45
+ end
46
+ def precedence
47
+ h = {"*" => 10, "/" => 10, "+" => 5, "-" => 5}
48
+ h[self]
49
+ end
50
+ def apply(l,r)
51
+ str = "#{l} #{self} #{r}"
52
+ eval(str)
53
+ end
54
+ end
55
+
56
+ puts "\n"*10
57
+ input = %w(1 + 2 * 3 + 4)
58
+ rpn_tokens = shunting_yard(input)
59
+ puts rpn_tokens.inspect
60
+ rpn_res = rpn(rpn_tokens)
61
+ puts rpn_res.inspect
data/vol/web.rb ADDED
File without changes
data/vol/yaml_test.rb ADDED
@@ -0,0 +1,4 @@
1
+ require 'yaml'
2
+
3
+ res = YAML::load(open("spec/config/mongoid.yml"))
4
+ puts res.inspect
data/web/file.tmp ADDED
Binary file
data/web/file.xlsx ADDED
Binary file
data/web/main.rb ADDED
@@ -0,0 +1,59 @@
1
+ require 'sinatra'
2
+ require 'haml'
3
+
4
+
5
+
6
+ load "/users/mharris717/code/orig/extract/lib/extract.rb"
7
+
8
+ f = File.expand_path(File.dirname(__FILE__)) + "/mongoid.yml"
9
+ Mongoid.load! f,'development'
10
+
11
+ helpers do
12
+ def sheetd
13
+ file = "/users/mharris717/code/orig/extract/samples/baseball.xlsx"
14
+ #$sheet ||= Extract::SheetDefinition.load(file,%w(B42))
15
+
16
+ #$sheet ||= Extract::SheetDefinition.load(file,%w(B38 B41 B51 B52))
17
+
18
+ $sheet ||= Extract::SheetDefinition.load(file,%w(C10 C11 C12))
19
+ end
20
+ end
21
+
22
+ get "/" do
23
+ @sheet = sheet
24
+ sheet.sheet.clear_cache!
25
+
26
+ if params[:input]
27
+ params[:input].each do |cell,val|
28
+ val = val.to_f if val.present?
29
+ @sheet.sheet[cell] = val
30
+ end
31
+ end
32
+
33
+ haml :index
34
+ end
35
+
36
+ get "/upload" do
37
+ haml :upload
38
+ end
39
+
40
+ post "/upload" do
41
+ file = params['sheet'][:filename]
42
+ puts params.inspect
43
+
44
+
45
+ str = params['sheet'][:tempfile].read
46
+ File.create("file.xlsx",str)
47
+
48
+ cells = (params['output_cells'] || '').split(" ")
49
+
50
+ sheet_def = Extract::SheetDefinition.load("file.xlsx",cells)
51
+ sheet_def.save!
52
+
53
+ haml :upload
54
+ end
55
+
56
+ get "/sheet/:id" do
57
+ @sheet = Extract::Persist::Sheet.find(params[:id]).sheet_def
58
+ haml :index
59
+ end
data/web/mongoid.yml ADDED
@@ -0,0 +1,6 @@
1
+ development:
2
+ sessions:
3
+ default:
4
+ database: extract_web
5
+ hosts:
6
+ - localhost:27017
@@ -0,0 +1,39 @@
1
+ %form{:action => "/"}
2
+ %table
3
+ %tr
4
+ %th Cell
5
+ %th Name
6
+ %th Val
7
+ %th Deps
8
+ %th Formula
9
+
10
+ - @sheet.each_input do |cell,name,val|
11
+ %tr
12
+ %td= cell
13
+ %td= name
14
+ %td
15
+ %input{:type => "text", :name => "input[#{cell}]", :value => val}
16
+
17
+ %tr
18
+ %td _
19
+
20
+ - @sheet.each_output do |cell,name,val,deps,formula|
21
+ %tr
22
+ %td= cell
23
+ %td= name
24
+ %td= val
25
+ %td= deps.join(",")
26
+ %td= formula
27
+
28
+
29
+ %tr
30
+ %td
31
+ %input{:type => "Submit"}
32
+
33
+ - @sheet.each_other do |cell,formula,deps|
34
+ %tr
35
+ %td= cell
36
+ %td
37
+ %td
38
+ %td= deps.join(",")
39
+ %td= formula
@@ -0,0 +1,13 @@
1
+ %form{:method => "post", :enctype => 'multipart/form-data', :action => "/upload"}
2
+ %input{:type => "file", :name => "sheet"}
3
+ %br
4
+ %input{:type => "input", :name => "output_cells"}
5
+ %br
6
+ %input{:type => "submit"}
7
+
8
+ %br
9
+ %br
10
+
11
+ - Extract::Persist::Sheet.all.each do |sheet|
12
+ %a{:href => "/sheet/#{sheet.id}"} Sheet
13
+ %br
metadata ADDED
@@ -0,0 +1,311 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: extract
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mike Harris
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: guard
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: guard-rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: guard-spork
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: mharris_ext
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: treetop
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: lre
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: roo
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rb-fsevent
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: 0.9.1
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: 0.9.1
142
+ - !ruby/object:Gem::Dependency
143
+ name: mongoid
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: rspec
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ~>
164
+ - !ruby/object:Gem::Version
165
+ version: 2.8.0
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 2.8.0
174
+ - !ruby/object:Gem::Dependency
175
+ name: rdoc
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ~>
180
+ - !ruby/object:Gem::Version
181
+ version: '3.12'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ~>
188
+ - !ruby/object:Gem::Version
189
+ version: '3.12'
190
+ - !ruby/object:Gem::Dependency
191
+ name: bundler
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ~>
196
+ - !ruby/object:Gem::Version
197
+ version: '1.2'
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ~>
204
+ - !ruby/object:Gem::Version
205
+ version: '1.2'
206
+ - !ruby/object:Gem::Dependency
207
+ name: jeweler
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ~>
212
+ - !ruby/object:Gem::Version
213
+ version: 1.8.4
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ~>
220
+ - !ruby/object:Gem::Version
221
+ version: 1.8.4
222
+ description: extract
223
+ email: mharris717@gmail.com
224
+ executables: []
225
+ extensions: []
226
+ extra_rdoc_files:
227
+ - LICENSE.txt
228
+ - README.rdoc
229
+ files:
230
+ - .document
231
+ - .lre
232
+ - .rspec
233
+ - Gemfile
234
+ - Gemfile.lock
235
+ - Guardfile
236
+ - LICENSE.txt
237
+ - README.rdoc
238
+ - Rakefile
239
+ - VERSION
240
+ - extract.gemspec
241
+ - lib/extract.rb
242
+ - lib/extract/excel_formulas.rb
243
+ - lib/extract/formula.treetop
244
+ - lib/extract/math.treetop
245
+ - lib/extract/math_calc.rb
246
+ - lib/extract/parser.rb
247
+ - lib/extract/persist/sheet.rb
248
+ - lib/extract/sheet.rb
249
+ - lib/extract/sheet_comp.rb
250
+ - lib/extract/sheet_definition.rb
251
+ - lib/extract/tree/base.rb
252
+ - lib/extract/tree/cell.rb
253
+ - lib/extract/tree/cond_exp.rb
254
+ - lib/extract/tree/formula.rb
255
+ - lib/extract/tree/formula_args.rb
256
+ - lib/extract/tree/math.rb
257
+ - lib/extract/tree/num.rb
258
+ - lib/extract/tree/operator.rb
259
+ - lib/extract/tree/range.rb
260
+ - lib/extract/tree/string.rb
261
+ - samples/baseball.xlsx
262
+ - samples/div.xlsx
263
+ - spec/config/mongoid.yml
264
+ - spec/deps_spec.rb
265
+ - spec/extract_spec.rb
266
+ - spec/math_spec.rb
267
+ - spec/parser_spec.rb
268
+ - spec/persist_spec.rb
269
+ - spec/sheet_definition_spec.rb
270
+ - spec/sheet_spec.rb
271
+ - spec/spec_helper.rb
272
+ - vol/excel_test.rb
273
+ - vol/parse_test.rb
274
+ - vol/scratch.rb
275
+ - vol/web.rb
276
+ - vol/yaml_test.rb
277
+ - web/file.tmp
278
+ - web/file.xlsx
279
+ - web/main.rb
280
+ - web/mongoid.yml
281
+ - web/views/index.haml
282
+ - web/views/upload.haml
283
+ homepage: http://github.com/mharris717/extract
284
+ licenses:
285
+ - MIT
286
+ post_install_message:
287
+ rdoc_options: []
288
+ require_paths:
289
+ - lib
290
+ required_ruby_version: !ruby/object:Gem::Requirement
291
+ none: false
292
+ requirements:
293
+ - - ! '>='
294
+ - !ruby/object:Gem::Version
295
+ version: '0'
296
+ segments:
297
+ - 0
298
+ hash: 4241226934057128656
299
+ required_rubygems_version: !ruby/object:Gem::Requirement
300
+ none: false
301
+ requirements:
302
+ - - ! '>='
303
+ - !ruby/object:Gem::Version
304
+ version: '0'
305
+ requirements: []
306
+ rubyforge_project:
307
+ rubygems_version: 1.8.23
308
+ signing_key:
309
+ specification_version: 3
310
+ summary: extract
311
+ test_files: []