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
data/Rakefile
ADDED
data/lib/CVS/Entries
ADDED
data/lib/CVS/Repository
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
simple_view/lib
|
data/lib/CVS/Root
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
:pserver:gie\barukh@esvwas51.si.fr:/repositories/aag
|
@@ -0,0 +1 @@
|
|
1
|
+
simple_view/lib/core-ext
|
@@ -0,0 +1 @@
|
|
1
|
+
:pserver:gie\barukh@esvwas51.si.fr:/repositories/aag
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Array
|
2
|
+
# Extracts options from a set of arguments. Removes and returns the last
|
3
|
+
# element in the array if it's a hash, otherwise returns a blank hash.
|
4
|
+
#
|
5
|
+
# def options(*args)
|
6
|
+
# args.extract_options!
|
7
|
+
# end
|
8
|
+
#
|
9
|
+
# options(1, 2) # => {}
|
10
|
+
# options(1, 2, :a => :b) # => {:a=>:b}
|
11
|
+
def extract_options!
|
12
|
+
last.is_a?(::Hash) ? pop : {}
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import java.io.PrintStream
|
2
|
+
import java.io.FileOutputStream
|
3
|
+
import java.io.InputStreamReader
|
4
|
+
import java.io.FileInputStream
|
5
|
+
|
6
|
+
module Kernel
|
7
|
+
|
8
|
+
def jopen(filename, mode, encode = "ISO-8859-1")
|
9
|
+
stream = nil
|
10
|
+
if mode == "r"
|
11
|
+
stream = read_stream(filename, encode)
|
12
|
+
elsif mode == "w"
|
13
|
+
stream = write_stream(filename, encode)
|
14
|
+
end
|
15
|
+
if block_given?
|
16
|
+
begin
|
17
|
+
yield stream
|
18
|
+
ensure
|
19
|
+
stream.close
|
20
|
+
end
|
21
|
+
else
|
22
|
+
return stream
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def write_stream(filename, encode = "ISO-8859-1")
|
27
|
+
PrintStream.new(FileOutputStream.new(filename), false, encode)
|
28
|
+
end
|
29
|
+
|
30
|
+
def read_stream(filename, encode = "ISO-8859-1")
|
31
|
+
InputStreamReader.new(FileInputStream.new(filename), encode)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
class PrintStream
|
37
|
+
|
38
|
+
def <<(obj)
|
39
|
+
self.print(obj)
|
40
|
+
self
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# Egocentric nil
|
2
|
+
# code by Yohan, slightly edited and comments by me
|
3
|
+
|
4
|
+
# start ego mode block, usage:
|
5
|
+
# catch_nil do
|
6
|
+
# if @some_hash[:some_key].to_formatted_array[3]
|
7
|
+
# # do something
|
8
|
+
# end
|
9
|
+
# end
|
10
|
+
module Kernel
|
11
|
+
def catch_nil(&block)
|
12
|
+
# grip methods
|
13
|
+
ori_method_missing = NilClass.instance_method(:method_missing)
|
14
|
+
catch_method_missing = NilClass.instance_method(:catch_method_missing)
|
15
|
+
# activate ego mode
|
16
|
+
NilClass.send :define_method, :method_missing, catch_method_missing
|
17
|
+
# run code
|
18
|
+
yield
|
19
|
+
ensure
|
20
|
+
# no matter what happens: restore default nil behaviour
|
21
|
+
NilClass.send :define_method, :method_missing, ori_method_missing
|
22
|
+
end
|
23
|
+
end
|
24
|
+
#alias :egonil :catch_nil # ;)
|
25
|
+
|
26
|
+
# this is the ego nil
|
27
|
+
class NilClass
|
28
|
+
def catch_method_missing(m, *args, &block)
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
class String
|
2
|
+
|
3
|
+
# Converts a string to camelcase.
|
4
|
+
#
|
5
|
+
# By default camelcase leaves the first character of the string as given.
|
6
|
+
# If +first_letter+ is set to +:lower+ or +false+, then +#camelcase+ will
|
7
|
+
# produce lowerCamelCase. If it is set to +:upper+ or +true+ it will
|
8
|
+
# produce UpperCamelCase.
|
9
|
+
#
|
10
|
+
# +#camelcase+ also converts '/' to '::' which is useful for converting
|
11
|
+
# paths to namespaces.
|
12
|
+
#
|
13
|
+
# Examples
|
14
|
+
# "camel_case".camelcase #=> "camelCase"
|
15
|
+
# "camel/case".camelcase(true) #=> "Camel::Case"
|
16
|
+
# "Camel_case".camelcase(false) #=> "camelCase"
|
17
|
+
#
|
18
|
+
# TODO: Is this the best approach? Should lowerCamelCase be default instead?
|
19
|
+
def camelcase(first_letter=nil)
|
20
|
+
case first_letter
|
21
|
+
when :upper, true
|
22
|
+
upper_camelcase
|
23
|
+
when :lower, false
|
24
|
+
lower_camelcase
|
25
|
+
else
|
26
|
+
str = dup
|
27
|
+
str.gsub!(/\/(.?)/){ "::#{$1.upcase}" } # NOT SO SURE ABOUT THIS
|
28
|
+
str.gsub!(/(?:_+|-+)([a-z])/){ $1.upcase }
|
29
|
+
#str.gsub!(/(\A|\s)([a-z])/){ $1 + $2.upcase }
|
30
|
+
str
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def upper_camelcase
|
35
|
+
str = dup
|
36
|
+
str.gsub!(/\/(.?)/){ "::#{$1.upcase}" } # NOT SO SURE ABOUT THIS
|
37
|
+
str.gsub!(/(?:_+|-+)([a-z])/){ $1.upcase }
|
38
|
+
str.gsub!(/(\A|\s)([a-z])/){ $1 + $2.upcase }
|
39
|
+
str
|
40
|
+
end
|
41
|
+
|
42
|
+
def lower_camelcase
|
43
|
+
str = dup
|
44
|
+
str.gsub!(/\/(.?)/){ "::#{$1.upcase}" } # NOT SO SURE ABOUT THIS
|
45
|
+
str.gsub!(/(?:_+|-+)([a-z])/){ $1.upcase }
|
46
|
+
str.gsub!(/(\A|\s)([A-Z])/){ $1 + $2.downcase }
|
47
|
+
str
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
/builder_view.rb/1.1.1.1/Tue Dec 07 12:02:41 2010//
|
2
|
+
/erb_view.rb/1.1.1.1/Tue Dec 07 12:02:41 2010//
|
3
|
+
/file_content.rb/1.1.1.1/Tue Dec 07 12:02:41 2010//
|
4
|
+
/haml_view.rb/1.1.1.1/Tue Dec 07 12:02:41 2010//
|
5
|
+
/io_view.rb/1.1.1.1/Tue Dec 07 12:02:41 2010//
|
6
|
+
/poi_view.rb/1.1.1.1/Tue Dec 07 12:02:41 2010//
|
7
|
+
/renderable.rb/1.1.1.1/Tue Dec 07 12:02:41 2010//
|
8
|
+
/simple_view.rb/1.1.1.1/Tue Dec 07 12:02:41 2010//
|
9
|
+
/smartxls.rb/1.1.1.1/Tue Dec 07 12:02:41 2010//
|
10
|
+
/version.rb/1.1.1.1/Tue Dec 07 12:02:41 2010//
|
11
|
+
D/java////
|
@@ -0,0 +1 @@
|
|
1
|
+
simple_view/lib/simple_view
|
@@ -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,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,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
|