Skip to content
This repository has been archived by the owner on Mar 1, 2018. It is now read-only.

Commit

Permalink
Merge 325c65d into fa76387
Browse files Browse the repository at this point in the history
  • Loading branch information
Zach Perrault committed Sep 8, 2015
2 parents fa76387 + 325c65d commit 7fd614c
Show file tree
Hide file tree
Showing 48 changed files with 225 additions and 105 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Expand Up @@ -2,6 +2,7 @@
config/settings.yaml
config/database.yml
*.DS_Store
packages
packages/
# Don't ignore app/views/packages
!app/views/packages
Expand All @@ -13,6 +14,7 @@ log/*.log
tmp/**/*
tmp/
.sass-cache/
.env

config/newrelic.yml
config/setup_load_paths.rb
Expand Down
12 changes: 10 additions & 2 deletions Gemfile
Expand Up @@ -20,8 +20,13 @@ gem 'taps'
gem 'highcharts-rails', '~> 2.1.9'
gem 'dynamic_form' # enabling this should allow the removal of vendor/dynamic_form

gem 'active_record_or'

gem 'coveralls', require: false

gem 'dotenv-rails'
gem 'rack-timeout'

group :development do
gem 'rails-erd'
gem 'textmate_backtracer'
Expand All @@ -43,5 +48,8 @@ group :assets do
gem 'uglifier'
end

gem 'jquery-rails', '~> 2.0.1' # Needs to stay here because numerous jQuery plugins (asmselect, lightbox_me, etc) will break otherwise
gem 'jquery-ui-rails'
gem 'jquery-rails'
gem 'jquery-ui-rails'

gem 'puma'
gem 'dalli'
17 changes: 16 additions & 1 deletion Gemfile.lock
Expand Up @@ -14,6 +14,7 @@ GEM
rack-cache (~> 1.2)
rack-test (~> 0.6.1)
sprockets (~> 2.2.1)
active_record_or (1.0.1)
activemodel (3.2.12)
activesupport (= 3.2.12)
builder (~> 3.0.0)
Expand Down Expand Up @@ -66,7 +67,13 @@ GEM
thor
crack (0.4.0)
safe_yaml (~> 0.9.0)
dalli (2.6.4)
diff-lcs (1.2.4)
dotenv (0.11.1)
dotenv-deployment (~> 0.0.2)
dotenv-deployment (0.0.2)
dotenv-rails (0.11.1)
dotenv (= 0.11.1)
dynamic_form (1.1.4)
erubis (2.7.0)
execjs (1.4.0)
Expand Down Expand Up @@ -117,6 +124,8 @@ GEM
slop (~> 3.4)
pry-rails (0.3.1)
pry (>= 0.9.10)
puma (2.6.0)
rack (>= 1.1, < 2.0)
rack (1.4.5)
rack-cache (1.2)
rack (>= 0.4)
Expand All @@ -126,6 +135,7 @@ GEM
rack
rack-test (0.6.2)
rack (>= 1.0)
rack-timeout (0.0.4)
rails (3.2.12)
actionmailer (= 3.2.12)
actionpack (= 3.2.12)
Expand Down Expand Up @@ -226,24 +236,29 @@ PLATFORMS
ruby

DEPENDENCIES
active_record_or
cancan
capybara (~> 1.1.2)
client_side_validations
coffee-rails
coveralls
dalli
dotenv-rails
dynamic_form
execjs
factory_girl (~> 3.3.0)
highcharts-rails (~> 2.1.9)
highline
jquery-rails (~> 2.0.1)
jquery-rails
jquery-ui-rails
meta_request
mysql2 (> 0.3)
nokogiri
paperclip
plist
pry-rails
puma
rack-timeout
rails (= 3.2.12)
rails-erd
rspec-rails (~> 2.13)
Expand Down
2 changes: 1 addition & 1 deletion app/assets/javascripts/application.js
Expand Up @@ -54,7 +54,7 @@ $(document).ready(function() {
});
$("#progress_container").hide();
$("#new_upload_package_form").submit(function() {
var filename = $("#data").val();
var filename = $("#package_file").val();
dots = filename.split(".");
extension = "." + dots[dots.length-1];
if (extension == ".dmg") {
Expand Down
2 changes: 1 addition & 1 deletion app/assets/stylesheets/style.css.erb
Expand Up @@ -71,7 +71,7 @@ a:hover {

#search {
/* Site search area */
height:36px;
height:13px;
}

#search_field {
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/bundles_controller.rb
@@ -1,6 +1,6 @@
class BundlesController < ApplicationController
def index
@bundles = Bundle.unit(current_unit).order_alphabetical
@bundles = Bundle.unit(current_unit)

respond_to do |format|
format.html
Expand Down
8 changes: 5 additions & 3 deletions app/controllers/catalogs_controller.rb
Expand Up @@ -15,9 +15,11 @@ def show
respond_to do |format|
#Fetch the content from the cache, if available. If not, generate it using the Catalog.generate method
format.plist { render :text => Rails.cache.fetch(cache_key) {
Rails.logger.info "CACHE: Geneterating catalog for #{cache_key}"
@catalog = Catalog.generate(unit_id, environment_id)
@catalog.to_plist.gsub(/\r\n?/, "\n")
Rails.logger.info "CACHE: Generating catalog for #{cache_key}"
@catalog = Catalog.generate(unit_id, environment_id).to_plist.gsub(/\r\n?/, "\n")
Rails.logger.info "CACHE: Generating catalog complete for #{cache_key}"
Rails.logger.info "CACHE: Generated catalog is #{@catalog.length}"
@catalog
}
}
end
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/computer_groups_controller.rb
Expand Up @@ -2,7 +2,7 @@ class ComputerGroupsController < ApplicationController
helper_method :sort_column, :sort_direction

def index
@computer_groups = ComputerGroup.unit(current_unit).order_alphabetical
@computer_groups = ComputerGroup.unit(current_unit)

respond_to do |format|
format.html
Expand Down
17 changes: 12 additions & 5 deletions app/controllers/computers_controller.rb
Expand Up @@ -4,13 +4,19 @@ class ComputersController < ApplicationController
helper_method :sort_column, :sort_direction

def index
# Scope computers to unit/environment and then order by relevent column and direction
@computers = Computer.unit(current_unit).environment(current_environment)
@computers = @computers.order(sort_column + ' ' + sort_direction)
# Default to scoped (i.e. sorted)
@computers = Computer.scoped
@computers = Computer.unscoped if params[:sort] # But don't scope if sorting

# Search for value on name attribute
@computers = @computers.search(:name, params[:name])
# Search for value on name OR hostname OR mac_address attributes
@computers = @computers.search(:name, params[:search])
@computers = @computers.or.search(:hostname, params[:search])
@computers = @computers.or.search(:mac_address, params[:search])

# Scope computers to unit/environment and then order by relevent column and direction
@computers = @computers.unit(current_unit).environment(current_environment)
@computers = @computers.order("#{sort_column} #{sort_direction}")

# Add pagination using will_paginate gem
per_page = params[:per_page]
per_page ||= Computer.per_page
Expand Down Expand Up @@ -159,6 +165,7 @@ def checkin
@computer.system_profile.attributes = system_profile_hash
end

@computer.last_ip = request.remote_ip
@computer.save

if @computer.warranty.present? and @computer.serial_number != @computer.warranty.serial_number
Expand Down
17 changes: 16 additions & 1 deletion app/controllers/package_branches_controller.rb
Expand Up @@ -15,12 +15,27 @@ def update
end
end
end


def download_icon
respond_to do |format|
if @package_branch.present?
format.png do
send_file @package_branch.icon.path(:medium), :filename => "#{@package_branch.name}.png"
fresh_when :etag => @package_branch, :last_modified => @package_branch.updated_at.utc, :public => true
end
else
render page_not_found
end
end
end

# Load a singular resource into @package for all actions
def load_singular_resource
action = params[:action].to_sym
if [:edit, :update].include?(action)
@package_branch = PackageBranch.unit(current_unit).find_by_name(params[:name])
elsif [:download_icon].include?(action)
@package_branch = PackageBranch.where(name: params[:id]).first
else
raise Exception.new("Unable to load singular resource for #{action} action in #{params[:controller]} controller.")
end
Expand Down
4 changes: 2 additions & 2 deletions app/controllers/packages_controller.rb
Expand Up @@ -110,9 +110,9 @@ def download
if @package.present?
format.html do
send_file Munki::Application::PACKAGE_DIR + @package.installer_item_location, :filename => @package.to_s(:download_filename)
fresh_when :etag => @package, :last_modified => @package.created_at.utc, :public => true
fresh_when :etag => @package, :last_modified => @package.updated_at.utc, :public => true
end

format.json { render :text => @package.to_json(:methods => [:name, :display_name]) }
else
render page_not_found
Expand Down
13 changes: 7 additions & 6 deletions app/models/ability.rb
Expand Up @@ -6,29 +6,30 @@ def initialize(user)
# Ensure a user is available
@user = user
@user ||= User.new

# Permit user to unprotected actions
permit_unprotected_actions

# Assign user group permissions
@user.all_permissions.group_by(&:privilege_id).each do |privilege_id,permissions|
grant_privilege(Privilege.find(privilege_id),permissions.map(&:unit_id))
end

# Give "admin" user the keys to the house
if @user.is_root?
can :manage, :all
end
end

def grant_privilege(privilege,unit)
self.send(privilege.name,unit)
end

# Permit certain things to all requests
def permit_unprotected_actions
can :download, Package
# Allow clients to download packages
can [:download, :icon], Package
can :download_icon, PackageBranch
# Allow client computer requests
can :checkin, Computer
can [:show_plist, :show_resource], Computer
Expand Down
6 changes: 2 additions & 4 deletions app/models/catalog.rb
Expand Up @@ -4,11 +4,9 @@ class Catalog
def self.generate(unit_id, environment_id)
environment = Environment.find(environment_id)

if environment.nil?
raise EnvironmentNotFound
end
raise EnvironmentNotFound if environment.nil?

packages = Package.where(:unit_id => unit_id, :environment_id => environment_id).to_a
packages = Package.includes(:package_branch, :require_items, :update_for_items, :icon, :environment, :unit, :version_tracker).where(:unit_id => unit_id, :environment_id => environment_id).to_a
packages.map(&:serialize_for_plist)
end
end
13 changes: 13 additions & 0 deletions app/models/icon.rb
Expand Up @@ -27,6 +27,19 @@ def url(type = nil)
end
end

def path(type = nil)
begin
self.photo.path(type)
rescue NoMethodError
nil
end
if self.photo.path(type)
self.photo.path(type)
else
""
end
end

def to_s(type = nil)
self.url(type)
end
Expand Down
2 changes: 1 addition & 1 deletion app/models/manifest/bundle.rb
Expand Up @@ -3,7 +3,7 @@ class Bundle < ActiveRecord::Base
include HasAUnit
include HasAnEnvironment

scope :order_alphabetical, order("name")
default_scope order(:name, :environment_id)

def self.find_for_environment_change(id, current_unit)
if id == "new"
Expand Down
6 changes: 4 additions & 2 deletions app/models/manifest/computer.rb
Expand Up @@ -10,7 +10,7 @@ class Computer < ActiveRecord::Base
has_one :system_profile, :dependent => :destroy, :autosave => true
has_one :warranty, :dependent => :destroy, :autosave => true
has_many :client_logs
has_many :managed_install_reports
has_many :managed_install_reports, order: 'created_at DESC'

# Validations
validate :computer_model
Expand All @@ -29,6 +29,8 @@ class Computer < ActiveRecord::Base

validates_uniqueness_of :hostname, :allow_blank => true

default_scope order(:name)

scope :search, lambda {|column, term|where(["#{column.to_s} LIKE ?", "%#{term}%"]) unless term.blank? or column.blank?}
scope :eager_manifests, includes(bundle_includes + [{:computer_group => item_includes + bundle_includes}])

Expand Down Expand Up @@ -138,7 +140,7 @@ def presence_of_computer_model

# Return the latest instance of ClientLog
def last_report
managed_install_reports.last
managed_install_reports.first
end

# Returns, in words, the time since last run
Expand Down
2 changes: 1 addition & 1 deletion app/models/manifest/computer_group.rb
Expand Up @@ -5,7 +5,7 @@ class ComputerGroup < ActiveRecord::Base

has_many :computers

scope :order_alphabetical, order("name, environment_id")
default_scope order(:name, :environment_id)

# Tabled ASM select hash for adding computers to the group
def computers_tas(environment_id = nil)
Expand Down
5 changes: 5 additions & 0 deletions app/models/null/null_category.rb
@@ -0,0 +1,5 @@
class NullCategory
def to_s
'Uncategorized'
end
end

0 comments on commit 7fd614c

Please sign in to comment.