Skip to content

halyvin/awp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AWP

Приложение управления заявками сервиса техобслуживания.

Installation

После клонирования репозитория следует:

  1. создать файл config/database.yml и добавить в него следующее содержание:

     development:
       adapter: sqlite3
       database: db/development.sqlite3
       pool: 5
       timeout: 5000
    
  2. выполнить команду bundle install

  3. выполнить команду bundle exec rake db:create db:migrate db:seed

  4. запустить сервер командой bundle exec rails s

  5. зайти в браузере на адрес http://localhost:3000

  6. по завершению работы нужно погасить сервер - зайти в терминал, где выполнялась команда запуска сервера и остановить его сочетанием клавиш 'Ctrl + C'.

Пункты с 4 по 6 повторяются при каждой сессии работы с приложением.

В последствии можно сбросить все данные из БД на данные по умолчанию (пользователь admin с паролем master и список рабочих) с помощью команды bundle exec rake db:drop db:create db:migrate db:seed. Так же эту команду стоит выполнять каждый раз, когда меняются миграции.

Последний раз миграции менялись 9 октября 2013, 6:29.

Email

Для системы оповещения используется email от Яндекса. awp-application@yandex.ru : Hfy6834fYfjJ

Для оповещения с помощью sms используем сервис http://www.sms4b.ru/: логин: awp_SMS_sender , пароль: Gr0moZEKa

Application workflow

Используемыев создании приложения технологии:

  • Ruby v1.9.3
  • Ruby on Rails v3.2.14
  • Bundler v1.3.5
  • Devise v3.1.1
  • Sqlite3
  • Jquery v2.0.3

Bundler

В основе развертки Rails 3 приложения лежит Bundler - система автоматизированной установки и поддержки версий гемов Ruby. В Ruby гемами являются в библиотеки или приложения, вынесенные в отдельные сущности. Например, Rails сам по себе является гемом Ruby, который использует многие другие гемы для работы.

Список гемов приложения указывается в файле 'Gemfile'. Для нашего приложения используется, естественно, гем 'rails', а так же вспомогательные гемы, например:

  • gem 'sqlite3' - гем для работы с Sqlite базой данных
  • gem 'russian' - гем для локализации разных данных, например привычного для русского пользователя отображения даты
  • gem 'devise' - гем, предоставляющий систему авторизации

Установка всех указаных в файле 'Gemfile' гемов происходит с помощью команжы bundle install.

База данных

Rails позволяет работать с довольно обширным списком баз данных. Для приложения мы используем базу данных Sqlite3 - она очень проста в развертке, не требует дополнительных запущенных демонов / сервисов и идеальна для небольших проектов.

Настройки подключения к базе данных указываются в файле 'config/database.yml'. Там указывается имя гема, используемого для подключения к БД и параметры подключения. Для Sqlite3 базы данных основным параметров подключения является путь к файлу базы данных. А нашем случае мы используем относительный путь от корня приложения. Создание базы данных производится командой bundle exec rake db:create.

Структура таблиц базы данных описывается в миграциях, файлы которых расположены в папке 'db/migrate'. Файлы миграций содержат команды к созданию, удалению, изменению структуры таблиц БД, а так же позволяет создать основные записи таблиц, такие как, например, запись о первом пользователе-администраторе системы. Запуск миграций происходит с помощью команды bundle exec rake db:migrate.

Немаловажно упомянуть файл 'db/seeds.rb' - он содержит код создания демо-данных, либо первоначальных данных приложения. В нашем приложении мы используем его, например, для создания списка работников. Запуск инструкций seeds.rb файла происходит командой bundle exec rake db:seeds.

Конфигурация приложения

Конфигурационные файлы приложения и его компонентов находятся в папке config. Основным файлом конфигурации является 'config/application.rb' - в нем устанавливаются такие важные параметры как язык приложения, часовой пояс и другие.

Так же важным файлом конфигурции является файл 'config/routes.rb' - в нём указываются все пути web-приложения - отношения урлов, на которые должно реагировать приложение, и контроллеров, которые должны обрабатывать запросы, пришедшие на эти урлы (о контроллерах позже).

Остальные файлы конфигураций оставлены по умочанию.

Публичные файлы

Папка 'public' является корнем сайта и все файлы в этой папке будут доступны по прямым урлам. Это, например 'robots.txt', 'favicon.ico' и другие статичные файлы. Так же в этой папке хранятся статические html странички ошибок, так как они будут доступны даже в случае, когда Rails приложение не может запуститься из-за ошибки.

Модели

Моделями являются классы, которые описывают основные объекты приложения, данные которых, в большинстве случаев, хранятся в базе данных. К таким можно отнести пользователей системы, работников, заявки. Файлы моделей хранятся в папке 'app/models'. Благодаря моделям мы можем настраивать правила записи данных и организовывать удобный доступ к данным.

Контроллеры

Классы, которые отвечают за обработку запросов к приложению и формирования ответа на них. Файлы контроллеров хранятся в папке 'app/controllers/'. Контроллеры определяют, какие данные будут подготовлены для запроса, соберут их, обращаясь к моделям и передадут представлениям для отображения.

Представления

Представлениями являются файлы, которые описывают выходной html, со ставками Ruby кода. В данном приложении используем erb технологию шаблонизации. Файлы представлений хранятся в папке 'app/views'. Структура вложенных папок соответствует названиям контроллеров, которые вызывают представления. Например, контроллер 'requests_controller' работает со страницами списка заявок, истории заявок, а так же страницы печали заявок, а представления для этих страниц находятся в файлах: 'app/views/requests/index.html.erb', 'app/views/requests/history.html.erb', 'app/views/requests/print.html.erb'.

Запуск приложения

Для запуска Rails приложения требуется web-сервер, который будет принимать http запросы, передавать их приложению и отдавать пользователю ответ для отображения в его браузере. Мы используем встроенный в Ruby on Rails 3 web-сервер Webrick. Запускается он командой bundle exec rails server. Останавливается простым прерыванием работы приложения - командой kill или просто комбинацией клавиш 'Ctrl + C' в консоли, где запущен этот сервер.

Frontend editing

Для редактирования фронтэнда я укажу расположение js, css, image файлов, а так же представлений - html страниц со вставками ruby кода.

Javascript

Все js файлы хранятся в двух местах:

  • vendor/assets/javascripts - библиотеки и плагины
  • app/assets/javascripts - js код, написанный для проекта

При редактировании названия любого js файла, или добавлении нового в любую из папок, нужно зайти в файл app/assets/javascripts/application.js и или добавить строчку типа //= require jquery.popapilus с названием добавленного файла или найти строку с названием измененного файла и поправить её.

CSS

Все css файлы хранятся в двух местах:

  • vendor/assets/stylesheets - библиотеки
  • app/assets/stylesheets - стили, написанные для проекта

При редактировании названия любого css файла, или добавлении нового в любую из папок, нужно зайти в файл app/assets/stylesheets/application.css и или добавить строчку типа *= require popapilus с названием добавленного файла или найти строку с названием измененного файла и поправить её.

Images

Все изображения в app/assets/images. Никаких лишних действий не нужно - добавил и они уже в проекте.

Статичные файлы

Обращаться к любому css, js файлу или файлу изображения можно и из статических html файлов, таки, например, как public/ex_index.html. После запуска приложения все css, js и файлы изображений какбэ переносятся в виртуальную папку /assets. Так что можно обратиться за файлом main.js по ссылке '/assets/main.js'. Так же в файле стилей когда подключаешь изображение через url() нужно обращаться не к '../images/file.png', а просто к 'file.png' - виртуально они в одной папаке.

Представления

Все представления хранятся в app/views. Внутри представлений в тэге <% ... %> размещается Ruby код - трогать его не рекомендуется.

  • views/layouts/application.html.erb - обертка (head + header)
  • views/requests/index.html.erb - главная
  • views/requests/history.html.erb - страница истории заявок
  • views/requests/print.html.erb - печать заявок
  • views/requests/_workers_list.html.erb - фрагмент кода для списка работников (вставляется в index.html.erb с помощью команды render partial: "workers_list".
  • views/cabinet/edit.html.erb - настройки пользователя (личный кабинет)
  • views/devise/sessions/new.html.erb - окно логина в систему

JSON API

GET /requests/{ID заявки}.json

Получение данных о заявке. Пример возвращаемого значения:

{
  "id":1,
  "user":"admin",
  "client_id": 4,
  "day":"2013-10-07",
  "time":"с 10 до 14",
  "body":"Переобжать линк и свести с ума всех прохожих",
  "address":"ул.Менжинского д.10 кв.195",
  "workers":[["Толик",1],["Ванька",2]]
}

Если заявки с таким ID надено не будет - вернется 404 ошибка.

ID заявки можно взять из аттрибута data-request-id тэга tr строки таблицы с данными об этой заявке.

POST /requests.json

Создание нового запроса. Пример принимаемых данных:

"request":{
  "client_id":4,
  "day":"2013-10-07",
  "time":"с 10 до 14",
  "body":"Переобжать линк и свести с ума всех прохожих",
  "worker_ids":[1,2]
}

Пример возвращаемого значения в случае успеха:

{ id: 5 }

В случае ошибки вернется страница с кодом ошибки 422 и данными вроде:

{
  "user":["не может быть пустым"],
  "day":["не может быть пустым"]
}

PUT /requests/{ID заявки}.json

Обновление данных о заявке. Пример принимаемых данных:

"request":{
  "client_id":4,
  "day":"2013-10-07",
  "time":"с 10 до 14",
  "body":"Переобжать линк и свести с ума всех прохожих",
  "worker_ids":[1,2]
}

Любой из параметров можно просто пропустить, если его не нужно обновлять. Для отправки запроса метода put достаточно просто передать jquery ajax в опции параметр method: "put".

Возвращает ничего (точнее код 200) в случае успеха и ошибку с кодом 422, когда что-то пошло нет так, и данными вроде:

{
  "user":["не может быть пустым"],
  "day":["не может быть пустым"]
}

DELETE /requests/{ID заявки}.json

Удаление заявки. Восстановлению не подлежит. Для отправки запроса метода delete достаточно просто передать jquery ajax в опции параметр method: "delete". Возвращает ничего (точнее код 200).

PUT /requests/{ID заявки}/complete.json

Закрытие заявки. Пример принимаемых данных:

"request":{
  "close_reason":"Всё починили"
}

Возвращает ничего (точнее код 200).

Удачи на сдаче!

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors