simple_view 0.0.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.
- 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
|