hocus_pocus 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/engines/command_line/app/controllers/hocus_pocus/command_line/command_line_controller.rb +12 -0
  2. data/{app/views/hocus_pocus/generator → engines/command_line/app/views/hocus_pocus/command_line/command_line}/execute.js.erb +0 -0
  3. data/engines/command_line/config/routes.rb +3 -0
  4. data/engines/command_line/lib/hocus_pocus/command_line/engine.rb +15 -0
  5. data/engines/command_line/lib/hocus_pocus/command_line/middleware.rb +26 -0
  6. data/engines/command_line/lib/hocus_pocus/command_line/railtie.rb +17 -0
  7. data/engines/editor/app/controllers/hocus_pocus/editor/editor_controller.rb +21 -0
  8. data/{app/views/hocus_pocus → engines/editor/app/views/hocus_pocus/editor}/editor/_editor.html.erb +1 -1
  9. data/{app/views/hocus_pocus → engines/editor/app/views/hocus_pocus/editor}/editor/index.js.erb +0 -0
  10. data/{app/views/hocus_pocus → engines/editor/app/views/hocus_pocus/editor}/editor/save.js.erb +0 -0
  11. data/engines/editor/config/routes.rb +4 -0
  12. data/engines/editor/lib/hocus_pocus/editor/engine.rb +15 -0
  13. data/engines/editor/lib/hocus_pocus/editor/middleware.rb +33 -0
  14. data/engines/editor/lib/hocus_pocus/editor/railtie.rb +43 -0
  15. data/engines/generator/app/controllers/hocus_pocus/generator/generator_controller.rb +60 -0
  16. data/engines/generator/app/helpers/hocus_pocus/generator/generator_helper.rb +9 -0
  17. data/{app/views/hocus_pocus → engines/generator/app/views/hocus_pocus/generator}/generator/index.html.erb +3 -3
  18. data/{app/views/hocus_pocus → engines/generator/app/views/hocus_pocus/generator}/generator/scaffold.js.erb +0 -0
  19. data/engines/generator/config/routes.rb +5 -0
  20. data/engines/generator/lib/hocus_pocus/generator/engine.rb +7 -0
  21. data/engines/generator/lib/hocus_pocus/generator/railtie.rb +34 -0
  22. data/engines/recorder/app/controllers/hocus_pocus/recorder/recorder_controller.rb +15 -0
  23. data/{app/views/hocus_pocus/spec → engines/recorder/app/views/hocus_pocus/recorder/recorder}/destroy.js.erb +0 -0
  24. data/engines/recorder/app/views/hocus_pocus/recorder/recorder/index.js.erb +1 -0
  25. data/engines/recorder/config/routes.rb +4 -0
  26. data/engines/recorder/lib/assets/javascripts/recorder.js.coffee.erb +10 -0
  27. data/engines/recorder/lib/hocus_pocus/recorder/engine.rb +15 -0
  28. data/engines/recorder/lib/hocus_pocus/recorder/filter.rb +11 -0
  29. data/engines/recorder/lib/hocus_pocus/recorder/middleware.rb +32 -0
  30. data/engines/recorder/lib/hocus_pocus/recorder/railtie.rb +27 -0
  31. data/hocus_pocus.gemspec +1 -1
  32. data/lib/generators/hocus_pocus/config_generator.rb +1 -1
  33. data/lib/hocus_pocus.rb +1 -1
  34. data/lib/hocus_pocus/engine.rb +6 -3
  35. data/lib/hocus_pocus/middleware.rb +19 -0
  36. data/lib/hocus_pocus/middleware_util.rb +17 -0
  37. data/lib/hocus_pocus/railtie.rb +7 -44
  38. data/lib/hocus_pocus/version.rb +1 -1
  39. metadata +43 -22
  40. data/app/controllers/hocus_pocus/application_controller.rb +0 -4
  41. data/app/controllers/hocus_pocus/editor_controller.rb +0 -19
  42. data/app/controllers/hocus_pocus/generator_controller.rb +0 -47
  43. data/app/controllers/hocus_pocus/spec_controller.rb +0 -8
  44. data/app/helpers/hocus_pocus/application_helper.rb +0 -4
  45. data/app/helpers/hocus_pocus/generator_helper.rb +0 -7
  46. data/config/routes.rb +0 -16
  47. data/lib/hocus_pocus/filter.rb +0 -102
  48. 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']
@@ -5,7 +5,7 @@ module HocusPocus
5
5
 
6
6
  desc <<DESC
7
7
  Description:
8
- Copies hobus_pocus configuration file to your application's initializer directory.
8
+ Copies hocus_pocus configuration file to your application's initializer directory.
9
9
  DESC
10
10
 
11
11
  def copy_config_file
data/lib/hocus_pocus.rb CHANGED
@@ -1 +1 @@
1
- require File.join(File.dirname(__FILE__), 'hocus_pocus/railtie')
1
+ require 'hocus_pocus/railtie'
@@ -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
- # initializer 'add middleware' do |app|
6
+
7
+ initializer 'hocus_pocus.add middleware' do |app|
5
8
  # app.middleware.use HocusPocus::RouteMissing
6
- # app.middleware.use HocusPocus::ContentAppender
7
- # end
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
@@ -1,53 +1,16 @@
1
1
  require 'rails'
2
- require File.join(File.dirname(__FILE__), 'config')
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
@@ -1,3 +1,3 @@
1
1
  module HocusPocus
2
- VERSION = '0.1.3'
2
+ VERSION = '0.2.0'
3
3
  end
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: 29
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 3
10
- version: 0.1.3
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-09-16 00:00:00 Z
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/application_controller.rb
54
- - app/controllers/hocus_pocus/editor_controller.rb
55
- - app/controllers/hocus_pocus/generator_controller.rb
56
- - app/controllers/hocus_pocus/spec_controller.rb
57
- - app/helpers/hocus_pocus/application_helper.rb
58
- - app/helpers/hocus_pocus/generator_helper.rb
59
- - app/views/hocus_pocus/editor/_editor.html.erb
60
- - app/views/hocus_pocus/editor/index.js.erb
61
- - app/views/hocus_pocus/editor/save.js.erb
62
- - app/views/hocus_pocus/generator/execute.js.erb
63
- - app/views/hocus_pocus/generator/index.html.erb
64
- - app/views/hocus_pocus/generator/scaffold.js.erb
65
- - app/views/hocus_pocus/spec/destroy.js.erb
66
- - config/routes.rb
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/filter.rb
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.9
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,4 +0,0 @@
1
- module HocusPocus
2
- class ApplicationController < ActionController::Base
3
- end
4
- end
@@ -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
@@ -1,8 +0,0 @@
1
- module HocusPocus
2
- class SpecController < ActionController::Base
3
- # XHR
4
- def destroy
5
- flash.discard HocusPocus::SPEC
6
- end
7
- end
8
- end
@@ -1,4 +0,0 @@
1
- module HocusPocus
2
- module ApplicationHelper
3
- end
4
- end
@@ -1,7 +0,0 @@
1
- module HocusPocus
2
- module GeneratorHelper
3
- def type_select(field_name, options = {})
4
- select_tag field_name, options_for_select(%w[string text integer float decimal datetime time date boolean references]), options
5
- end
6
- end
7
- 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