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,12 @@
|
|
1
|
+
module HocusPocus
|
2
|
+
module CommandLine
|
3
|
+
class CommandLineController < ActionController::Base
|
4
|
+
# XHR
|
5
|
+
def execute
|
6
|
+
#FIXME validate params
|
7
|
+
`#{params[:command]}`
|
8
|
+
flash.now[:notice] = "successfully executed: #{params[:command]}"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
File without changes
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'hocus_pocus/command_line/middleware'
|
2
|
+
|
3
|
+
module HocusPocus
|
4
|
+
module CommandLine
|
5
|
+
class Engine < ::Rails::Engine
|
6
|
+
isolate_namespace HocusPocus::CommandLine
|
7
|
+
|
8
|
+
initializer 'hocus_pocus.command_line.add middleware' do |app|
|
9
|
+
if HocusPocus.config.enable_command_line
|
10
|
+
app.middleware.insert HocusPocus::Middleware, HocusPocus::CommandLine::Middleware
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'hocus_pocus/middleware_util'
|
2
|
+
|
3
|
+
module HocusPocus
|
4
|
+
module CommandLine
|
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?
|
15
|
+
body.body = insert_text body.body, :after, /<div id="#{HocusPocus::CONTAINER}" .*?>/i, command_line_link
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def command_line_link
|
22
|
+
%Q[<a href="#" onclick="$(this).closest('div').find('div.command_line_form').toggle()">cmd</a><div class="command_line_form" style="display:none;"><form method="post" action="/hocus_pocus/command_line/execute" data-remote="true"><input type="text" name="command" placeholder="Command?" style="width: 512px;" /><input type="submit" name="run" /></form></div>]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'hocus_pocus/command_line/engine'
|
2
|
+
|
3
|
+
module HocusPocus
|
4
|
+
module CommandLine
|
5
|
+
class Railtie < ::Rails::Railtie #:nodoc:
|
6
|
+
initializer 'hocus_pocus.command_line' do |app|
|
7
|
+
ActiveSupport.on_load(:after_initialize) do
|
8
|
+
if HocusPocus.config.enable_command_line
|
9
|
+
Rails.application.routes.append do
|
10
|
+
mount HocusPocus::CommandLine::Engine, :at => '/hocus_pocus/command_line'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module HocusPocus
|
2
|
+
module Editor
|
3
|
+
class EditorController < ActionController::Base
|
4
|
+
# XHR
|
5
|
+
def index
|
6
|
+
#FIXME haml
|
7
|
+
@path = "#{Rails.application.root}/app/views/#{params[:template]}.html.erb"
|
8
|
+
@file = File.read @path
|
9
|
+
#FIXME extract partials
|
10
|
+
end
|
11
|
+
|
12
|
+
# XHR
|
13
|
+
def save
|
14
|
+
@file = File.open(params[:path], 'w') do |f|
|
15
|
+
f.puts params[:file]
|
16
|
+
end
|
17
|
+
# redirect_to "#{params[:uri]}", :notice => "successfully edited #{params[:path]} file!"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/{app/views/hocus_pocus → engines/editor/app/views/hocus_pocus/editor}/editor/_editor.html.erb
RENAMED
@@ -1,7 +1,7 @@
|
|
1
1
|
<div id="__editor__">
|
2
2
|
<h3>editing <%= @path %>...</h3>
|
3
3
|
|
4
|
-
<%= form_tag save_editor_path, :remote => true, :id => HocusPocus::EDITOR do %>
|
4
|
+
<%= form_tag save_editor_path, :remote => true, :id => HocusPocus::Editor::EDITOR do %>
|
5
5
|
<%= hidden_field_tag :path, @path %>
|
6
6
|
<%= text_area_tag :file, @file, :size => '100x30' %>
|
7
7
|
<div align="right">
|
data/{app/views/hocus_pocus → engines/editor/app/views/hocus_pocus/editor}/editor/index.js.erb
RENAMED
File without changes
|
data/{app/views/hocus_pocus → engines/editor/app/views/hocus_pocus/editor}/editor/save.js.erb
RENAMED
File without changes
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'hocus_pocus/editor/middleware'
|
2
|
+
|
3
|
+
module HocusPocus
|
4
|
+
module Editor
|
5
|
+
class Engine < ::Rails::Engine
|
6
|
+
isolate_namespace HocusPocus::Editor
|
7
|
+
|
8
|
+
initializer 'hocus_pocus.editor.add middleware' do |app|
|
9
|
+
if HocusPocus.config.enable_editor
|
10
|
+
app.middleware.insert HocusPocus::Middleware, HocusPocus::Editor::Middleware
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'hocus_pocus/middleware_util'
|
2
|
+
|
3
|
+
module HocusPocus
|
4
|
+
module Editor
|
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?
|
15
|
+
if Thread.current[HocusPocus::Editor::VIEW_FILENAME]
|
16
|
+
body.body = insert_text body.body, :after, /<div id="#{HocusPocus::CONTAINER}" .*?>/i, %Q[#{edit_link}<br>#{partials}]
|
17
|
+
Thread.current[HocusPocus::Editor::VIEW_FILENAME] = nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
def edit_link
|
25
|
+
%Q[<a href="/hocus_pocus/editor?template=#{Thread.current[HocusPocus::Editor::VIEW_FILENAME]}" data-remote="true" onclick="$(this).closest('div').find('div.partials').toggle()">edit</a>]
|
26
|
+
end
|
27
|
+
|
28
|
+
def partials
|
29
|
+
%Q[<div class="partials" style="display:none">#{(Thread.current[HocusPocus::Editor::PARTIAL_FILENAMES] || []).map(&:virtual_path).map {|v| '<a href="/hocus_pocus/editor?template=' + v + '" data-remote="true">' + v + '</a>'}.join('<br>')}</div>]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'hocus_pocus/editor/engine'
|
2
|
+
|
3
|
+
module HocusPocus
|
4
|
+
module Editor
|
5
|
+
EDITOR = :__hocus_pocus_editor__
|
6
|
+
VIEW_FILENAME = :__hocus_pocus_view_filename__
|
7
|
+
PARTIAL_FILENAMES = :__hocus_pocus_partial_filenames__
|
8
|
+
|
9
|
+
class Railtie < ::Rails::Railtie #:nodoc:
|
10
|
+
initializer 'hocus_pocus.editor' do |app|
|
11
|
+
ActiveSupport.on_load(:after_initialize) do
|
12
|
+
if HocusPocus.config.enable_editor
|
13
|
+
Rails.application.routes.append do
|
14
|
+
mount HocusPocus::Editor::Engine, :at => '/hocus_pocus/editor'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
ActiveSupport.on_load(:action_view) do
|
20
|
+
if HocusPocus.config.enable_editor
|
21
|
+
module ::ActionView
|
22
|
+
class PartialRenderer
|
23
|
+
def render_partial_with_filename_caching
|
24
|
+
(Thread.current[HocusPocus::Editor::PARTIAL_FILENAMES] ||= []) << @template unless @view.controller.class.name.starts_with?('HocusPocus::')
|
25
|
+
render_partial_without_filename_caching
|
26
|
+
end
|
27
|
+
alias_method_chain :render_partial, :filename_caching
|
28
|
+
end
|
29
|
+
|
30
|
+
class TemplateRenderer
|
31
|
+
def render_template_with_filename_caching(template, layout_name = nil, locals = {})
|
32
|
+
Thread.current[HocusPocus::Editor::VIEW_FILENAME] = template.virtual_path if @view.controller.try(:request).try(:format).try(:html?) && !@view.controller.class.name.starts_with?('HocusPocus::')
|
33
|
+
render_template_without_filename_caching template, layout_name, locals
|
34
|
+
end
|
35
|
+
alias_method_chain :render_template, :filename_caching
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'active_record/schema_dumper'
|
3
|
+
|
4
|
+
module HocusPocus
|
5
|
+
module Generator
|
6
|
+
class GeneratorController < ActionController::Base
|
7
|
+
def index
|
8
|
+
@name = params[:anything]
|
9
|
+
end
|
10
|
+
|
11
|
+
# XHR
|
12
|
+
def execute
|
13
|
+
#FIXME validate params
|
14
|
+
`#{params[:command]}`
|
15
|
+
flash.now[:notice] = "successfully executed: #{params[:command]}"
|
16
|
+
end
|
17
|
+
|
18
|
+
# XHR
|
19
|
+
def scaffold
|
20
|
+
#FIXME validate params
|
21
|
+
p options = params[:attr].select {|_k, v| v.present?}.map {|k, v| "#{v}:#{params[:type][k]}"}
|
22
|
+
execute_scaffold params[:name].dup, options
|
23
|
+
migrate
|
24
|
+
#FIXME notice doesn't appear?
|
25
|
+
# @return_path = '/' + (params[:return_path].present? ? params[:return_path] : params[:name])
|
26
|
+
@return_path = '/' + params[:name]
|
27
|
+
flash.now[:notice] = "successfully generated #{params[:name]} scaffold!"
|
28
|
+
# redirect_to "/#{return_path}", :notice => "successfully generated #{params[:name]} scaffold!"
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
def execute_scaffold(name, options)
|
33
|
+
overwriting_argv([name, options]) do
|
34
|
+
cmd = name.include?('/') ? 'nested_scaffold' : 'scaffold'
|
35
|
+
Rails::Generators.configure! Rails.application.config.generators
|
36
|
+
Rails::Generators.invoke cmd, [name, options], :behavior => :invoke, :destination_root => Rails.root
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# `rake db:migrate`
|
41
|
+
def migrate
|
42
|
+
ActiveRecord::Migrator.migrate(ActiveRecord::Migrator.migrations_path, ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
|
43
|
+
if ActiveRecord::Base.schema_format == :ruby
|
44
|
+
File.open(ENV['SCHEMA'] || "#{Rails.root}/db/schema.rb", "w") do |file|
|
45
|
+
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# a dirty workaround to make rspec-rails run
|
51
|
+
def overwriting_argv(value, &block)
|
52
|
+
original_argv = ARGV
|
53
|
+
Object.const_set :ARGV, value
|
54
|
+
block.call
|
55
|
+
ensure
|
56
|
+
Object.const_set :ARGV, original_argv
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<html>
|
2
2
|
<head>
|
3
3
|
<title>generator</title>
|
4
|
-
|
5
|
-
|
4
|
+
<%= javascript_include_tag 'application' %>
|
5
|
+
<%= csrf_meta_tags %>
|
6
6
|
<script type="text/javascript">
|
7
7
|
$('#add_attr_type').live('click', function() {
|
8
8
|
var i = $('#attr_type input').length;
|
@@ -13,7 +13,7 @@
|
|
13
13
|
</head>
|
14
14
|
<body>
|
15
15
|
<h1>generate scaffold</h1>
|
16
|
-
<%= form_tag scaffold_generator_path, :remote => true
|
16
|
+
<%= form_tag scaffold_generator_path, :remote => true do %>
|
17
17
|
<% if @name.include? '_' %>
|
18
18
|
g scaffold
|
19
19
|
<%= select_tag :name, options_for_select([@name, @name.gsub('_', '/')]) %>
|
File without changes
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'hocus_pocus/generator/engine'
|
2
|
+
|
3
|
+
module HocusPocus
|
4
|
+
module Generator
|
5
|
+
class Railtie < ::Rails::Railtie #:nodoc:
|
6
|
+
initializer 'hocus_pocus.generator' do |app|
|
7
|
+
ActiveSupport.on_load(:after_initialize) do
|
8
|
+
if HocusPocus.config.enable_generator
|
9
|
+
Rails.application.routes.append do
|
10
|
+
mount HocusPocus::Generator::Engine, :at => '/'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
ActiveSupport.on_load(:action_view) do
|
16
|
+
if HocusPocus.config.enable_generator
|
17
|
+
class ::ActionView::Base
|
18
|
+
def method_missing(method, args = {}, &blk)
|
19
|
+
if method.to_s =~ /(new_|edit_)?(.*)(_path|_url)\z/
|
20
|
+
# to avoid DoubleRenderError
|
21
|
+
controller.instance_variable_set :@_response_body, nil
|
22
|
+
#FIXME preserve args
|
23
|
+
controller.redirect_to "/#{$2.pluralize}?return_path=#{method}(#{args})"
|
24
|
+
else
|
25
|
+
super
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
$('#<%= HocusPocus::CONTAINER %> div.spec').toggle().html('<pre><%= escape_javascript(flash[HocusPocus::Recorder::SPEC]) + '\n end' if flash[HocusPocus::Recorder::SPEC] %></pre><div align="right"><a href="/hocus_pocus/recorder" data-remote="true" data-method="delete">Clear</a></div></div>')
|
@@ -0,0 +1,10 @@
|
|
1
|
+
$('form').live 'submit', ->
|
2
|
+
scenario = [" scenario 'GENERATED' do"]
|
3
|
+
scenario.push " visit '#{window.location.pathname}'"
|
4
|
+
$(this).find('input[type=text],input[type=email],input[type=url],input[type=number],input[type=search],textarea').each ->
|
5
|
+
scenario.push " fill_in '#{$(this).attr('id')}', :with => '#{$(this).val()}'"
|
6
|
+
$(this).find('select').each ->
|
7
|
+
scenario.push " select '#{$(this).children(':selected').text()}', :from => '#{$(this).attr('id')}'"
|
8
|
+
scenario.push " click_button '#{$(this).find('input[type=submit]').val()}'"
|
9
|
+
$(this).append '<textarea id="<%= HocusPocus::Recorder::SPEC %>" name="<%= HocusPocus::Recorder::SPEC %>" style="height: 0px; width: 0px;" />'
|
10
|
+
$('#<%= HocusPocus::Recorder::SPEC %>').val(scenario.join('\n'))
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'hocus_pocus/recorder/middleware'
|
2
|
+
|
3
|
+
module HocusPocus
|
4
|
+
module Recorder
|
5
|
+
class Engine < ::Rails::Engine
|
6
|
+
isolate_namespace HocusPocus::Recorder
|
7
|
+
|
8
|
+
initializer 'hocus_pocus.recorder.add middleware' do |app|
|
9
|
+
if HocusPocus.config.enable_scenario_recorder
|
10
|
+
app.middleware.insert HocusPocus::Middleware, HocusPocus::Recorder::Middleware
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module HocusPocus
|
2
|
+
module Recorder
|
3
|
+
class Filter
|
4
|
+
def self.before(controller)
|
5
|
+
# (controller.flash[HocusPocus::Recorder::SPEC] ||= '') << controller.params.delete(HocusPocus::Recorder::SPEC) if controller.params[HocusPocus::Recorder::SPEC]
|
6
|
+
controller.flash[HocusPocus::Recorder::SPEC] = controller.params.delete HocusPocus::Recorder::SPEC if controller.params[HocusPocus::Recorder::SPEC]
|
7
|
+
controller.flash.keep HocusPocus::Recorder::SPEC
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|