proxeze 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -96,6 +96,11 @@ This allows you to proxy specific instances of your classes without proxying all
96
96
  a.class # => Proxeze::A
97
97
  a.__getobj__.class # => A
98
98
 
99
+ == Supported Ruby versions
100
+ This code has been tested on 1.8.7, 1.9.2, and JRuby 1.5.6. I haven't bothered to test it on anything else, but I strongly suspect it will work just fine on any Ruby implementation greater than 1.8.6.
101
+
102
+ If you run into problems, feel free to open an issue at https://github.com/jacaetevha/proxeze/issues, or you can fix it yourself (see "Contributing to proxeze" below).
103
+
99
104
  == Contributing to proxeze
100
105
 
101
106
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -0,0 +1,96 @@
1
+ require 'rubygems'
2
+ require 'sinatra'
3
+ require 'haml'
4
+ require 'proxeze'
5
+
6
+ module Visibility
7
+ def visible?
8
+ @visible = true if @visible.nil?
9
+ @visible
10
+ end
11
+
12
+ def be_invisible!
13
+ @visible = false
14
+ self
15
+ end
16
+
17
+ def be_visible!
18
+ @visible = true
19
+ self
20
+ end
21
+ end
22
+
23
+ class ListingItem
24
+ attr_reader :name, :children, :path
25
+ attr_accessor :parent
26
+
27
+ def initialize name, is_directory
28
+ @name = name.split('/').last
29
+ @path = name.split('/')[0..-2]
30
+ @is_directory = is_directory
31
+ @children = []
32
+ end
33
+
34
+ def full_path
35
+ if parent.nil?
36
+ name
37
+ else
38
+ File.join(*([parent.full_path] + [name]).flatten)
39
+ end
40
+ end
41
+
42
+ def top_level?
43
+ path.nil? || path.empty?
44
+ end
45
+
46
+ def directory?
47
+ @is_directory
48
+ end
49
+ end
50
+
51
+ Proxeze.proxy ListingItem
52
+ Proxeze::ListingItem.send :include, Visibility
53
+ configure do
54
+ ALL_LISTINGS = Dir['**/**'].collect{|e| ListingItem.new(e, File.directory?(e)) }
55
+ ALL_LISTINGS.each do |e|
56
+ next if e.path.nil? || e.path.empty?
57
+ e.parent = ALL_LISTINGS.detect{|e1| e1.name == e.path.last}
58
+ e.parent.children << e if e.parent
59
+ end
60
+ end
61
+
62
+ helpers do
63
+ def unhide &blk
64
+ hide_all_listings
65
+ ALL_LISTINGS.select(&blk).each{|e| e.be_visible!}
66
+ end
67
+
68
+ def hide_all_listings
69
+ ALL_LISTINGS.each{|e| e.be_invisible!}
70
+ end
71
+
72
+ def unhide_all_listings
73
+ ALL_LISTINGS.each{|e| e.be_visible!}
74
+ end
75
+ end
76
+
77
+ before do
78
+ hide_all_listings
79
+ end
80
+
81
+ get '/' do
82
+ unhide {|e| e.top_level?}
83
+ @top = true
84
+ haml :index
85
+ end
86
+
87
+ get '/*' do
88
+ if request.xhr?
89
+ content_type 'text/plain'
90
+ File.read(params[:splat].first)
91
+ else
92
+ path = params[:splat].first.split('/')
93
+ unhide {|e| e.name == path.last || e.path == path.last}
94
+ haml :index
95
+ end
96
+ end
@@ -0,0 +1,6 @@
1
+ $:.unshift '.'
2
+ require 'app'
3
+
4
+ set :run, false
5
+
6
+ run Sinatra::Application
@@ -0,0 +1,17 @@
1
+ body {
2
+ background-color: #def;
3
+ }
4
+ .file_listing{
5
+ style: 'width: 15%';
6
+ }
7
+ #file_contents {
8
+ overflow: auto;
9
+ position: absolute;
10
+ width: 80%;
11
+ height: 90%;
12
+ top: 2px;
13
+ right: 10px;
14
+ background-color: white;
15
+ border: 1px solid #222;
16
+ padding: 7px;
17
+ }
@@ -0,0 +1,5 @@
1
+ function show_file(name) {
2
+ $.get("/" + name, function(data) {
3
+ $('#file_contents').html("<code><pre>" + data + "</pre></code>");
4
+ });
5
+ }
File without changes
@@ -0,0 +1,3 @@
1
+ This is a file inside a nested directory.
2
+
3
+ Don't erase it.
@@ -0,0 +1,26 @@
1
+ #file_contents
2
+
3
+ - visible_listings = ALL_LISTINGS.select{|e| e.visible?}
4
+
5
+ - if visible_listings.first.parent.nil?
6
+ .file_listing
7
+ %a{:href => "/"} up
8
+
9
+ - visible_listings.each do |item|
10
+ - if item.parent
11
+ .file_listing
12
+ %a{:href => "/#{item.parent.name}"}&= item.parent.name
13
+ .file_listing
14
+ - if item.directory?
15
+ %a{:href => "/#{item.name}"}&= item.name
16
+ - unless @top
17
+ - item.children.each do |child|
18
+ .file_listing
19
+ - if child.directory?
20
+ %a{:href => "/#{child.full_path}"}&= child.name
21
+ - else
22
+ %a{:onclick => "show_file('#{child.full_path}');", :href => "##{child.name}"}&= child.name
23
+
24
+ - else
25
+ %a{:onclick => "show_file('#{item.full_path}');", :href => "##{item.name}"}&= item.name
26
+
@@ -0,0 +1,10 @@
1
+ !!! Strict
2
+ %html{ :xmlns => "http://www.w3.org/1999/xhtml" }
3
+ %head
4
+ %title Proxeze Example
5
+ %link{:type => 'text/css', :rel => 'stylesheet', :href => '/app.css'}
6
+ %script{:type => 'text/javascript', :src => '/app.js' }
7
+ %script{:type => 'text/javascript', :src => 'https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'}
8
+ %body
9
+ #content
10
+ = yield
data/lib/proxeze.rb CHANGED
@@ -11,6 +11,18 @@ module Proxeze
11
11
  end
12
12
  end
13
13
 
14
+ # Create a proxy class for the given target class.
15
+ # If redefine_new_method is false, the target class' #new
16
+ # method will not be reimplemented.
17
+ #
18
+ # When the target class' #new method is reimplemented,
19
+ # all subsequent calls to #new on that class will return
20
+ # an instance of a proxied class (in the Proxeze namespace),
21
+ # thereby allowing seemless integration with existing
22
+ # classes.
23
+ #
24
+ # Typically, only the Proxeze.for method should pass in
25
+ # redefine_new_method=false here.
14
26
  def self.proxy target_class, redefine_new_method = true
15
27
  cls_name = target_class.name.gsub '::', ''
16
28
  unless self.class_defined? cls_name
data/proxeze.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{proxeze}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jason Rogers"]
@@ -23,6 +23,14 @@ Gem::Specification.new do |s|
23
23
  "README.rdoc",
24
24
  "Rakefile",
25
25
  "VERSION",
26
+ "examples/sinatra/app.rb",
27
+ "examples/sinatra/config.ru",
28
+ "examples/sinatra/public/app.css",
29
+ "examples/sinatra/public/app.js",
30
+ "examples/sinatra/public/favicon.ico",
31
+ "examples/sinatra/public/nested_directory/file_inside_nested_directory.txt",
32
+ "examples/sinatra/views/index.haml",
33
+ "examples/sinatra/views/layout.haml",
26
34
  "lib/proxeze.rb",
27
35
  "proxeze.gemspec",
28
36
  "spec/definitions.rb",
@@ -32,16 +40,16 @@ Gem::Specification.new do |s|
32
40
  s.homepage = %q{http://github.com/jacaetevha/proxeze}
33
41
  s.licenses = ["MIT"]
34
42
  s.require_paths = ["lib"]
35
- s.rubygems_version = %q{1.3.7}
43
+ s.rubygems_version = %q{1.5.0}
36
44
  s.summary = %q{A basic proxy/delegate framework for Ruby that will allow you to wrap any object with a proxy instance.}
37
45
  s.test_files = [
46
+ "examples/sinatra/app.rb",
38
47
  "spec/definitions.rb",
39
48
  "spec/proxeze_spec.rb",
40
49
  "spec/spec_helper.rb"
41
50
  ]
42
51
 
43
52
  if s.respond_to? :specification_version then
44
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
45
53
  s.specification_version = 3
46
54
 
47
55
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proxeze
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 0
9
- version: 0.1.0
4
+ prerelease:
5
+ version: 0.2.0
10
6
  platform: ruby
11
7
  authors:
12
8
  - Jason Rogers
@@ -24,8 +20,6 @@ dependencies:
24
20
  requirements:
25
21
  - - ">="
26
22
  - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
23
  version: "0"
30
24
  type: :development
31
25
  prerelease: false
@@ -37,10 +31,6 @@ dependencies:
37
31
  requirements:
38
32
  - - ~>
39
33
  - !ruby/object:Gem::Version
40
- segments:
41
- - 2
42
- - 4
43
- - 0
44
34
  version: 2.4.0
45
35
  type: :development
46
36
  prerelease: false
@@ -52,10 +42,6 @@ dependencies:
52
42
  requirements:
53
43
  - - ~>
54
44
  - !ruby/object:Gem::Version
55
- segments:
56
- - 1
57
- - 0
58
- - 0
59
45
  version: 1.0.0
60
46
  type: :development
61
47
  prerelease: false
@@ -67,10 +53,6 @@ dependencies:
67
53
  requirements:
68
54
  - - ~>
69
55
  - !ruby/object:Gem::Version
70
- segments:
71
- - 1
72
- - 5
73
- - 2
74
56
  version: 1.5.2
75
57
  type: :development
76
58
  prerelease: false
@@ -82,8 +64,6 @@ dependencies:
82
64
  requirements:
83
65
  - - ">="
84
66
  - !ruby/object:Gem::Version
85
- segments:
86
- - 0
87
67
  version: "0"
88
68
  type: :development
89
69
  prerelease: false
@@ -95,10 +75,6 @@ dependencies:
95
75
  requirements:
96
76
  - - ~>
97
77
  - !ruby/object:Gem::Version
98
- segments:
99
- - 2
100
- - 4
101
- - 0
102
78
  version: 2.4.0
103
79
  type: :development
104
80
  prerelease: false
@@ -110,10 +86,6 @@ dependencies:
110
86
  requirements:
111
87
  - - ~>
112
88
  - !ruby/object:Gem::Version
113
- segments:
114
- - 1
115
- - 0
116
- - 0
117
89
  version: 1.0.0
118
90
  type: :development
119
91
  prerelease: false
@@ -125,10 +97,6 @@ dependencies:
125
97
  requirements:
126
98
  - - ~>
127
99
  - !ruby/object:Gem::Version
128
- segments:
129
- - 1
130
- - 5
131
- - 2
132
100
  version: 1.5.2
133
101
  type: :development
134
102
  prerelease: false
@@ -140,8 +108,6 @@ dependencies:
140
108
  requirements:
141
109
  - - ">="
142
110
  - !ruby/object:Gem::Version
143
- segments:
144
- - 0
145
111
  version: "0"
146
112
  type: :development
147
113
  prerelease: false
@@ -162,6 +128,14 @@ files:
162
128
  - README.rdoc
163
129
  - Rakefile
164
130
  - VERSION
131
+ - examples/sinatra/app.rb
132
+ - examples/sinatra/config.ru
133
+ - examples/sinatra/public/app.css
134
+ - examples/sinatra/public/app.js
135
+ - examples/sinatra/public/favicon.ico
136
+ - examples/sinatra/public/nested_directory/file_inside_nested_directory.txt
137
+ - examples/sinatra/views/index.haml
138
+ - examples/sinatra/views/layout.haml
165
139
  - lib/proxeze.rb
166
140
  - proxeze.gemspec
167
141
  - spec/definitions.rb
@@ -181,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
181
155
  requirements:
182
156
  - - ">="
183
157
  - !ruby/object:Gem::Version
184
- hash: -2539751973325826461
158
+ hash: 2702813715672519678
185
159
  segments:
186
160
  - 0
187
161
  version: "0"
@@ -190,17 +164,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
164
  requirements:
191
165
  - - ">="
192
166
  - !ruby/object:Gem::Version
193
- segments:
194
- - 0
195
167
  version: "0"
196
168
  requirements: []
197
169
 
198
170
  rubyforge_project:
199
- rubygems_version: 1.3.7
171
+ rubygems_version: 1.5.0
200
172
  signing_key:
201
173
  specification_version: 3
202
174
  summary: A basic proxy/delegate framework for Ruby that will allow you to wrap any object with a proxy instance.
203
175
  test_files:
176
+ - examples/sinatra/app.rb
204
177
  - spec/definitions.rb
205
178
  - spec/proxeze_spec.rb
206
179
  - spec/spec_helper.rb