fredit 0.1.9 → 0.2.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.
- data/README.md +3 -6
- data/lib/fredit.rb +17 -2
- data/lib/fredit/template30.rb +28 -0
- data/lib/fredit/template31.rb +16 -0
- metadata +12 -12
- data/lib/fredit/erb.rb +0 -50
- data/lib/fredit/erb31.rb +0 -50
data/README.md
CHANGED
@@ -22,10 +22,6 @@ edit page.
|
|
22
22
|
|
23
23
|
You can also create and delete front-end files on the fredit edit page.
|
24
24
|
|
25
|
-
**NOTE: Currently only the ERB Rails template handler is supported.**
|
26
|
-
You are welcome to fork and add support for Haml and other template
|
27
|
-
handlers.
|
28
|
-
|
29
25
|
|
30
26
|
## fredit lowers the barriers to collaboration
|
31
27
|
|
@@ -50,7 +46,7 @@ templates and stylesheets. This is madness. And if you want to add
|
|
50
46
|
additional non-Rails people as front-end collaborators, [the King of
|
51
47
|
Sparta kicks you into a pit][sparta]. Have fun.
|
52
48
|
|
53
|
-
[sparta]:http://www.youtube.com/watch?v
|
49
|
+
[sparta]:http://www.youtube.com/watch?v=wDiUG52ZyHQ&t=38s
|
54
50
|
|
55
51
|
Another option is to integrate a CMS into your Rails app. But in
|
56
52
|
addition to adding a mass of dependencies and code bloat, this approach
|
@@ -94,7 +90,8 @@ lower the "collaboration barrier" to reap further gains in productivity.
|
|
94
90
|
|
95
91
|
## Install and setup
|
96
92
|
|
97
|
-
fredit requires Rails 3.
|
93
|
+
fredit requires Rails 3. fredit should work with all Rails-compatible
|
94
|
+
templating engines as of version 0.2.0.
|
98
95
|
|
99
96
|
fredit works best as a gem you include in a specific Rails
|
100
97
|
environment. Put something like this in the `Gemfile` of your Rails app:
|
data/lib/fredit.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
if Rails.version < '3.1.0'
|
2
|
-
require 'fredit/
|
2
|
+
require 'fredit/template30'
|
3
3
|
else
|
4
|
-
require 'fredit/
|
4
|
+
require 'fredit/template31'
|
5
5
|
end
|
6
6
|
require 'uri'
|
7
7
|
|
@@ -35,12 +35,27 @@ module Fredit
|
|
35
35
|
{:css => css, :views => views, :javascript => js}
|
36
36
|
end
|
37
37
|
|
38
|
+
def add_fredit_link(template, s)
|
39
|
+
return s unless template_editable?(template)
|
40
|
+
if s =~ /^\s*<!DOCTYPE/ && s =~ /<body[^>]*>/
|
41
|
+
s.sub(/<body[^>]*>/, '\&' + fredit_link(template))
|
42
|
+
else
|
43
|
+
fredit_link(template) + s
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def fredit_link(template)
|
48
|
+
source_file = Fredit.rel_path template.identifier
|
49
|
+
edit_link = "<div style='color:red'>#{Fredit.link(source_file)}</div>".html_safe
|
50
|
+
end
|
51
|
+
|
38
52
|
def template_editable?(template)
|
39
53
|
template.identifier.index(Rails.root.to_s) == 0 &&
|
40
54
|
template.formats &&
|
41
55
|
template.formats.include?(:html)
|
42
56
|
end
|
43
57
|
|
58
|
+
|
44
59
|
end
|
45
60
|
|
46
61
|
require 'fredit/engine'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module ActionView
|
2
|
+
class Template
|
3
|
+
|
4
|
+
def render(view, locals, &block)
|
5
|
+
# Notice that we use a bang in this instrumentation because you don't want to
|
6
|
+
# consume this in production. This is only slow if it's being listened to.
|
7
|
+
ActiveSupport::Notifications.instrument("!render_template.action_view", :virtual_path => @virtual_path) do
|
8
|
+
if view.is_a?(ActionView::CompiledTemplates)
|
9
|
+
mod = ActionView::CompiledTemplates
|
10
|
+
else
|
11
|
+
mod = view.singleton_class
|
12
|
+
end
|
13
|
+
method_name = compile(locals, view, mod)
|
14
|
+
r = view.send(method_name, locals, &block)
|
15
|
+
Fredit.add_fredit_link(self, r)
|
16
|
+
end
|
17
|
+
rescue Exception => e
|
18
|
+
if e.is_a?(Template::Error)
|
19
|
+
e.sub_template_of(self)
|
20
|
+
raise e
|
21
|
+
else
|
22
|
+
raise Template::Error.new(self, view.respond_to?(:assigns) ? view.assigns : {}, e)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module ActionView
|
2
|
+
class Template
|
3
|
+
def render(view, locals, buffer=nil, &block)
|
4
|
+
ActiveSupport::Notifications.instrument("!render_template.action_view", :virtual_path => @virtual_path) do
|
5
|
+
compile!(view)
|
6
|
+
r = view.send(method_name, locals, buffer, &block)
|
7
|
+
Fredit.add_fredit_link(self, r)
|
8
|
+
end
|
9
|
+
rescue Exception => e
|
10
|
+
handle_render_error(view, e)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
__END__
|
16
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fredit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-10-27 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: git
|
16
|
-
requirement: &
|
16
|
+
requirement: &72582790 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *72582790
|
25
25
|
description: Edit the front end of Rails apps through the browser.
|
26
26
|
email:
|
27
27
|
- dhchoi@gmail.com
|
@@ -29,14 +29,14 @@ executables: []
|
|
29
29
|
extensions: []
|
30
30
|
extra_rdoc_files: []
|
31
31
|
files:
|
32
|
-
- app/controllers/fredit_controller.rb
|
33
|
-
- app/views/fredit/revision.html.erb
|
34
|
-
- app/views/fredit/show.html.erb
|
35
32
|
- app/views/layouts/fredit.html.erb
|
36
|
-
-
|
37
|
-
-
|
38
|
-
-
|
33
|
+
- app/views/fredit/show.html.erb
|
34
|
+
- app/views/fredit/revision.html.erb
|
35
|
+
- app/controllers/fredit_controller.rb
|
39
36
|
- lib/fredit.rb
|
37
|
+
- lib/fredit/template31.rb
|
38
|
+
- lib/fredit/template30.rb
|
39
|
+
- lib/fredit/engine.rb
|
40
40
|
- config/routes.rb
|
41
41
|
- MIT-LICENSE
|
42
42
|
- Rakefile
|
@@ -56,7 +56,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
56
56
|
version: '0'
|
57
57
|
segments:
|
58
58
|
- 0
|
59
|
-
hash:
|
59
|
+
hash: 421214845
|
60
60
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
@@ -65,10 +65,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
65
|
version: '0'
|
66
66
|
segments:
|
67
67
|
- 0
|
68
|
-
hash:
|
68
|
+
hash: 421214845
|
69
69
|
requirements: []
|
70
70
|
rubyforge_project:
|
71
|
-
rubygems_version: 1.8.
|
71
|
+
rubygems_version: 1.8.11
|
72
72
|
signing_key:
|
73
73
|
specification_version: 3
|
74
74
|
summary: Edit the front end of Rails apps through the browser.
|
data/lib/fredit/erb.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
module ActionView
|
2
|
-
class Template
|
3
|
-
module Handlers
|
4
|
-
class ERB < Handler
|
5
|
-
def compile(template)
|
6
|
-
|
7
|
-
# copied from original
|
8
|
-
|
9
|
-
if template.source.encoding_aware?
|
10
|
-
# First, convert to BINARY, so in case the encoding is
|
11
|
-
# wrong, we can still find an encoding tag
|
12
|
-
# (<%# encoding %>) inside the String using a regular
|
13
|
-
# expression
|
14
|
-
template_source = template.source.dup.force_encoding("BINARY")
|
15
|
-
|
16
|
-
erb = template_source.gsub(ENCODING_TAG, '')
|
17
|
-
encoding = $2
|
18
|
-
|
19
|
-
erb.force_encoding valid_encoding(template.source.dup, encoding)
|
20
|
-
|
21
|
-
# Always make sure we return a String in the default_internal
|
22
|
-
erb.encode!
|
23
|
-
else
|
24
|
-
erb = template.source.dup
|
25
|
-
end
|
26
|
-
|
27
|
-
# begin Fredit patch
|
28
|
-
|
29
|
-
if Fredit.template_editable?(template)
|
30
|
-
source_file = Fredit.rel_path template.identifier
|
31
|
-
edit_link = "<div style='color:red'>#{Fredit.link(source_file)}</div> "
|
32
|
-
if erb =~ /^\s*<!DOCTYPE/ && erb =~ /<body[^>]*>/
|
33
|
-
erb = erb.sub(/<body[^>]*>/, '\&' + edit_link)
|
34
|
-
else
|
35
|
-
erb = edit_link + erb
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
# end Fredit patch
|
40
|
-
|
41
|
-
self.class.erb_implementation.new(
|
42
|
-
erb,
|
43
|
-
:trim => (self.class.erb_trim_mode == "-")
|
44
|
-
).src
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
data/lib/fredit/erb31.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
module ActionView
|
2
|
-
class Template
|
3
|
-
module Handlers
|
4
|
-
class ERB
|
5
|
-
def call(template)
|
6
|
-
if template.source.encoding_aware?
|
7
|
-
# First, convert to BINARY, so in case the encoding is
|
8
|
-
# wrong, we can still find an encoding tag
|
9
|
-
# (<%# encoding %>) inside the String using a regular
|
10
|
-
# expression
|
11
|
-
template_source = template.source.dup.force_encoding("BINARY")
|
12
|
-
|
13
|
-
erb = template_source.gsub(ENCODING_TAG, '')
|
14
|
-
encoding = $2
|
15
|
-
|
16
|
-
erb.force_encoding valid_encoding(template.source.dup, encoding)
|
17
|
-
|
18
|
-
# Always make sure we return a String in the default_internal
|
19
|
-
erb.encode!
|
20
|
-
else
|
21
|
-
erb = template.source.dup
|
22
|
-
end
|
23
|
-
|
24
|
-
# begin Fredit patch
|
25
|
-
|
26
|
-
if Fredit.template_editable?(template)
|
27
|
-
source_file = Fredit.rel_path template.identifier
|
28
|
-
edit_link = "<div style='color:red'>#{Fredit.link(source_file)}</div> "
|
29
|
-
if erb =~ /^\s*<!DOCTYPE/ && erb =~ /<body[^>]*>/
|
30
|
-
erb = erb.sub(/<body[^>]*>/, '\&' + edit_link)
|
31
|
-
else
|
32
|
-
erb = edit_link + erb
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# end Fredit patch
|
37
|
-
|
38
|
-
|
39
|
-
self.class.erb_implementation.new(
|
40
|
-
erb,
|
41
|
-
:trim => (self.class.erb_trim_mode == "-")
|
42
|
-
).src
|
43
|
-
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|