hocus_pocus 0.1.3 → 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/engines/command_line/app/controllers/hocus_pocus/command_line/command_line_controller.rb +12 -0
- data/{app/views/hocus_pocus/generator → engines/command_line/app/views/hocus_pocus/command_line/command_line}/execute.js.erb +0 -0
- data/engines/command_line/config/routes.rb +3 -0
- data/engines/command_line/lib/hocus_pocus/command_line/engine.rb +15 -0
- data/engines/command_line/lib/hocus_pocus/command_line/middleware.rb +26 -0
- data/engines/command_line/lib/hocus_pocus/command_line/railtie.rb +17 -0
- data/engines/editor/app/controllers/hocus_pocus/editor/editor_controller.rb +21 -0
- data/{app/views/hocus_pocus → engines/editor/app/views/hocus_pocus/editor}/editor/_editor.html.erb +1 -1
- data/{app/views/hocus_pocus → engines/editor/app/views/hocus_pocus/editor}/editor/index.js.erb +0 -0
- data/{app/views/hocus_pocus → engines/editor/app/views/hocus_pocus/editor}/editor/save.js.erb +0 -0
- data/engines/editor/config/routes.rb +4 -0
- data/engines/editor/lib/hocus_pocus/editor/engine.rb +15 -0
- data/engines/editor/lib/hocus_pocus/editor/middleware.rb +33 -0
- data/engines/editor/lib/hocus_pocus/editor/railtie.rb +43 -0
- data/engines/generator/app/controllers/hocus_pocus/generator/generator_controller.rb +60 -0
- data/engines/generator/app/helpers/hocus_pocus/generator/generator_helper.rb +9 -0
- data/{app/views/hocus_pocus → engines/generator/app/views/hocus_pocus/generator}/generator/index.html.erb +3 -3
- data/{app/views/hocus_pocus → engines/generator/app/views/hocus_pocus/generator}/generator/scaffold.js.erb +0 -0
- data/engines/generator/config/routes.rb +5 -0
- data/engines/generator/lib/hocus_pocus/generator/engine.rb +7 -0
- data/engines/generator/lib/hocus_pocus/generator/railtie.rb +34 -0
- data/engines/recorder/app/controllers/hocus_pocus/recorder/recorder_controller.rb +15 -0
- data/{app/views/hocus_pocus/spec → engines/recorder/app/views/hocus_pocus/recorder/recorder}/destroy.js.erb +0 -0
- data/engines/recorder/app/views/hocus_pocus/recorder/recorder/index.js.erb +1 -0
- data/engines/recorder/config/routes.rb +4 -0
- data/engines/recorder/lib/assets/javascripts/recorder.js.coffee.erb +10 -0
- data/engines/recorder/lib/hocus_pocus/recorder/engine.rb +15 -0
- data/engines/recorder/lib/hocus_pocus/recorder/filter.rb +11 -0
- data/engines/recorder/lib/hocus_pocus/recorder/middleware.rb +32 -0
- data/engines/recorder/lib/hocus_pocus/recorder/railtie.rb +27 -0
- data/hocus_pocus.gemspec +1 -1
- data/lib/generators/hocus_pocus/config_generator.rb +1 -1
- data/lib/hocus_pocus.rb +1 -1
- data/lib/hocus_pocus/engine.rb +6 -3
- data/lib/hocus_pocus/middleware.rb +19 -0
- data/lib/hocus_pocus/middleware_util.rb +17 -0
- data/lib/hocus_pocus/railtie.rb +7 -44
- data/lib/hocus_pocus/version.rb +1 -1
- metadata +43 -22
- data/app/controllers/hocus_pocus/application_controller.rb +0 -4
- data/app/controllers/hocus_pocus/editor_controller.rb +0 -19
- data/app/controllers/hocus_pocus/generator_controller.rb +0 -47
- data/app/controllers/hocus_pocus/spec_controller.rb +0 -8
- data/app/helpers/hocus_pocus/application_helper.rb +0 -4
- data/app/helpers/hocus_pocus/generator_helper.rb +0 -7
- data/config/routes.rb +0 -16
- data/lib/hocus_pocus/filter.rb +0 -102
- data/vendor/assets/javascripts/jquery_ujs.js +0 -289
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'hocus_pocus/middleware_util'
|
2
|
+
|
3
|
+
module HocusPocus
|
4
|
+
module Recorder
|
5
|
+
class Middleware
|
6
|
+
include MiddlewareUtil
|
7
|
+
|
8
|
+
def initialize(app)
|
9
|
+
@app = app
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
@app.call(env).tap do |status, headers, body|
|
14
|
+
if body.is_a?(ActionDispatch::Response) && body.request.format.html? && (body.request.path !~ %r[^/*hocus_pocus/])
|
15
|
+
body.body = insert_text body.body, :before, /<\/head>/i, %Q[<script src="/assets/recorder.js"></script>]
|
16
|
+
body.body = insert_text body.body, :after, /<div id="#{HocusPocus::CONTAINER}" .*?>/i, %Q[#{spec_link}<br>#{spec}]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def spec_link
|
23
|
+
%Q[<a href="/hocus_pocus/recorder" data-remote="true">spec</a>]
|
24
|
+
end
|
25
|
+
|
26
|
+
def spec
|
27
|
+
#FIXME more assertions
|
28
|
+
%Q[<div class="spec" style="display:none"><div align="right"><a href="/hocus_pocus/recorder" data-remote="true" data-method="delete">Clear</a></div></div>]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'hocus_pocus/recorder/engine'
|
2
|
+
require 'hocus_pocus/recorder/filter'
|
3
|
+
|
4
|
+
module HocusPocus
|
5
|
+
module Recorder
|
6
|
+
SPEC = :__hocus_pocus_recorder__
|
7
|
+
|
8
|
+
class Railtie < ::Rails::Railtie #:nodoc:
|
9
|
+
initializer 'hocus_pocus.recorder' do |app|
|
10
|
+
ActiveSupport.on_load(:after_initialize) do
|
11
|
+
if HocusPocus.config.enable_scenario_recorder
|
12
|
+
Rails.application.routes.append do
|
13
|
+
mount HocusPocus::Recorder::Engine, :at => '/hocus_pocus/recorder'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
ActiveSupport.on_load(:action_controller) do
|
18
|
+
if HocusPocus.config.enable_scenario_recorder
|
19
|
+
class ::ActionController::Base
|
20
|
+
before_filter HocusPocus::Recorder::Filter
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/hocus_pocus.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.files = `git ls-files`.split("\n")
|
18
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
-
s.require_paths = ['lib']
|
20
|
+
s.require_paths = ['lib', 'engines/generator/lib', 'engines/editor/lib', 'engines/recorder/lib', 'engines/command_line/lib']
|
21
21
|
|
22
22
|
s.extra_rdoc_files = ['README.rdoc']
|
23
23
|
s.licenses = ['MIT']
|
data/lib/hocus_pocus.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require
|
1
|
+
require 'hocus_pocus/railtie'
|
data/lib/hocus_pocus/engine.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
|
+
require 'hocus_pocus/middleware'
|
2
|
+
|
1
3
|
module HocusPocus
|
2
4
|
class Engine < ::Rails::Engine
|
3
5
|
isolate_namespace HocusPocus
|
4
|
-
|
6
|
+
|
7
|
+
initializer 'hocus_pocus.add middleware' do |app|
|
5
8
|
# app.middleware.use HocusPocus::RouteMissing
|
6
|
-
|
7
|
-
|
9
|
+
app.middleware.use HocusPocus::Middleware
|
10
|
+
end
|
8
11
|
end
|
9
12
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'hocus_pocus/middleware_util'
|
2
|
+
|
3
|
+
module HocusPocus
|
4
|
+
class Middleware
|
5
|
+
include MiddlewareUtil
|
6
|
+
|
7
|
+
def initialize(app)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
@app.call(env).tap do |status, headers, body|
|
13
|
+
if body.is_a?(ActionDispatch::Response) && (body.request.path !~ %r[^/*hocus_pocus/])
|
14
|
+
body.body = insert_text body.body, :before, /<\/body>/i, %Q[<div id="#{HocusPocus::CONTAINER}" style="position:absolute; top:0; right: 0; font-size: small;"></div>]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module HocusPocus
|
2
|
+
module MiddlewareUtil
|
3
|
+
def insert_text(body, position, pattern, new_text)
|
4
|
+
index = case pattern
|
5
|
+
when Regexp
|
6
|
+
if match = body.match(pattern)
|
7
|
+
match.offset(0)[position == :before ? 0 : 1]
|
8
|
+
else
|
9
|
+
body.size
|
10
|
+
end
|
11
|
+
else
|
12
|
+
pattern
|
13
|
+
end
|
14
|
+
body.insert index, new_text
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/hocus_pocus/railtie.rb
CHANGED
@@ -1,53 +1,16 @@
|
|
1
1
|
require 'rails'
|
2
|
-
require
|
2
|
+
require 'hocus_pocus/config'
|
3
3
|
|
4
4
|
if Rails.env.development?
|
5
5
|
require 'hocus_pocus/engine'
|
6
|
-
require 'hocus_pocus/filter'
|
7
6
|
|
8
7
|
module HocusPocus
|
9
|
-
VIEW_FILENAMES = :__hocus_pocus_view_filenames__
|
10
8
|
CONTAINER = :__hocus_pocus_container__
|
11
|
-
EDITOR = :__hocus_pocus_editor__
|
12
|
-
GENERATOR = :__hocus_pocus_generator__
|
13
|
-
SPEC = :__hocus_pocus_spec__
|
14
|
-
|
15
|
-
class Railtie < ::Rails::Railtie #:nodoc:
|
16
|
-
initializer 'hocus_pocus' do |app|
|
17
|
-
ActiveSupport.on_load(:after_initialize) do
|
18
|
-
Rails.application.routes.append do
|
19
|
-
mount HocusPocus::Engine, :at => '/'
|
20
|
-
end
|
21
|
-
end
|
22
|
-
ActiveSupport.on_load(:action_controller) do
|
23
|
-
class ::ActionController::Base
|
24
|
-
before_filter HocusPocus::Filter
|
25
|
-
after_filter HocusPocus::Filter
|
26
|
-
end
|
27
|
-
end
|
28
|
-
ActiveSupport.on_load(:action_view) do
|
29
|
-
class ::ActionView::Base
|
30
|
-
def method_missing(method, args = {}, &blk)
|
31
|
-
if method.to_s =~ /(new_|edit_)?(.*)(_path|_url)\z/
|
32
|
-
# to avoid DoubleRenderError
|
33
|
-
controller.instance_variable_set :@_response_body, nil
|
34
|
-
#FIXME preserve args
|
35
|
-
controller.redirect_to "/#{$2.pluralize}?return_path=#{method}(#{args})"
|
36
|
-
else
|
37
|
-
super
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
class ::ActionView::PartialRenderer
|
43
|
-
def render_partial_with_filename_caching
|
44
|
-
(Thread.current[HocusPocus::VIEW_FILENAMES] ||= []) << @template unless @view.controller.is_a?(HocusPocus::EditorController)
|
45
|
-
render_partial_without_filename_caching
|
46
|
-
end
|
47
|
-
alias_method_chain :render_partial, :filename_caching
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
9
|
end
|
10
|
+
|
11
|
+
require 'hocus_pocus/editor/railtie'
|
12
|
+
require 'hocus_pocus/recorder/railtie'
|
13
|
+
require 'hocus_pocus/command_line/railtie'
|
14
|
+
# note that the generator should be loaded at the last because it has wildcard routing
|
15
|
+
require 'hocus_pocus/generator/railtie'
|
53
16
|
end
|
data/lib/hocus_pocus/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hocus_pocus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Akira Matsuda
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-11-16 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: nested_scaffold
|
@@ -50,33 +50,49 @@ files:
|
|
50
50
|
- MIT-LICENSE
|
51
51
|
- README.rdoc
|
52
52
|
- Rakefile
|
53
|
-
- app/controllers/hocus_pocus/
|
54
|
-
- app/
|
55
|
-
-
|
56
|
-
-
|
57
|
-
-
|
58
|
-
-
|
59
|
-
- app/
|
60
|
-
- app/views/hocus_pocus/editor/
|
61
|
-
- app/views/hocus_pocus/editor/
|
62
|
-
- app/views/hocus_pocus/
|
63
|
-
-
|
64
|
-
-
|
65
|
-
-
|
66
|
-
-
|
53
|
+
- engines/command_line/app/controllers/hocus_pocus/command_line/command_line_controller.rb
|
54
|
+
- engines/command_line/app/views/hocus_pocus/command_line/command_line/execute.js.erb
|
55
|
+
- engines/command_line/config/routes.rb
|
56
|
+
- engines/command_line/lib/hocus_pocus/command_line/engine.rb
|
57
|
+
- engines/command_line/lib/hocus_pocus/command_line/middleware.rb
|
58
|
+
- engines/command_line/lib/hocus_pocus/command_line/railtie.rb
|
59
|
+
- engines/editor/app/controllers/hocus_pocus/editor/editor_controller.rb
|
60
|
+
- engines/editor/app/views/hocus_pocus/editor/editor/_editor.html.erb
|
61
|
+
- engines/editor/app/views/hocus_pocus/editor/editor/index.js.erb
|
62
|
+
- engines/editor/app/views/hocus_pocus/editor/editor/save.js.erb
|
63
|
+
- engines/editor/config/routes.rb
|
64
|
+
- engines/editor/lib/hocus_pocus/editor/engine.rb
|
65
|
+
- engines/editor/lib/hocus_pocus/editor/middleware.rb
|
66
|
+
- engines/editor/lib/hocus_pocus/editor/railtie.rb
|
67
|
+
- engines/generator/app/controllers/hocus_pocus/generator/generator_controller.rb
|
68
|
+
- engines/generator/app/helpers/hocus_pocus/generator/generator_helper.rb
|
69
|
+
- engines/generator/app/views/hocus_pocus/generator/generator/index.html.erb
|
70
|
+
- engines/generator/app/views/hocus_pocus/generator/generator/scaffold.js.erb
|
71
|
+
- engines/generator/config/routes.rb
|
72
|
+
- engines/generator/lib/hocus_pocus/generator/engine.rb
|
73
|
+
- engines/generator/lib/hocus_pocus/generator/railtie.rb
|
74
|
+
- engines/recorder/app/controllers/hocus_pocus/recorder/recorder_controller.rb
|
75
|
+
- engines/recorder/app/views/hocus_pocus/recorder/recorder/destroy.js.erb
|
76
|
+
- engines/recorder/app/views/hocus_pocus/recorder/recorder/index.js.erb
|
77
|
+
- engines/recorder/config/routes.rb
|
78
|
+
- engines/recorder/lib/assets/javascripts/recorder.js.coffee.erb
|
79
|
+
- engines/recorder/lib/hocus_pocus/recorder/engine.rb
|
80
|
+
- engines/recorder/lib/hocus_pocus/recorder/filter.rb
|
81
|
+
- engines/recorder/lib/hocus_pocus/recorder/middleware.rb
|
82
|
+
- engines/recorder/lib/hocus_pocus/recorder/railtie.rb
|
67
83
|
- hocus_pocus.gemspec
|
68
84
|
- lib/generators/hocus_pocus/config_generator.rb
|
69
85
|
- lib/generators/hocus_pocus/templates/hocus_pocus_config.rb
|
70
86
|
- lib/hocus_pocus.rb
|
71
87
|
- lib/hocus_pocus/config.rb
|
72
88
|
- lib/hocus_pocus/engine.rb
|
73
|
-
- lib/hocus_pocus/
|
89
|
+
- lib/hocus_pocus/middleware.rb
|
90
|
+
- lib/hocus_pocus/middleware_util.rb
|
74
91
|
- lib/hocus_pocus/railtie.rb
|
75
92
|
- lib/hocus_pocus/version.rb
|
76
93
|
- lib/tasks/hocus_pocus_tasks.rake
|
77
94
|
- test/helper.rb
|
78
95
|
- test/test_hocus_pocus.rb
|
79
|
-
- vendor/assets/javascripts/jquery_ujs.js
|
80
96
|
homepage: https://github.com/amatsuda/hocus_pocus
|
81
97
|
licenses:
|
82
98
|
- MIT
|
@@ -85,6 +101,10 @@ rdoc_options: []
|
|
85
101
|
|
86
102
|
require_paths:
|
87
103
|
- lib
|
104
|
+
- engines/generator/lib
|
105
|
+
- engines/editor/lib
|
106
|
+
- engines/recorder/lib
|
107
|
+
- engines/command_line/lib
|
88
108
|
required_ruby_version: !ruby/object:Gem::Requirement
|
89
109
|
none: false
|
90
110
|
requirements:
|
@@ -106,10 +126,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
126
|
requirements: []
|
107
127
|
|
108
128
|
rubyforge_project: hocus_pocus
|
109
|
-
rubygems_version: 1.8.
|
129
|
+
rubygems_version: 1.8.11
|
110
130
|
signing_key:
|
111
131
|
specification_version: 3
|
112
132
|
summary: A magical Engine that casts a spell on your Rails 3.1 app
|
113
133
|
test_files:
|
114
134
|
- test/helper.rb
|
115
135
|
- test/test_hocus_pocus.rb
|
136
|
+
has_rdoc:
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module HocusPocus
|
2
|
-
class EditorController < ActionController::Base
|
3
|
-
# XHR
|
4
|
-
def index
|
5
|
-
#FIXME haml
|
6
|
-
@path = "#{Rails.application.root}/app/views/#{params[:template]}.html.erb"
|
7
|
-
@file = File.read @path
|
8
|
-
#FIXME extract partials
|
9
|
-
end
|
10
|
-
|
11
|
-
# XHR
|
12
|
-
def save
|
13
|
-
@file = File.open(params[:path], 'w') do |f|
|
14
|
-
f.puts params[:file]
|
15
|
-
end
|
16
|
-
# redirect_to "#{params[:uri]}", :notice => "successfully edited #{params[:path]} file!"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'rails/generators'
|
2
|
-
require 'active_record/schema_dumper'
|
3
|
-
|
4
|
-
module HocusPocus
|
5
|
-
class GeneratorController < ActionController::Base
|
6
|
-
def index
|
7
|
-
@name = params[:anything]
|
8
|
-
end
|
9
|
-
|
10
|
-
# XHR
|
11
|
-
def execute
|
12
|
-
#FIXME validate params
|
13
|
-
`#{params[:command]}`
|
14
|
-
flash.now[:notice] = "successfully executed: #{params[:command]}"
|
15
|
-
end
|
16
|
-
|
17
|
-
# XHR
|
18
|
-
def scaffold
|
19
|
-
#FIXME validate params
|
20
|
-
p options = params[:attr].select {|_k, v| v.present?}.map {|k, v| "#{v}:#{params[:type][k]}"}
|
21
|
-
execute_scaffold params[:name].dup, options
|
22
|
-
migrate
|
23
|
-
#FIXME notice doesn't appear?
|
24
|
-
# @return_path = '/' + (params[:return_path].present? ? params[:return_path] : params[:name])
|
25
|
-
@return_path = '/' + params[:name]
|
26
|
-
flash.now[:notice] = "successfully generated #{params[:name]} scaffold!"
|
27
|
-
# redirect_to "/#{return_path}", :notice => "successfully generated #{params[:name]} scaffold!"
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
def execute_scaffold(name, options)
|
32
|
-
cmd = name.include?('/') ? 'nested_scaffold' : 'scaffold'
|
33
|
-
Rails::Generators.configure!
|
34
|
-
Rails::Generators.invoke cmd, [name, options], :behavior => :invoke, :destination_root => Rails.root
|
35
|
-
end
|
36
|
-
|
37
|
-
# `rake db:migrate`
|
38
|
-
def migrate
|
39
|
-
ActiveRecord::Migrator.migrate(ActiveRecord::Migrator.migrations_path, ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
|
40
|
-
if ActiveRecord::Base.schema_format == :ruby
|
41
|
-
File.open(ENV['SCHEMA'] || "#{Rails.root}/db/schema.rb", "w") do |file|
|
42
|
-
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
data/config/routes.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
HocusPocus::Engine.routes.draw do
|
2
|
-
if HocusPocus.config.enable_generator
|
3
|
-
post '/generator/scaffold', :to => 'generator#scaffold', :as => 'scaffold_generator'
|
4
|
-
post '/generator/execute', :to => 'generator#execute', :as => 'execute_generator'
|
5
|
-
end
|
6
|
-
if HocusPocus.config.enable_editor
|
7
|
-
get '/editor', :to => 'editor#index'
|
8
|
-
post '/editor/save', :to => 'editor#save', :as => 'save_editor'
|
9
|
-
end
|
10
|
-
if HocusPocus.config.enable_scenario_recorder
|
11
|
-
delete '/spec', :to => 'spec#destroy'
|
12
|
-
end
|
13
|
-
if HocusPocus.config.enable_generator
|
14
|
-
get '/:anything', :to => 'generator#index', :constraints => {:anything => /.*/}
|
15
|
-
end
|
16
|
-
end
|