created template selecting

This commit is contained in:
Senad Uka
2016-02-21 11:59:13 +01:00
parent 7af44a6245
commit 709ce3e38c
46 changed files with 584 additions and 20 deletions

View File

@@ -13,6 +13,5 @@
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
//= require active_scaffold
//= require bootstrap-sprockets

View File

@@ -0,0 +1,7 @@
$(document).ready(function() {
$(".template-selection").click( function(event) {
var templateId = event.target.id.match(/\d/g).join("");
$("#template_id").val(templateId);
$("#create_from_template_form").submit();
});
});

View File

@@ -18,12 +18,48 @@
color: green;
}
.server-thumbnail {
margin: 15px;
padding: 15px;
cursor: pointer;
}
.server-icon:hover {
border-style: solid;
border-width: 1px;
border-color: gray;
}
.server-icon {
border-style: none;
border-width: 0px;
}
.server-name {
margin-top: 5px;
text-transform: uppercase;
font-size: 16px !important;
text-align: center;
}
.template-description {
vertical-align: middle;
}
.template-selection {
cursor: pointer;
border-style: none;
border-width: 0px;
}
.template-selection:hover {
cursor: pointer;
border-style: solid;
border-width: 1px;
border-color: gray;
}
body {
margin-right: 5px;
margin-left: 5px;
}

View File

@@ -0,0 +1,16 @@
class ConfigurationFilesController < ApplicationController
before_filter :selected_server, only: [:new, :edit]
active_scaffold :"configuration_file" do |conf|
conf.columns[:file_type].form_ui = :select
end
def selected_server
@server = Server.find(params[:server_id])
@templates = ConfigurationTemplate.order(:name).all
end
def create_from_template
template = ConfigurationTemplate.find(params[:template_id])
end
end

View File

@@ -0,0 +1,4 @@
class ConfigurationTemplatesController < ApplicationController
active_scaffold :"configuration_template" do |conf|
end
end

View File

@@ -0,0 +1,4 @@
class FileTypesController < ApplicationController
active_scaffold :"file_type" do |conf|
end
end

View File

@@ -0,0 +1,4 @@
class FileVersionsController < ApplicationController
active_scaffold :"file_version" do |conf|
end
end

View File

@@ -0,0 +1,2 @@
module ConfigurationFilesHelper
end

View File

@@ -0,0 +1,2 @@
module ConfigurationTemplatesHelper
end

View File

@@ -0,0 +1,2 @@
module FileTypesHelper
end

View File

@@ -0,0 +1,2 @@
module FileVersionsHelper
end

View File

@@ -0,0 +1,5 @@
module Iconizable
def safe_icon
icon or 'chub.png'
end
end

View File

@@ -0,0 +1,5 @@
class ConfigurationFile < ActiveRecord::Base
belongs_to :server
belongs_to :file_type
has_many :file_versions
end

View File

@@ -0,0 +1,6 @@
class ConfigurationTemplate < ActiveRecord::Base
belongs_to :operating_system
belongs_to :file_type
include Iconizable
end

View File

@@ -0,0 +1,3 @@
class FileType < ActiveRecord::Base
has_many :configuration_files
end

View File

@@ -0,0 +1,3 @@
class FileVersion < ActiveRecord::Base
belongs_to :configuration_file
end

View File

@@ -1,3 +1,5 @@
class OperatingSystem < ActiveRecord::Base
has_many :servers
has_many :configuration_templates
include Iconizable
end

View File

@@ -1,8 +1,13 @@
class Server < ActiveRecord::Base
belongs_to :operating_system
before_create :generate_hash
has_many :configuration_files
def generate_hash
self.namehash = SecureRandom.hex
end
def to_s
"#{name} - #{namehash}"
end
end

View File

@@ -0,0 +1,33 @@
<% content_for :javascript_includes do %>
<%= javascript_include_tag "template_select_form.js" %>
<% end %>
<div class="row">
<h2>Create New File</h2>
</div>
<div class="row">
<p>for <%= @server %></p>
</div>
<% @templates.each do |template| %>
<div class="row template-selection" id="template_<%= template.id %>">
<div class="col-md-2 text-md-center">
<div class="thumbnail">
<%= image_tag(template.safe_icon, size: '128', class:"img-responsive" ) %>
<div class="caption text-md-center">
<h3 class="server-name"><%= template.name %></h3>
</div>
</div>
</div>
<div class="col-md-10 template-description">
<%= template.description %>
</div>
</div>
<% end %>
<%= form_tag(create_from_template_configuration_files_url, method: :post, id: "create_from_template_form") do %>
<%= hidden_field_tag('template_id','', id: 'template_id') %>
<% end %>

View File

@@ -0,0 +1,12 @@
<div class="row">
</div>
<div class="row">
<div class="col-md-10">
<div id="editor">
<%= @record.content %>
</div>
</div>
</div>

View File

@@ -4,6 +4,7 @@
<title>Confighub</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= yield :javascript_includes %>
<%= csrf_meta_tags %>
</head>
<body>

View File

@@ -1,23 +1,26 @@
<div class="row">
<div class="col-md-11">
<div class="col-md-10">
<h2>Servers</h2>
</div>
<div class="col-md-1 text-right">
<%= link_to(new_server_path) do %>
<button class="btn btn-default pull-right">Add Server</button>
<%= button_to(new_server_path, method: :get, class: "btn btn-default pull-right") do %>
Add Server
<% end %>
</dev>
</div>
<div class="row">
<% @page.items.each do |server| %>
<div class="col-md-2 col-xs-6 text-md-center server-thumbnail">
<div class="col-md-3 col-xs-6 text-md-center server-thumbnail">
<%= link_to(server_path(server)) do %>
<div class="thumbnail">
<%= image_tag('ubuntu.png', size: '128', class:"img-responsive" ) %>
<div class="caption text-md-center" >
<div class="caption text-md-center">
<h3 class="server-name"><%= server.name %></h3>
</div>
</div>
<% end %>
</div>
<br /><br />
<% end %>
</div>

View File

@@ -0,0 +1,30 @@
<div class="row">
<div class="col-md-11">
<h2><%= @record.name %></h2>
<div class="small"><%= @record.namehash %>
-
<%= @record.operating_system.name %></div>
<br/>
<br/>
</div>
</div>
<div class="row">
<% if @record.configuration_files.blank? %>
<div class="col-md-12 text-md-center">
<p>There are no configuration files from this server in CHUB. You can create file now and pull it to the server later:<br/><br/></p>
<p><%= button_to(new_configuration_file_path, method: :get, params: { server_id: @record.id}, class: "btn btn-success") do %>
Create New Configuration File
<% end %><br/><br/>
</p>
<p>Or you can initialize server with chub and upload the existing files from server by pasting this into your server's terminal:</p>
<% command = "sudo wget -O /usr/local/bin/chub http://chub.saburly.com/chub && sudo chub init #{@record.namehash}" %>
<p><%= text_field_tag 'command', command, readonly: true, class: 'form-control-sm', size: command.length %></p>
</div>
<% end %>
</div>

View File

@@ -10,3 +10,4 @@ Rails.application.config.assets.version = '1.0'
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
# Rails.application.config.assets.precompile += %w( search.js )
Rails.application.config.assets.precompile += %w( active_scaffold/indicator.gif )
Rails.application.config.assets.precompile += %w( template_select_form.js )

View File

@@ -1,4 +1,13 @@
Rails.application.routes.draw do
resources :configuration_templates do as_routes end
resources :file_versions do as_routes end
resources :file_types do as_routes end
resources :configuration_files do
as_routes
collection do
post 'create_from_template'
end
end
resources :operating_systems do as_routes end
resources :servers do as_routes end
# The priority is based upon order of creation: first created -> highest priority.

View File

@@ -0,0 +1,10 @@
class CreateConfigurationFiles < ActiveRecord::Migration
def change
create_table :configuration_files do |t|
t.string :namehash, null: false
t.integer :server_id, null: false
t.integer :file_type_id, null: false
t.timestamps null: false
end
end
end

View File

@@ -0,0 +1,8 @@
class CreateFileTypes < ActiveRecord::Migration
def change
create_table :file_types do |t|
t.string :name, null: false
t.timestamps null: false
end
end
end

View File

@@ -0,0 +1,11 @@
class CreateFileVersions < ActiveRecord::Migration
def change
create_table :file_versions do |t|
t.integer :number, null: false, default: 1
t.boolean :pulled, null: false, default: false
t.integer :configuration_file_id, null: false
t.binary :content, :limit => 10.megabyte
t.timestamps null: false
end
end
end

View File

@@ -0,0 +1,11 @@
class CreateConfigurationTemplates < ActiveRecord::Migration
def change
create_table :configuration_templates do |t|
t.string :name, null: false
t.integer :operating_system_id, null: false
t.text :content, null: false
t.integer :file_type_id, null: false
t.timestamps null: false
end
end
end

View File

@@ -0,0 +1,5 @@
class AddConfigurationTemplateIdToConfigurationFile < ActiveRecord::Migration
def change
add_column :configuration_files, :configuration_template_id, :integer
end
end

View File

@@ -0,0 +1,6 @@
class AddIconToConfigurationTemplate < ActiveRecord::Migration
def change
add_column :configuration_templates, :icon, :string
add_column :operating_systems, :icon, :string
end
end

View File

@@ -0,0 +1,5 @@
class AddDescriptionToConfigurationTemplate < ActiveRecord::Migration
def change
add_column :configuration_templates, :description, :text, null: false, default: "Empty description"
end
end

View File

@@ -0,0 +1,5 @@
class AddFilePathToConfigurationTemplate < ActiveRecord::Migration
def change
add_column :configuration_templates, :file_path, :string, null: false, default: '/tmp/configuration.txt'
end
end

View File

@@ -11,20 +11,59 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20_160_220_091_225) do
create_table 'operating_systems', force: :cascade do |t|
t.string 'name', null: false
t.datetime 'created_at', null: false
t.datetime 'updated_at', null: false
ActiveRecord::Schema.define(version: 20160221101719) do
create_table "configuration_files", force: :cascade do |t|
t.string "namehash", null: false
t.integer "server_id", null: false
t.integer "file_type_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "configuration_template_id"
end
create_table 'servers', force: :cascade do |t|
t.string 'name', null: false
t.string 'namehash', null: false
t.integer 'operating_system_id', null: false
t.boolean 'initialized', default: false, null: false
t.string 'hostname'
t.datetime 'created_at', null: false
t.datetime 'updated_at', null: false
create_table "configuration_templates", force: :cascade do |t|
t.string "name", null: false
t.integer "operating_system_id", null: false
t.text "content", null: false
t.integer "file_type_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "icon"
t.text "description", default: "Empty description", null: false
t.string "file_path", default: "/tmp/configuration.txt", null: false
end
create_table "file_types", force: :cascade do |t|
t.string "name", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "file_versions", force: :cascade do |t|
t.integer "number", default: 1, null: false
t.boolean "pulled", default: false, null: false
t.integer "configuration_file_id", null: false
t.binary "content"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "operating_systems", force: :cascade do |t|
t.string "name", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "icon"
end
create_table "servers", force: :cascade do |t|
t.string "name", null: false
t.string "namehash", null: false
t.integer "operating_system_id", null: false
t.boolean "initialized", default: false, null: false
t.string "hostname"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end

View File

@@ -0,0 +1,49 @@
require 'test_helper'
class ConfigurationFilesControllerTest < ActionController::TestCase
setup do
@configuration_file = configuration_files(:one)
end
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:configuration_files)
end
test "should get new" do
get :new
assert_response :success
end
test "should create configuration_file" do
assert_difference('ConfigurationFile.count') do
post :create, configuration_file: { }
end
assert_redirected_to configuration_file_path(assigns(:configuration_file))
end
test "should show configuration_file" do
get :show, id: @configuration_file
assert_response :success
end
test "should get edit" do
get :edit, id: @configuration_file
assert_response :success
end
test "should update configuration_file" do
patch :update, id: @configuration_file, configuration_file: { }
assert_redirected_to configuration_file_path(assigns(:configuration_file))
end
test "should destroy configuration_file" do
assert_difference('ConfigurationFile.count', -1) do
delete :destroy, id: @configuration_file
end
assert_redirected_to configuration_files_path
end
end

View File

@@ -0,0 +1,49 @@
require 'test_helper'
class ConfigurationTemplatesControllerTest < ActionController::TestCase
setup do
@configuration_template = configuration_templates(:one)
end
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:configuration_templates)
end
test "should get new" do
get :new
assert_response :success
end
test "should create configuration_template" do
assert_difference('ConfigurationTemplate.count') do
post :create, configuration_template: { }
end
assert_redirected_to configuration_template_path(assigns(:configuration_template))
end
test "should show configuration_template" do
get :show, id: @configuration_template
assert_response :success
end
test "should get edit" do
get :edit, id: @configuration_template
assert_response :success
end
test "should update configuration_template" do
patch :update, id: @configuration_template, configuration_template: { }
assert_redirected_to configuration_template_path(assigns(:configuration_template))
end
test "should destroy configuration_template" do
assert_difference('ConfigurationTemplate.count', -1) do
delete :destroy, id: @configuration_template
end
assert_redirected_to configuration_templates_path
end
end

View File

@@ -0,0 +1,49 @@
require 'test_helper'
class FileTypesControllerTest < ActionController::TestCase
setup do
@file_type = file_types(:one)
end
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:file_types)
end
test "should get new" do
get :new
assert_response :success
end
test "should create file_type" do
assert_difference('FileType.count') do
post :create, file_type: { }
end
assert_redirected_to file_type_path(assigns(:file_type))
end
test "should show file_type" do
get :show, id: @file_type
assert_response :success
end
test "should get edit" do
get :edit, id: @file_type
assert_response :success
end
test "should update file_type" do
patch :update, id: @file_type, file_type: { }
assert_redirected_to file_type_path(assigns(:file_type))
end
test "should destroy file_type" do
assert_difference('FileType.count', -1) do
delete :destroy, id: @file_type
end
assert_redirected_to file_types_path
end
end

View File

@@ -0,0 +1,49 @@
require 'test_helper'
class FileVersionsControllerTest < ActionController::TestCase
setup do
@file_version = file_versions(:one)
end
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:file_versions)
end
test "should get new" do
get :new
assert_response :success
end
test "should create file_version" do
assert_difference('FileVersion.count') do
post :create, file_version: { }
end
assert_redirected_to file_version_path(assigns(:file_version))
end
test "should show file_version" do
get :show, id: @file_version
assert_response :success
end
test "should get edit" do
get :edit, id: @file_version
assert_response :success
end
test "should update file_version" do
patch :update, id: @file_version, file_version: { }
assert_redirected_to file_version_path(assigns(:file_version))
end
test "should destroy file_version" do
assert_difference('FileVersion.count', -1) do
delete :destroy, id: @file_version
end
assert_redirected_to file_versions_path
end
end

View File

@@ -0,0 +1,11 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
# This model initially had no columns defined. If you add columns to the
# model remove the '{}' from the fixture names and add the columns immediately
# below each fixture, per the syntax in the comments below
#
one: {}
# column: value
#
two: {}
# column: value

View File

@@ -0,0 +1,11 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
# This model initially had no columns defined. If you add columns to the
# model remove the '{}' from the fixture names and add the columns immediately
# below each fixture, per the syntax in the comments below
#
one: {}
# column: value
#
two: {}
# column: value

11
web/test/fixtures/file_types.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
# This model initially had no columns defined. If you add columns to the
# model remove the '{}' from the fixture names and add the columns immediately
# below each fixture, per the syntax in the comments below
#
one: {}
# column: value
#
two: {}
# column: value

11
web/test/fixtures/file_versions.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
# This model initially had no columns defined. If you add columns to the
# model remove the '{}' from the fixture names and add the columns immediately
# below each fixture, per the syntax in the comments below
#
one: {}
# column: value
#
two: {}
# column: value

View File

@@ -0,0 +1,7 @@
require 'test_helper'
class ConfigurationFileTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View File

@@ -0,0 +1,7 @@
require 'test_helper'
class ConfigurationTemplateTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View File

@@ -0,0 +1,7 @@
require 'test_helper'
class FileTypeTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View File

@@ -0,0 +1,7 @@
require 'test_helper'
class FileVersionTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end