radesk 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +26 -0
  4. data/app/assets/javascripts/radesk/application.js +15 -0
  5. data/app/assets/stylesheets/radesk/application.css +16 -0
  6. data/app/assets/stylesheets/radesk/radesk.css.scss +159 -0
  7. data/app/controllers/radesk/answers_controller.rb +45 -0
  8. data/app/controllers/radesk/application_controller.rb +12 -0
  9. data/app/controllers/radesk/tickets_controller.rb +52 -0
  10. data/app/helpers/radesk/answers_helper.rb +4 -0
  11. data/app/helpers/radesk/application_helper.rb +4 -0
  12. data/app/helpers/radesk/tickets_helper.rb +4 -0
  13. data/app/models/radesk/answer.rb +6 -0
  14. data/app/models/radesk/ticket.rb +10 -0
  15. data/app/views/layouts/radesk/application.html.haml +19 -0
  16. data/app/views/radesk/answers/_answers.html.haml +15 -0
  17. data/app/views/radesk/answers/update_answers.js.erb +1 -0
  18. data/app/views/radesk/tickets/_form.html.haml +10 -0
  19. data/app/views/radesk/tickets/_status.html.haml +2 -0
  20. data/app/views/radesk/tickets/change_status.js.erb +1 -0
  21. data/app/views/radesk/tickets/edit.html.haml +1 -0
  22. data/app/views/radesk/tickets/index.html.haml +22 -0
  23. data/app/views/radesk/tickets/new.html.haml +4 -0
  24. data/app/views/radesk/tickets/show.html.haml +28 -0
  25. data/config/routes.rb +11 -0
  26. data/db/migrate/20141226165609_create_radesk_tickets.rb +12 -0
  27. data/db/migrate/20141227023319_create_radesk_answers.rb +11 -0
  28. data/lib/generators/radesk/install/templates/initializer.rb +4 -0
  29. data/lib/generators/radesk/install_generator.rb +19 -0
  30. data/lib/radesk/engine.rb +10 -0
  31. data/lib/radesk/version.rb +3 -0
  32. data/lib/radesk.rb +17 -0
  33. data/lib/tasks/radesk_tasks.rake +4 -0
  34. metadata +229 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1a088a7ae19acc45129a449e651ba2dc1dfc6947
4
+ data.tar.gz: 460f628e57ca0787f8b8644a4137b9fed6a34989
5
+ SHA512:
6
+ metadata.gz: 213991bbc3f268fa868c280d1a72181c81fe6d2d5607b6acb30e2e39da0dbfe189b6c6835e2754d9c7b6b57f6f5fec65d9b63de1912745c5b93a3f45a22bbe50
7
+ data.tar.gz: f0cd0ed9e89fb780af10df72978cc9adba864b0f1d71b4d382cd5a106a65c9fe724287eed2e9640fddba9e332406dd759a6e5013d8d9c56123e7f201cb771b7c
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2014 Sergey Novikov
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,26 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Radesk'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+ load 'rails/tasks/statistics.rake'
22
+
23
+
24
+
25
+ Bundler::GemHelper.install_tasks
26
+
@@ -0,0 +1,15 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require_tree .
@@ -0,0 +1,16 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any styles
10
+ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11
+ * file per style scope.
12
+ *
13
+ *= require font-awesome
14
+ *= require_tree .
15
+ *= require_self
16
+ */
@@ -0,0 +1,159 @@
1
+ $main_color: #33b558;
2
+ $dark_color: #3e3e3e;
3
+ $light_color: #f6f6f6;
4
+
5
+ #radesk {
6
+ * { margin: 0; padding: 0; }
7
+ a {
8
+ color: $dark_color;
9
+ text-decoration: none;
10
+ &:hover {
11
+ color: $main_color;
12
+ }
13
+ }
14
+
15
+ color: $dark_color;
16
+ font-family: 'Arial';
17
+ font-size: 12px;
18
+ margin-bottom: 40px;
19
+
20
+ .wrap {
21
+ width: 960px;
22
+ margin: 0 auto;
23
+ }
24
+
25
+ .nav {
26
+ border-bottom: 1px solid darken($light_color, 5%);
27
+ padding: 12px 0;
28
+ margin-bottom: 40px;
29
+ a {
30
+ font-weight: bold;
31
+ margin-right: 20px;
32
+ font-size: 14px;
33
+ }
34
+ }
35
+
36
+ h1, h2 {
37
+ padding-bottom: 20px;
38
+ }
39
+
40
+ .text-center {
41
+ text-align: center;
42
+ }
43
+
44
+ .text-right {
45
+ text-align: right;
46
+ }
47
+
48
+ .pull-right {
49
+ float: right;
50
+ }
51
+
52
+ .fa {
53
+ color: $main_color;
54
+ &.light {
55
+ color: darken($light_color, 20%);
56
+ }
57
+ }
58
+
59
+ .tickets {
60
+ width: 100%;
61
+ border-collapse: collapse;
62
+ margin-bottom: 20px;
63
+ tr {
64
+ border-bottom: 1px solid darken($light_color, 5%);
65
+ &:first-child {
66
+ border-top: 1px solid darken($light_color, 5%);
67
+ }
68
+ td {
69
+ padding: 10px 0;
70
+ &.status {
71
+ width: 20px;
72
+ }
73
+ }
74
+ }
75
+ }
76
+
77
+ .ticket {
78
+ margin-bottom: 40px;
79
+ .message {
80
+ font-size: 14px;
81
+ line-height: 20px;
82
+ }
83
+ .info {
84
+ margin-bottom: 20px;
85
+ color: darken($light_color, 20%);
86
+ }
87
+ }
88
+
89
+ .answers {
90
+ margin-bottom: 40px;
91
+ .answer {
92
+ padding-top: 20px;
93
+ margin-bottom: 20px;
94
+ border-top: 1px solid darken($light_color, 5%);
95
+ .info {
96
+ margin-bottom: 10px;
97
+ color: darken($light_color, 20%);
98
+ }
99
+ .message {
100
+ font-size: 14px;
101
+ line-height: 20px;
102
+ }
103
+ }
104
+ }
105
+
106
+ .btn {
107
+ display: inline-block;
108
+ height: 34px;
109
+ line-height: 34px;
110
+ padding: 0 13px;
111
+ background: $main_color;
112
+ border: 1px solid $main_color;
113
+ color: #fff;
114
+ border-radius: 5px;
115
+ font-size: 13px;
116
+ font-family: 'Arial';
117
+ font-weight: bold;
118
+ cursor: pointer;
119
+ box-sizing: border-box;
120
+ &:hover {
121
+ background: none;
122
+ color: $main_color;
123
+ }
124
+ &.btn-clear {
125
+ background: none;
126
+ color: $main_color;
127
+ }
128
+ }
129
+
130
+ .form {
131
+ overflow: hidden;
132
+ padding: 20px 20px 0;
133
+ margin-bottom: 40px;
134
+ background: #fff;
135
+ border-radius: 3px;
136
+ .form-group {
137
+ margin-bottom: 20px;
138
+ label {
139
+ display: block;
140
+ margin-bottom: 5px;
141
+ color: $main_color;
142
+ font-weight: bold;
143
+ }
144
+ .form-control {
145
+ background: #fff;
146
+ width: 100%;
147
+ border: 1px solid darken($light_color, 5%);
148
+ border-radius: 5px;
149
+ font-family: 'Arial';
150
+ font-size: 12px;
151
+ box-sizing: border-box;
152
+ padding: 10px;
153
+ &:focus {
154
+ outline: none;
155
+ }
156
+ }
157
+ }
158
+ }
159
+ }
@@ -0,0 +1,45 @@
1
+ require_dependency "radesk/application_controller"
2
+
3
+ module Radesk
4
+ class AnswersController < ApplicationController
5
+ before_action :set_answer, only: [:edit, :update, :destroy]
6
+ before_action :check_access, only: [:edit, :update, :destroy]
7
+ before_action :radesk_authorize!
8
+
9
+ def create
10
+ @answer = Answer.new(answer_params)
11
+ @answer.user_id = send(Radesk.current_user_method_name).id
12
+ @answer.ticket_id = params[:ticket_id]
13
+
14
+ if @answer.save
15
+ render 'update_answers'
16
+ end
17
+ end
18
+
19
+ def update
20
+ if @answer.update(answer_params)
21
+ redirect_to @answer.ticket, notice: 'Answer was successfully updated.'
22
+ else
23
+ render :edit
24
+ end
25
+ end
26
+
27
+ def destroy
28
+ @answer.destroy
29
+ redirect_to @answer.ticket, notice: notice
30
+ end
31
+
32
+ private
33
+ def set_answer
34
+ @answer = Answer.find(params[:id])
35
+ end
36
+
37
+ def check_access
38
+ redirect_to :back unless radesk_current_user.id == @answer.user_id || radesk_current_user.try(:radesk_admin?)
39
+ end
40
+
41
+ def answer_params
42
+ params.require(:answer).permit(:message)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,12 @@
1
+ module Radesk
2
+ class ApplicationController < ActionController::Base
3
+ def radesk_current_user
4
+ send(Radesk.current_user_method_name)
5
+ end
6
+ helper_method :radesk_current_user
7
+
8
+ def radesk_authorize!
9
+ redirect_to '/' if !(radesk_current_user)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,52 @@
1
+ require_dependency "radesk/application_controller"
2
+
3
+ module Radesk
4
+ class TicketsController < ApplicationController
5
+ before_action :set_ticket, only: [:show, :destroy, :open, :close]
6
+ before_action :radesk_authorize!
7
+
8
+ def index
9
+ @tickets = Ticket.includes(Radesk.user_class_name.downcase.to_sym).where(:user_id => radesk_current_user.id).all.page(params[:page]).per(10)
10
+ @ticket = Ticket.new
11
+ end
12
+
13
+ def show
14
+ @answers = @ticket.answers.includes(Radesk.user_class_name.downcase.to_sym)
15
+ end
16
+
17
+ def create
18
+ @ticket = Ticket.new(ticket_params)
19
+ @ticket.user_id = send(Radesk.current_user_method_name).id
20
+
21
+ if @ticket.save
22
+ redirect_to @ticket, notice: 'Ticket was successfully created.'
23
+ else
24
+ redirect_to tickets_path
25
+ end
26
+ end
27
+
28
+ def destroy
29
+ @ticket.destroy
30
+ redirect_to tickets_url, notice: 'Ticket was successfully destroyed.'
31
+ end
32
+
33
+ def open
34
+ @ticket.update(:closed => false)
35
+ render 'change_status'
36
+ end
37
+
38
+ def close
39
+ @ticket.update(:closed => true)
40
+ render 'change_status'
41
+ end
42
+
43
+ private
44
+ def set_ticket
45
+ @ticket = Ticket.find(params[:id])
46
+ end
47
+
48
+ def ticket_params
49
+ params.require(:ticket).permit(:title, :message, :closed)
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,4 @@
1
+ module Radesk
2
+ module AnswersHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Radesk
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Radesk
2
+ module TicketsHelper
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ module Radesk
2
+ class Answer < ActiveRecord::Base
3
+ belongs_to :user, :class_name => Radesk.user_class_name.to_s, :foreign_key => :user_id
4
+ belongs_to :ticket
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+ module Radesk
2
+ class Ticket < ActiveRecord::Base
3
+ belongs_to :user, :class_name => Radesk.user_class_name.to_s, :foreign_key => :user_id
4
+ has_many :answers
5
+
6
+ validates_presence_of :title, :message
7
+
8
+ default_scope { order('closed ASC').order('id DESC') }
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title
5
+ = yield :title
6
+ = stylesheet_link_tag "radesk/application", media: "all"
7
+ = javascript_include_tag "radesk/application"
8
+ = csrf_meta_tags
9
+ %body{ :style => 'margin: 0; background: #f6f6f6;' }
10
+ #radesk
11
+ .nav
12
+ .wrap
13
+ = link_to 'Home', '/'
14
+ = link_to 'Tickets', tickets_path
15
+ - if radesk_current_user.try(:radesk_admin?)
16
+ %span.pull-right
17
+ Logged as administrator
18
+ .wrap
19
+ = yield
@@ -0,0 +1,15 @@
1
+ - answers.each do |answer|
2
+ .answer
3
+ .info
4
+ Added
5
+ %span
6
+ = answer.created_at.strftime("%e %b %k:%M")
7
+ by
8
+ %span
9
+ = answer.user.email
10
+ - if radesk_current_user.try(:radesk_admin?)
11
+ %span.pull-right
12
+ = link_to ticket_answer_path(answer.ticket, answer), :method => :delete do
13
+ %i.fa.fa-close.light
14
+ .message
15
+ = answer.message
@@ -0,0 +1 @@
1
+ $(".answers").html("<%= escape_javascript(render 'answers', :answers => @answer.ticket.answers).html_safe %>");
@@ -0,0 +1,10 @@
1
+ .form
2
+ = form_for(@ticket) do |f|
3
+ .form-group
4
+ = f.label :title
5
+ = f.text_field :title, :class => 'form-control', :required => true
6
+ .form-group
7
+ = f.label :message
8
+ = f.text_area :message, :class => 'form-control', :rows => 10, :required => true
9
+ .form-group.text-right
10
+ = f.submit 'Create New Ticket', :class => 'btn'
@@ -0,0 +1,2 @@
1
+ = link_to (ticket.closed? ? open_ticket_path(ticket) : close_ticket_path(ticket)), :remote => true do
2
+ %i.fa{ :class => (ticket.closed? ? 'fa-check' : 'fa-circle-o') }
@@ -0,0 +1 @@
1
+ $(".ticket-status-<%= @ticket.id %>").html("<%= escape_javascript(render 'status', :ticket => @ticket).html_safe %>");
@@ -0,0 +1 @@
1
+ = render 'form'
@@ -0,0 +1,22 @@
1
+ %h1
2
+ Helpdesk
3
+ .create_ticket
4
+ = render 'form'
5
+ - if @tickets.any?
6
+ %h1
7
+ Tickets history
8
+ %table.tickets
9
+ %tbody
10
+ - @tickets.each do |ticket|
11
+ %tr
12
+ %td.status
13
+ %span{ :class => "ticket-status-#{ticket.id}"}
14
+ = render 'status', :ticket => ticket
15
+ %td
16
+ = link_to ticket.title, ticket
17
+ - if radesk_current_user.try(:radesk_admin?)
18
+ %td
19
+ = ticket.user.email
20
+ %td.text-right
21
+ = ticket.created_at.strftime("%e %b %k:%M")
22
+ = paginate @tickets
@@ -0,0 +1,4 @@
1
+ %h1
2
+ Create New Ticket
3
+ .form
4
+ = render 'form'
@@ -0,0 +1,28 @@
1
+ %h1
2
+ %span{ :class => "ticket-status-#{@ticket.id}"}
3
+ = render 'status', :ticket => @ticket
4
+ = @ticket.title
5
+ .ticket
6
+ .info
7
+ Created
8
+ %span
9
+ = @ticket.created_at.strftime("%e %b %k:%M")
10
+ by
11
+ %span
12
+ = @ticket.user.email
13
+ .message
14
+ = @ticket.message
15
+
16
+ - if @ticket.answers.any?
17
+ %h2
18
+ Answers
19
+ .answers
20
+ = render 'radesk/answers/answers', :answers => @answers
21
+ .create_answer
22
+ .form
23
+ = form_for [@ticket, @ticket.answers.build], :remote => true do |f|
24
+ .form-group
25
+ = f.label :message, 'Add Your Answer'
26
+ = f.text_area :message, :class => 'form-control', :rows => 5, :required => true
27
+ .form-group.text-right
28
+ = f.submit 'Post Answer', :class => 'btn'
data/config/routes.rb ADDED
@@ -0,0 +1,11 @@
1
+ Radesk::Engine.routes.draw do
2
+ resources :tickets do
3
+ member do
4
+ get 'open'
5
+ get 'close'
6
+ end
7
+ resources :answers
8
+ end
9
+
10
+ root 'tickets#index'
11
+ end
@@ -0,0 +1,12 @@
1
+ class CreateRadeskTickets < ActiveRecord::Migration
2
+ def change
3
+ create_table :radesk_tickets do |t|
4
+ t.string :title
5
+ t.text :message
6
+ t.integer :user_id
7
+ t.boolean :closed, :default => false
8
+
9
+ t.timestamps null: false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ class CreateRadeskAnswers < ActiveRecord::Migration
2
+ def change
3
+ create_table :radesk_answers do |t|
4
+ t.text :message
5
+ t.integer :user_id
6
+ t.integer :ticket_id
7
+
8
+ t.timestamps null: false
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,4 @@
1
+ Radesk.setup do |config|
2
+ # config.user_class_name = 'User'
3
+ # config.current_user_method_name = 'current_user'
4
+ end
@@ -0,0 +1,19 @@
1
+ require 'rails/generators/base'
2
+
3
+ module Radesk
4
+ module Generators
5
+ class InstallGenerator < Rails::Generators::Base
6
+ source_root File.expand_path("../install/templates", __FILE__)
7
+
8
+ def copy_initializer
9
+ template "initializer.rb", "config/initializers/radesk.rb"
10
+ end
11
+
12
+ def install_migrations
13
+ Dir.chdir(Rails.root) do
14
+ `rake radesk:install:migrations`
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,10 @@
1
+ module Radesk
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace Radesk
4
+
5
+ config.generators do |g|
6
+ g.test_framework :rspec
7
+ g.fixture_replacement :factory_girl
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module Radesk
2
+ VERSION = "0.0.1"
3
+ end
data/lib/radesk.rb ADDED
@@ -0,0 +1,17 @@
1
+ require "radesk/engine"
2
+ require "haml"
3
+ require "font-awesome-rails"
4
+ require "kaminari"
5
+ require "jquery-rails"
6
+
7
+ module Radesk
8
+ mattr_accessor :user_class_name
9
+ @@user_class_name = "User"
10
+
11
+ mattr_accessor :current_user_method_name
12
+ @@current_user_method_name = "current_user"
13
+
14
+ def self.setup
15
+ yield self
16
+ end
17
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :radesk do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,229 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: radesk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sergey Novikov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: haml
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sass-rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: font-awesome-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: kaminari
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: jquery-rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: sqlite3
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: devise
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: faker
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rspec-rails
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: factory_girl_rails
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ description:
168
+ email:
169
+ executables: []
170
+ extensions: []
171
+ extra_rdoc_files: []
172
+ files:
173
+ - MIT-LICENSE
174
+ - Rakefile
175
+ - app/assets/javascripts/radesk/application.js
176
+ - app/assets/stylesheets/radesk/application.css
177
+ - app/assets/stylesheets/radesk/radesk.css.scss
178
+ - app/controllers/radesk/answers_controller.rb
179
+ - app/controllers/radesk/application_controller.rb
180
+ - app/controllers/radesk/tickets_controller.rb
181
+ - app/helpers/radesk/answers_helper.rb
182
+ - app/helpers/radesk/application_helper.rb
183
+ - app/helpers/radesk/tickets_helper.rb
184
+ - app/models/radesk/answer.rb
185
+ - app/models/radesk/ticket.rb
186
+ - app/views/layouts/radesk/application.html.haml
187
+ - app/views/radesk/answers/_answers.html.haml
188
+ - app/views/radesk/answers/update_answers.js.erb
189
+ - app/views/radesk/tickets/_form.html.haml
190
+ - app/views/radesk/tickets/_status.html.haml
191
+ - app/views/radesk/tickets/change_status.js.erb
192
+ - app/views/radesk/tickets/edit.html.haml
193
+ - app/views/radesk/tickets/index.html.haml
194
+ - app/views/radesk/tickets/new.html.haml
195
+ - app/views/radesk/tickets/show.html.haml
196
+ - config/routes.rb
197
+ - db/migrate/20141226165609_create_radesk_tickets.rb
198
+ - db/migrate/20141227023319_create_radesk_answers.rb
199
+ - lib/generators/radesk/install/templates/initializer.rb
200
+ - lib/generators/radesk/install_generator.rb
201
+ - lib/radesk.rb
202
+ - lib/radesk/engine.rb
203
+ - lib/radesk/version.rb
204
+ - lib/tasks/radesk_tasks.rake
205
+ homepage:
206
+ licenses:
207
+ - MIT
208
+ metadata: {}
209
+ post_install_message:
210
+ rdoc_options: []
211
+ require_paths:
212
+ - lib
213
+ required_ruby_version: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - ">="
216
+ - !ruby/object:Gem::Version
217
+ version: '0'
218
+ required_rubygems_version: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ requirements: []
224
+ rubyforge_project:
225
+ rubygems_version: 2.4.5
226
+ signing_key:
227
+ specification_version: 4
228
+ summary: Helpdesk on Rails.
229
+ test_files: []