binda 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -2
  3. data/Rakefile +2 -1
  4. data/app/assets/javascripts/binda/dist/binda.bundle.js +75 -75
  5. data/app/assets/stylesheets/binda/settings/common.scss +4 -0
  6. data/app/controllers/binda/application_controller.rb +1 -1
  7. data/app/controllers/binda/boards_controller.rb +73 -0
  8. data/app/controllers/binda/components_controller.rb +18 -44
  9. data/app/controllers/binda/field_groups_controller.rb +36 -24
  10. data/app/controllers/binda/field_settings_controller.rb +5 -5
  11. data/app/controllers/binda/manage/users_controller.rb +2 -9
  12. data/app/controllers/binda/structures_controller.rb +6 -13
  13. data/app/controllers/concerns/binda/default_helpers.rb +226 -0
  14. data/app/controllers/concerns/binda/fieldable_helpers.rb +44 -0
  15. data/app/helpers/binda/boards_helper.rb +13 -0
  16. data/app/helpers/binda/components_helper.rb +0 -5
  17. data/app/helpers/binda/field_settings_helper.rb +1 -1
  18. data/app/models/binda/asset.rb +0 -8
  19. data/app/models/binda/binda.rb +7 -0
  20. data/app/models/binda/binding.rb +4 -4
  21. data/app/models/binda/board.rb +41 -0
  22. data/app/models/binda/category.rb +7 -3
  23. data/app/models/binda/checkbox.rb +1 -3
  24. data/app/models/binda/choice.rb +31 -1
  25. data/app/models/binda/component.rb +7 -22
  26. data/app/models/binda/field_group.rb +13 -7
  27. data/app/models/binda/field_setting.rb +40 -29
  28. data/app/models/binda/gallery.rb +0 -7
  29. data/app/models/binda/radio.rb +1 -1
  30. data/app/models/binda/repeater.rb +13 -20
  31. data/app/models/binda/selection.rb +17 -0
  32. data/app/models/binda/string.rb +4 -0
  33. data/app/models/binda/structure.rb +65 -7
  34. data/app/models/concerns/binda/{component_model_helper.rb → fieldable_associations.rb} +102 -31
  35. data/app/views/binda/boards/edit.html.erb +7 -0
  36. data/app/views/binda/components/edit.html.erb +4 -1
  37. data/app/views/binda/components/index.html.erb +2 -0
  38. data/app/views/binda/components/new.html.erb +1 -1
  39. data/app/views/binda/field_groups/_form_body.html.erb +8 -8
  40. data/app/views/binda/field_groups/_form_item.html.erb +3 -3
  41. data/app/views/binda/field_groups/_form_item_choice.erb +11 -8
  42. data/app/views/binda/field_groups/_form_section.html.erb +5 -5
  43. data/app/views/binda/field_groups/_form_section_repeater.html.erb +3 -3
  44. data/app/views/binda/field_groups/edit.html.erb +1 -1
  45. data/app/views/binda/field_groups/new.html.erb +1 -1
  46. data/app/views/binda/{components → fieldable}/_form_body.html.erb +9 -9
  47. data/app/views/binda/{components → fieldable}/_form_item_asset.html.erb +0 -0
  48. data/app/views/binda/{components → fieldable}/_form_item_date.html.erb +0 -0
  49. data/app/views/binda/{components → fieldable}/_form_item_gallery.html.erb +0 -0
  50. data/app/views/binda/{components → fieldable}/_form_item_new_repeater.html.erb +5 -5
  51. data/app/views/binda/{components → fieldable}/_form_item_repeater.html.erb +8 -9
  52. data/app/views/binda/fieldable/_form_item_selections.html.erb +99 -0
  53. data/app/views/binda/fieldable/_form_item_string.html.erb +19 -0
  54. data/app/views/binda/{components → fieldable}/_form_item_text.html.erb +2 -11
  55. data/app/views/binda/fieldable/_form_section.html.erb +52 -0
  56. data/app/views/binda/fieldable/_form_section_repeater.html.erb +48 -0
  57. data/app/views/binda/fieldable/_form_sidebar.html.erb +35 -0
  58. data/app/views/binda/structures/_form_body.html.erb +6 -0
  59. data/app/views/binda/structures/_form_section.html.erb +1 -1
  60. data/app/views/binda/structures/edit.html.erb +3 -0
  61. data/app/views/binda/structures/index.html.erb +2 -0
  62. data/app/views/layouts/binda/_flash.html.erb +3 -3
  63. data/app/views/layouts/binda/_sidebar.html.erb +20 -15
  64. data/config/locales/en.yml +4 -0
  65. data/config/routes.rb +18 -21
  66. data/db/migrate/1_create_binda_tables.rb +12 -6
  67. data/lib/binda/engine.rb +5 -1
  68. data/lib/binda/version.rb +1 -1
  69. data/lib/generators/binda/install/install_generator.rb +9 -0
  70. data/lib/generators/binda/setup/setup_generator.rb +50 -7
  71. data/lib/tasks/binda.rake +78 -24
  72. metadata +100 -31
  73. data/app/controllers/binda/settings_controller.rb +0 -75
  74. data/app/controllers/concerns/binda/component_controller_helper.rb +0 -16
  75. data/app/helpers/binda/settings_helper.rb +0 -13
  76. data/app/models/binda/select.rb +0 -7
  77. data/app/models/binda/setting.rb +0 -42
  78. data/app/views/binda/components/_form_item_selectable.html.erb +0 -72
  79. data/app/views/binda/components/_form_section.html.erb +0 -42
  80. data/app/views/binda/components/_form_section_repeater.html.erb +0 -41
  81. data/app/views/binda/components/_form_sidebar.html.erb +0 -34
  82. data/app/views/binda/settings/_dashboard_form.html.erb +0 -51
  83. data/app/views/binda/settings/_form.html.erb +0 -52
  84. data/app/views/binda/settings/dashboard.html.erb +0 -9
  85. data/app/views/binda/settings/edit.html.erb +0 -8
  86. data/app/views/binda/settings/index.html.erb +0 -34
  87. data/app/views/binda/settings/new.html.erb +0 -8
@@ -0,0 +1,35 @@
1
+ <h4><%= "#{ t :setting }".pluralize.capitalize %></h4>
2
+
3
+ <% if @structure.has_categories %>
4
+
5
+ <% if @structure.categories.any? %>
6
+ <h5><%= t(:category).capitalize %></h5>
7
+ <%= f.association :categories, as: :radio_buttons, collection: @structure.categories ,checked: @instance.category_ids, include_blank: false %>
8
+ <% end %>
9
+
10
+ <% if @instance.slug.nil? %>
11
+ <h5>
12
+ <%= t( :hint_create_parent_before_child, arg1: "#{ t :category }", arg2: "#{ t :instance }" ).capitalize %>
13
+ </h5>
14
+ <% else %>
15
+ <a class="main-header--link btn btn-default" href="<%= new_structure_category_path( @structure ) %>">
16
+ <%= "#{ t :new }".capitalize %> <%= t :category %>
17
+ </a>
18
+ <% end %>
19
+
20
+ <% end %>
21
+
22
+ <hr>
23
+
24
+ <% if @instance.respond_to? :publish_state %>
25
+ <h5><%= t(:publish_settings).capitalize %></h5>
26
+ <%= f.input :publish_state, as: :radio_buttons, collection: [ 'draft', 'published' ], checked: f.object.publish_state %>
27
+ <hr>
28
+ <% end %>
29
+
30
+ <%= f.button :submit, 'Save changes', class: 'btn btn-primary' %>
31
+
32
+
33
+ <% unless @instance.new_record? || @instance.structure.instance_type == 'board' %>
34
+ <a class="form-body--delete btn btn-default" href="<%= url_for([@structure, @instance]) %>" data-method="delete" data-confirm="This operation will delete this <%= @structure.name %> and there is no coming back. Are you ok with that?">Delete <%= @structure.name.capitalize %> <span class="glyphicon glyphicon-trash" aria-hidden="true"></span></a>
35
+ <% end %>
@@ -40,10 +40,16 @@
40
40
  <div class="form-section--narrow-container row">
41
41
  <div class="col-sm-12">
42
42
  <h4><%= "#{ t :publish }".capitalize %></h4>
43
+ <h5><%= "#{ t :structure_instance_type }".capitalize %></h5>
44
+ <%= f.input :instance_type, as: :radio_buttons, collection: ['component','board'] %>
43
45
  <h5><%= "#{ t :structure_has_categories }".capitalize %></h5>
44
46
  <%= f.input :has_categories, as: :radio_buttons %>
45
47
  <hr>
46
48
  <%= f.button :submit, 'Save changes', class: 'btn btn-primary' %>
49
+
50
+ <% unless @structure.new_record? %>
51
+ <a class="form-body--delete btn btn-default" href="<%= url_for([@structure]) %>" data-method="delete" data-confirm="This operation will delete this structure and there is no coming back. Are you ok with that?">Delete Structure <span class="glyphicon glyphicon-trash" aria-hidden="true"></span></a>
52
+ <% end %>
47
53
  </div>
48
54
  </div>
49
55
 
@@ -4,7 +4,7 @@
4
4
  <%# - - - - - - - - - - - - %>
5
5
  <%# FORM ITEM %>
6
6
  <%# - - - - - - - - - - - - %>
7
- <%= f.simple_fields_for :field_groups, f.object.field_groups.order( :position ) do |ff| %>
7
+ <%= f.simple_fields_for :field_groups, f.object.field_groups.order( :position, :name ) do |ff| %>
8
8
 
9
9
  <div class="form-item">
10
10
 
@@ -1,4 +1,7 @@
1
1
  <% content_for :header do %>
2
+ <div class="main-header--buttons">
3
+ <%= link_to 'New Structure', new_structure_path, class: 'main-header--link btn btn-primary' %>
4
+ </div>
2
5
  <h3>Editing Structure</h3>
3
6
  <a href="<%= structures_path %>" class="main-header--back"><span class="glyphicon glyphicon-list"></span> Back to list</a>
4
7
  <% end %>
@@ -27,6 +27,8 @@
27
27
  <tbody>
28
28
  </table>
29
29
 
30
+ <%= paginate @structures %>
31
+
30
32
  <%= link_to 'New Structure', new_structure_path, class: 'main-header--link btn btn-default' %>
31
33
 
32
34
  </div>
@@ -3,8 +3,8 @@
3
3
  <div class="alert alert-success col-sm-12">
4
4
  <%= notice if notice.is_a? String %>
5
5
  <% if notice.is_a? Hash %>
6
- <% notice.each do |key, message| %>
7
- <p><%= key.humanize.capitalize %> <%= message.to_sentence %></p>
6
+ <% notice.each do |key, message| %>
7
+ <p><%= key.split('.').map{|k| k.humanize.capitalize }.join(': ') %> <%= message.to_sentence %></p>
8
8
  <% end %>
9
9
  <% end %>
10
10
  </div>
@@ -17,7 +17,7 @@
17
17
  <%= alert if alert.is_a? String %>
18
18
  <% if alert.is_a? Hash %>
19
19
  <% alert.each do |key, message| %>
20
- <p><%= key.humanize.capitalize %> <%= message.to_sentence %></p>
20
+ <p><%= key.split('.').map{|k| k.humanize.capitalize }.join(': ') %> <%= message.to_sentence %></p>
21
21
  <% end %>
22
22
  <% end %>
23
23
  </div>
@@ -1,5 +1,5 @@
1
1
  <%
2
- # If this partial is run from Devise
2
+ # If this partial is run from Devise controller
3
3
  # keep in mind to add "binda." to path helpers
4
4
  #
5
5
  # https://github.com/plataformatec/devise/wiki/How-To:-Use-devise-inside-a-mountable-engine#path-helpers
@@ -11,22 +11,27 @@
11
11
  <li class = "main-sidebar--brand">
12
12
  <h3><%= link_to get_website_name, '/' %></h3>
13
13
  </li>
14
- <li>
15
- <a href="<%= dashboard_path %>">
16
- <span class="glyphicon glyphicon-home" aria-hidden="true"></span> Dashboard
17
- </a>
18
- </li>
19
14
  <% Binda::Structure.all.order(:position).each_with_index do |structure, index| %>
20
- <li class="main-sidebar--structure <%= 'main-sidebar--first-structure' if index == 0 %>">
21
- <a href="<%= structure_components_path( structure.slug ) %>">
22
- <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span> <%= structure.name.humanize.pluralize %>
23
- </a>
24
- <% if structure.has_categories %>
25
- <a class="main-sidebar--sub-link" href="<%= structure_categories_path( structure.slug ) %>">
26
- <span class="glyphicon glyphicon-tags" aria-hidden="true"></span> <%= structure.name.humanize %> <%= t(:category).capitalize.pluralize %>
15
+ <% if structure.instance_type == 'component' %>
16
+ <li class="main-sidebar--structure <%= 'main-sidebar--first-structure' if index == 0 %>">
17
+ <a href="<%= structure_components_path( structure ) %>">
18
+ <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>
19
+ <%= structure.name.humanize.pluralize %>
27
20
  </a>
28
- <% end %>
29
- </li>
21
+ <% if structure.has_categories %>
22
+ <a class="main-sidebar--sub-link" href="<%= structure_categories_path( structure.slug ) %>">
23
+ <span class="glyphicon glyphicon-tags" aria-hidden="true"></span> <%= structure.name.humanize %> <%= t(:category).capitalize.pluralize %>
24
+ </a>
25
+ <% end %>
26
+ </li>
27
+ <% else %>
28
+ <li class="main-sidebar--structure <%= 'main-sidebar--first-structure' if index == 0 %>">
29
+ <a href="<%= structure_board_path( structure, structure.board ) %>">
30
+ <span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span>
31
+ <%= structure.name.humanize %>
32
+ </a>
33
+ </li>
34
+ <% end %>
30
35
  <% end %>
31
36
  <% if current_user.is_superadmin %>
32
37
  <li>
@@ -14,6 +14,7 @@ en:
14
14
  create: create
15
15
  delete: delete
16
16
  setting: setting
17
+ board: board
17
18
  back_to_index: back to list
18
19
  back_to: back to
19
20
  slug_disable_hint: 'Editing slug is not possible. If you want a specific slug create a new item and a slug will be extracted from the title.'
@@ -42,3 +43,6 @@ en:
42
43
  default_choice: default choice
43
44
  default_choice_description: if you have added/removed any choice you need to click save to update the list of choices
44
45
  allow_null: allow null?
46
+ instance: instance
47
+ structure_instance_type: 'This structure is for:'
48
+ null_is_not_allowed: You need to select at least one choice
@@ -4,10 +4,10 @@ Binda::Engine.routes.draw do
4
4
  # ----
5
5
  # https://github.com/plataformatec/devise/wiki/How-To:-Require-authentication-for-all-components
6
6
  # authenticated :user, class_name: "Binda::User", module: :devise do
7
- # root to: 'settings#dashboard', as: :authenticated_root
7
+ # root to: 'boards#dashboard', as: :authenticated_root
8
8
  # end
9
9
  # root to: 'users/sessions#new'
10
- root to: 'settings#dashboard'
10
+ root to: 'boards#dashboard'
11
11
 
12
12
  # DEVISE
13
13
  # ------
@@ -31,38 +31,35 @@ Binda::Engine.routes.draw do
31
31
 
32
32
  # ADMINISTRATION PANEL
33
33
  # --------------------
34
- get 'dashboard', to: 'settings#dashboard', as: :dashboard
35
- post 'dashboard', to: 'settings#update_dashboard'
36
- resources :settings
34
+ get 'dashboard', to: 'boards#dashboard', as: :dashboard
37
35
 
38
36
  post 'structures/sort'
39
37
  resources :structures do
40
-
41
- resources :categories
42
-
43
- post 'components/sort'
44
- resources :components do
45
- post 'sort_repeaters'
46
- post 'new_repeater'
47
- end
48
-
49
38
  post 'field_groups/sort'
50
39
  post 'field_groups/add_child'
51
40
  resources :field_groups do
52
-
53
41
  post 'field_settings/add_child'
54
42
  post 'field_settings/sort'
55
43
  resources :field_settings
56
-
57
44
  end
45
+ resources :boards do
46
+ post 'sort_repeaters'
47
+ post 'new_repeater'
48
+ end
49
+ post 'components/sort'
50
+ resources :components do
51
+ post 'sort_repeaters'
52
+ post 'new_repeater'
53
+ end
54
+ resources :categories
58
55
  end
59
56
 
60
57
  resources :choices, only: [:destroy]
61
58
 
62
- resources :texts
63
- resources :bindings
64
- resources :assets
65
- resources :repeaters
66
- resources :dates
59
+ # resources :texts
60
+ # resources :bindings
61
+ # resources :assets
62
+ resources :repeaters, only: [:destroy]
63
+ # resources :dates
67
64
 
68
65
  end
@@ -1,13 +1,12 @@
1
1
  class CreateBindaTables < ActiveRecord::Migration[5.0]
2
2
  def change
3
3
 
4
- create_table :binda_settings do |t|
4
+ create_table :binda_boards do |t|
5
5
  t.string :name, null: false
6
6
  t.string :slug
7
7
  t.index :slug, unique: true
8
- t.text :content
9
8
  t.integer :position
10
- t.boolean :is_true, default: false
9
+ t.belongs_to :structure
11
10
  end
12
11
 
13
12
  create_table :binda_components do |t|
@@ -26,6 +25,7 @@ class CreateBindaTables < ActiveRecord::Migration[5.0]
26
25
  t.integer :position
27
26
  t.boolean :has_categories, default: true
28
27
  t.index :slug, unique: true
28
+ t.string :instance_type, null: false, default: 'component'
29
29
  t.timestamps
30
30
  end
31
31
 
@@ -52,7 +52,7 @@ class CreateBindaTables < ActiveRecord::Migration[5.0]
52
52
  t.belongs_to :field_group
53
53
  t.string :ancestry
54
54
  t.index :ancestry
55
- t.boolean :allow_null
55
+ t.boolean :allow_null, default: false
56
56
  t.references :default_choice, index: true
57
57
  t.timestamps
58
58
  end
@@ -69,6 +69,7 @@ class CreateBindaTables < ActiveRecord::Migration[5.0]
69
69
  t.integer :position
70
70
  t.belongs_to :field_setting
71
71
  t.references :fieldable, polymorphic: true, index: true
72
+ t.string :type
72
73
  t.timestamps
73
74
  end
74
75
 
@@ -97,11 +98,16 @@ class CreateBindaTables < ActiveRecord::Migration[5.0]
97
98
  t.string :label
98
99
  t.string :value
99
100
  t.belongs_to :field_setting
100
- t.references :selectable, polymorphic: true, index: true
101
101
  t.timestamps
102
102
  end
103
103
 
104
- create_table :binda_selects do |t|
104
+ create_table :binda_choices_selections do |t|
105
+ t.belongs_to :choice, index: true
106
+ t.belongs_to :selection, index: true
107
+ t.timestamps
108
+ end
109
+
110
+ create_table :binda_selections do |t|
105
111
  t.belongs_to :field_setting
106
112
  t.references :fieldable, polymorphic: true, index: true
107
113
  t.string :type
@@ -6,12 +6,16 @@ require 'coffee-rails'
6
6
  require 'colorize'
7
7
  require 'friendly_id'
8
8
  require 'aasm'
9
- require 'ffaker'
10
9
  require 'simple_form'
11
10
  require 'tinymce-rails'
12
11
  require 'carrierwave'
13
12
  require 'mini_magick'
14
13
  require 'ancestry'
14
+ require 'kaminari'
15
+ # require 'bullet'
16
+ # require 'rails-perftest'
17
+ # require 'ruby-prof'
18
+ # require 'test-unit'
15
19
 
16
20
  module Binda
17
21
  class Engine < ::Rails::Engine
@@ -1,3 +1,3 @@
1
1
  module Binda
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
@@ -20,6 +20,15 @@ module Binda
20
20
  route "mount Binda::Engine => '/admin_panel'"
21
21
  end
22
22
 
23
+ def add_helpers
24
+ ac_path = Rails.root.join('app', 'controllers', 'application_controller.rb' )
25
+ unless File.readlines(ac_path).grep(/::Binda::DefaultHelpers/).size > 0
26
+ inject_into_file ac_path, after: "ActionController::Base" do
27
+ "\n include ::Binda::DefaultHelpers"
28
+ end
29
+ end
30
+ end
31
+
23
32
  def copy_migrations
24
33
  return if Rails.env.production?
25
34
 
@@ -2,6 +2,13 @@ require 'colorize'
2
2
  require 'securerandom'
3
3
 
4
4
  module Binda
5
+ # Setup initial settings for the application.
6
+ #
7
+ # This is setup is mandatory as sets the initial super admin user and
8
+ # the default dashboard where are stored the main application settings.
9
+ # It is useful also when Binda has been already installed once but the
10
+ # database has been reset. Runnin `rails g binda:setup` will populate
11
+ # the application database with new default settings.
5
12
  class SetupGenerator < Rails::Generators::Base
6
13
  source_root File.expand_path('../templates', __FILE__)
7
14
 
@@ -13,27 +20,63 @@ module Binda
13
20
  puts
14
21
  puts "We need few details. Don't worry you can modify them later. \n\n"
15
22
 
23
+ dashboard_structure = ::Binda::Structure.find_or_create_by( name: 'dashboard', slug: 'dashboard', instance_type: 'board' )
24
+ @dashboard = dashboard_structure.board
25
+
26
+ # By default each structure has a field group which will be used to store the default field settings
27
+ field_settings = dashboard_structure.field_groups.first.field_settings
28
+
29
+
16
30
  # MAINTENANCE MODE
17
- ::Binda::Setting.find_or_create_by( name: 'Maintenance Mode' )
31
+ puts "Setting up maintenance mode"
32
+
33
+ # Use radio field_type untill truefalse isn't available
34
+ unless field_settings.find_by(slug: 'maintenance-mode').present?
35
+ maintenance_mode = field_settings.create!( name: 'Maintenance Mode', field_type: 'radio' )
36
+ # make sure slug works
37
+ maintenance_mode.update_attributes( slug: 'maintenance-mode' )
38
+ disabled = maintenance_mode.choices.create!( label: 'disabled', value: 'false' )
39
+ active = maintenance_mode.choices.create!( label: 'active', value: 'true' )
40
+ @dashboard.radios.find_or_create_by!( field_setting_id: maintenance_mode.id )
41
+ end
42
+ puts "The maintenance-mode option has been set up."
43
+ puts
44
+
18
45
 
19
46
  # WEBSITE NAME
20
- @website_name = ask("What would you like to name your website? ['MySite']\n").presence || 'MySite'
21
- ::Binda::Setting.find_or_create_by( name: 'Website Name' ).update_attribute( :content, @website_name )
47
+ puts "Setting up website name"
48
+
49
+ website_name_obj = field_settings.find_by(slug: 'website-name')
50
+ unless website_name_obj.present?
51
+ website_name_obj = field_settings.create!( name: 'Website Name', field_type: 'string' )
52
+ # make sure slug works
53
+ website_name_obj.update_attribute( 'slug', 'website-name' )
54
+ end
55
+ website_name = ask("How would you like to name your website? ['MySite']\n").presence || 'MySite'
56
+ @dashboard.strings.find_or_create_by( field_setting_id: website_name_obj.id ).update_attribute('content', website_name )
22
57
 
23
58
  # WEBSITE CONTENT
24
- @website_description = ask("What is it about? ['A website about the world']\n").presence || 'A website about the world'
25
- ::Binda::Setting.find_or_create_by( name: 'Website Description' ).update_attribute( :content, @website_description )
59
+ puts "Setting up website description"
60
+
61
+ website_description_obj = field_settings.find_by(slug: 'website-description')
62
+ unless website_description_obj.present?
63
+ website_description_obj = field_settings.find_or_create_by( name: 'Website Description', field_type: 'text' )
64
+ # make sure slug works
65
+ website_description_obj.update_attribute( 'slug', 'website-description' )
66
+ end
67
+ website_description = ask("What is your website about? ['A website about the world']\n").presence || 'A website about the world'
68
+ @dashboard.texts.find_or_create_by!( field_setting_id: website_description_obj.id ).update_attribute( 'content', website_description )
26
69
  end
27
70
 
28
71
  def create_credentials
29
- rake 'binda_create_initial_user'
72
+ rake 'binda:create_superadmin_user'
30
73
  end
31
74
 
32
75
  def feedback
33
76
  puts
34
77
  puts "============================================================================="
35
78
  puts
36
- puts " Binda CMS has been succesfully installed! ".colorize(:green)
79
+ puts " Binda CMS has been succesfully installed! "
37
80
  puts
38
81
  puts "============================================================================="
39
82
  puts
@@ -1,25 +1,79 @@
1
- # desc "Explaining what the task does"
2
- # task :binda do
3
- # # Task goes here
4
- # end
5
-
6
- desc "Create first user"
7
- task :binda_create_initial_user => :environment do
8
- STDOUT.puts "What is your email? [mail@domain.com]"
9
- username = STDIN.gets.strip
10
- username = 'mail@domain.com' if username.blank?
11
- STDOUT.puts "What is your password? [password]"
12
- password = STDIN.gets.strip
13
- password = 'password' if password.blank?
14
- Binda::User.create!( email: username, password: password, password_confirmation: password, is_superadmin: true )
15
- end
16
-
17
- desc "Update Binda::Page to Binda::Component"
18
- task :binda_update_page_to_component => :environment do
19
- ActiveRecord::Base.connection.execute("UPDATE binda_assets SET fieldable_type = 'Binda::Component' WHERE fieldable_type = 'Binda::Page'")
20
- ActiveRecord::Base.connection.execute("UPDATE binda_texts SET fieldable_type = 'Binda::Component' WHERE fieldable_type = 'Binda::Page'")
21
- ActiveRecord::Base.connection.execute("UPDATE binda_dates SET fieldable_type = 'Binda::Component' WHERE fieldable_type = 'Binda::Page'")
22
- ActiveRecord::Base.connection.execute("UPDATE binda_galleries SET fieldable_type = 'Binda::Component' WHERE fieldable_type = 'Binda::Page'")
23
- ActiveRecord::Base.connection.execute("UPDATE binda_repeaters SET fieldable_type = 'Binda::Component' WHERE fieldable_type = 'Binda::Page'")
24
- p "Binda has been updated"
1
+ require 'colorize'
2
+
3
+ namespace :binda do
4
+
5
+ desc "Create super admin user"
6
+ task :create_superadmin_user => :environment do
7
+ STDOUT.puts "What is your email? [mail@domain.com]"
8
+ username = STDIN.gets.strip
9
+ username = 'mail@domain.com' if username.blank?
10
+ STDOUT.puts "What is your password? [password]"
11
+ password = STDIN.gets.strip
12
+ password = 'password' if password.blank?
13
+ Binda::User.create!( email: username, password: password, password_confirmation: password, is_superadmin: true )
14
+ end
15
+
16
+ desc "Update Binda to v0.0.7"
17
+ task :upgrade_to_v007 => :environment do
18
+
19
+ # Make sure Binda hasn't been upgraded already
20
+ check_structure = Binda::Structure.where(slug: 'dashboard').any?
21
+ check_field_settings = Binda::FieldSetting.where(slug: ['maintenance-mode', 'website-name', 'website-description']).length == 3
22
+ if check_structure && check_field_settings
23
+ puts "It seems you have already upgraded to v0.0.7".colorize(:red)
24
+ exit
25
+ end
26
+
27
+ if Binda::Structure.where(slug: 'dashboard').any?
28
+ puts "A Binda::Structure with `slug = 'dashboard'` has been detected in your database.".colorize(:red)
29
+ puts "In order to upgrade Binda, the structure's name and slug will be set to 'dashboard-backup'".colorize(:red)
30
+ Binda::Structure.where(slug: 'dashboard').update_all(name: 'dashboard-backup')
31
+ end
32
+ # DASHBOARD
33
+ dashboard_structure = Binda::Structure.create( name: 'dashboard', slug: 'dashboard', instance_type: 'board' )
34
+ unless dashboard_structure.board.nil?
35
+ @dashboard = dashboard_structure.board
36
+ else
37
+ @dashboard = dashboard_structure.create_board( name: 'dashboard' )
38
+ end
39
+ # By default each structure has a field group which will be used to store the default field settings
40
+ field_settings = dashboard_structure.field_groups.first.field_settings
41
+
42
+ # MAINTENANCE MODE
43
+ puts "Setting up maintenance mode"
44
+ unless Binda::FieldSetting.where(slug: 'maintenance-mode').any?
45
+ maintenance_mode = field_settings.create( name: 'Maintenance Mode', field_type: 'radio')
46
+ maintenance_mode.update_attributes( slug: 'maintenance-mode' )
47
+ active = maintenance_mode.choices.create( label: 'active', value: 'true' )
48
+ disabled = maintenance_mode.choices.create( label: 'disabled', value: 'false' )
49
+ @dashboard.radios.find_or_create_by( field_setting_id: maintenance_mode.id ).choices << disabled
50
+ end
51
+
52
+
53
+ # WEBSITE NAME
54
+ puts "Setting up website name"
55
+ unless Binda::FieldSetting.where(slug: 'website-name').any?
56
+ website_name = field_settings.create( name: 'Website Name', field_type: 'string' )
57
+ website_name.update_attributes( slug: 'website-name' )
58
+ old_name_record = Binda::Board.where(slug: 'website-name')
59
+ if old_name_record.any?
60
+ @dashboard.texts.find_or_create_by( field_setting_id: website_name.id ).update_attributes(content: old_name_record.first.content )
61
+ else
62
+ @dashboard.texts.find_or_create_by( field_setting_id: website_name.id ).update_attributes(content: 'MySite' )
63
+ end
64
+ end
65
+
66
+ # WEBSITE CONTENT
67
+ puts "Setting up website description"
68
+ unless Binda::FieldSetting.where(slug: 'website-description').any?
69
+ website_description = field_settings.create( name: 'Website Description', field_type: 'string' )
70
+ website_description.update_attributes( slug: 'website-description' )
71
+ old_description_record = Binda::Board.where(slug: 'website-name')
72
+ if old_description_record.any?
73
+ @dashboard.texts.find_or_create_by( field_setting_id: website_description.id ).update_attributes( content: old_description_record.first.content )
74
+ else
75
+ @dashboard.texts.find_or_create_by( field_setting_id: website_description.id ).update_attributes( content: 'A website about the world' )
76
+ end
77
+ end
78
+ end
25
79
  end