ideyabox 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. data/README.md +32 -1
  2. data/app/assets/images/.DS_Store +0 -0
  3. data/app/assets/javascripts/default.js +35 -0
  4. data/app/assets/stylesheets/{admin.scss.erb → default.scss.erb} +24 -5
  5. data/app/helpers/admin_helper.rb +8 -2
  6. data/lib/generators/.DS_Store +0 -0
  7. data/lib/generators/ideyabox/.DS_Store +0 -0
  8. data/lib/generators/ideyabox/admin/.DS_Store +0 -0
  9. data/lib/generators/ideyabox/admin/admin_generator.rb +45 -2
  10. data/lib/generators/ideyabox/admin/templates/assets/admin.js +6 -0
  11. data/lib/generators/ideyabox/admin/templates/assets/admin.scss.erb +3 -0
  12. data/lib/generators/ideyabox/admin/templates/controllers/application_controller.rb +13 -0
  13. data/lib/generators/ideyabox/admin/templates/locales/devise.ru.yml +36 -0
  14. data/lib/generators/ideyabox/admin/templates/locales/en.yml +32 -0
  15. data/lib/generators/ideyabox/admin/templates/locales/ru.yml +31 -0
  16. data/lib/generators/ideyabox/admin/templates/views/admin/shared/_header.html.haml +2 -3
  17. data/lib/generators/ideyabox/admin/templates/views/admin/shared/_launchbar.html.haml +2 -2
  18. data/lib/generators/ideyabox/admin/templates/views/admin/shared/_topbar.html.haml +1 -2
  19. data/lib/generators/ideyabox/admin/templates/views/layouts/admin.html.haml +1 -8
  20. data/lib/generators/ideyabox/admin/templates/views/layouts/login.html.haml +1 -1
  21. data/lib/generators/ideyabox/scaffold/.DS_Store +0 -0
  22. data/lib/generators/ideyabox/scaffold/scaffold_generator.rb +173 -0
  23. data/lib/generators/ideyabox/scaffold/templates/.DS_Store +0 -0
  24. data/lib/generators/ideyabox/scaffold/templates/_index.html.haml +38 -0
  25. data/lib/generators/ideyabox/scaffold/templates/_sort_buttons.html.haml +4 -0
  26. data/lib/generators/ideyabox/scaffold/templates/controllers/controller.rb +67 -0
  27. data/lib/generators/ideyabox/scaffold/templates/edit.html.haml +38 -0
  28. data/lib/generators/ideyabox/scaffold/templates/index.html.haml +9 -0
  29. data/lib/generators/ideyabox/scaffold/templates/index.js.haml +7 -0
  30. data/lib/ideyabox/version.rb +1 -1
  31. metadata +22 -4
  32. data/app/assets/javascripts/admin.js +0 -13
data/README.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  TODO: Write a gem description
4
4
 
5
+ ## Our statuses
6
+
7
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/I-de-ya/ideyabox)
8
+ [![Dependency Status](https://gemnasium.com/I-de-ya/ideyabox.png)](https://gemnasium.com/I-de-ya/ideyabox)
9
+
5
10
  ## Installation
6
11
 
7
12
  Add this line to your application's Gemfile:
@@ -18,7 +23,33 @@ Or install it yourself as:
18
23
 
19
24
  ## Usage
20
25
 
21
- TODO: Write usage instructions here
26
+ Hey, people!
27
+
28
+ It's simple like this:
29
+
30
+ After installation generate all administrative staff
31
+
32
+ $ rails g ideyabox:admin -f
33
+
34
+ Generate some model or scaffold for your project
35
+
36
+ Add */admin* route in your *config/routes.rb* in :admin namespace
37
+
38
+ namespace :admin do
39
+ root :to => "your_controller#your_action"
40
+ end
41
+
42
+ like this
43
+
44
+ namespace :admin do
45
+ root :to => "guests#index"
46
+ end
47
+
48
+ ## TODO
49
+
50
+ 1. Add search engine
51
+ 2. Add scopes to models
52
+ 2. Use it
22
53
 
23
54
  ## Contributing
24
55
 
Binary file
@@ -0,0 +1,35 @@
1
+ //= require modernizr.js
2
+ //= require jquery
3
+ //= require jquery-ui
4
+ //= require jquery_ujs
5
+ //= require swfobject.js
6
+ //= require jquery.uploadify.min
7
+ //= require jquery-ui.min.js
8
+ //= require jquery.ui.nestedSortable
9
+ //= require chosen.jquery.js
10
+
11
+ $(document).ready(function(){
12
+ $(".chosen_select").chosen();
13
+ $('.pagination').hide();
14
+
15
+ $('.zebra th a').live('click', function () {
16
+ $.getScript(this.href);
17
+ return false;
18
+ });
19
+
20
+ $('.visibility a').live('click', function(e){
21
+ e.preventDefault();
22
+ $(this).find('i').toggleClass('icon-eye-open').toggleClass('icon-eye-close not-work');
23
+
24
+ });
25
+
26
+ $('#sort_button').on('click', function (e) {
27
+ $.ajax( {
28
+ type: 'post',
29
+ data: $('#sort-list tbody').sortable('serialize') + '&authenticity_token=#{u(form_authenticity_token)}',
30
+ dataType: 'script',
31
+ url: $(this).attr('href')
32
+ });
33
+ e.preventDefault();
34
+ });
35
+ });
@@ -33,6 +33,9 @@ a.del {
33
33
  &:hover {color:#FF0000;}
34
34
  }
35
35
  .icon-large{font-size:1.5em;}
36
+ .horizontal_items {
37
+ display:none;
38
+ }
36
39
  .bright_link {
37
40
  background:$deepgreen;
38
41
  color:#fff;
@@ -63,8 +66,10 @@ table {
63
66
  width:100%;
64
67
  border-collapse:collapse;
65
68
  margin-bottom:10px;
69
+
66
70
  tr {
67
- &:first-child {border-top:1px solid $border_color;}
71
+ //&:first-child {border-top:1px solid $border_color;}
72
+ border-top:1px solid $border_color;
68
73
  border-bottom:1px solid $border_color;
69
74
  }
70
75
  td {
@@ -75,10 +80,20 @@ table {
75
80
  .right {text-align:right;vertical-align:middle;}
76
81
  td.icon a {width:15px;}
77
82
  td.handle {color:$deepgreen;cursor: move;}
83
+ td.icon {width:22px;}
84
+ }
85
+ .not-work {
86
+ color:$border_color;
78
87
  }
79
-
80
88
 
81
89
  table.zebra {
90
+ th {
91
+ font-size:1.2em;
92
+ background:$deepgreen;
93
+ color:$border_color;
94
+ a {color:$border_color;&:hover{color:#fff;}}
95
+ padding:0.5em 7px;
96
+ }
82
97
  border-right:solid 1px $border_color;
83
98
  border-left:solid 1px $border_color;
84
99
  tr:nth-child(2n+1) {
@@ -88,7 +103,6 @@ table.zebra {
88
103
  background:#fff;
89
104
  }
90
105
  }
91
- th {text-align:left;}
92
106
  li {list-style: none;}
93
107
 
94
108
  h1,h2,h3,h4,ul {margin:0;padding:0;}
@@ -261,6 +275,9 @@ ul.photos {
261
275
  a.del {text-indent:-9999px;position:absolute;right:0;bottom:0;}
262
276
  }
263
277
  }
278
+ #index_wr {
279
+ margin-top:10px;
280
+ }
264
281
  @mixin black_button {
265
282
  font:1em Helvetica, Arial, sans-serif;
266
283
  margin-bottom:10px;
@@ -271,7 +288,7 @@ ul.photos {
271
288
  border-radius: 3px;
272
289
  -webkit-border-radius: 3px;
273
290
  -moz-border-radius: 3px;
274
- text-shadow:none;
291
+ text-shadow:none;
275
292
  &:hover {
276
293
  color:#fff;
277
294
  border:none;
@@ -350,7 +367,9 @@ input[type=submit] {
350
367
  z-index:1000;
351
368
  position:relative;
352
369
  }
353
-
370
+ .alert {
371
+ background-color:$deepgreen;
372
+ }
354
373
  .notice {
355
374
  background-color:#57A957;
356
375
  background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));
@@ -4,7 +4,7 @@ module AdminHelper
4
4
  %Q{
5
5
  <script type="text/javascript">
6
6
  $(document).ready(function() {
7
- $('#sort-list').sortable( {
7
+ $('#sort-list tbody').sortable( {
8
8
  dropOnEmpty: false,
9
9
  cursor: 'crosshair',
10
10
  opacity: 0.75,
@@ -14,7 +14,7 @@ module AdminHelper
14
14
  update: function() {
15
15
  $.ajax( {
16
16
  type: 'post',
17
- data: $('#sort-list').sortable('serialize') + '&authenticity_token=#{u(form_authenticity_token)}',
17
+ data: $('#sort-list tbody').sortable('serialize') + '&authenticity_token=#{u(form_authenticity_token)}',
18
18
  dataType: 'script',
19
19
  url: '#{url}'
20
20
  })
@@ -26,6 +26,12 @@ module AdminHelper
26
26
  end
27
27
 
28
28
 
29
+ def sortable_columns(column, title = nil)
30
+ title ||= column.titleize
31
+ css_class = column == sort_column ? "current #{sort_direction}" : nil
32
+ direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
33
+ link_to title, {:sort => column, :direction => direction}, {:class => css_class}
34
+ end
29
35
 
30
36
  def current_url(overwrite={})
31
37
  url_for :only_path => false, :params => params.merge(overwrite)
Binary file
Binary file
@@ -5,14 +5,57 @@ module Ideyabox
5
5
  source_root File.expand_path('../templates', __FILE__)
6
6
 
7
7
  def generate_admin_layout
8
- directory "controllers/admin", "app/controllers/admin"
8
+ directory "controllers", "app/controllers"
9
9
  directory "views/admin", "app/views/admin"
10
10
  directory "views/layouts", "app/views/layouts"
11
+ directory "locales", "config/locales"
12
+ copy_file "assets/admin.scss.erb", "app/assets/stylesheets/admin.scss.erb"
13
+ copy_file "assets/admin.js", "app/assets/javascripts/admin.js"
11
14
  copy_file "tasks/seeds.rb", "db/seeds.rb"
12
15
  end
13
16
 
14
17
  def setup_routes
15
- route("namespace :admin do end")
18
+ route("namespace :admin do\n\n end")
19
+ end
20
+
21
+ def add_gems_for_admin_workflow
22
+ gem 'devise'
23
+ gem 'kaminari'
24
+ gem 'russian'
25
+ gem 'redactor-rails'
26
+ gem 'haml'
27
+ gem 'carrierwave'
28
+ gem 'mini_magick'
29
+ gem 'squeel'
30
+ gem 'sexy_validators'
31
+ gem_group :development do
32
+ gem 'haml-rails'
33
+ end
34
+
35
+ inside Rails.root do
36
+ run "bundle install"
37
+ end
38
+
39
+ end
40
+
41
+ def rake_tasks_for_admin
42
+ generate("devise:install")
43
+ generate("devise", "User")
44
+ generate("redactor:install")
45
+ # Next 4 lines for test purposes only
46
+ # generate("scaffold", "Ghost name:string desc:text position:integer visible:boolean --skip-stylesheets")
47
+ # generate("scaffold", "Guest name:string desc:text visible:boolean --skip-stylesheets")
48
+ # generate("scaffold", "Host name:string desc:text position:integer --skip-stylesheets")
49
+ # generate("scaffold", "Post name:string desc:text --skip-stylesheets")
50
+ rake("db:migrate")
51
+ rake("db:seed")
52
+ end
53
+
54
+ def initialize_git_repo
55
+ git :init
56
+ git :add => "."
57
+ git :add => "-u"
58
+ git :commit => "-m \"First commit!\""
16
59
  end
17
60
 
18
61
  end
@@ -0,0 +1,6 @@
1
+ //= require default.js
2
+ //= require_self
3
+
4
+ $(document).ready(function(){
5
+
6
+ });
@@ -0,0 +1,3 @@
1
+ //*= require default
2
+ //
3
+ //*= require_self
@@ -0,0 +1,13 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+ layout :layout_by_resource
4
+
5
+ def layout_by_resource
6
+ if devise_controller?
7
+ "login"
8
+ else
9
+ "application"
10
+ end
11
+ end
12
+
13
+ end
@@ -0,0 +1,36 @@
1
+ # Другие переводы на https://github.com/plataformatec/devise/wiki/I18n
2
+
3
+ ru:
4
+ devise:
5
+ sessions:
6
+ link: 'Войти'
7
+ signed_in: 'Вы вошли.'
8
+ signed_out: 'Вы вышли.'
9
+ unauthenticated: 'Вы должны войти или зарегистрироваться, прежде чем сможете продолжить.'
10
+ unconfirmed: 'Вы должны подтвердить Ваш аккаунт, прежде чем сможете продолжить.'
11
+ locked: 'Ваш аккаунт заблокирован.'
12
+ invalid: 'Неверный пароль или email.'
13
+ invalid_token: 'Неверный ключ аутентификации.'
14
+ timeout: 'Ваша сессия закончена, пожалуйста, войдите еще раз, чтобы продолжить.'
15
+ inactive: 'Ваш аккаунт еще не активирован.'
16
+ passwords:
17
+ link: 'Забыли пароль?'
18
+ send_instructions: 'Вы получите email с инструкциями о том, как сбросить Ваш пароль, через несколько минут.'
19
+ updated: 'Ваш пароль изменен. Сейчас Вы можете войти.'
20
+ confirmations:
21
+ link: "Не получили иструкции для подтверждения аккаунта?"
22
+ send_instructions: 'Вы получите письмо с инструкциями о том, как подтвердить Ваш аккаунт.'
23
+ confirmed: 'Ваш аккаунт успешно подтвержден. Вы вошли.'
24
+ registrations:
25
+ link: 'Регистрация'
26
+ signed_up: 'Вы успешно зарегистрировались.'
27
+ updated: 'Ваш аккаунт изменен.'
28
+ destroyed: 'До свидания! Ваш аккаунт удален. Мы надеемся вскоре снова Вас увидеть.'
29
+ unlocks:
30
+ link: "Не получили инструкции для разблокировки аккаунта?"
31
+ send_instructions: 'Вы получите письмо с инструкциями о том, как разблокировать Ваш аккаунт, через несколько минут.'
32
+ unlocked: 'Ваш аккаунт разблокирован. Вы вошли.'
33
+ mailer:
34
+ confirmation_instructions: 'Инструкции для подтверждения'
35
+ reset_password_instructions: 'Инструкции для сброса пароля'
36
+ unlock_instructions: 'Инструкции для разблокировки'
@@ -0,0 +1,32 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ hello: "Hello world"
6
+ flash:
7
+ notice:
8
+ was_added: "was added"
9
+ was_updated: "was updated"
10
+ was_deleted: "was deleted"
11
+ confirm:
12
+ delete: "Are you sure?"
13
+ sort:
14
+ make_default: "Sorting will change order of records on site. Are you sure?"
15
+ sort:
16
+ by_position: "Sort by position"
17
+ make_default: "Make this sort default"
18
+ back: "Back"
19
+ add: "Add"
20
+ edit: "Edit"
21
+ save: "Save"
22
+ save_errors: "Errors"
23
+ sign_out: "Sign out"
24
+ activerecord:
25
+ # Model names translations. Using in Model.human_name().
26
+ models:
27
+ # user: "User"
28
+ # Model attribute names translations. Using in Model.human_attribute_name(attribute).
29
+ attributes:
30
+ # user:
31
+ # name: "Name"
32
+ # desc: "Description"
@@ -0,0 +1,31 @@
1
+ # Файл локалиации на русский. Добавьте другие файлики для добавки других локалей.
2
+ # Гляньте https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale чтобы найти что-нибудь для себя.
3
+
4
+ ru:
5
+ hello: "Здравствуйте!"
6
+ flash:
7
+ notice:
8
+ was_added: "добавлен"
9
+ was_edited: "обновлен"
10
+ was_deleted: "удален"
11
+ confirm:
12
+ delete: "Точно удалить?"
13
+ sort:
14
+ make_default: "Сортировка изменит текущий порядок отображения записей на сайте. Вы точно уверены?"
15
+ sort:
16
+ by_position: "Сортировка по позициям"
17
+ make_default: "Сделать сортировкой по умолчанию"
18
+ back: "Назад"
19
+ add: "Добавить"
20
+ edit: "Редактировать"
21
+ save: "Сохранить"
22
+ save_errors: "Ошибки при сохранении"
23
+ sign_out: "Выход"
24
+ activerecord:
25
+ # Перевод названий моделей. Используется в Model.human_name().
26
+ models:
27
+ # user: "Пользователь"
28
+ # Перевод названий атрибутов моделей. Используется в Model.human_attribute_name(attribute).
29
+ attributes:
30
+ # user:
31
+ # name: "Имя"
@@ -2,9 +2,8 @@
2
2
  #header_wrapper
3
3
 
4
4
  #center
5
- = link_to "Application", root_path, :target => :_blank
6
- = '/'
7
- = t(@active)
5
+ = link_to image_tag("admin/rdws_cat.png"), admin_root_path, :id => 'logo'
6
+ = link_to Rails.application.class.parent_name, root_path, :target => :_blank, :id=>'application_link'
8
7
  #search
9
8
  = form_tag "/", :id => :subscription do
10
9
  = text_field_tag :search, nil, :placeholder => "search"
@@ -1,4 +1,4 @@
1
- - @active = :section if ["controllers"].include? controller.controller_name
1
+ - @active = :section if %w{}.include? controller.controller_name
2
2
 
3
3
  #launchbar
4
4
  %li.arrow= link_to raw("&darr;"), "#"
@@ -7,4 +7,4 @@
7
7
 
8
8
  %ul.user_panel
9
9
  %li= link_to current_user.email, "#"
10
- %li= link_to "Выход", destroy_user_session_path, :method => :delete
10
+ %li= link_to t('sign_out'), destroy_user_session_path, :method => :delete
@@ -2,5 +2,4 @@
2
2
  - a = controller.action_name
3
3
  %ul#nav
4
4
  -case @active
5
- -when :section
6
- %li{:class => "#{'active' if c=='pages' unless a=='menu'}"}= link_to "Root", admin_root_path
5
+ -when :section
@@ -2,15 +2,11 @@
2
2
  %html{:xmlns => "http://www.w3.org/1999/xhtml", "xml:lang" => "en"}
3
3
  %head
4
4
  %title
5
- Хиконикс
6
- |
7
5
  = @page_title
8
6
  = stylesheet_link_tag "admin"
9
7
  = javascript_include_tag "admin"
10
8
 
11
9
  = redactor_lang("ru")
12
- /= include_imperavi_stylesheet
13
- /= include_imperavi_javascript
14
10
  = yield :js
15
11
  = csrf_meta_tag
16
12
  %body
@@ -33,7 +29,4 @@
33
29
  = yield
34
30
  #previews
35
31
  = yield(:preview)
36
- = debug(params) if Rails.env == "development"
37
- -#= request.ip
38
- -#= request.location.city
39
- -#= request.location.country
32
+ = debug(params) if Rails.env == "development"
@@ -2,7 +2,7 @@
2
2
  %html.login{:xmlns => "http://www.w3.org/1999/xhtml", "xml:lang" => "en"}
3
3
  %head
4
4
  %meta{"http-equiv" => "Content-Type", :content => "text/html;charset=UTF-8"}
5
- %title= ("Вход на сайт")+" | Хиконикс"
5
+ %title Вход на сайт
6
6
  = stylesheet_link_tag 'admin'
7
7
  = javascript_include_tag "admin"
8
8
  = csrf_meta_tag
@@ -0,0 +1,173 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/generated_attribute'
3
+
4
+ module Ideyabox
5
+ module Generators
6
+ class ScaffoldGenerator < ::Rails::Generators::Base
7
+ source_root File.expand_path('../templates', __FILE__)
8
+ argument :controller_path, :type => :string
9
+ argument :model_name, :type => :string, :required => false
10
+ argument :layout, :type => :string, :default => "application",
11
+ :banner => "Specify application layout"
12
+
13
+ def initialize(args, *options)
14
+ super(args, *options)
15
+ initialize_views_variables
16
+ end
17
+
18
+ def copy_views
19
+ generate_views
20
+ end
21
+
22
+ def add_locale_templates
23
+ add_to_locales
24
+ end
25
+
26
+ def add_resources_and_root
27
+ add_resource_route
28
+ end
29
+
30
+ def updated_admin_layout
31
+ add_to_launchbar_items
32
+ add_to_topbar_items
33
+ end
34
+
35
+ protected
36
+
37
+ def initialize_views_variables
38
+ @base_name, @controller_class_path, @controller_file_path, @controller_class_nesting, @controller_class_nesting_depth = extract_modules(controller_path)
39
+ @controller_routing_path = @controller_file_path.gsub(/\//, '_')
40
+ @model_name = @controller_class_nesting + "::#{@base_name.singularize.camelize}" unless @model_name
41
+ @model_name = @model_name.camelize
42
+ end
43
+
44
+ def controller_routing_path
45
+ @controller_routing_path
46
+ end
47
+
48
+ def singular_controller_routing_path
49
+ @controller_routing_path.singularize
50
+ end
51
+
52
+ def model_name
53
+ @model_name
54
+ end
55
+
56
+ def plural_model_name
57
+ @model_name.pluralize
58
+ end
59
+
60
+ def resource_name
61
+ @model_name.demodulize.underscore
62
+ end
63
+
64
+ def plural_resource_name
65
+ resource_name.pluralize
66
+ end
67
+
68
+ def sort_priority(column_name)
69
+ case column_name
70
+ when "position" then 1
71
+ when "visible" then 2
72
+ when "name" then 3
73
+ when "title" then 3
74
+ else 5
75
+ end
76
+ end
77
+
78
+ def columns
79
+ begin
80
+ excluded_column_names = %w[id created_at updated_at]
81
+ @model_name.constantize.columns.reject{|c| excluded_column_names.include?(c.name) || c.name.index("_id") }.sort{|a, b| sort_priority(a.name) <=> sort_priority(b.name)}.collect{|c| ::Rails::Generators::GeneratedAttribute.new(c.name, c.type)}
82
+ rescue NoMethodError
83
+ @model_name.constantize.fields.collect{|c| c[1]}.reject{|c| excluded_column_names.include?(c.name) || c.name.index("_id") }.collect{|c| ::Rails::Generators::GeneratedAttribute.new(c.name, c.type.to_s)}
84
+ end
85
+ end
86
+
87
+ def column_names
88
+ @model_name.constantize.column_names
89
+ end
90
+
91
+ def extract_modules(name)
92
+ modules = name.include?('/') ? name.split('/') : name.split('::')
93
+ name = modules.pop
94
+ path = modules.map { |m| m.underscore }
95
+ file_path = (path + [name.underscore]).join('/')
96
+ nesting = modules.map { |m| m.camelize }.join('::')
97
+ [name, path, file_path, nesting, modules.size]
98
+ end
99
+
100
+ def generate_views
101
+ views = {
102
+ "index.html.#{ext}" => "app/views/admin/#{@controller_file_path}/index.html.#{ext}",
103
+ "edit.html.#{ext}" => "app/views/admin/#{@controller_file_path}/edit.html.#{ext}",
104
+ "index.js.#{ext}" => "app/views/admin/#{@controller_file_path}/index.js.#{ext}",
105
+ "_index.html.#{ext}" => "app/views/admin/#{@controller_file_path}/_index.html.#{ext}",
106
+ "_sort_buttons.html.#{ext}" => "app/views/admin/#{@controller_file_path}/_sort_buttons.html.#{ext}"
107
+ }
108
+ views.delete("_sort_buttons.html.#{ext}") unless column_names.include?("position")
109
+ selected_views = views
110
+ options.engine == generate_erb(selected_views)
111
+ end
112
+
113
+ def generate_erb(views)
114
+ views.each do |template_name, output_path|
115
+ template template_name, output_path
116
+ end
117
+ generate_controller
118
+ end
119
+
120
+ def ext
121
+ :haml
122
+ end
123
+
124
+ def generate_controller
125
+ template "controllers/controller.rb", "app/controllers/admin/#{plural_resource_name}_controller.rb"
126
+ end
127
+
128
+ def add_resource_route
129
+ resources_string = "\n resources :#{plural_resource_name} do\n"
130
+ sort_string = " post \"sort\", :on => :collection\n"
131
+ toggleshow_string = " get \"toggleshow\", :on => :member\n"
132
+
133
+ if column_names.include?("visible") && column_names.include?("position")
134
+ final_string = "#{resources_string}#{sort_string}#{toggleshow_string} end\n"
135
+ elsif column_names.include?("visible")
136
+ final_string = "#{resources_string}#{toggleshow_string} end\n"
137
+ elsif column_names.include?("position")
138
+ final_string = "#{resources_string}#{sort_string} end\n"
139
+ else
140
+ final_string = "\n resources :#{plural_resource_name}\n"
141
+ end
142
+
143
+ inject_into_file "config/routes.rb", final_string, :after => "\n namespace :admin do\n"
144
+ end
145
+
146
+ def add_to_launchbar_items
147
+ final_string = "#{plural_resource_name} "
148
+
149
+ inject_into_file "app/views/admin/shared/_launchbar.html.haml", final_string, :after => "- @active = :section if %w{"
150
+ end
151
+
152
+ def add_to_topbar_items
153
+ final_string = "\n %li{:class => \"\#\{\'active\' if c == \'#{plural_resource_name}\'}\"\}= link_to \'#{plural_resource_name}\', admin_#{plural_resource_name}_path"
154
+
155
+ inject_into_file "app/views/admin/shared/_topbar.html.haml", final_string, :after => "-when :section"
156
+ end
157
+
158
+ def add_to_locales
159
+ locales = [:ru, :en]
160
+
161
+ attributes = column_names.collect {|column| " #{column}: \"#{column}\"\n"}
162
+
163
+ attributes_string = " #{resource_name}:\n#{attributes.join}"
164
+
165
+ locales.each do |locale|
166
+ inject_into_file "config/locales/#{locale}.yml", " #{resource_name}: \"#{resource_name}\"\n", :after => "models:\n"
167
+ inject_into_file "config/locales/#{locale}.yml", attributes_string, :after => "attributes:\n"
168
+ end
169
+ end
170
+
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,38 @@
1
+ %table.zebra<%= "#sort-list" if column_names.include?("position") %>
2
+ %thead
3
+ %tr
4
+ <%- columns.each do |column| -%>
5
+ <%- if column.name=='position' || column.name=='visible'-%>
6
+ %th{:class => <%= (column.name=='position') ? "\'position\'" : "\'visibility\'" %>}
7
+ <%- else -%>
8
+ <%= "%th= sortable_columns \"#{column.name}\", #{resource_name.capitalize}.human_attribute_name(\"#{column.name}\")" %>
9
+ <%- end -%>
10
+ <%- end -%>
11
+ %th
12
+
13
+ %tbody
14
+ - @<%= plural_resource_name %>.each do |<%= resource_name %>|
15
+ <%- if column_names.include?("position") -%>
16
+ %tr{:id => "<%= resource_name %>_#{<%= resource_name %>.id}"}
17
+ <%- else -%>
18
+ %tr
19
+ <%- end -%>
20
+ <%- columns.each do |column| -%>
21
+ <%- if column.name == "position" -%>
22
+ %td.icon.handle
23
+ %i{:class => "icon-move icon-large"}
24
+ <%- elsif column.name == "visible" -%>
25
+ %td.icon.visibility
26
+ = link_to [:toggleshow, :admin, <%= resource_name %>], :remote => true do
27
+ %i{:class => (<%= resource_name %>.visible? ? "icon-eye-open icon-large" : "icon-eye-close icon-large not-work")}
28
+ <%- else -%>
29
+ %td= link_to <%= resource_name %>.<%= column.name %>, [:edit, :admin, <%= resource_name %>]
30
+ <%- end -%>
31
+ <%- end -%>
32
+ %td.right
33
+ = link_to [:admin, <%= resource_name %>], :method => :delete, :confirm => "#{t 'confirm.delete'}", class: :del do
34
+ %span Удалить
35
+ %i{:class => "icon-trash icon-large"}
36
+ <%- if column_names.include?("position") -%>
37
+ = sortable sort_admin_<%= plural_resource_name %>_path
38
+ <%- end -%>
@@ -0,0 +1,4 @@
1
+ - unless @<%= plural_resource_name %>.empty?
2
+ %ul.horizontal_items
3
+ %li= link_to t('sort.by_position'), admin_<%= plural_resource_name %>_path, :class => "bright_link"
4
+ %li= link_to t('sort.make_default'), sort_admin_<%= plural_resource_name %>_path, :id => 'sort_button', :confirm => t('confirm.sort.make_default'), :class => "bright_link"
@@ -0,0 +1,67 @@
1
+ #coding: utf-8
2
+ class Admin::<%= plural_resource_name.capitalize -%>Controller < Admin::ApplicationController
3
+ helper_method :sort_column, :sort_direction
4
+ <%- if column_names.include?("visible") -%>
5
+ def toggleshow
6
+ @<%= plural_resource_name %> = <%= resource_name.capitalize -%>.find(params[:id])
7
+ @<%= plural_resource_name %>.toggle(:visible)
8
+ @<%= plural_resource_name %>.save
9
+ render :nothing => true
10
+ end
11
+ <%- end -%><%- if column_names.include?("position") -%>
12
+ def sort
13
+ params[:<%= resource_name %>].each_with_index do |id, idx|
14
+ @<%= resource_name %> = <%= resource_name.capitalize -%>.find(id)
15
+ @<%= resource_name %>.position = idx
16
+ @<%= resource_name %>.save
17
+ end
18
+ render :nothing => true
19
+ end
20
+ <%- end -%>
21
+ def index
22
+ @<%= plural_resource_name %> = <%= resource_name.capitalize -%>.order(sort_column + " " + sort_direction)
23
+ end
24
+
25
+ def new
26
+ @<%= resource_name %> = <%= resource_name.capitalize -%>.new
27
+ render 'edit'
28
+ end
29
+
30
+ def edit
31
+ @<%= resource_name %> = <%= resource_name.capitalize -%>.find(params[:id])
32
+ end
33
+
34
+ def create
35
+ @<%= resource_name %> = <%= resource_name.capitalize -%>.new(params[:<%= resource_name %>])
36
+ if @<%= resource_name %>.save
37
+ redirect_to admin_<%= plural_resource_name %>_path, :notice => "#{<%= resource_name.capitalize %>.model_name.human} #{t 'flash.notice.was_added'}"
38
+ else
39
+ render 'edit'
40
+ end
41
+ end
42
+
43
+ def update
44
+ @<%= resource_name %> = <%= resource_name.capitalize -%>.find(params[:id])
45
+ if @<%= resource_name %>.update_attributes(params[:<%= resource_name %>])
46
+ redirect_to admin_<%= plural_resource_name %>_path, :notice => "#{<%= resource_name.capitalize %>.model_name.human} #{t 'flash.notice.was_updated'}"
47
+ else
48
+ render 'edit'
49
+ end
50
+ end
51
+
52
+ def destroy
53
+ @<%= resource_name %> = <%= resource_name.capitalize -%>.find(params[:id])
54
+ @<%= resource_name %>.destroy
55
+ redirect_to admin_<%= plural_resource_name %>_path, :alert => "#{<%= resource_name.capitalize %>.model_name.human} #{t 'flash.notice.was_deleted'}"
56
+ end
57
+
58
+ private
59
+
60
+ def sort_column
61
+ <%= resource_name.capitalize -%>.column_names.include?(params[:sort]) ? params[:sort] : <%= column_names.include?("position") ? "\'position\'" : "\'created_at\'" %>
62
+ end
63
+
64
+ def sort_direction
65
+ %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
66
+ end
67
+ end
@@ -0,0 +1,38 @@
1
+ - content_for :page_header do
2
+ %p= link_to t('back'), admin_<%= controller_routing_path %>_path, :class => "bright_link"
3
+ %h1
4
+ - if @<%= resource_name %>.new_record?
5
+ = "#{t 'add'} #{<%= resource_name.capitalize %>.model_name.human}"
6
+ - else
7
+ = "#{t 'edit'} #{<%= resource_name.capitalize %>.model_name.human}"
8
+
9
+ = form_for [:admin, @<%= resource_name %>] do |f|
10
+ - if @<%= resource_name %>.errors.any?
11
+ #error_explanation
12
+ %h2= "#{t 'save_errors'}: #{@<%= resource_name %>.errors.count}"
13
+ %ul
14
+ - @<%= resource_name %>.errors.full_messages.each do |msg|
15
+ %li= msg
16
+ %table
17
+ <%- columns.each do |column| -%>
18
+ <%- unless column.name == "position" %>
19
+ <%- if column.field_type.to_s == "text_area" -%>
20
+ %tr
21
+ %td{colspan: 2}
22
+ = f.label :<%= column.name %>
23
+ %br
24
+ = f.<%= column.field_type -%> :<%= column.name %>
25
+ <%- elsif column.field_type.to_s == "check_box" -%>
26
+ %tr
27
+ %th{colspan: 2}
28
+ = f.<%= column.field_type -%> :<%= column.name %>
29
+ = f.label :<%= column.name %>
30
+ <%- else -%>
31
+ %tr
32
+ %th= f.label :<%= column.name %>
33
+ %td= f.<%= column.field_type -%> :<%= column.name %>
34
+ <%- end -%>
35
+ <%- end -%>
36
+ <%- end -%>
37
+ .actions
38
+ = f.submit t('save')
@@ -0,0 +1,9 @@
1
+ - content_for(:page_header) do
2
+ %p= link_to "#{t 'add'} #{<%= resource_name.capitalize %>.model_name.human}", new_admin_<%= singular_controller_routing_path %>_path, :class => "bright_link"
3
+ %h1= link_to '<%= plural_resource_name %>', admin_<%= plural_resource_name %>_path
4
+ -#= paginate @<%= plural_resource_name %>
5
+ <%= if column_names.include?("position")
6
+ "= render 'sort_buttons' "
7
+ end %>
8
+ #index_wr
9
+ <%= "= render 'index' " %>
@@ -0,0 +1,7 @@
1
+ :plain
2
+ $("#index_wr").html("#{ escape_javascript render "index" }");
3
+ $('.asc').append(" &darr;");
4
+ $('.desc').append(" &uarr;");
5
+
6
+ $('.horizontal_items').show();
7
+ $('td.handle, th.position').hide();
@@ -1,3 +1,3 @@
1
1
  module Ideyabox
2
- VERSION = "0.0.6"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ideyabox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-11-06 00:00:00.000000000 Z
13
+ date: 2012-11-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: russian
@@ -185,15 +185,15 @@ files:
185
185
  - app/assets/images/admin/uploadify/uploadify.css
186
186
  - app/assets/images/admin/uploadify/uploadify.swf
187
187
  - app/assets/javascripts/.DS_Store
188
- - app/assets/javascripts/admin.js
189
188
  - app/assets/javascripts/chosen.jquery.js
189
+ - app/assets/javascripts/default.js
190
190
  - app/assets/javascripts/jquery.ui.nestedSortable.js
191
191
  - app/assets/javascripts/jquery.uploadify.min.js
192
192
  - app/assets/javascripts/modernizr.js
193
193
  - app/assets/javascripts/swfobject.js
194
194
  - app/assets/stylesheets/.DS_Store
195
- - app/assets/stylesheets/admin.scss.erb
196
195
  - app/assets/stylesheets/chosen.scss.erb
196
+ - app/assets/stylesheets/default.scss.erb
197
197
  - app/assets/stylesheets/font-awesome.css
198
198
  - app/assets/stylesheets/font_awesome/.gitignore
199
199
  - app/assets/stylesheets/font_awesome/font/fontawesome-webfont.eot
@@ -205,11 +205,20 @@ files:
205
205
  - app/helpers/admin_helper.rb
206
206
  - app/tasks/reset_db.rake
207
207
  - ideyabox.gemspec
208
+ - lib/generators/.DS_Store
209
+ - lib/generators/ideyabox/.DS_Store
210
+ - lib/generators/ideyabox/admin/.DS_Store
208
211
  - lib/generators/ideyabox/admin/admin_generator.rb
209
212
  - lib/generators/ideyabox/admin/templates/.DS_Store
213
+ - lib/generators/ideyabox/admin/templates/assets/admin.js
214
+ - lib/generators/ideyabox/admin/templates/assets/admin.scss.erb
210
215
  - lib/generators/ideyabox/admin/templates/controllers/.DS_Store
211
216
  - lib/generators/ideyabox/admin/templates/controllers/admin/.DS_Store
212
217
  - lib/generators/ideyabox/admin/templates/controllers/admin/application_controller.rb
218
+ - lib/generators/ideyabox/admin/templates/controllers/application_controller.rb
219
+ - lib/generators/ideyabox/admin/templates/locales/devise.ru.yml
220
+ - lib/generators/ideyabox/admin/templates/locales/en.yml
221
+ - lib/generators/ideyabox/admin/templates/locales/ru.yml
213
222
  - lib/generators/ideyabox/admin/templates/tasks/seeds.rb
214
223
  - lib/generators/ideyabox/admin/templates/views/.DS_Store
215
224
  - lib/generators/ideyabox/admin/templates/views/admin/.DS_Store
@@ -219,6 +228,15 @@ files:
219
228
  - lib/generators/ideyabox/admin/templates/views/layouts/admin.html.haml
220
229
  - lib/generators/ideyabox/admin/templates/views/layouts/login.html.haml
221
230
  - lib/generators/ideyabox/assets/assets_generator.rb
231
+ - lib/generators/ideyabox/scaffold/.DS_Store
232
+ - lib/generators/ideyabox/scaffold/scaffold_generator.rb
233
+ - lib/generators/ideyabox/scaffold/templates/.DS_Store
234
+ - lib/generators/ideyabox/scaffold/templates/_index.html.haml
235
+ - lib/generators/ideyabox/scaffold/templates/_sort_buttons.html.haml
236
+ - lib/generators/ideyabox/scaffold/templates/controllers/controller.rb
237
+ - lib/generators/ideyabox/scaffold/templates/edit.html.haml
238
+ - lib/generators/ideyabox/scaffold/templates/index.html.haml
239
+ - lib/generators/ideyabox/scaffold/templates/index.js.haml
222
240
  - lib/ideyabox.rb
223
241
  - lib/ideyabox/engine.rb
224
242
  - lib/ideyabox/version.rb
@@ -1,13 +0,0 @@
1
- //= require modernizr.js
2
- //= require jquery
3
- //= require jquery-ui
4
- //= require jquery_ujs
5
- //= require swfobject.js
6
- //= require jquery.uploadify.min
7
- //= require jquery-ui.min.js
8
- //= require jquery.ui.nestedSortable
9
- //= require chosen.jquery.js
10
-
11
- $(document).ready(function(){
12
-
13
- });