activeadmin-settings 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.md +11 -1
- data/activeadmin-settings.gemspec +0 -3
- data/app/controller/activeadmin_settings/admin_users_controller.rb +27 -0
- data/app/controller/activeadmin_settings/settings_controller.rb +12 -0
- data/app/views/admin/settings/_admin.html.erb +42 -0
- data/app/views/admin/settings/_admin_form.html.erb +22 -0
- data/app/views/admin/settings/_admins_table.html.erb +16 -0
- data/app/views/admin/settings/_index.html.erb +20 -0
- data/app/views/admin/settings/_settings_table.html.erb +48 -0
- data/config/routes.rb +4 -0
- data/lib/activeadmin-settings.rb +22 -3
- data/lib/activeadmin-settings/helper.rb +5 -2
- data/lib/activeadmin-settings/version.rb +1 -1
- data/lib/generators/activeadmin_settings/install_generator.rb +4 -5
- data/lib/generators/activeadmin_settings/templates/admin/settings.rb +17 -38
- data/lib/generators/activeadmin_settings/templates/config/activeadmin_settings.yml +8 -6
- data/lib/generators/activeadmin_settings/templates/models/setting.rb +3 -3
- data/lib/tasks/activeadmin_settings.rake +15 -0
- data/vendor/assets/javascripts/activeadmin_settings.js.coffee +2 -32
- data/vendor/assets/javascripts/activeadmin_settings/admins.js.coffee +80 -0
- data/vendor/assets/javascripts/activeadmin_settings/flashes.js.coffee +6 -0
- data/vendor/assets/javascripts/activeadmin_settings/settings.js.coffee +32 -0
- data/vendor/assets/javascripts/activeadmin_settings/tabs.js.coffee +6 -0
- data/vendor/assets/javascripts/jquery.easytabs.js +679 -0
- data/vendor/assets/stylesheets/activeadmin_settings.css.scss +14 -1
- metadata +16 -5
- data/app/views/admin/settings/_value.html.erb +0 -21
- data/lib/generators/activeadmin_settings/templates/admin/admin_users.rb +0 -23
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
1
|
## activeadmin-settings
|
2
2
|
|
3
|
-
Easy to use general purpose settings backend for activeadmin.
|
3
|
+
Easy to use general purpose settings backend for activeadmin.
|
4
|
+
|
5
|
+
### Installation
|
6
|
+
|
7
|
+
Add to `Gemfile`:
|
8
|
+
|
9
|
+
gem "activeadmin-settings"
|
10
|
+
|
11
|
+
Run installer:
|
12
|
+
|
13
|
+
$ rails g activeadmin_settings:install
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class ActiveadminSettings::AdminUsersController < ApplicationController
|
2
|
+
before_filter :authenticate_admin_user!
|
3
|
+
|
4
|
+
def update
|
5
|
+
@object = AdminUser.find(params[:id])
|
6
|
+
if @object.update_attributes(params[:admin_user])
|
7
|
+
render :text => "ok"
|
8
|
+
else
|
9
|
+
render :text => @object.errors.to_json, :status => :unprocessable_entity
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
@object = AdminUser.new(params[:admin_user])
|
15
|
+
if @object.save
|
16
|
+
render :partial => "admin/settings/admin", :locals => {:admin => @object}, :layout => false
|
17
|
+
else
|
18
|
+
render :text => @object.errors.to_json, :status => :unprocessable_entity
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def destroy
|
23
|
+
@object = AdminUser.find(params[:id])
|
24
|
+
@object.destroy
|
25
|
+
redirect_to "/admin/settings#admins"
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class ActiveadminSettings::SettingsController < ApplicationController
|
2
|
+
before_filter :authenticate_admin_user!
|
3
|
+
|
4
|
+
def update
|
5
|
+
@object = ActiveadminSettings::Setting.find(params[:id])
|
6
|
+
if @object.update_attributes(params[:setting])
|
7
|
+
render :text => @object.value
|
8
|
+
else
|
9
|
+
render :text => "error"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<tr class="odd admin" id="admin_<%= admin.id %>">
|
2
|
+
<td class="">
|
3
|
+
<strong><%= admin.email %></strong>
|
4
|
+
<div class="form">
|
5
|
+
<br/>
|
6
|
+
<%= semantic_form_for admin,
|
7
|
+
:method => :put,
|
8
|
+
:url => "/admin/admin_users/#{admin.id}" do |f| %>
|
9
|
+
<%= f.inputs do %>
|
10
|
+
<%= f.input :password, :as => :password, :required => true %>
|
11
|
+
<%= f.input :password_confirmation, :as => :password, :required => true %>
|
12
|
+
<% end %>
|
13
|
+
<% end %>
|
14
|
+
</div>
|
15
|
+
</td>
|
16
|
+
<td>
|
17
|
+
<span class="admin_actions">
|
18
|
+
<a href="#" class="member_link credentials_link"
|
19
|
+
data-id="#admin_<%= admin.id %>">
|
20
|
+
Credentials
|
21
|
+
</a>
|
22
|
+
<a href="/admin/admin_users/<%= admin.id %>"
|
23
|
+
class="member_link delete_link"
|
24
|
+
data-method="delete"
|
25
|
+
data-confirm="Are you sure?"
|
26
|
+
data-id="#admin_<%= admin.id %>">
|
27
|
+
Delete
|
28
|
+
</a>
|
29
|
+
</span>
|
30
|
+
|
31
|
+
<span class="form_actions">
|
32
|
+
<a href="#" class="member_link update_link"
|
33
|
+
data-id="#admin_<%= admin.id %>">
|
34
|
+
Update
|
35
|
+
</a>
|
36
|
+
<a href="#" class="member_link cancel_link"
|
37
|
+
data-id="#admin_<%= admin.id %>">
|
38
|
+
Cancel
|
39
|
+
</a>
|
40
|
+
</span>
|
41
|
+
</td>
|
42
|
+
</tr>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<tr class="odd">
|
2
|
+
<td class="">
|
3
|
+
<div class="form new_admin">
|
4
|
+
<%= semantic_form_for AdminUser.new,
|
5
|
+
:method => :post,
|
6
|
+
:url => "/admin/admin_users" do |f| %>
|
7
|
+
<%= f.inputs do %>
|
8
|
+
<%= f.input :email, :required => true %>
|
9
|
+
<%= f.input :password, :required => true %>
|
10
|
+
<%= f.input :password_confirmation, :required => true %>
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
13
|
+
</div>
|
14
|
+
</td>
|
15
|
+
<td class="new_admin_actions">
|
16
|
+
<a href="#" class="member_link new_link">New Admin</a>
|
17
|
+
<span class="form_actions">
|
18
|
+
<a href="#" class="member_link create_link">Create</a>
|
19
|
+
<a href="#" class="member_link cancel_link">Cancel</a>
|
20
|
+
</span>
|
21
|
+
</td>
|
22
|
+
</tr>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<table border="0"
|
2
|
+
cellspacing="0"
|
3
|
+
cellpadding="0"
|
4
|
+
id="admins"
|
5
|
+
class="index_table index">
|
6
|
+
<thead>
|
7
|
+
<tr>
|
8
|
+
<th class="">Email</th>
|
9
|
+
<th class=""></th>
|
10
|
+
</tr>
|
11
|
+
</thead>
|
12
|
+
<tbody>
|
13
|
+
<%= render :partial => "admin", :collection => admins %>
|
14
|
+
<%= render :partial => "admin_form" %>
|
15
|
+
</tbody>
|
16
|
+
</table>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<div id="settings_tabs">
|
2
|
+
<ul class="tabs table_tools_segmented_control">
|
3
|
+
<% groups.each do |g| %>
|
4
|
+
<li>
|
5
|
+
<a class="table_tools_button" href="#<%= g[:slug] %>"><%= g[:name] %></a>
|
6
|
+
</li>
|
7
|
+
<% end %>
|
8
|
+
<li><a class="table_tools_button" href="#admins">Admins</a></li>
|
9
|
+
</ul>
|
10
|
+
|
11
|
+
<% groups.each do |g| %>
|
12
|
+
<div id="<%= g[:slug] %>">
|
13
|
+
<%= render :partial => "settings_table", :locals => {:settings => g[:settings]} %>
|
14
|
+
</div>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<div id="admins">
|
18
|
+
<%= render :partial => "admins_table", :locals => {:admins => admins} %>
|
19
|
+
</div>
|
20
|
+
</div>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
<table border="0"
|
2
|
+
cellspacing="0"
|
3
|
+
cellpadding="0"
|
4
|
+
id="settings"
|
5
|
+
class="index_table index">
|
6
|
+
<thead>
|
7
|
+
<tr>
|
8
|
+
<th class="">Name</th>
|
9
|
+
<th class="">Value</th>
|
10
|
+
<th class=""></th>
|
11
|
+
</tr>
|
12
|
+
</thead>
|
13
|
+
<tbody>
|
14
|
+
<% settings.each do |setting| %>
|
15
|
+
<tr class="odd" id="setting_<%= setting.id %>">
|
16
|
+
<td class="">
|
17
|
+
<strong><%= setting.name %></strong></br>
|
18
|
+
<em><%= setting.description %></em>
|
19
|
+
</td>
|
20
|
+
<td class="">
|
21
|
+
<div class="form <%= setting.type %>">
|
22
|
+
<%= semantic_form_for setting,
|
23
|
+
:method => :put,
|
24
|
+
:url => "/admin/settings/#{setting.id}" do |f| %>
|
25
|
+
<%= f.inputs do %>
|
26
|
+
<% case setting.type %>
|
27
|
+
<% when "file" %>
|
28
|
+
<%= f.input :file, :hint => setting.value %>
|
29
|
+
<%= f.input :remove_file, :as => :boolean %>
|
30
|
+
<% when "text" %>
|
31
|
+
<%= f.input :string, :as => :text %>
|
32
|
+
<% else %>
|
33
|
+
<%= f.input :string, :placeholder => "Default: " + setting.default_value %>
|
34
|
+
<% end %>
|
35
|
+
<% end %>
|
36
|
+
<% end %>
|
37
|
+
</div>
|
38
|
+
</td>
|
39
|
+
<td class="">
|
40
|
+
<a href="#" class="member_link update_link"
|
41
|
+
data-id="#setting_<%= setting.id %>">
|
42
|
+
Update
|
43
|
+
</a>
|
44
|
+
</td>
|
45
|
+
</tr>
|
46
|
+
<% end %>
|
47
|
+
</tbody>
|
48
|
+
</table>
|
data/config/routes.rb
ADDED
data/lib/activeadmin-settings.rb
CHANGED
@@ -4,13 +4,32 @@ module ActiveadminSettings
|
|
4
4
|
require 'activeadmin-settings/engine'
|
5
5
|
require 'activeadmin-settings/helper'
|
6
6
|
|
7
|
-
def self.
|
7
|
+
def self.load_config
|
8
8
|
config_file = ::Rails.root.join("config/activeadmin_settings.yml")
|
9
|
-
@
|
9
|
+
@load_config = {}
|
10
10
|
|
11
11
|
if File.exists?(config_file)
|
12
12
|
data = YAML::load(ERB.new(IO.read(config_file)).result)
|
13
|
-
@
|
13
|
+
@load_config = data if data
|
14
14
|
end
|
15
15
|
end
|
16
|
+
|
17
|
+
def self.all_settings
|
18
|
+
@all_settings = {}
|
19
|
+
load_config.each do |key, settings|
|
20
|
+
@all_settings.merge!(settings)
|
21
|
+
end
|
22
|
+
@all_settings
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.groups
|
26
|
+
@groups = []
|
27
|
+
load_config.each do |key, settings|
|
28
|
+
@groups << { :name => key,
|
29
|
+
:slug => key.downcase.gsub(" ", "_"),
|
30
|
+
:default_settings => settings,
|
31
|
+
:settings => [] }
|
32
|
+
end
|
33
|
+
@groups
|
34
|
+
end
|
16
35
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module ActiveadminSettings
|
2
2
|
module Helpers
|
3
|
-
def
|
3
|
+
def settings_value(name)
|
4
4
|
Setting.find_or_create_by(name: name).value
|
5
5
|
end
|
6
6
|
|
7
|
-
def
|
7
|
+
def settings_link_value(name, html_options={})
|
8
8
|
val = Setting.find_or_create_by(name: name).value
|
9
9
|
|
10
10
|
if not val.empty? # add regular expression check here
|
@@ -15,5 +15,8 @@ module ActiveadminSettings
|
|
15
15
|
link_to(title, url, html_options)
|
16
16
|
end
|
17
17
|
end
|
18
|
+
|
19
|
+
module_function :settings_value, :settings_link_value
|
18
20
|
end
|
19
21
|
end
|
22
|
+
|
@@ -16,7 +16,6 @@ module ActiveadminSettings
|
|
16
16
|
|
17
17
|
# admin
|
18
18
|
puts "Installing admin:"
|
19
|
-
copy_file "admin/admin_users.rb", "app/admin/admin_users.rb"
|
20
19
|
copy_file "admin/settings.rb", "app/admin/settings.rb"
|
21
20
|
|
22
21
|
# config
|
@@ -24,6 +23,10 @@ module ActiveadminSettings
|
|
24
23
|
copy_file "config/activeadmin_settings.yml", "config/activeadmin_settings.yml"
|
25
24
|
end
|
26
25
|
|
26
|
+
def mount_engine
|
27
|
+
route "mount ActiveadminSettings::Engine => '/admin'"
|
28
|
+
end
|
29
|
+
|
27
30
|
def add_assets
|
28
31
|
if File.exist?('app/assets/javascripts/active_admin.js')
|
29
32
|
insert_into_file "app/assets/javascripts/active_admin.js",
|
@@ -39,10 +42,6 @@ module ActiveadminSettings
|
|
39
42
|
puts "It doesn't look like you've installed activeadmin: active_admin.scss is missing.\nPlease install it and try again."
|
40
43
|
end
|
41
44
|
end
|
42
|
-
|
43
|
-
def add_gems
|
44
|
-
gem "activeadmin-mongoid-reorder"
|
45
|
-
end
|
46
45
|
end
|
47
46
|
end
|
48
47
|
end
|
@@ -1,44 +1,23 @@
|
|
1
|
-
ActiveAdmin.
|
2
|
-
|
1
|
+
ActiveAdmin.register_page "Settings" do
|
2
|
+
content do
|
3
|
+
# Mergin db settings objects and default values
|
4
|
+
# from config/activaadmin_settings.yml file.
|
3
5
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
def update
|
8
|
-
update! do |format|
|
9
|
-
format.html { render :text => resource.value }
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
index :as => :reorder_table do
|
15
|
-
column :name do |s|
|
16
|
-
"<strong>#{s.name}</strong><br/><em>#{s.description}</em>".html_safe
|
17
|
-
end
|
18
|
-
|
19
|
-
column :value do |s|
|
20
|
-
render :partial => "value", :locals => {:setting => s}
|
6
|
+
all_settings = {}
|
7
|
+
ActiveadminSettings::Setting.all.each do |s|
|
8
|
+
all_settings[s.name] = s
|
21
9
|
end
|
22
10
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
form do |f|
|
31
|
-
f.inputs do
|
32
|
-
f.input :name
|
33
|
-
f.input :type
|
34
|
-
f.input :description
|
35
|
-
f.input :string
|
11
|
+
groups = ActiveadminSettings.groups
|
12
|
+
groups.each do |g|
|
13
|
+
g[:default_settings].each_key do |name|
|
14
|
+
s = all_settings[name]
|
15
|
+
g[:settings] << s if s
|
16
|
+
end
|
36
17
|
end
|
37
18
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
collection_action :reorder, :method => :put do
|
42
|
-
render :text => resource_class.reorder_objects(params[:ids])
|
19
|
+
render :partial => "index",
|
20
|
+
:locals => { :admins => AdminUser.all,
|
21
|
+
:groups => groups}
|
43
22
|
end
|
44
|
-
end
|
23
|
+
end
|
@@ -3,13 +3,15 @@
|
|
3
3
|
# ---configuration file v1.0---
|
4
4
|
# ================================================================================
|
5
5
|
#
|
6
|
-
# This file is used to store a list of activeadmin settings.
|
7
|
-
#
|
6
|
+
# This file is used to store a list of activeadmin settings. Settings are split
|
7
|
+
# into groups like this:
|
8
|
+
#
|
8
9
|
# Here is a setting template:
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
10
|
+
# General Group:
|
11
|
+
# Setting Title:
|
12
|
+
# type: string (default) / text / file / link
|
13
|
+
# description: setting one sentence description
|
14
|
+
# default_value: default value is used when setting value is blank
|
13
15
|
#
|
14
16
|
# Type details:
|
15
17
|
# Link setting value expected to be in a format of: (link title) http://link.url
|
@@ -18,15 +18,15 @@ class ActiveadminSettings::Setting
|
|
18
18
|
|
19
19
|
# Instance
|
20
20
|
def type
|
21
|
-
ActiveadminSettings.
|
21
|
+
ActiveadminSettings.all_settings[name]["type"] ||= "string"
|
22
22
|
end
|
23
23
|
|
24
24
|
def description
|
25
|
-
ActiveadminSettings.
|
25
|
+
ActiveadminSettings.all_settings[name]["description"] ||= ""
|
26
26
|
end
|
27
27
|
|
28
28
|
def default_value
|
29
|
-
ActiveadminSettings.
|
29
|
+
ActiveadminSettings.all_settings[name]["default_value"] ||= ""
|
30
30
|
end
|
31
31
|
|
32
32
|
def value
|
@@ -8,4 +8,19 @@ namespace :activeadmin do
|
|
8
8
|
email: admin@example.com
|
9
9
|
password: password"
|
10
10
|
end
|
11
|
+
|
12
|
+
desc "Add missing settings from activeadmin_settings.yml file to the db"
|
13
|
+
task :add_settings => :environment do
|
14
|
+
ActiveadminSettings.all_settings.each_key |name|
|
15
|
+
Setting.find_or_create_by(name: name)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "Add settings from activeadmin_settings.yml file to the db"
|
20
|
+
task :flush_settings => :environment do
|
21
|
+
ActiveadminSettings::Setting.all.destroy
|
22
|
+
ActiveadminSettings.all_settings.each_key |name|
|
23
|
+
Setting.find_or_create_by(name: name)
|
24
|
+
end
|
25
|
+
end
|
11
26
|
end
|