simple_view 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +2 -0
- data/lib/CVS/Entries +3 -0
- data/lib/CVS/Repository +1 -0
- data/lib/CVS/Root +1 -0
- data/lib/core-ext/CVS/Entries +5 -0
- data/lib/core-ext/CVS/Repository +1 -0
- data/lib/core-ext/CVS/Root +1 -0
- data/lib/core-ext/array.rb +14 -0
- data/lib/core-ext/jopen.rb +43 -0
- data/lib/core-ext/nilclass.rb +31 -0
- data/lib/core-ext/string.rb +51 -0
- data/lib/simple_view/CVS/Entries +11 -0
- data/lib/simple_view/CVS/Repository +1 -0
- data/lib/simple_view/CVS/RevisionCache/builder_view.rb#1.1.1.1 +42 -0
- data/lib/simple_view/CVS/RevisionCache/erb_view.rb#1.1.1.1 +44 -0
- data/lib/simple_view/CVS/RevisionCache/file_content.rb#1.1.1.1 +50 -0
- data/lib/simple_view/CVS/RevisionCache/io_view.rb#1.1.1.1 +37 -0
- data/lib/simple_view/CVS/RevisionCache/poi_view.rb#1.1.1.1 +116 -0
- data/lib/simple_view/CVS/RevisionCache/renderable.rb#1.1.1.1 +114 -0
- data/lib/simple_view/CVS/RevisionCache/simple_view.rb#1.1.1.1 +214 -0
- data/lib/simple_view/CVS/Root +1 -0
- data/lib/simple_view/builder_view.rb +42 -0
- data/lib/simple_view/erb_view.rb +44 -0
- data/lib/simple_view/file_content.rb +50 -0
- data/lib/simple_view/haml_view.rb +36 -0
- data/lib/simple_view/io_view.rb +37 -0
- data/lib/simple_view/java/CVS/Entries +1 -0
- data/lib/simple_view/java/CVS/Repository +1 -0
- data/lib/simple_view/java/CVS/Root +1 -0
- data/lib/simple_view/java/poi/CVS/Entries +6 -0
- data/lib/simple_view/java/poi/CVS/Repository +1 -0
- data/lib/simple_view/java/poi/CVS/Root +1 -0
- data/lib/simple_view/java/poi/poi-3.6-20091214.jar +0 -0
- data/lib/simple_view/java/poi/poi-contrib-3.6-20091214.jar +0 -0
- data/lib/simple_view/java/poi/poi-ooxml-3.6-20091214.jar +0 -0
- data/lib/simple_view/java/poi/poi-ooxml-schemas-3.6-20091214.jar +0 -0
- data/lib/simple_view/java/poi/poi-scratchpad-3.6-20091214.jar +0 -0
- data/lib/simple_view/poi_view.rb +116 -0
- data/lib/simple_view/renderable.rb +114 -0
- data/lib/simple_view/simple_view.rb +214 -0
- data/lib/simple_view/smartxls.rb +38 -0
- data/lib/simple_view/version.rb +3 -0
- data/lib/simple_view.rb +5 -0
- data/test/CVS/Entries +6 -0
- data/test/CVS/Repository +1 -0
- data/test/CVS/RevisionCache/test_view.rb#1.1.1.1 +25 -0
- data/test/CVS/RevisionCache/test_view_reuse_erb.rb#1.1.1.1 +21 -0
- data/test/CVS/Root +1 -0
- data/test/helpers/CVS/Entries +3 -0
- data/test/helpers/CVS/Repository +1 -0
- data/test/helpers/CVS/RevisionCache/test_helper.rb#1.1.1.1 +7 -0
- data/test/helpers/CVS/Root +1 -0
- data/test/helpers/etat_corbeilles_prc_helper.rb +13 -0
- data/test/helpers/test_helper.rb +7 -0
- data/test/jtest_view.rb +17 -0
- data/test/test_view.rb +25 -0
- data/test/test_view_reuse_erb.rb +21 -0
- data/test/test_view_sv_debug.rb +16 -0
- data/test/views/CVS/Entries +17 -0
- data/test/views/CVS/Repository +1 -0
- data/test/views/CVS/RevisionCache/test.erb#1.1.1.1 +2 -0
- data/test/views/CVS/Root +1 -0
- data/test/views/etat_corbeilles_prc-csv.io.rb +40 -0
- data/test/views/etat_corbeilles_prc-xls.poi.rb +97 -0
- data/test/views/etat_corbeilles_prc-xls2.smartxl.rb +128 -0
- data/test/views/etat_corbeilles_prc.html.erb +108 -0
- data/test/views/test-builder.builder.rb +1 -0
- data/test/views/test-erb.erb +1 -0
- data/test/views/test-model.xls +0 -0
- data/test/views/test-model.xlsx +0 -0
- data/test/views/test-xls.poi.rb +34 -0
- data/test/views/test-xls.smartxl.rb +80 -0
- data/test/views/test.builder.rb +1 -0
- data/test/views/test.erb +2 -0
- data/test/views/test.haml +1 -0
- data/test/views/test.io.rb +1 -0
- data/test/views/test.poi.rb +7 -0
- data/test/views/test_error.erb +1 -0
- metadata +177 -0
@@ -0,0 +1,214 @@
|
|
1
|
+
require 'monitor'
|
2
|
+
require 'delegate'
|
3
|
+
require 'core-ext/string'
|
4
|
+
require 'core-ext/nilclass'
|
5
|
+
|
6
|
+
|
7
|
+
module SimpleView
|
8
|
+
|
9
|
+
autoload :FileContent, File.join(File.dirname(__FILE__), 'file_content')
|
10
|
+
autoload :Renderable, File.join(File.dirname(__FILE__), 'renderable')
|
11
|
+
|
12
|
+
autoload :SimpleViewERB, File.join(File.dirname(__FILE__), 'erb_view')
|
13
|
+
autoload :SimpleViewIO, File.join(File.dirname(__FILE__), 'io_view')
|
14
|
+
autoload :SimpleViewBuilder, File.join(File.dirname(__FILE__), 'builder_view')
|
15
|
+
autoload :SimpleViewPOI, File.join(File.dirname(__FILE__), 'poi_view')
|
16
|
+
|
17
|
+
$SV_DEBUG = ENV['SV_DEBUG']
|
18
|
+
|
19
|
+
class Base
|
20
|
+
|
21
|
+
|
22
|
+
class << self
|
23
|
+
attr_accessor :directory_views, :directory_helpers
|
24
|
+
end
|
25
|
+
|
26
|
+
def directory_views
|
27
|
+
Base.directory_views
|
28
|
+
end
|
29
|
+
|
30
|
+
def directory_helpers
|
31
|
+
Base.directory_helpers
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
class TemplateViewNotFound < Exception; end
|
37
|
+
|
38
|
+
class SimpleViewBase < Base
|
39
|
+
|
40
|
+
attr_accessor :template, :file_template
|
41
|
+
|
42
|
+
def initialize(template, file_template = nil)
|
43
|
+
self.template = template
|
44
|
+
self.file_template = file_template
|
45
|
+
end
|
46
|
+
|
47
|
+
def template_name(ext = self.template_extension)
|
48
|
+
"#{template}#{ext}"
|
49
|
+
end
|
50
|
+
|
51
|
+
def lookup_file_template(ext = self.template_extension)
|
52
|
+
unless @file_template
|
53
|
+
tpl = self.template_name(ext)
|
54
|
+
list = Dir.glob(File.join(self.directory_views, tpl))
|
55
|
+
raise TemplateViewNotFound.new("Impossible de trouver le template #{tpl} dans le repertoire #{self.directory_views}") unless list.size == 1
|
56
|
+
@file_template = list.first
|
57
|
+
end
|
58
|
+
@file_template
|
59
|
+
end
|
60
|
+
|
61
|
+
def clean_template_name_for_helper
|
62
|
+
template[/(\w+)(\W*)/,1]
|
63
|
+
end
|
64
|
+
|
65
|
+
def lookup_file_helper
|
66
|
+
if !self.instance_variable_defined?(:@file_helper) && self.directory_helpers
|
67
|
+
helper_file_name = "#{self.clean_template_name_for_helper}_helper.rb"
|
68
|
+
puts "SimpleViewBase > helper_file_name= #{helper_file_name}" if $DEBUG
|
69
|
+
fhlpr = File.join(self.directory_helpers, helper_file_name)
|
70
|
+
puts "SimpleViewBase > fhlpr= #{fhlpr}" if $DEBUG
|
71
|
+
if File.exist?(fhlpr)
|
72
|
+
@file_helper = FileContent.file(fhlpr)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
@file_helper
|
76
|
+
end
|
77
|
+
|
78
|
+
def template_content
|
79
|
+
FileContent.file(self.lookup_file_template).content
|
80
|
+
end
|
81
|
+
|
82
|
+
def has_helper?
|
83
|
+
hf = self.lookup_file_helper
|
84
|
+
return nil unless hf
|
85
|
+
true
|
86
|
+
end
|
87
|
+
|
88
|
+
def helper_module_name
|
89
|
+
hname = self.clean_template_name_for_helper # exemple: template = 'etat_corbeilles_prc.html' => hname = 'etat_corbeilles_prc'
|
90
|
+
"#{hname}_helper".camelcase(true).to_sym
|
91
|
+
end
|
92
|
+
|
93
|
+
def template_extension
|
94
|
+
if self.class.respond_to?(:extension)
|
95
|
+
return self.class.extension
|
96
|
+
end
|
97
|
+
".rb"
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
def set_helper(rendable_object)
|
102
|
+
if has_helper?
|
103
|
+
helper = nil
|
104
|
+
helper_name = self.helper_module_name
|
105
|
+
begin
|
106
|
+
if @file_helper.changed? || !Object::const_defined?(helper_name)
|
107
|
+
load @file_helper.file(true)
|
108
|
+
else
|
109
|
+
|
110
|
+
end
|
111
|
+
helper = Object::const_get(helper_name)
|
112
|
+
rescue NameError => ex
|
113
|
+
# puts "set_helper: #{ex.message}", ex.backtrace
|
114
|
+
require(@file_helper.file)
|
115
|
+
retry
|
116
|
+
end
|
117
|
+
puts "set_helper #{helper} for: #{rendable_object}" if $DEBUG
|
118
|
+
rendable_object.extend helper
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
def render(rendable_object, options = {})
|
124
|
+
target = options[:target]
|
125
|
+
if String === target && (options[:type] != :string)
|
126
|
+
FileUtils.mkdir_p(File.dirname(target)) if options[:mkdirs]
|
127
|
+
open(target, options[:open]||'w') do |o|
|
128
|
+
options[:target] = o
|
129
|
+
begin
|
130
|
+
return do_rendering(rendable_object, options)
|
131
|
+
ensure
|
132
|
+
options[:target] = target
|
133
|
+
end
|
134
|
+
end
|
135
|
+
else
|
136
|
+
return do_rendering(rendable_object, options)
|
137
|
+
end
|
138
|
+
rescue => ex
|
139
|
+
puts ex.message, ex.backtrace.collect{|st| "\t#{st}"}
|
140
|
+
if $SV_DEBUG
|
141
|
+
puts "[SV_DEBUG = #$SV_DEBUG]: Retry ? [y|n]"
|
142
|
+
response = $stdin.gets.strip
|
143
|
+
retry if response =~ /Y|y/
|
144
|
+
end
|
145
|
+
raise ex
|
146
|
+
end
|
147
|
+
|
148
|
+
def render_with_helper(rendable_object)
|
149
|
+
set_helper(rendable_object)
|
150
|
+
yield if block_given?
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
class << self
|
155
|
+
|
156
|
+
def template_extensions
|
157
|
+
@template_extensions ||= {}
|
158
|
+
end
|
159
|
+
|
160
|
+
def register(subclass)
|
161
|
+
ext = subclass.extension
|
162
|
+
SimpleViewBase.template_extensions[ext] = subclass
|
163
|
+
end
|
164
|
+
|
165
|
+
def lookup_file_template(template)
|
166
|
+
tpl = "#{template}#{self.extension}"
|
167
|
+
file = File.join(Base.directory_views, tpl)
|
168
|
+
puts "lookup_file_template : #{tpl} => #{file}" if $DEBUG
|
169
|
+
raise TemplateViewNotFound.new("Impossible de trouver le template #{tpl} dans le repertoire #{Base.directory_views} (#{file})") unless File.exist?(file)
|
170
|
+
file
|
171
|
+
end
|
172
|
+
|
173
|
+
def views
|
174
|
+
@views ||= {}
|
175
|
+
end
|
176
|
+
|
177
|
+
def view(template)
|
178
|
+
self.views[template] ||= self.basic_view(template)
|
179
|
+
end
|
180
|
+
|
181
|
+
def find_view(template)
|
182
|
+
SimpleViewBase.template_extensions.each do |ext, renderer|
|
183
|
+
begin
|
184
|
+
return renderer.view(template)
|
185
|
+
rescue TemplateViewNotFound
|
186
|
+
end
|
187
|
+
end
|
188
|
+
raise TemplateViewNotFound.new("Impossible de trouver le template #{template} dans le repertoire #{Base.directory_views}")
|
189
|
+
end
|
190
|
+
|
191
|
+
protected
|
192
|
+
def basic_view(template)
|
193
|
+
file = lookup_file_template(template)
|
194
|
+
self.new(template, file)
|
195
|
+
end
|
196
|
+
|
197
|
+
end
|
198
|
+
|
199
|
+
end
|
200
|
+
|
201
|
+
|
202
|
+
class SimpleLayout < SimpleViewBase
|
203
|
+
|
204
|
+
def do_rendering(rendable_object, options)
|
205
|
+
|
206
|
+
end
|
207
|
+
|
208
|
+
end
|
209
|
+
|
210
|
+
# Loading default
|
211
|
+
SimpleViewERB.name
|
212
|
+
SimpleViewIO.name
|
213
|
+
|
214
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
:pserver:gie\barukh@esvwas51.si.fr:/repositories/aag
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'builder'
|
2
|
+
|
3
|
+
module SimpleView
|
4
|
+
|
5
|
+
class SimpleViewBuilder < SimpleViewBase
|
6
|
+
|
7
|
+
EXTENTION = ".builder.rb".freeze unless defined?(EXTENTION)
|
8
|
+
|
9
|
+
def self.extension
|
10
|
+
EXTENTION
|
11
|
+
end
|
12
|
+
|
13
|
+
SimpleViewBase.register(self)
|
14
|
+
|
15
|
+
def do_rendering(rendable_object, options)
|
16
|
+
options = {:indent => 2}.merge(options)
|
17
|
+
filename = options.delete(:filename) || '<BUILDER>'
|
18
|
+
line = options.delete(:line) || 1
|
19
|
+
xml = ::Builder::XmlMarkup.new(options)
|
20
|
+
rendable_object.put_locals_objects((options.delete(:builder_name) || :xml).to_sym => xml)
|
21
|
+
render_with_helper(rendable_object) do
|
22
|
+
eval self.template_content, rendable_object.get_binding, filename, line
|
23
|
+
end
|
24
|
+
xml.target!
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
module Renderable
|
31
|
+
|
32
|
+
module InstanceMethods
|
33
|
+
|
34
|
+
def render_builder(template, options = {})
|
35
|
+
render_with SimpleViewBuilder, template, options
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'erb'
|
2
|
+
|
3
|
+
|
4
|
+
module SimpleView
|
5
|
+
|
6
|
+
class SimpleViewERB < SimpleViewBase
|
7
|
+
EXTENTION = ".erb".freeze unless defined?(EXTENTION)
|
8
|
+
|
9
|
+
def self.extension
|
10
|
+
EXTENTION
|
11
|
+
end
|
12
|
+
|
13
|
+
SimpleViewBase.register(self)
|
14
|
+
|
15
|
+
def erb
|
16
|
+
unless @erb
|
17
|
+
@erb = ERB.new(self.template_content, 0, '<%%>')
|
18
|
+
@erb.filename = self.file_template
|
19
|
+
end
|
20
|
+
@erb
|
21
|
+
end
|
22
|
+
|
23
|
+
def do_rendering(rendable_object, options)
|
24
|
+
render_with_helper(rendable_object) do
|
25
|
+
res = erb.result(rendable_object.get_binding)
|
26
|
+
options[:target] << res if options[:target]
|
27
|
+
res
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
module Renderable
|
33
|
+
|
34
|
+
module InstanceMethods
|
35
|
+
|
36
|
+
def render_erb(template, options = {})
|
37
|
+
render_with SimpleViewERB, template, options
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module SimpleView
|
2
|
+
class FileContent
|
3
|
+
|
4
|
+
NO_READ = :no_read
|
5
|
+
|
6
|
+
attr_accessor :file, :last_modification
|
7
|
+
|
8
|
+
def initialize(file)
|
9
|
+
self.file = file
|
10
|
+
self.last_modification = File.mtime(self.file)
|
11
|
+
end
|
12
|
+
|
13
|
+
def content
|
14
|
+
if changed? || @content == NO_READ
|
15
|
+
@content = File.read(self.file)
|
16
|
+
self.last_modification = File.mtime(self.file)
|
17
|
+
end
|
18
|
+
@content
|
19
|
+
end
|
20
|
+
|
21
|
+
def changed?
|
22
|
+
@content.nil? || (File.mtime(self.file) > self.last_modification)
|
23
|
+
end
|
24
|
+
|
25
|
+
def file(set_content_no_read = false)
|
26
|
+
if set_content_no_read
|
27
|
+
@content = NO_READ
|
28
|
+
end
|
29
|
+
@file
|
30
|
+
end
|
31
|
+
|
32
|
+
class << self
|
33
|
+
|
34
|
+
def files
|
35
|
+
@files ||= {}
|
36
|
+
end
|
37
|
+
|
38
|
+
def file(file)
|
39
|
+
return nil unless file
|
40
|
+
self.files[file] ||= self.new(file)
|
41
|
+
end
|
42
|
+
|
43
|
+
def changed?(file)
|
44
|
+
self.file(file).changed?
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'haml'
|
2
|
+
|
3
|
+
module SimpleView
|
4
|
+
|
5
|
+
class SimpleViewHAML < SimpleViewBase
|
6
|
+
EXTENTION = ".haml".freeze unless defined?(EXTENTION)
|
7
|
+
|
8
|
+
def self.extension
|
9
|
+
EXTENTION
|
10
|
+
end
|
11
|
+
|
12
|
+
SimpleViewBase.register(self)
|
13
|
+
|
14
|
+
def do_rendering(rendable_object, options)
|
15
|
+
haml = Haml::Engine.new(self.template_content)
|
16
|
+
render_with_helper(rendable_object) do
|
17
|
+
res = haml.render(rendable_object.get_binding)
|
18
|
+
(options[:target] || self.out) << res
|
19
|
+
res
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
module Renderable
|
25
|
+
|
26
|
+
module InstanceMethods
|
27
|
+
|
28
|
+
def render_haml(template, options = {})
|
29
|
+
render_with SimpleViewHAML, template, options
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module SimpleView
|
2
|
+
|
3
|
+
class SimpleViewIO < SimpleViewBase
|
4
|
+
EXTENTION = ".io.rb".freeze unless defined?(EXTENTION)
|
5
|
+
|
6
|
+
def self.extension
|
7
|
+
EXTENTION
|
8
|
+
end
|
9
|
+
|
10
|
+
SimpleViewBase.register(self)
|
11
|
+
|
12
|
+
def do_rendering(rendable_object, options)
|
13
|
+
options = {:target => $stdout}.merge(options)
|
14
|
+
filename = options.delete(:filename) || '<IO>'
|
15
|
+
line = options.delete(:line) || 1
|
16
|
+
io = options[:target]
|
17
|
+
rendable_object.put_locals_objects((options.delete(:io_name) || :io).to_sym => io)
|
18
|
+
render_with_helper(rendable_object) do
|
19
|
+
eval self.template_content, rendable_object.get_binding, filename, line
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
module Renderable
|
26
|
+
|
27
|
+
module InstanceMethods
|
28
|
+
|
29
|
+
def render_io(template, options = {})
|
30
|
+
render_with SimpleViewIO, template, options
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
D/poi////
|
@@ -0,0 +1 @@
|
|
1
|
+
simple_view/lib/simple_view/java
|
@@ -0,0 +1 @@
|
|
1
|
+
:pserver:gie\barukh@esvwas51.si.fr:/repositories/aag
|
@@ -0,0 +1,6 @@
|
|
1
|
+
D
|
2
|
+
/poi-3.6-20091214.jar/1.1.1.1/Tue Dec 07 12:02:42 2010/-kb/
|
3
|
+
/poi-contrib-3.6-20091214.jar/1.1.1.1/Tue Dec 07 12:02:42 2010/-kb/
|
4
|
+
/poi-ooxml-3.6-20091214.jar/1.1.1.1/Tue Dec 07 12:02:42 2010/-kb/
|
5
|
+
/poi-ooxml-schemas-3.6-20091214.jar/1.1.1.1/Tue Dec 07 12:02:42 2010/-kb/
|
6
|
+
/poi-scratchpad-3.6-20091214.jar/1.1.1.1/Tue Dec 07 12:02:42 2010/-kb/
|
@@ -0,0 +1 @@
|
|
1
|
+
simple_view/lib/simple_view/java/poi
|
@@ -0,0 +1 @@
|
|
1
|
+
:pserver:gie\barukh@esvwas51.si.fr:/repositories/aag
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'java'
|
2
|
+
Dir["#{File.dirname(__FILE__)}/java/poi/*.jar"].each {|jar| require jar}
|
3
|
+
|
4
|
+
import org.apache.poi.poifs.filesystem.POIFSFileSystem
|
5
|
+
import org.apache.poi.hssf.usermodel.HSSFWorkbook
|
6
|
+
import org.apache.poi.hssf.usermodel.HSSFChart
|
7
|
+
import java.io.FileInputStream
|
8
|
+
import java.io.FileOutputStream
|
9
|
+
|
10
|
+
# D�clarer des s�ries Excel dynamique :
|
11
|
+
# 1. D�finir les variables
|
12
|
+
# Poids=DECALER(data!$K$1;0;0;NBVAL(data!$K:$K)-1;1)
|
13
|
+
# Signatures=DECALER(data!$B$1;0;0;NBVAL(data!$B:$B)-1;1)
|
14
|
+
# NbDossiers=DECALER(data!$J$1;0;0;NBVAL(data!$J:$J)-1;1)
|
15
|
+
|
16
|
+
# NbDossiersD=DECALER(data!$L$1;0;0;NBVAL(data!$L:$L)-1;1)
|
17
|
+
# NbDossiersE=DECALER(data!$M$1;0;0;NBVAL(data!$M:$M)-1;1)
|
18
|
+
# NbDossiersF=DECALER(data!$N$1;0;0;NBVAL(data!$N:$N)-1;1)
|
19
|
+
# NbDossiersH=DECALER(data!$O$1;0;0;NBVAL(data!$O:$O)-1;1)
|
20
|
+
# NbDossiersI=DECALER(data!$P$1;0;0;NBVAL(data!$P:$P)-1;1)
|
21
|
+
# NbDossiersP=DECALER(data!$Q$1;0;0;NBVAL(data!$Q:$Q)-1;1)
|
22
|
+
# NbDossiersR=DECALER(data!$R$1;0;0;NBVAL(data!$R:$R)-1;1)
|
23
|
+
# NbDossiersX=DECALER(data!$S$1;0;0;NBVAL(data!$S:$S)-1;1)
|
24
|
+
|
25
|
+
# 2. Dans les graphes
|
26
|
+
# S�rie: =data!Poids
|
27
|
+
|
28
|
+
module SimpleView
|
29
|
+
|
30
|
+
class SimpleViewPOI < SimpleViewBase
|
31
|
+
|
32
|
+
EXTENTION = ".poi.rb".freeze unless defined?(EXTENTION)
|
33
|
+
|
34
|
+
def self.extension
|
35
|
+
EXTENTION
|
36
|
+
end
|
37
|
+
|
38
|
+
SimpleViewBase.register(self)
|
39
|
+
|
40
|
+
def render(rendable_object, options = {})
|
41
|
+
do_rendering(rendable_object, options)
|
42
|
+
end
|
43
|
+
|
44
|
+
def do_rendering(rendable_object, options)
|
45
|
+
filename = options.delete(:filename) || '<POI.XLS>'
|
46
|
+
line = options.delete(:line) || 1
|
47
|
+
model_file = options.delete(:model)
|
48
|
+
|
49
|
+
xls = model_file ? HSSFWorkbook.new(file(model_file)) : HSSFWorkbook.new
|
50
|
+
|
51
|
+
rendable_object.put_locals_objects((options.delete(:builder_name) || :xls).to_sym => xls)
|
52
|
+
render_with_helper(rendable_object) do
|
53
|
+
rendable_object.extend(Helper)
|
54
|
+
eval self.template_content, rendable_object.get_binding, filename, line
|
55
|
+
end
|
56
|
+
if options.key?(:target)
|
57
|
+
output = file(options[:target], 'w')
|
58
|
+
begin
|
59
|
+
xls.write(output)
|
60
|
+
ensure
|
61
|
+
output.close
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def file(filename, mode = 'r')
|
67
|
+
if mode == 'r'
|
68
|
+
POIFSFileSystem.new(FileInputStream.new(filename))
|
69
|
+
else
|
70
|
+
FileOutputStream.new(filename)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
module Helper
|
75
|
+
def set_cell_value(row, col_index, value)
|
76
|
+
cell = row.create_cell(col_index)
|
77
|
+
cell.set_cell_value(value)
|
78
|
+
cell
|
79
|
+
end
|
80
|
+
|
81
|
+
def get_charts(sheet)
|
82
|
+
HSSFChart.get_sheet_charts(sheet)
|
83
|
+
end
|
84
|
+
|
85
|
+
def row_at(sheet, index_line)
|
86
|
+
row = sheet.get_row(index_line)
|
87
|
+
unless row
|
88
|
+
row = sheet.create_row(index_line)
|
89
|
+
end
|
90
|
+
row
|
91
|
+
end
|
92
|
+
|
93
|
+
def cell_at(row, index_col)
|
94
|
+
cell = row.get_cell(index_col)
|
95
|
+
unless cell
|
96
|
+
cell = row.create_cell(index_col)
|
97
|
+
end
|
98
|
+
cell
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
module Renderable
|
105
|
+
|
106
|
+
module InstanceMethods
|
107
|
+
|
108
|
+
def render_poi(template, options = {})
|
109
|
+
render_with SimpleViewPOI, template, options
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
#
|
2
|
+
# class Toto
|
3
|
+
# include Renderable
|
4
|
+
#
|
5
|
+
# attr_accessor :affectations
|
6
|
+
#
|
7
|
+
# end
|
8
|
+
#
|
9
|
+
# toto = Toto.new
|
10
|
+
# toto.affectations = [1,2,3,4]
|
11
|
+
# out = StringIO.new
|
12
|
+
#
|
13
|
+
# toto.render_erb('test', :titi => [:a, :b, :c])
|
14
|
+
#
|
15
|
+
# Le fichier 'views/test.erb'
|
16
|
+
# ---------------------------
|
17
|
+
# affectations = <%= affectations.inspect %>
|
18
|
+
# titi = <%= titi.inspect %>
|
19
|
+
#
|
20
|
+
# toto.render_builder('test', :titi => [:a, :b, :c])
|
21
|
+
#
|
22
|
+
# Le fichier 'views/test.builder.rb'
|
23
|
+
# ----------------------------------
|
24
|
+
# xml.instruct!
|
25
|
+
# affectation.each {|aff| xml.tag!(aff)}
|
26
|
+
# titi.each {|t| xml.tag!(t)}
|
27
|
+
#
|
28
|
+
#
|
29
|
+
module SimpleView
|
30
|
+
module Renderable
|
31
|
+
|
32
|
+
def self.included(mod)
|
33
|
+
if Class === mod
|
34
|
+
mod.send(:include, InstanceMethods)
|
35
|
+
mod.send(:extend, ClassMethods)
|
36
|
+
elsif Module === mod
|
37
|
+
mod.send(:extend, InstanceMethods)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
module ClassMethods
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
module InstanceMethods
|
46
|
+
|
47
|
+
def _locals_objects
|
48
|
+
@_locals_objects ||= {}
|
49
|
+
end
|
50
|
+
|
51
|
+
def put_locals_objects(locals)
|
52
|
+
self._locals_objects.merge!(locals)
|
53
|
+
locals.each_pair do |name, obj|
|
54
|
+
self.instance_eval <<-RUBY
|
55
|
+
def #{name}; self._locals_objects[:#{name}]; end
|
56
|
+
RUBY
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def get_binding
|
61
|
+
binding
|
62
|
+
end
|
63
|
+
|
64
|
+
def render(template, options = {})
|
65
|
+
self.safe_rendering do |object|
|
66
|
+
object.put_locals_objects(options[:locals] || {})
|
67
|
+
view = SimpleViewBase.find_view(template)
|
68
|
+
view.render(object, options)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def render_with(renderer, template, options = {})
|
73
|
+
self.safe_rendering do |object|
|
74
|
+
object.put_locals_objects(options[:locals] || {})
|
75
|
+
view = renderer.view(template)
|
76
|
+
view.render(object, options)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
protected
|
81
|
+
def safe_rendering #:nodoc:
|
82
|
+
shot = RenderingObject === self ? BasicObjectRenderable.new : RenderingObject.new(self)
|
83
|
+
yield(shot) if block_given?
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
class BasicObjectRenderable
|
91
|
+
include ::SimpleView::Renderable
|
92
|
+
end
|
93
|
+
|
94
|
+
class RenderingObject < SimpleDelegator #:nodoc:
|
95
|
+
include ::SimpleView::Renderable
|
96
|
+
|
97
|
+
def initialize(n)
|
98
|
+
super
|
99
|
+
# puts "RenderingObject for: #{n.inspect}"
|
100
|
+
end
|
101
|
+
|
102
|
+
def to_s
|
103
|
+
"RenderingObject(#{__getobj__}){:locals => #{_locals_objects.inspect}}"
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
# def self.render(template, options = {})
|
109
|
+
# BasicObjectRenderable.new.render(template, options)
|
110
|
+
# end
|
111
|
+
|
112
|
+
|
113
|
+
include Renderable
|
114
|
+
end
|