equipment 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ProjectInfo +55 -0
- data/README +67 -0
- data/examples/basicauthtest.rb +59 -0
- data/examples/erubytest.rb +36 -0
- data/examples/flashtest.rb +46 -0
- data/examples/index.erb +9 -0
- data/examples/mounttest.rb +34 -0
- data/examples/ogtest.rb +41 -0
- data/examples/patchestest.rb +40 -0
- data/examples/sendfiletest.rb +29 -0
- data/lib/equipment.rb +195 -0
- data/lib/ext/app_util.rb +28 -0
- data/lib/ext/basic_auth.rb +71 -0
- data/lib/ext/controls.rb +26 -0
- data/lib/ext/eruby_view.rb +83 -0
- data/lib/ext/flash.rb +81 -0
- data/lib/ext/forms.rb +22 -0
- data/lib/ext/forward.rb +70 -0
- data/lib/ext/js_helpers.rb +50 -0
- data/lib/ext/mount.rb +152 -0
- data/lib/ext/og.rb +95 -0
- data/lib/ext/og_scaffold.rb +119 -0
- data/lib/ext/og_session.rb +76 -0
- data/lib/ext/patches.rb +130 -0
- data/lib/ext/ressource.rb +88 -0
- data/lib/ext/security.rb +83 -0
- data/lib/ext/sendfile.rb +84 -0
- data/lib/ext/template_view.rb +72 -0
- data/lib/ext/use_helper.rb +83 -0
- data/lib/ext/xml_view.rb +47 -0
- metadata +78 -0
data/lib/ext/security.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'equipment'
|
2
|
+
require 'ext/patches'
|
3
|
+
require 'ext/forward'
|
4
|
+
|
5
|
+
module Ext
|
6
|
+
|
7
|
+
# Generic authentication module. Used by BasicAuth for example.
|
8
|
+
#
|
9
|
+
# == Dependencies
|
10
|
+
#
|
11
|
+
# * Equipment
|
12
|
+
# * Forward
|
13
|
+
# * Patches
|
14
|
+
#
|
15
|
+
# == TODO
|
16
|
+
#
|
17
|
+
# * More doc
|
18
|
+
module Security
|
19
|
+
extend Equipment
|
20
|
+
depends_on Patches
|
21
|
+
depends_on Forward
|
22
|
+
|
23
|
+
def self.equip(app)
|
24
|
+
super
|
25
|
+
app::Controllers::Unauthorized.send :include, app::C, app::Base, app::Models
|
26
|
+
app::Controllers::Unauthenticated.send :include, app::C, app::Base, app::Models
|
27
|
+
end
|
28
|
+
|
29
|
+
module Base
|
30
|
+
# Blank authentication, returns [nil, nil]
|
31
|
+
def authenticate; return nil, nil end
|
32
|
+
|
33
|
+
# Blank authorization, returns true
|
34
|
+
def authorize(user, pass, force=false); not force; end
|
35
|
+
|
36
|
+
# Checks the credencials when serving a page if `authorize` is defined
|
37
|
+
# in your app, Base or controller.
|
38
|
+
def service(*a)
|
39
|
+
puts "Walking trough service"
|
40
|
+
user, pass = authenticate
|
41
|
+
if authorize(user, pass)
|
42
|
+
super
|
43
|
+
elsif not user
|
44
|
+
puts "Forwarding to Unauthenticated"
|
45
|
+
forward(app::Controllers::Unauthenticated)
|
46
|
+
else
|
47
|
+
puts "Forwarding to Unauthorized"
|
48
|
+
forward(app::Controllers::Unauthorized, user)
|
49
|
+
end
|
50
|
+
self
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
module Controllers
|
56
|
+
# Called when an url is not authorized. You can override this is your app.
|
57
|
+
# Or create an `unauthorized` view. @bad_user is the user name.
|
58
|
+
class Unauthorized
|
59
|
+
def self.urls; [] end # do not serve urls directly.
|
60
|
+
def authenticate; return nil, nil end
|
61
|
+
def authorize(user, pass, force=false); true; end
|
62
|
+
|
63
|
+
def get(bad_user)
|
64
|
+
@bad_user = bad_user
|
65
|
+
render(:unauthorized) rescue "Unauthorized user : #@bad_user"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Customize by creating an "unauthenticated" view
|
70
|
+
class Unauthenticated
|
71
|
+
def self.urls; [] end # do not serve urls directly.
|
72
|
+
def authenticate; return nil, nil end
|
73
|
+
def authorize(user, pass, force=false); true; end
|
74
|
+
|
75
|
+
def get
|
76
|
+
render(:unauthenticated) rescue 'Unauthenticated'
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
data/lib/ext/sendfile.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'equipment'
|
2
|
+
require 'ext/app_util'
|
3
|
+
require 'ext/forward'
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'mime/types' # requires that package
|
7
|
+
rescue LoadError
|
8
|
+
STDERR.puts '*** mime/types not available. You will have to specify mime \
|
9
|
+
types in Equipment::Sendfile.'
|
10
|
+
end
|
11
|
+
|
12
|
+
module Ext
|
13
|
+
|
14
|
+
# The Sendfile equipment allows you to send files to the browser. See
|
15
|
+
# Base#sendfile for more options.
|
16
|
+
#
|
17
|
+
# == Features
|
18
|
+
#
|
19
|
+
# * Autodetects if the `sendfile` extension is used in mongrel.
|
20
|
+
# * Provides mime-type resolution trough the 'mime/types' library.
|
21
|
+
# I encourage everybody to use that lib when dealing with mime types.
|
22
|
+
#
|
23
|
+
# == Dependencies
|
24
|
+
#
|
25
|
+
# * Equipment
|
26
|
+
# * AppUtil
|
27
|
+
# * Forward
|
28
|
+
# * `mime-types` package. Available as a gem.
|
29
|
+
# * `sendfile` package (optional). Available as a gem.
|
30
|
+
#
|
31
|
+
# == Example
|
32
|
+
#
|
33
|
+
# module Controllers
|
34
|
+
# class ShowPasswd
|
35
|
+
# def get
|
36
|
+
# # ...
|
37
|
+
# sendfile('/etc/password')
|
38
|
+
# end
|
39
|
+
# end
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
# == TODO
|
43
|
+
#
|
44
|
+
# * Implement force_download
|
45
|
+
#
|
46
|
+
module Sendfile
|
47
|
+
extend Equipment
|
48
|
+
depends_on AppUtil
|
49
|
+
depends_on Forward
|
50
|
+
|
51
|
+
module Base
|
52
|
+
# Sends the file passed in the path to the browser.
|
53
|
+
#
|
54
|
+
# If content_type is given, it won't try to lookup in the MIME::Types
|
55
|
+
# library.
|
56
|
+
#
|
57
|
+
def sendfile(path, content_type = nil)
|
58
|
+
# Kind of check if the file exists using the rescue
|
59
|
+
file = File.open(path.to_s)
|
60
|
+
|
61
|
+
unless content_type
|
62
|
+
mime = MIME::Types.type_for(path).first || MIME::Types['text/plain'].first
|
63
|
+
@headers['Content-Type'] = mime.to_s
|
64
|
+
@headers['Content-Encoding'] = mime.encoding
|
65
|
+
else
|
66
|
+
@headers['Content-Type'] = content_type
|
67
|
+
end
|
68
|
+
|
69
|
+
# Sendfile is used ?
|
70
|
+
if $mongrel_has_sendfile
|
71
|
+
@headers['X-Sendfile'] = path
|
72
|
+
else
|
73
|
+
@body = file.read
|
74
|
+
end
|
75
|
+
|
76
|
+
rescue Errno::ENOENT, Errno::EISDIR # File not found
|
77
|
+
forward(app::Controllers::NotFound, @env.PATH_INFO)
|
78
|
+
ensure
|
79
|
+
file.close if file
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'equipment'
|
2
|
+
require 'ext/patches'
|
3
|
+
|
4
|
+
module Ext
|
5
|
+
# A microcospical extension to decouple views from camping. Especially
|
6
|
+
# the ones based on templates.
|
7
|
+
#
|
8
|
+
# Adds a V class to your app on which all instance variables
|
9
|
+
# will be sent before rendering the view.
|
10
|
+
#
|
11
|
+
# == Dependencies
|
12
|
+
#
|
13
|
+
# * Equipment
|
14
|
+
# * Patches
|
15
|
+
#
|
16
|
+
# == TODO
|
17
|
+
#
|
18
|
+
# * Add support for layouts
|
19
|
+
module TemplateView
|
20
|
+
extend Equipment
|
21
|
+
depends_on Patches
|
22
|
+
|
23
|
+
def self.equip(app)
|
24
|
+
super
|
25
|
+
app.module_eval <<-SOME_VIEW
|
26
|
+
# Some kind of view data proxy for template-based renderers
|
27
|
+
class V
|
28
|
+
include Helpers
|
29
|
+
include Controllers
|
30
|
+
def bind(m,*a,&b); binding; end
|
31
|
+
def R(klass, *args); self / super; end
|
32
|
+
end
|
33
|
+
SOME_VIEW
|
34
|
+
end
|
35
|
+
|
36
|
+
module Base
|
37
|
+
# Takes template_root from ViewsClassMethods#template_root.
|
38
|
+
#
|
39
|
+
# You can change that by setting @template_root in your controller.
|
40
|
+
def template_root; @template_root || app::Views.template_root || '' end
|
41
|
+
|
42
|
+
# Same as #template_root
|
43
|
+
def use_cache; @use_cache || app::Views.use_cache; end
|
44
|
+
end
|
45
|
+
|
46
|
+
module ViewsClassMethods
|
47
|
+
# Sets the template_root. Usage is up to the template.
|
48
|
+
attr_accessor :template_root
|
49
|
+
|
50
|
+
# Set to true to add cache. Usage is up to the template.
|
51
|
+
attr_accessor :use_cache
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
class Object
|
58
|
+
|
59
|
+
# Sets all instance variables of an object to another
|
60
|
+
#
|
61
|
+
# if force is set to true, existing instance variables will be overwritten
|
62
|
+
def instance_variables_send(obj, force=false)
|
63
|
+
instance_variables.each do |v|
|
64
|
+
if force or not obj.instance_variables.include? v
|
65
|
+
obj.instance_variable_set(v, instance_variable_get(v))
|
66
|
+
end
|
67
|
+
end
|
68
|
+
obj
|
69
|
+
end
|
70
|
+
alias :ivs_send :instance_variables_send
|
71
|
+
end
|
72
|
+
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'equipment'
|
2
|
+
require 'ext/app_util'
|
3
|
+
|
4
|
+
module Ext
|
5
|
+
|
6
|
+
# The UseHelper allows you to define in your view what js and css scripts
|
7
|
+
# you're using.
|
8
|
+
#
|
9
|
+
# That can then be later used in the layout.
|
10
|
+
#
|
11
|
+
# This is useful when you descript external styles.
|
12
|
+
#
|
13
|
+
# == Example
|
14
|
+
#
|
15
|
+
# def layout
|
16
|
+
# html do
|
17
|
+
# head do
|
18
|
+
# javascripts.each { |js| script :type=>'text/javascript', :src=>js }
|
19
|
+
# stylesheets.each { |css| link :type=>'text/css', :rel=>'stylesheet', :href=>css }
|
20
|
+
# end
|
21
|
+
# body { yield }
|
22
|
+
# end
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# def someview
|
26
|
+
# use 'prototype.js', 'layout.css'
|
27
|
+
# # ...
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# == Dependency
|
31
|
+
#
|
32
|
+
# * Equipment
|
33
|
+
# * AppUtil
|
34
|
+
#
|
35
|
+
# == TODO
|
36
|
+
#
|
37
|
+
# * More doc
|
38
|
+
#
|
39
|
+
# == Possible issues
|
40
|
+
#
|
41
|
+
# It is possible that the @__flash instance variable is not transmitted well
|
42
|
+
# between the controller and the view. This may cause unwanted behavior.
|
43
|
+
module UseHelper
|
44
|
+
extend Equipment
|
45
|
+
def self.equip(app)
|
46
|
+
app::Base.module_eval do
|
47
|
+
def intialize(r,env,m)
|
48
|
+
@__javascripts ||= [] # initializing those vars is needed
|
49
|
+
@__stylesheets ||= []
|
50
|
+
puts "UseHelper::Base : Initialized well" if $DBG
|
51
|
+
super
|
52
|
+
end
|
53
|
+
end
|
54
|
+
super
|
55
|
+
end
|
56
|
+
|
57
|
+
module Helpers
|
58
|
+
def javascripts
|
59
|
+
@__javascripts ||= []
|
60
|
+
end
|
61
|
+
def stylesheets
|
62
|
+
@__stylesheets ||= []
|
63
|
+
end
|
64
|
+
def use(*elems)
|
65
|
+
elems.each do |elem|
|
66
|
+
case elem
|
67
|
+
when /\.js$/
|
68
|
+
javascripts << elem unless javascripts.include? elem
|
69
|
+
when /\.css$/
|
70
|
+
stylesheets << elem unless stylesheets.include? elem
|
71
|
+
else
|
72
|
+
raise "Unknow type : #{elem}"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
def use?(elem)
|
77
|
+
javascripts.include? elem or stylesheets.include? elem
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
data/lib/ext/xml_view.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'equipment'
|
2
|
+
|
3
|
+
module Ext
|
4
|
+
# Uses the Builder::XmlMarkup to build xml views. Not working as I want yet.
|
5
|
+
#
|
6
|
+
# == Depencency
|
7
|
+
#
|
8
|
+
# * Equipment
|
9
|
+
#
|
10
|
+
# == TODO
|
11
|
+
#
|
12
|
+
# * Reimplement this
|
13
|
+
#
|
14
|
+
module XmlView
|
15
|
+
extend Equipment
|
16
|
+
|
17
|
+
module Base
|
18
|
+
|
19
|
+
|
20
|
+
=begin
|
21
|
+
def xml_view?(view)
|
22
|
+
return /application\/xml|\*\/\*/ =~ (env.HTTP_ACCEPT || '*/*')
|
23
|
+
end
|
24
|
+
|
25
|
+
def view(m, *a, &b)
|
26
|
+
if xml_view?(m)
|
27
|
+
return xml_view(m, *a, &b)
|
28
|
+
end
|
29
|
+
super
|
30
|
+
end
|
31
|
+
=end
|
32
|
+
|
33
|
+
# For controllers which pass back XML directly, this method allows quick assignment
|
34
|
+
# of the status code and takes care of generating the XML headers. Takes a block
|
35
|
+
# which receives the Builder::XmlMarkup object.
|
36
|
+
def xml_view(m, *a, &b)
|
37
|
+
xml = Builder::XmlMarkup.new
|
38
|
+
xml.instruct! :xml, :version=>"1.0", :encoding=>"UTF-8"
|
39
|
+
yield xml
|
40
|
+
@headers['Content-Type'] = 'application/xml'
|
41
|
+
@headers['Encoding'] = 'UTF-8'
|
42
|
+
xml.target!
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11
|
3
|
+
specification_version: 1
|
4
|
+
name: equipment
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.1.0
|
7
|
+
date: 2006-07-06 00:00:00 +02:00
|
8
|
+
summary: Camping equipments
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: zimba.tm@gmail.com
|
12
|
+
homepage: http://equipment.rubyforge.org
|
13
|
+
rubyforge_project: equipment
|
14
|
+
description:
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
authors:
|
29
|
+
- Jonas Pfenniger
|
30
|
+
files:
|
31
|
+
- lib
|
32
|
+
- .
|
33
|
+
- examples
|
34
|
+
- lib/ext
|
35
|
+
- lib/ext/patches.rb
|
36
|
+
- examples/erubytest.rb
|
37
|
+
- examples/index.erb
|
38
|
+
- lib/ext/eruby_view.rb
|
39
|
+
- lib/ext/template_view.rb
|
40
|
+
- lib/ext/og_session.rb
|
41
|
+
- examples/sendfiletest.rb
|
42
|
+
- lib/ext/basic_auth.rb
|
43
|
+
- lib/ext/xml_view.rb
|
44
|
+
- README
|
45
|
+
- lib/ext/use_helper.rb
|
46
|
+
- lib/equipment.rb
|
47
|
+
- lib/ext/js_helpers.rb
|
48
|
+
- lib/ext/controls.rb
|
49
|
+
- lib/ext/ressource.rb
|
50
|
+
- examples/basicauthtest.rb
|
51
|
+
- examples/patchestest.rb
|
52
|
+
- examples/flashtest.rb
|
53
|
+
- lib/ext/app_util.rb
|
54
|
+
- lib/ext/forward.rb
|
55
|
+
- lib/ext/security.rb
|
56
|
+
- lib/ext/sendfile.rb
|
57
|
+
- examples/ogtest.rb
|
58
|
+
- examples/mounttest.rb
|
59
|
+
- lib/ext/forms.rb
|
60
|
+
- lib/ext/og_scaffold.rb
|
61
|
+
- lib/ext/mount.rb
|
62
|
+
- lib/ext/og.rb
|
63
|
+
- ProjectInfo
|
64
|
+
- lib/ext/flash.rb
|
65
|
+
test_files: []
|
66
|
+
|
67
|
+
rdoc_options: []
|
68
|
+
|
69
|
+
extra_rdoc_files: []
|
70
|
+
|
71
|
+
executables: []
|
72
|
+
|
73
|
+
extensions: []
|
74
|
+
|
75
|
+
requirements: []
|
76
|
+
|
77
|
+
dependencies: []
|
78
|
+
|