activeadmin-settings 0.1.0 → 0.2.1
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.
- 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
|