Capcode 0.8.9 → 0.9.0

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 (92) hide show
  1. data/README.rdoc +13 -1
  2. data/doc/rdoc/classes/Capcode.html +410 -545
  3. data/doc/rdoc/classes/Capcode/Configuration.html +263 -0
  4. data/doc/rdoc/classes/Capcode/Helpers.html +154 -345
  5. data/doc/rdoc/classes/Capcode/Helpers/Authorization.html +6 -6
  6. data/doc/rdoc/created.rid +1 -1
  7. data/doc/rdoc/files/README_rdoc.html +42 -2
  8. data/doc/rdoc/files/lib/capcode/configuration_rb.html +1 -1
  9. data/doc/rdoc/files/lib/capcode/render/text_rb.html +1 -1
  10. data/doc/rdoc/files/lib/capcode_rb.html +14 -1
  11. data/doc/rdoc/fr_class_index.html +1 -1
  12. data/doc/rdoc/fr_file_index.html +0 -13
  13. data/doc/rdoc/fr_method_index.html +12 -14
  14. data/examples/render-image.rb +1 -1
  15. data/examples/render-text.rb +4 -1
  16. data/examples/rest.rb +1 -0
  17. data/examples/sample.rb +5 -3
  18. data/examples/upload.rb +1 -0
  19. data/lib/capcode.rb +45 -61
  20. data/lib/capcode/configuration.rb +69 -34
  21. data/lib/capcode/render/text.rb +1 -1
  22. data/lib/capcode/version.rb +1 -1
  23. metadata +31 -106
  24. data/doc/rdoc/classes/Capcode/Mab.html +0 -118
  25. data/doc/rdoc/files/lib/capcode/render/binary_rb.html +0 -101
  26. data/doc/rdoc/files/lib/capcode/render/email_rb.html +0 -108
  27. data/doc/rdoc/files/lib/capcode/render/erb_rb.html +0 -108
  28. data/doc/rdoc/files/lib/capcode/render/haml_rb.html +0 -108
  29. data/doc/rdoc/files/lib/capcode/render/json_rb.html +0 -108
  30. data/doc/rdoc/files/lib/capcode/render/markaby_rb.html +0 -108
  31. data/doc/rdoc/files/lib/capcode/render/mustache_rb.html +0 -108
  32. data/doc/rdoc/files/lib/capcode/render/none_rb.html +0 -101
  33. data/doc/rdoc/files/lib/capcode/render/redirect_rb.html +0 -101
  34. data/doc/rdoc/files/lib/capcode/render/sass_rb.html +0 -108
  35. data/doc/rdoc/files/lib/capcode/render/static_rb.html +0 -101
  36. data/doc/rdoc/files/lib/capcode/render/webdav_rb.html +0 -124
  37. data/doc/rdoc/files/lib/capcode/render/xml_rb.html +0 -101
  38. data/examples/auth-webdav.rb +0 -29
  39. data/examples/blog-ar.rb +0 -81
  40. data/examples/blog-ar.yml +0 -3
  41. data/examples/blog-couchdb-run.rb +0 -10
  42. data/examples/blog-couchdb.rb +0 -314
  43. data/examples/blog-couchdb.ru +0 -12
  44. data/examples/blog-couchdb.yml +0 -2
  45. data/examples/blog-dm.rb +0 -63
  46. data/examples/blog-dm.yml +0 -2
  47. data/examples/blog-mongodb-run.rb +0 -10
  48. data/examples/blog-mongodb.rb +0 -304
  49. data/examples/blog-mongodb.yml +0 -3
  50. data/examples/blog-sq.rb +0 -82
  51. data/examples/blog-sq.yml +0 -3
  52. data/examples/mail/mail_html.rhtml +0 -1
  53. data/examples/mail/mail_text.rhtml +0 -1
  54. data/examples/mail/ok.rhtml +0 -1
  55. data/examples/mail/rubyfr.png +0 -0
  56. data/examples/mustache/with_class.mustache +0 -8
  57. data/examples/mustache/without_class.mustache +0 -1
  58. data/examples/render-binary.rb +0 -46
  59. data/examples/render-email.rb +0 -68
  60. data/examples/render-erb.rb +0 -19
  61. data/examples/render-haml_sass.rb +0 -26
  62. data/examples/render-json.rb +0 -13
  63. data/examples/render-markaby.rb +0 -29
  64. data/examples/render-mustache.rb +0 -30
  65. data/examples/render-redirect.rb +0 -19
  66. data/examples/render-static.rb +0 -21
  67. data/examples/render-static.ru +0 -19
  68. data/examples/render-use.rb +0 -32
  69. data/examples/render-webdav.rb +0 -26
  70. data/examples/render-xml.rb +0 -24
  71. data/examples/rss.rb +0 -48
  72. data/examples/static/coderay.css +0 -131
  73. data/examples/static/index.html +0 -24
  74. data/examples/test/index.html +0 -1
  75. data/lib/capcode/base/ar.rb +0 -54
  76. data/lib/capcode/base/couchdb.rb +0 -23
  77. data/lib/capcode/base/dm.rb +0 -33
  78. data/lib/capcode/base/mongodb.rb +0 -27
  79. data/lib/capcode/base/sq.rb +0 -58
  80. data/lib/capcode/render/binary.rb +0 -8
  81. data/lib/capcode/render/email.rb +0 -73
  82. data/lib/capcode/render/erb.rb +0 -59
  83. data/lib/capcode/render/haml.rb +0 -60
  84. data/lib/capcode/render/json.rb +0 -14
  85. data/lib/capcode/render/markaby.rb +0 -38
  86. data/lib/capcode/render/mustache.rb +0 -37
  87. data/lib/capcode/render/none.rb +0 -7
  88. data/lib/capcode/render/redirect.rb +0 -7
  89. data/lib/capcode/render/sass.rb +0 -48
  90. data/lib/capcode/render/static.rb +0 -14
  91. data/lib/capcode/render/webdav.rb +0 -49
  92. data/lib/capcode/render/xml.rb +0 -119
@@ -1,8 +0,0 @@
1
- module Capcode
2
- module Helpers
3
- def render_binary( f, opts ) #:nodoc:
4
- @response['Content-Type'] = opts[:content_type]||opts['Content-Type']||"binary/octet-stream"
5
- self.send(f)
6
- end
7
- end
8
- end
@@ -1,73 +0,0 @@
1
- begin
2
- require 'mail'
3
- rescue LoadError => e
4
- raise MissingLibrary, "mail could not be loaded (is it installed?): #{e.message}"
5
- end
6
-
7
- module Capcode
8
- module Helpers
9
- def render_email( f, _ ) #:nodoc:
10
- if @smtp.nil?
11
- @smtp = { :server => "127.0.0.1", :port => 25 }.merge(Capcode.get( :smtp ) || {})
12
- end
13
-
14
- # Set SMTP info
15
- conf = Mail::Configuration.instance.defaults
16
- conf.smtp @smtp[:server], @smtp[:port]
17
-
18
- # Create mail
19
- mail = Mail.new()
20
-
21
- # Mail Header
22
- mail.from = f[:from]
23
- mail.subject = f[:subject] if f.has_key?(:subject)
24
- [:to, :cc, :bcc].each do |t|
25
- next unless f.has_key?(t) and not f[t].nil?
26
- if f[t].class == Array
27
- mail[t] = f[t]
28
- else
29
- mail[t] = f[t].to_s.split( ',' ).map { |x| x.strip }
30
- end
31
- end
32
- mail.message_id = f[:message_id] if f.has_key?(:message_id)
33
-
34
- # Mail Body
35
- if f[:body].class == String
36
- mail.body = f[:body]
37
- elsif f[:body].class == Hash
38
- if f[:body].has_key?(:html)
39
- mail.html_part = Mail::Part.new
40
- mail.html_part.content_type = f[:body][:html].delete(:content_type) { |_| 'text/html' }
41
- mail.html_part.body = render( f[:body][:html] )
42
- end
43
- if f[:body].has_key?(:text)
44
- mail.text_part = Mail::Part.new
45
- mail.text_part.body = render( f[:body][:text] )
46
- end
47
- end
48
-
49
- # Mail Attachment
50
- if f.has_key?(:file)
51
- f[:file] = [f[:file]] unless f[:file].class == Array
52
- f[:file].each do |file|
53
- data = {}
54
- if file.class == Hash
55
- data[:filename] = file.delete(:filename) if file.has_key?(:filename)
56
- data[:mime_type] = file.delete(:mime_type) if file.has_key?(:mime_type)
57
- data[:data] = self.send(file[:data])
58
- else
59
- data = { :data => render( :static => file, :exact_path => false ), :filename => File.basename(file) }
60
- end
61
- mail.add_file(data)
62
- end
63
- end
64
-
65
- begin
66
- mail.deliver!
67
- render f[:ok]
68
- rescue
69
- render f[:error]
70
- end
71
- end
72
- end
73
- end
@@ -1,59 +0,0 @@
1
- require 'erb'
2
-
3
- module Capcode
4
- module Helpers
5
- # Set the path to ERB files. If this path is not set, Capcode will search in the static path.
6
- # This method is deprecated and will be removed in version 1.0
7
- def self.erb_path=( p )
8
- warn "Capcode::Helpers.erb_path is deprecated and will be removed in version 1.0, please use `set :erb'"
9
- Capcode.set :erb, p
10
- end
11
-
12
- def get_binding #:nodoc:
13
- binding
14
- end
15
-
16
- def render_erb( f, opts ) #:nodoc:
17
- if @erb_path.nil?
18
- @erb_path = Capcode.get( :erb ) || Capcode.static()
19
- end
20
-
21
- f = f.to_s
22
- if f.include? '..'
23
- return [403, {}, '403 - Invalid path']
24
- end
25
-
26
- if /Windows/.match( ENV['OS'] )
27
- unless( /.:\\/.match( @erb_path[0] ) )
28
- @erb_path = File.expand_path( File.join(".", @erb_path) )
29
- end
30
- else
31
- unless( @erb_path[0].chr == "/" )
32
- @erb_path = File.expand_path( File.join(".", @erb_path) )
33
- end
34
- end
35
-
36
- # Get Layout
37
- layout = opts.delete(:layout)||:layout
38
- layout_file = File.join( @erb_path, layout.to_s+".rhtml" )
39
-
40
- # Get file
41
- f = f + ".rhtml" if File.extname( f ) != ".rhtml"
42
- file = File.join( @erb_path, f )
43
-
44
- if( File.exist?( file ) )
45
- if( File.exist?( layout_file ) )
46
- ERB.new(open(layout_file).read).result( get_binding { |*args|
47
- #@@__ARGS__ = args
48
- Capcode::Helpers.args = args
49
- ERB.new(open(file).read).result(binding)
50
- } )
51
- else
52
- ERB.new(open(file).read).result(binding)
53
- end
54
- else
55
- raise Capcode::RenderError, "Error rendering `erb', #{file} does not exist !"
56
- end
57
- end
58
- end
59
- end
@@ -1,60 +0,0 @@
1
- begin
2
- require 'haml'
3
- rescue LoadError => e
4
- raise MissingLibrary, "Haml could not be loaded (is it installed?): #{e.message}"
5
- end
6
-
7
- module Capcode
8
- module Helpers
9
- # Set the path to Haml files. If this path is not set, Capcode will search in the static path.
10
- # This method is deprecated and will be removed in version 1.0
11
- def self.haml_path=( p )
12
- warn "Capcode::Helpers.haml_path is deprecated and will be removed in version 1.0, please use `set :haml'"
13
- Capcode.set :haml, p
14
- end
15
-
16
- def render_haml( f, opts ) #:nodoc:
17
- if @haml_path.nil?
18
- @haml_path = Capcode.get( :haml ) || Capcode.static()
19
- end
20
-
21
- f = f.to_s
22
- if f.include? '..'
23
- return [403, {}, '403 - Invalid path']
24
- end
25
-
26
- if /Windows/.match( ENV['OS'] )
27
- unless( /.:\\/.match( @haml_path[0] ) )
28
- @haml_path = File.expand_path( File.join(".", @haml_path) )
29
- end
30
- else
31
- unless( @haml_path[0].chr == "/" )
32
- @haml_path = File.expand_path( File.join(".", @haml_path) )
33
- end
34
- end
35
-
36
- # Get Layout file
37
- layout = opts.delete(:layout)||:layout
38
- layout_file = File.join( @haml_path, layout.to_s+".haml" )
39
-
40
- # Get HAML File
41
- f = f + ".haml" if File.extname( f ) != ".haml"
42
- file = File.join( @haml_path, f )
43
-
44
- # Render
45
- if( File.exist?( file ) )
46
- if( File.exist?( layout_file ) )
47
- Haml::Engine.new( open( layout_file ).read ).to_html(self) { |*args|
48
- #@@__ARGS__ = args
49
- Capcode::Helpers.args = args
50
- Haml::Engine.new( open( file ).read ).render(self)
51
- }
52
- else
53
- Haml::Engine.new( open( file ).read ).to_html( self )
54
- end
55
- else
56
- raise Capcode::RenderError, "Error rendering `haml', #{file} does not exist !"
57
- end
58
- end
59
- end
60
- end
@@ -1,14 +0,0 @@
1
- begin
2
- require 'json'
3
- rescue LoadError => e
4
- raise MissingLibrary, "Json could not be loaded (is it installed?): #{e.message}"
5
- end
6
-
7
- module Capcode
8
- module Helpers
9
- def render_json( f, opts ) #:nodoc:
10
- @response['Content-Type'] = 'application/json'
11
- f.to_json
12
- end
13
- end
14
- end
@@ -1,38 +0,0 @@
1
- begin
2
- require 'markaby'
3
- rescue LoadError => e
4
- raise MissingLibrary, "Markaby could not be loaded (is it installed?): #{e.message}"
5
- end
6
-
7
- Markaby::Builder.set(:indent, 2)
8
-
9
- module Capcode
10
- class Mab < Markaby::Builder
11
- include Views
12
- end
13
-
14
- module Helpers
15
- def render_markaby( f, opts ) #:nodoc:
16
- f = f.to_s
17
- layout = opts.delete(:layout)||:layout
18
-
19
- assigns = {}
20
- self.instance_variables.delete_if {|x| ["@response", "@env", "@request"].include?(x) }.each do |ivar|
21
- assigns[ivar.gsub( /^@/, "" )] = self.instance_variable_get(ivar)
22
- end
23
-
24
- __mab = Mab.new(assigns.merge( opts ), self) {
25
- if self.respond_to?(layout)
26
- self.send(layout.to_s) { |*args|
27
- # @@__ARGS__ = args
28
- Capcode::Helpers.args = args
29
- self.send(f)
30
- }
31
- else
32
- self.send(f)
33
- end
34
- }
35
- __mab.to_s
36
- end
37
- end
38
- end
@@ -1,37 +0,0 @@
1
- begin
2
- require 'mustache'
3
- rescue LoadError => e
4
- raise MissingLibrary, "Mustache could not be loaded (is it installed?): #{e.message}"
5
- end
6
-
7
- module Capcode
8
- module Helpers
9
- def render_mustache( f, opts ) #:nodoc:
10
- mustache_path = Capcode.get( :mustache ) || Capcode.static()
11
-
12
- name = Mustache.classify(f.to_s)
13
-
14
- if Capcode::Views.const_defined?(name)
15
- klass = Capcode::Views.const_get(name)
16
- else
17
- klass = Mustache
18
- klass.template_file = mustache_path + "/" + f.to_s + ".mustache"
19
- end
20
-
21
- klass.template_extension = 'mustache'
22
- klass.template_path = mustache_path
23
-
24
- instance = klass.new
25
-
26
- instance_variables.each do |name|
27
- instance.instance_variable_set(name, instance_variable_get(name))
28
- end
29
-
30
- opts.each do |k, v|
31
- instance[k] = v
32
- end
33
-
34
- instance.to_html
35
- end
36
- end
37
- end
@@ -1,7 +0,0 @@
1
- module Capcode
2
- module Helpers
3
- def render_none( f = "", _ ) #:nodoc:
4
- return [204, {}, f]
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module Capcode
2
- module Helpers
3
- def render_redirect( f, _ ) #:nodoc:
4
- redirect(f)
5
- end
6
- end
7
- end
@@ -1,48 +0,0 @@
1
- begin
2
- require 'sass'
3
- rescue LoadError => e
4
- raise MissingLibrary, "Sass could not be loaded (is it installed?): #{e.message}"
5
- end
6
-
7
- module Capcode
8
- module Helpers
9
- # Set the path to Sass files. If this path is not set, Capcode will search in the static path.
10
- # This method is deprecated and will be removed in version 1.0
11
- def self.sass_path=( p )
12
- warn "Capcode::Helpers.sass_path is deprecated and will be removed in version 1.0, please use `set :sass'"
13
- Capcode.set :sass, p
14
- end
15
-
16
- def render_sass( f, _ ) #:nodoc:
17
- if @sass_path.nil?
18
- @sass_path = Capcode.get( :sass ) || Capcode.static()
19
- end
20
-
21
- f = f.to_s
22
- if f.include? '..'
23
- return [403, {}, '403 - Invalid path']
24
- end
25
-
26
- if /Windows/.match( ENV['OS'] )
27
- unless( /.:\\/.match( @sass_path[0] ) )
28
- @sass_path = File.expand_path( File.join(".", @sass_path) )
29
- end
30
- else
31
- unless( @sass_path[0].chr == "/" )
32
- @sass_path = File.expand_path( File.join(".", @sass_path) )
33
- end
34
- end
35
-
36
- # Get File
37
- f = f + ".sass" if File.extname( f ) != ".sass"
38
- file = File.join( @sass_path, f )
39
-
40
- # Render
41
- if( File.exist?( file ) )
42
- Sass::Engine.new( open( file ).read ).to_css
43
- else
44
- raise Capcode::RenderError, "Error rendering `sass', #{file} does not exist !"
45
- end
46
- end
47
- end
48
- end
@@ -1,14 +0,0 @@
1
- module Capcode
2
- module Helpers
3
- def render_static( f, opts = { :exact_path => true } ) #:nodoc:
4
- if Capcode.static.nil? or f.include? '..'
5
- return [403, {}, '403 - Invalid path']
6
- end
7
- if !opts.keys.include?(:exact_path) or opts[:exact_path] == true
8
- redirect File.join( static[:uri], f )
9
- else
10
- File.read( File.join( static[:path], f ) ).to_s
11
- end
12
- end
13
- end
14
- end
@@ -1,49 +0,0 @@
1
- # From rack_dav
2
- require 'builder'
3
- require 'time'
4
- require 'uri'
5
- require 'rexml/document'
6
- require 'webrick/httputils'
7
-
8
- begin
9
- require 'rack_dav/builder_namespace'
10
- require 'rack_dav/http_status'
11
- require 'rack_dav/resource'
12
- require 'rack_dav/file_resource'
13
- require 'rack_dav/handler'
14
- require 'rack_dav/controller'
15
- rescue LoadError => e
16
- raise MissingLibrary, "Rack_Dav could not be loaded (is it installed?): #{e.message}"
17
- end
18
-
19
-
20
- module Capcode
21
- module Helpers
22
-
23
- def render_webdav( f, opts )
24
- options = {
25
- :resource_class => RackDAV::FileResource,
26
- :root => f
27
- }.merge(opts)
28
-
29
- request = Rack::Request.new(env)
30
- response = Rack::Response.new
31
-
32
- begin
33
- controller = RackDAV::Controller.new(request, response, options.dup)
34
- controller.send(request.request_method.downcase)
35
- rescue RackDAV::HTTPStatus::Status => status
36
- response.status = status.code
37
- end
38
-
39
- # Strings in Ruby 1.9 are no longer enumerable. Rack still expects the response.body to be
40
- # enumerable, however.
41
- response.body = [response.body] if not response.body.respond_to? :each
42
-
43
- response.status = response.status ? response.status.to_i : 200
44
- response.finish
45
-
46
- [response.status, response.header, response.body]
47
- end
48
- end
49
- end
@@ -1,119 +0,0 @@
1
- class XML #:nodoc: all
2
- class TagError < ArgumentError
3
- end
4
-
5
- class DSL
6
- def initialize( helper, &block )
7
- @__x_d_level = 0
8
- @__x_d_helper = helper
9
- @__x_d_helper.instance_variables.each do |ivar|
10
- self.instance_variable_set(ivar, @__x_d_helper.instance_variable_get(ivar))
11
- end
12
- @__x_d_builder = ""
13
- instance_eval(&block) if block
14
- end
15
-
16
- def __
17
- " "*@__x_d_level
18
- end
19
-
20
- def _(x)
21
- @__x_d_builder << __ << x << "\n"
22
- end
23
-
24
- def tag!(sym, *args, &block)
25
- tag = {
26
- :bra => "<",
27
- :ket => " />",
28
- :name => sym.id2name,
29
- :close => block_given?(),
30
- :attrs => "",
31
- :value => ""
32
- }
33
-
34
- args.each do |a|
35
- if a.class == Hash
36
- a.each do |k, v|
37
- tag[:attrs] << " #{k.to_s}='#{v}'"
38
- end
39
- elsif a.class == String
40
- tag[:close] = true
41
- tag[:value] << a << "\n"
42
- end
43
- end
44
-
45
- if tag[:name].match( /\?$/ )
46
- tag[:name].gsub!( /\?$/, "" )
47
- tag[:bra] = "<?"
48
- tag[:ket] = "?>"
49
-
50
- if tag[:close] == true
51
- raise XML::TagError, "Malformated traitment tag!"
52
- end
53
- end
54
-
55
- @__x_d_builder << __ << tag[:bra] << "#{tag[:name]}#{tag[:attrs]}"
56
- if tag[:close]
57
- @__x_d_builder << ">\n"
58
- else
59
- @__x_d_builder << tag[:ket] << "\n"
60
- end
61
-
62
- @__x_d_level += 2
63
-
64
- @__x_d_builder << __ << tag[:value] if tag[:value].size > 0
65
- instance_eval(&block) if block
66
-
67
- @__x_d_level -= 2
68
-
69
- if tag[:close]
70
- @__x_d_builder << __ << "</#{tag[:name]}>\n"
71
- end
72
- end
73
-
74
- def cdata( x = "", &block )
75
- @__x_d_builder << __ << "<![CDATA["
76
- if x.match( /\n/ ) or block
77
- @__x_d_level += 2
78
- @__x_d_builder << "\n" << __ << x << "\n" if x.size > 0
79
- instance_eval(&block) if block
80
- @__x_d_level -= 2
81
- @__x_d_builder << __
82
- else
83
- @__x_d_builder << x if x.size > 0
84
- end
85
- @__x_d_builder << "]]>\n"
86
- end
87
-
88
- def to_s
89
- @__x_d_builder
90
- end
91
-
92
- def method_missing(sym, *args, &block)
93
- if @__x_d_helper.respond_to?(sym, true)
94
- @__x_d_helper.send(sym, *args, &block)
95
- elsif instance_variables.include?(ivar = "@__x_d_#{sym}")
96
- instance_variable_get(ivar)
97
- elsif !@__x_d_helper.nil? && @__x_d_helper.instance_variables.include?(ivar)
98
- @__x_d_helper.instance_variable_get(ivar)
99
- else
100
- tag!(sym, *args, &block)
101
- end
102
- end
103
- end
104
- end
105
-
106
- module Capcode
107
- class XML::DSL #:nodoc:
108
- include Views
109
- end
110
-
111
- module Helpers
112
- def render_xml( f, _ ) #:nodoc:
113
- r = XML::DSL.new( self ) do
114
- self.send(f.to_s)
115
- end
116
- r.to_s
117
- end
118
- end
119
- end