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.
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