motorhead 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +39 -0
- data/gemfiles/Gemfile-rails.4.2.x +1 -0
- data/lib/motorhead/action_view.rb +5 -4
- data/lib/motorhead/engine.rb +6 -2
- data/lib/motorhead/road_crew.rb +1 -0
- data/lib/motorhead/road_crew/app/assets/javascripts/road_crew/application.js +13 -0
- data/lib/motorhead/road_crew/app/assets/javascripts/road_crew/engine_settings.js +2 -0
- data/lib/motorhead/road_crew/app/assets/stylesheets/road_crew/application.css +15 -0
- data/lib/motorhead/road_crew/app/assets/stylesheets/road_crew/engine_settings.scss +3 -0
- data/lib/motorhead/road_crew/app/controllers/road_crew/engine_settings_controller.rb +18 -0
- data/lib/motorhead/road_crew/app/views/road_crew/_button.html.erb +11 -0
- data/lib/motorhead/road_crew/app/views/road_crew/engine_settings/index.html.erb +26 -0
- data/lib/motorhead/road_crew/config/routes.rb +4 -0
- data/lib/motorhead/road_crew/lib/road_crew.rb +2 -0
- data/lib/motorhead/road_crew/lib/road_crew/engine.rb +20 -0
- data/lib/motorhead/road_crew/road_crew.gemspec +19 -0
- data/lib/motorhead/version.rb +1 -1
- metadata +14 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 246da5136e75d7169d3ec087b9eae348b6bee1c5
|
4
|
+
data.tar.gz: b2ba78b7defc6ad3cfee28339cab1a054279c59d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 933ed54450abf427c2bc8a11b12586b930f399eb395eec12562224a1ecbadd1dcbdfe7aa3107c54ebe6138abaa438a16b0663886ec80850cdb3f75bbc6f93d56
|
7
|
+
data.tar.gz: 1bdf2fb57cdde93a48fa81e22d0bc160256217dc7a8eaa08597eb60405b8e47aa1f8310179b745f5a316a0c501c0e7039d998f66112d36e0dd68760ed2280930
|
data/README.md
CHANGED
@@ -106,6 +106,22 @@ module MyAwesomeNewFeature
|
|
106
106
|
end
|
107
107
|
```
|
108
108
|
|
109
|
+
You can configure a path to mount the Engine via `mount_at` directive. This value is defaulted to "/", which means the Engine routes will be mixed into the main app's routes.
|
110
|
+
|
111
|
+
Example:
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
# app/engines/my_awesome_new_feature/config/routes.rb
|
115
|
+
module MyAwesomeNewFeature
|
116
|
+
class Engine < ::Rails::Engine
|
117
|
+
include Motorhead::Engine
|
118
|
+
|
119
|
+
# all routes inside this Engine will be prefixed by "/harley"
|
120
|
+
mount_at 'harley'
|
121
|
+
end
|
122
|
+
end
|
123
|
+
```
|
124
|
+
|
109
125
|
### routes.rb
|
110
126
|
|
111
127
|
All routes in engines' routes.rb will be automatically prepended to the main app's Routes.
|
@@ -189,6 +205,29 @@ Example:
|
|
189
205
|
This generates a motorhead Engine in ~/app/engines/my\_awesome\_new\_feature/ directory. Plus, a controller that extends WelcomeController and implements index action inside the Engine.
|
190
206
|
|
191
207
|
|
208
|
+
## Managing Engines
|
209
|
+
|
210
|
+
Motorhead includes a tiny admin console Engine call "RoadCrew" through which you can easily enable/disable each mounted Engine.
|
211
|
+
To use this, require `'motorhead/road_crew'` when bundling motorhead gem in your Gemfile:
|
212
|
+
|
213
|
+
```ruby
|
214
|
+
# Gemfile
|
215
|
+
gem 'motorhead', path: '~/src/motorhead', require: ['motorhead', 'motorhead/road_crew']
|
216
|
+
```
|
217
|
+
|
218
|
+
then render the `road_crew/button` Engine partial to put a button inside somewhere in your view (usually in the header or footer?):
|
219
|
+
|
220
|
+
```erb
|
221
|
+
# app/views/layouts/application.html.erb
|
222
|
+
<%= render engine: 'road_crew/button' %>
|
223
|
+
```
|
224
|
+
|
225
|
+
You might also want to configure the RoadCrew Engine's `active_if` directive for security.
|
226
|
+
|
227
|
+
```ruby
|
228
|
+
# config/initializers/mh_road_crew.rb
|
229
|
+
RoadCrew::Engine.active_if { current_user.admin? }
|
230
|
+
```
|
192
231
|
|
193
232
|
|
194
233
|
|
@@ -10,3 +10,4 @@ gem 'routes_fallback', path: '../test/dummy_app/app/engines/routes_fallback'
|
|
10
10
|
gem 'italian', path: '../test/dummy_app/app/engines/italian'
|
11
11
|
gem 'spanish', path: '../test/dummy_app/app/engines/spanish'
|
12
12
|
gem 'simple_controller', path: '../test/dummy_app/app/engines/simple_controller'
|
13
|
+
gem 'mount_at_capricorn', path: '../test/dummy_app/app/engines/mount_at_capricorn'
|
@@ -4,12 +4,13 @@ ActionView::Base.class_eval do
|
|
4
4
|
if (Hash === options) && options.key?(:engine)
|
5
5
|
ext_name = options[:engine][/[^\/]*/]
|
6
6
|
if ext_name.classify.constantize::Engine.active? controller
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
view_renderer.render(self, options, &block)
|
8
|
+
elsif block
|
9
|
+
capture(&block)
|
10
10
|
end
|
11
|
+
else
|
12
|
+
render_without_motorhead options, locals, &block
|
11
13
|
end
|
12
|
-
render_without_motorhead options, locals, &block
|
13
14
|
end
|
14
15
|
|
15
16
|
alias_method_chain :render, :motorhead
|
data/lib/motorhead/engine.rb
CHANGED
@@ -3,7 +3,7 @@ module Motorhead
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
module ClassMethods
|
6
|
-
attr_accessor :on_error
|
6
|
+
attr_accessor :on_error, :mount_at
|
7
7
|
|
8
8
|
def active_if(&block)
|
9
9
|
@active_if = block
|
@@ -12,6 +12,10 @@ module Motorhead
|
|
12
12
|
def active?(controller)
|
13
13
|
controller.instance_eval(&@active_if)
|
14
14
|
end
|
15
|
+
|
16
|
+
def mount_at(path = nil)
|
17
|
+
path ? @mount_at = path : @mount_at
|
18
|
+
end
|
15
19
|
end
|
16
20
|
|
17
21
|
included do
|
@@ -20,7 +24,7 @@ module Motorhead
|
|
20
24
|
engine_kls = self
|
21
25
|
ActiveSupport.on_load :after_initialize do
|
22
26
|
Rails.application.routes.prepend do
|
23
|
-
mount engine_kls, at: '/'
|
27
|
+
mount engine_kls, at: engine_kls.mount_at || '/'
|
24
28
|
end
|
25
29
|
end
|
26
30
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'motorhead/road_crew/lib/road_crew'
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require_tree .
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any styles
|
10
|
+
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
|
11
|
+
* file per style scope.
|
12
|
+
*
|
13
|
+
*= require_tree .
|
14
|
+
*= require_self
|
15
|
+
*/
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class RoadCrew::EngineSettingsController < ActionController::Base
|
2
|
+
include Motorhead::Controller
|
3
|
+
layout false
|
4
|
+
|
5
|
+
def index
|
6
|
+
@engine_settings = JSON.parse(cookies['road_crew_engine_settings'].presence || '{}')
|
7
|
+
all_engine_names = Rails::Engine.subclasses.select {|e| e < Motorhead::Engine}.map {|e| e.parent.name} - ['RoadCrew']
|
8
|
+
# enable by default
|
9
|
+
(all_engine_names - @engine_settings.keys).each {|engine_name| @engine_settings[engine_name] = '1'}
|
10
|
+
end
|
11
|
+
|
12
|
+
def update_all
|
13
|
+
# on, off = engines.partition {|k, v| v == '1'}.map {|a| a.map {|kv| kv.first}}
|
14
|
+
engine_settings = JSON.parse(cookies['road_crew_engine_settings'].presence || '{}').merge params[:engine_setting]
|
15
|
+
cookies['road_crew_engine_settings'] = engine_settings.to_json
|
16
|
+
redirect_to request.referer
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<%= link_to '㊙️', road_crew.engine_settings_path, id: 'road_crew_button', class: 'closed', remote: true %>
|
2
|
+
<div id="road_crew_container" style="position:fixed; bottom: 0px; right: 0px"></div>
|
3
|
+
<script type="text/javascript">
|
4
|
+
(function() {
|
5
|
+
$(function() {
|
6
|
+
$("#road_crew_button").on("ajax:success", function(e, data, status, xhr) {
|
7
|
+
$("#road_crew_container").html(xhr.responseText);
|
8
|
+
})
|
9
|
+
});
|
10
|
+
}).call(this);
|
11
|
+
</script>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<div style="background-color: #fbbaaf; border: 1px solid #000; border-radius: 7px; padding: 2px;">
|
2
|
+
<div style="text-align: right;"><%= link_to '×', 'javascript: void(0);', id: 'road_crew_close' %></div>
|
3
|
+
<% if @engine_settings.any? %>
|
4
|
+
<strong>Engines List</strong><br>
|
5
|
+
<%= form_for road_crew.engine_settings_path, method: :put do %>
|
6
|
+
<% @engine_settings.each do |name, enabled| %>
|
7
|
+
<p>
|
8
|
+
<%= hidden_field_tag "engine_setting[#{name}]", '0' %><%= check_box_tag "engine_setting[#{name}]", '1', enabled == '1' %>
|
9
|
+
<label for="<%= "engine_setting_#{name}" %>"><%= name %></label>
|
10
|
+
</p>
|
11
|
+
<% end %>
|
12
|
+
<div style="text-align: center;"><%= submit_tag 'Save' %></div>
|
13
|
+
<% end %>
|
14
|
+
<% else %>
|
15
|
+
No Motorhead Engine found.
|
16
|
+
<% end %>
|
17
|
+
</div>
|
18
|
+
<script type="text/javascript">
|
19
|
+
(function() {
|
20
|
+
$(function() {
|
21
|
+
$("#road_crew_close").on("click", function(e) {
|
22
|
+
$("#road_crew_container").empty();
|
23
|
+
})
|
24
|
+
});
|
25
|
+
}).call(this);
|
26
|
+
</script>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'motorhead/engine'
|
2
|
+
|
3
|
+
module RoadCrew
|
4
|
+
class Engine < ::Rails::Engine
|
5
|
+
include Motorhead::Engine
|
6
|
+
|
7
|
+
active_if { true }
|
8
|
+
mount_at 'motorhead/road_crew'
|
9
|
+
|
10
|
+
Motorhead::Engine::ClassMethods.class_eval do
|
11
|
+
# overwrite active? to check cookie value as well
|
12
|
+
def active?(controller)
|
13
|
+
if (settings = controller.send(:cookies)['road_crew_engine_settings'])
|
14
|
+
return false if JSON.parse(settings)[controller.class.parent.name] == '0'
|
15
|
+
end
|
16
|
+
controller.instance_eval(&@active_if)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
|
3
|
+
# Describe your gem and declare its dependencies:
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "road_crew"
|
6
|
+
s.version = '0'
|
7
|
+
s.authors = [""]
|
8
|
+
s.email = [""]
|
9
|
+
s.homepage = ""
|
10
|
+
s.summary = ""
|
11
|
+
s.description = ""
|
12
|
+
s.license = "MIT"
|
13
|
+
|
14
|
+
s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"]
|
15
|
+
|
16
|
+
s.add_dependency "rails", "~> 4.2.4"
|
17
|
+
|
18
|
+
s.add_development_dependency "sqlite3"
|
19
|
+
end
|
data/lib/motorhead/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motorhead
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akira Matsuda
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -132,6 +132,18 @@ files:
|
|
132
132
|
- lib/motorhead/action_view.rb
|
133
133
|
- lib/motorhead/config.rb
|
134
134
|
- lib/motorhead/engine.rb
|
135
|
+
- lib/motorhead/road_crew.rb
|
136
|
+
- lib/motorhead/road_crew/app/assets/javascripts/road_crew/application.js
|
137
|
+
- lib/motorhead/road_crew/app/assets/javascripts/road_crew/engine_settings.js
|
138
|
+
- lib/motorhead/road_crew/app/assets/stylesheets/road_crew/application.css
|
139
|
+
- lib/motorhead/road_crew/app/assets/stylesheets/road_crew/engine_settings.scss
|
140
|
+
- lib/motorhead/road_crew/app/controllers/road_crew/engine_settings_controller.rb
|
141
|
+
- lib/motorhead/road_crew/app/views/road_crew/_button.html.erb
|
142
|
+
- lib/motorhead/road_crew/app/views/road_crew/engine_settings/index.html.erb
|
143
|
+
- lib/motorhead/road_crew/config/routes.rb
|
144
|
+
- lib/motorhead/road_crew/lib/road_crew.rb
|
145
|
+
- lib/motorhead/road_crew/lib/road_crew/engine.rb
|
146
|
+
- lib/motorhead/road_crew/road_crew.gemspec
|
135
147
|
- lib/motorhead/version.rb
|
136
148
|
- motorhead.gemspec
|
137
149
|
homepage: https://github.com/amatsuda/motorhead
|