admin_script 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/Gemfile +3 -0
- data/README.md +57 -0
- data/Rakefile +2 -0
- data/admin_script.gemspec +31 -0
- data/app/assets/javascripts/admin_script/.keep +0 -0
- data/app/assets/javascripts/admin_script/application.js +19 -0
- data/app/assets/stylesheets/admin_script/.keep +0 -0
- data/app/assets/stylesheets/admin_script/application.scss +3 -0
- data/app/controllers/.keep +0 -0
- data/app/controllers/admin_script/admin_scripts_controller.rb +40 -0
- data/app/controllers/admin_script/application_controller.rb +4 -0
- data/app/helpers/.keep +0 -0
- data/app/mailers/.keep +0 -0
- data/app/models/.keep +0 -0
- data/app/views/admin_script/admin_scripts/_default_form.html.slim +26 -0
- data/app/views/admin_script/admin_scripts/edit.html.slim +22 -0
- data/app/views/admin_script/admin_scripts/index.html.slim +15 -0
- data/app/views/layouts/admin_script/application.html.slim +20 -0
- data/config/locales/admin_script/en.yml +21 -0
- data/config/locales/admin_script/ja.yml +21 -0
- data/config/routes.rb +5 -0
- data/dummy/.gitignore +2 -0
- data/dummy/Rakefile +6 -0
- data/dummy/app/models/admin_script/expire_user_session.rb +27 -0
- data/dummy/bin/rails +4 -0
- data/dummy/config/application.rb +14 -0
- data/dummy/config/boot.rb +5 -0
- data/dummy/config/environment.rb +5 -0
- data/dummy/config/environments/development.rb +9 -0
- data/dummy/config/environments/test.rb +15 -0
- data/dummy/config/routes.rb +4 -0
- data/dummy/config/secrets.yml +22 -0
- data/dummy/config.ru +5 -0
- data/lib/admin_script/base.rb +84 -0
- data/lib/admin_script/bootstrap.rb +20 -0
- data/lib/admin_script/configuration.rb +32 -0
- data/lib/admin_script/engine.rb +40 -0
- data/lib/admin_script/type_attributes.rb +39 -0
- data/lib/admin_script/version.rb +3 -0
- data/lib/admin_script.rb +19 -0
- data/lib/generators/admin_script/controller/controller_generator.rb +21 -0
- data/lib/generators/admin_script/controller/templates/controller.rb +3 -0
- data/lib/generators/admin_script/controller/templates/layout.html.slim +21 -0
- data/lib/generators/admin_script/install/install_generator.rb +15 -0
- data/lib/generators/admin_script/install/templates/initializer.rb +14 -0
- data/lib/generators/admin_script/model/model_generator.rb +15 -0
- data/lib/generators/admin_script/model/templates/model.rb +26 -0
- data/lib/generators/admin_script/view/templates/view.html.slim +26 -0
- data/lib/generators/admin_script/view/view_generator.rb +15 -0
- data/lib/tasks/admin_script_tasks.rake +4 -0
- data/vendor/javascripts/admin_script/bootstrap-datetimepicker.min.js +2 -0
- data/vendor/javascripts/admin_script/jquery-2.2.4.min.js +4 -0
- data/vendor/javascripts/admin_script/moment-with-locales.js +12910 -0
- data/vendor/stylesheets/admin_script/_bootstrap-datetimepicker.scss +344 -0
- metadata +300 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 45a05e2bb2442cfcb8f079507a2e57f34ac4d3d9
|
4
|
+
data.tar.gz: 7053298a2a820ea581ec750924f2676b2e6445c5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 42975dd1ee0b39c165cf68cb7412b717d7b72a88ce0b142179f6f4fc298662cd6e7be1c56fe99536e1f9578b33bb8c4a97b248c178de1e712668b40cbac2ad3e
|
7
|
+
data.tar.gz: aca914a2f6fcec289192acf67dd8b6497018dcb5ca017af5185fb3b538b106cb2bf812bc3feecafb742241f1f8122b2350c68eaaaa78cd6715d6117627d7dee9
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
# AdminScript
|
2
|
+
|
3
|
+
A module for creating flexible, simple scripts for project in Rails.
|
4
|
+
|
5
|
+
<img width="1147" alt="edit_page_example" src="https://cloud.githubusercontent.com/assets/1688137/21744577/cd1d3bac-d55b-11e6-8a9d-bda96edd4d36.png">
|
6
|
+
|
7
|
+
## Why use an AdminScript?
|
8
|
+
|
9
|
+
I do not want to design RESTful resource for such scripts that run only a few times a month.
|
10
|
+
A new template is also a complete waste of time.
|
11
|
+
|
12
|
+
Therefore, AdminScript provides management page of scripts.
|
13
|
+
Only once to define model to perform a script, it generates template automatically.
|
14
|
+
No configuration of routing, controller, template and as so on needed.
|
15
|
+
|
16
|
+
## Getting Started
|
17
|
+
|
18
|
+
Add AdminScript to your Gemfile:
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
gem 'admin_script'
|
22
|
+
```
|
23
|
+
|
24
|
+
Re-bundle, then run the installer:
|
25
|
+
|
26
|
+
```
|
27
|
+
$ bundle exec rails generate admin_script:install
|
28
|
+
```
|
29
|
+
|
30
|
+
AdminScript provides a rails engine that can display listing of your scripts.
|
31
|
+
Add the following to your `config/routes.rb`
|
32
|
+
|
33
|
+
```
|
34
|
+
mount AdminScript::Engine => '/admin_scripts'
|
35
|
+
```
|
36
|
+
|
37
|
+
### Generators
|
38
|
+
|
39
|
+
When you have AdminScript installed
|
40
|
+
|
41
|
+
```
|
42
|
+
bundle exec rails generate admin_script:model awesome_script
|
43
|
+
```
|
44
|
+
|
45
|
+
...to create the `AdminScript::AwesomeScript`.
|
46
|
+
|
47
|
+
## Development
|
48
|
+
|
49
|
+
no doc
|
50
|
+
|
51
|
+
## Links
|
52
|
+
|
53
|
+
- [Wiki](https://github.com/alpaca-tc/admin_script/wiki)
|
54
|
+
|
55
|
+
## Contributing
|
56
|
+
|
57
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/alpaca-tc/admin_script.
|
data/Rakefile
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'admin_script/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'admin_script'
|
7
|
+
spec.version = AdminScript::VERSION
|
8
|
+
spec.authors = ['alpaca-tc']
|
9
|
+
spec.email = ['alpaca-tc@alpaca.tc']
|
10
|
+
spec.licenses = ['MIT']
|
11
|
+
|
12
|
+
spec.summary = %q{A module for creating flexible, simple scripts for project in Rails.}
|
13
|
+
spec.homepage = 'https://github.com/alpaca-tc/admin_script'
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
16
|
+
f.match(%r{^(test|spec|features)/})
|
17
|
+
end
|
18
|
+
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_dependency 'rails', '>= 4.1.0', '< 6.0.0'
|
22
|
+
spec.add_dependency 'method_source', '>= 0.8.0', '< 0.10.0'
|
23
|
+
spec.add_dependency 'slim-rails', '>= 3.0.0', '< 5.0.0'
|
24
|
+
spec.add_dependency 'bootstrap-sass', '>= 3.0.0', '< 5.0.0'
|
25
|
+
spec.add_dependency 'sass-rails', '>= 3.2', '< 7.0.0'
|
26
|
+
spec.add_dependency 'jquery-rails', '>= 1.0.0', '< 6.0.0'
|
27
|
+
spec.add_development_dependency 'sqlite3', '~> 1.3', '>= 1.3'
|
28
|
+
spec.add_development_dependency 'bundler', '~> 1.13', '>= 1.13'
|
29
|
+
spec.add_development_dependency 'rake', '~> 10.0', '>= 10.0'
|
30
|
+
spec.add_development_dependency 'rspec', '~> 3.0', '>= 3.0.0'
|
31
|
+
end
|
File without changes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
//= require admin_script/jquery-2.2.4.min
|
2
|
+
//= require jquery_ujs
|
3
|
+
//= require bootstrap-sprockets
|
4
|
+
//= require admin_script/moment-with-locales
|
5
|
+
//= require admin_script/bootstrap-datetimepicker.min
|
6
|
+
//= require_self
|
7
|
+
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
$(document).on('ready page:load', function() {
|
11
|
+
$('[data-behaviour~=datepicker]').datetimepicker({
|
12
|
+
showClose: true,
|
13
|
+
format: 'YYYY/MM/DD'
|
14
|
+
});
|
15
|
+
|
16
|
+
$('[data-behaviour~=datetimepicker]').datetimepicker({
|
17
|
+
showClose: true
|
18
|
+
});
|
19
|
+
});
|
File without changes
|
File without changes
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class ::AdminScript::AdminScriptsController < AdminScript.configuration.parent_controller.constantize
|
2
|
+
before_action :set_admin_script_class, only: [:edit, :update]
|
3
|
+
|
4
|
+
def index
|
5
|
+
@admin_scripts = AdminScript::Base.subclasses.sort_by(&:to_s).map(&:new)
|
6
|
+
end
|
7
|
+
|
8
|
+
def edit
|
9
|
+
@admin_script = @admin_script_class.new(admin_script_params)
|
10
|
+
end
|
11
|
+
|
12
|
+
def update
|
13
|
+
@admin_script = @admin_script_class.new(admin_script_params)
|
14
|
+
|
15
|
+
if @admin_script.perform
|
16
|
+
default_path = admin_script.routes.url_helpers.admin_scripts_path
|
17
|
+
location = @admin_script.location_url.presence || default_path
|
18
|
+
message = @admin_script.success_message.presence || t('admin_script.admin_scripts.update.successfully_performed')
|
19
|
+
|
20
|
+
redirect_to location, notice: message
|
21
|
+
else
|
22
|
+
message = @admin_script.failure_message.presence || t('admin_script.admin_scripts.update.failed_performing')
|
23
|
+
flash.now[:alert] = message
|
24
|
+
|
25
|
+
render :edit, status: :unprocessable_entity
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def admin_script_params
|
32
|
+
params.require(:admin_script).permit(@admin_script_class.type_attributes.keys)
|
33
|
+
rescue ActionController::ParameterMissing
|
34
|
+
nil
|
35
|
+
end
|
36
|
+
|
37
|
+
def set_admin_script_class
|
38
|
+
@admin_script_class = AdminScript::Base.find_class(params[:id])
|
39
|
+
end
|
40
|
+
end
|
data/app/helpers/.keep
ADDED
File without changes
|
data/app/mailers/.keep
ADDED
File without changes
|
data/app/models/.keep
ADDED
File without changes
|
@@ -0,0 +1,26 @@
|
|
1
|
+
- f.object.class.type_attributes.each do |name, type|
|
2
|
+
.form-group
|
3
|
+
- if type == :boolean
|
4
|
+
.checkbox
|
5
|
+
= f.label name, class: 'form-label'
|
6
|
+
= f.check_box name
|
7
|
+
= name
|
8
|
+
- else
|
9
|
+
= f.label name
|
10
|
+
- case type
|
11
|
+
- when :integer, :big_integer
|
12
|
+
= f.number_field name, class: 'form-control'
|
13
|
+
- when :float, :decimal
|
14
|
+
= f.number_field name, step: 0.01, class: 'form-control'
|
15
|
+
- when :string
|
16
|
+
= f.text_field name, class: 'form-control'
|
17
|
+
- when :date
|
18
|
+
= f.text_field name, class: 'form-control', data: { behaviour: 'datepicker' }
|
19
|
+
- when :datetime
|
20
|
+
= f.text_field name, class: 'form-control', data: { behaviour: 'datetimepicker' }
|
21
|
+
- when :binary
|
22
|
+
= f.file_field name, class: 'form-control'
|
23
|
+
- when :text
|
24
|
+
= f.text_field name, class: 'form-control'
|
25
|
+
- when :time
|
26
|
+
= f.time_select name, class: 'form-control'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
- content_for(:title, t('.title', id: @admin_script.to_param))
|
2
|
+
h1.page-header = yield(:title)
|
3
|
+
|
4
|
+
.panel.panel-default style='position: relative'
|
5
|
+
.panel-body
|
6
|
+
- url = AdminScript::Engine.routes.url_helpers.admin_script_path(@admin_script)
|
7
|
+
= form_for @admin_script, url: url, as: :admin_script, method: 'patch' do |f|
|
8
|
+
.form-group
|
9
|
+
= f.label :description
|
10
|
+
p = simple_format f.object.description
|
11
|
+
|
12
|
+
/ Find custom template or default template
|
13
|
+
- template = @admin_script.model_name.element
|
14
|
+
- if lookup_context.exists?(template, lookup_context.prefixes, true)
|
15
|
+
= render template, f: f
|
16
|
+
- else
|
17
|
+
= render 'admin_script/admin_scripts/default_form', f: f
|
18
|
+
|
19
|
+
= f.button t('.perform'), class: 'btn btn-default', data: { confirm: t('.confirm') }
|
20
|
+
|
21
|
+
.panel-footer
|
22
|
+
pre = @admin_script.class.script
|
@@ -0,0 +1,15 @@
|
|
1
|
+
- content_for(:title, t('.title'))
|
2
|
+
h1.page-header = yield(:title)
|
3
|
+
|
4
|
+
table.table.table-hover
|
5
|
+
thead
|
6
|
+
tr
|
7
|
+
th = AdminScript::Base.model_name.human
|
8
|
+
th = AdminScript::Base.human_attribute_name(:description)
|
9
|
+
th
|
10
|
+
tbody
|
11
|
+
- @admin_scripts.each do |instance|
|
12
|
+
tr
|
13
|
+
td = instance.to_param
|
14
|
+
td = simple_format instance.description
|
15
|
+
td = link_to t('.open'), AdminScript::Engine.routes.url_helpers.edit_admin_script_path(instance), class: 'btn btn-default'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
doctype html
|
2
|
+
html
|
3
|
+
head
|
4
|
+
meta charset='UTF-8'
|
5
|
+
meta name='referrer' content='no-referrer'
|
6
|
+
|
7
|
+
= stylesheet_link_tag 'admin_script/application', media: :all
|
8
|
+
= javascript_include_tag 'admin_script/application'
|
9
|
+
= csrf_meta_tags
|
10
|
+
|
11
|
+
title = [yield(:title).presence].compact.join(' | ')
|
12
|
+
|
13
|
+
body
|
14
|
+
.container
|
15
|
+
- { notice: :success, alert: :danger }.each do |key, type|
|
16
|
+
- if flash[key].present?
|
17
|
+
div class="alert alert-#{type}"
|
18
|
+
p = flash[key]
|
19
|
+
|
20
|
+
= yield
|
@@ -0,0 +1,21 @@
|
|
1
|
+
en:
|
2
|
+
activemodel:
|
3
|
+
models:
|
4
|
+
admin_script/base: AdminScript
|
5
|
+
|
6
|
+
attributes:
|
7
|
+
admin_script/base:
|
8
|
+
description: Description
|
9
|
+
|
10
|
+
admin_script:
|
11
|
+
admin_scripts:
|
12
|
+
index:
|
13
|
+
title: Listing of AdminScripts
|
14
|
+
open: Open
|
15
|
+
edit:
|
16
|
+
title: 'AdminScript - %{id}'
|
17
|
+
perform: Perform
|
18
|
+
confirm: Are you sure?
|
19
|
+
update:
|
20
|
+
successfully_performed: Successfully performed
|
21
|
+
failed_performing: Failed performing
|
@@ -0,0 +1,21 @@
|
|
1
|
+
ja:
|
2
|
+
activemodel:
|
3
|
+
models:
|
4
|
+
admin_script/base: AdminScript
|
5
|
+
|
6
|
+
attributes:
|
7
|
+
admin_script/base:
|
8
|
+
description: 詳細
|
9
|
+
|
10
|
+
admin_script:
|
11
|
+
admin_scripts:
|
12
|
+
index:
|
13
|
+
title: AdminScript一覧
|
14
|
+
open: 開く
|
15
|
+
edit:
|
16
|
+
title: 'AdminScript - %{id}'
|
17
|
+
perform: 実行
|
18
|
+
confirm: 実行してよろしいですか?
|
19
|
+
update:
|
20
|
+
successfully_performed: 実行しました
|
21
|
+
failed_performing: 実行できませんでした
|
data/config/routes.rb
ADDED
data/dummy/.gitignore
ADDED
data/dummy/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
module AdminScript
|
2
|
+
class ExpireUserSession < AdminScript::Base
|
3
|
+
self.description = 'Expire user session'
|
4
|
+
|
5
|
+
# Define type attribute to cast user input.
|
6
|
+
# the following defines `#id` and `#id=` as typecast method.
|
7
|
+
type_attribute :id, :integer
|
8
|
+
|
9
|
+
attr_reader :user
|
10
|
+
|
11
|
+
validates :id, :user, presence: true
|
12
|
+
before_validation :set_user
|
13
|
+
|
14
|
+
def perform
|
15
|
+
return false unless valid?
|
16
|
+
user.expire_session!
|
17
|
+
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def set_user
|
24
|
+
@user = User.find_by(id: id) if id
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/dummy/bin/rails
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'boot'
|
2
|
+
|
3
|
+
require 'action_controller/railtie'
|
4
|
+
require 'action_mailer/railtie'
|
5
|
+
require 'sprockets/railtie'
|
6
|
+
|
7
|
+
Bundler.require(*Rails.groups)
|
8
|
+
require 'admin_script'
|
9
|
+
|
10
|
+
module Dummy
|
11
|
+
class Application < Rails::Application
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Rails.application.configure do
|
2
|
+
config.cache_classes = false
|
3
|
+
config.eager_load = false
|
4
|
+
config.consider_all_requests_local = true
|
5
|
+
config.action_controller.perform_caching = false
|
6
|
+
config.active_support.deprecation = :log
|
7
|
+
config.assets.debug = true
|
8
|
+
config.assets.quiet = true
|
9
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Rails.application.configure do
|
2
|
+
config.cache_classes = true
|
3
|
+
config.eager_load = false
|
4
|
+
config.public_file_server.enabled = true
|
5
|
+
config.public_file_server.headers = {
|
6
|
+
'Cache-Control' => 'public, max-age=3600'
|
7
|
+
}
|
8
|
+
config.consider_all_requests_local = true
|
9
|
+
config.action_controller.perform_caching = false
|
10
|
+
config.action_dispatch.show_exceptions = false
|
11
|
+
config.action_controller.allow_forgery_protection = false
|
12
|
+
config.action_mailer.perform_caching = false
|
13
|
+
config.action_mailer.delivery_method = :test
|
14
|
+
config.active_support.deprecation = :stderr
|
15
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Your secret key is used for verifying the integrity of signed cookies.
|
4
|
+
# If you change this key, all old signed cookies will become invalid!
|
5
|
+
|
6
|
+
# Make sure the secret is at least 30 characters and all random,
|
7
|
+
# no regular words or you'll be exposed to dictionary attacks.
|
8
|
+
# You can use `rails secret` to generate a secure secret key.
|
9
|
+
|
10
|
+
# Make sure the secrets in this file are kept private
|
11
|
+
# if you're sharing your code publicly.
|
12
|
+
|
13
|
+
development:
|
14
|
+
secret_key_base: 3c85f8a36c79047c57b5114b03fdf81000e56d24018054ce13da8bbac0804ab352fea5eb54bb016b3a9dc948851282b1f77fbaf142d87fededbff18ecb7f46c1
|
15
|
+
|
16
|
+
test:
|
17
|
+
secret_key_base: 7661dae72742599ad1c835a4575ed5c81e757c99d29878cf9e51cfb19e46092480ed31482ebd46a9e612e56aa82842973633a00c950bdf6744d0152ce563e3b4
|
18
|
+
|
19
|
+
# Do not keep production secrets in the repository,
|
20
|
+
# instead read values from the environment.
|
21
|
+
production:
|
22
|
+
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
|
data/dummy/config.ru
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'active_support/core_ext/class/subclasses'
|
2
|
+
require 'active_model'
|
3
|
+
require 'method_source'
|
4
|
+
|
5
|
+
module AdminScript
|
6
|
+
class Base
|
7
|
+
include AdminScript::TypeAttributes
|
8
|
+
include ActiveModel::Model
|
9
|
+
include ActiveModel::Validations::Callbacks
|
10
|
+
extend ActiveModel::Callbacks
|
11
|
+
|
12
|
+
define_model_callbacks :initialize, only: :after
|
13
|
+
|
14
|
+
attr_accessor :location_url
|
15
|
+
|
16
|
+
class << self
|
17
|
+
RESERVED_CLASSE_NAMES = %w(
|
18
|
+
AdminScript::Base
|
19
|
+
AdminScript::Configuration
|
20
|
+
AdminScript::Engine
|
21
|
+
AdminScript::TypeAttributes
|
22
|
+
AdminScript::VERSION
|
23
|
+
).freeze
|
24
|
+
|
25
|
+
def inherited(subclass)
|
26
|
+
if RESERVED_CLASSE_NAMES.include?(subclass.to_s)
|
27
|
+
raise ArgumentError, "Reserved class name given. #{subclass}"
|
28
|
+
end
|
29
|
+
|
30
|
+
super
|
31
|
+
|
32
|
+
subclass.class_exec do
|
33
|
+
cattr_accessor :description
|
34
|
+
cattr_accessor :type_attributes
|
35
|
+
self.type_attributes = {}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def type_attribute(name, type)
|
40
|
+
name = name.to_sym
|
41
|
+
type = type.to_sym
|
42
|
+
|
43
|
+
define_type_attribute_accessor(name, type)
|
44
|
+
type_attributes.merge!(name => type)
|
45
|
+
end
|
46
|
+
|
47
|
+
def to_param
|
48
|
+
model_name.element
|
49
|
+
end
|
50
|
+
|
51
|
+
def find_class(element)
|
52
|
+
subclasses.find { |klass| klass.to_param == element }
|
53
|
+
end
|
54
|
+
|
55
|
+
def script
|
56
|
+
instance_method(:perform).source
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def initialize(*)
|
61
|
+
run_callbacks :initialize do
|
62
|
+
super
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_param
|
67
|
+
self.class.to_param
|
68
|
+
end
|
69
|
+
|
70
|
+
def perform
|
71
|
+
raise NotImplementedError, 'not implemented yet.'
|
72
|
+
end
|
73
|
+
|
74
|
+
def failure_message; end
|
75
|
+
|
76
|
+
def success_message; end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def url_helpers
|
81
|
+
Rails.application.routes.url_helpers
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'sass'
|
2
|
+
|
3
|
+
module AdminScript
|
4
|
+
class Bootstrap
|
5
|
+
def load!
|
6
|
+
require 'sass'
|
7
|
+
::Sass.load_paths << stylesheets_path
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def gem_path
|
13
|
+
File.expand_path('../..', File.dirname(__FILE__))
|
14
|
+
end
|
15
|
+
|
16
|
+
def stylesheets_path
|
17
|
+
File.join(gem_path, 'vendor', 'stylesheets')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'delegate'
|
2
|
+
|
3
|
+
module AdminScript
|
4
|
+
class Configuration
|
5
|
+
def self.define_configuration(name, default: nil)
|
6
|
+
define_method name do
|
7
|
+
@configurations[name]
|
8
|
+
end
|
9
|
+
|
10
|
+
define_method :"#{name}=" do |value|
|
11
|
+
@configurations[name] = value
|
12
|
+
end
|
13
|
+
|
14
|
+
default_configurations[name] = default
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.default_configurations
|
18
|
+
@default_configurations ||= {}
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
@configurations = self.class.default_configurations.clone
|
23
|
+
end
|
24
|
+
|
25
|
+
define_configuration(:admin_script_paths, default: [
|
26
|
+
(Rails.root.join('app', 'models', 'admin_script').to_s if defined?(Rails))
|
27
|
+
])
|
28
|
+
define_configuration(:parent_controller, default: 'ActionController::Base')
|
29
|
+
define_configuration(:default_url_options, default: {})
|
30
|
+
define_configuration(:controller_path, default: 'admin_scripts')
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'slim-rails'
|
2
|
+
require 'bootstrap-sass'
|
3
|
+
require 'jquery-rails'
|
4
|
+
|
5
|
+
module AdminScript
|
6
|
+
class Engine < ::Rails::Engine
|
7
|
+
isolate_namespace AdminScript
|
8
|
+
|
9
|
+
AdminScript::Bootstrap.new.load!
|
10
|
+
|
11
|
+
initializer 'admin_script.i18n' do |app|
|
12
|
+
array = Array.wrap(app.config.i18n.available_locales)
|
13
|
+
available_locales = array.blank? ? '*' : "{#{array.join ','}}"
|
14
|
+
|
15
|
+
locale_pattern = File.expand_path("../../../config/locales/admin_script/#{available_locales}.yml", __FILE__)
|
16
|
+
locale_files = Dir[locale_pattern]
|
17
|
+
|
18
|
+
app.config.i18n.load_path += locale_files
|
19
|
+
end
|
20
|
+
|
21
|
+
config.assets.paths += %w(stylesheets javascripts fonts).map do |path|
|
22
|
+
File.expand_path("../../../vendor/#{path}", __FILE__)
|
23
|
+
end
|
24
|
+
|
25
|
+
config.after_initialize do
|
26
|
+
AdminScript::Engine.routes.default_url_options = AdminScript.configuration.default_url_options.presence ||
|
27
|
+
Rails.application.routes.default_url_options
|
28
|
+
end
|
29
|
+
|
30
|
+
config.to_prepare do
|
31
|
+
AdminScript.configuration.admin_script_paths.each do |path|
|
32
|
+
finder = Pathname.new(path).join('**', '*.rb')
|
33
|
+
|
34
|
+
Dir[finder].each do |path|
|
35
|
+
require_dependency(path)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|