rails_bootstrap_form 0.1.0 → 0.2.0
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/app/assets/stylesheets/rails_bootstrap_form.css +1 -0
- data/demo/.byebug_history +4 -0
- data/demo/.ruby-version +1 -0
- data/demo/Rakefile +10 -0
- data/demo/app/assets/config/manifest.js +1 -0
- data/demo/app/assets/stylesheets/application.scss +3 -0
- data/demo/app/channels/application_cable/channel.rb +8 -0
- data/demo/app/channels/application_cable/connection.rb +8 -0
- data/demo/app/controllers/application_controller.rb +6 -0
- data/demo/app/controllers/users_controller.rb +70 -0
- data/demo/app/helpers/application_helper.rb +6 -0
- data/demo/app/jobs/application_job.rb +6 -0
- data/demo/app/mailers/application_mailer.rb +8 -0
- data/demo/app/models/address.rb +10 -0
- data/demo/app/models/application_record.rb +7 -0
- data/demo/app/models/country.rb +17 -0
- data/demo/app/models/fruit.rb +14 -0
- data/demo/app/models/skill.rb +21 -0
- data/demo/app/models/user.rb +20 -0
- data/demo/app/models/user_skill.rb +8 -0
- data/demo/app/views/layouts/application.html.erb +15 -0
- data/demo/app/views/users/_form.html.erb +5 -0
- data/demo/app/views/users/_form_without_bootstrap_helpers.html.erb +49 -0
- data/demo/app/views/users/_vertical_form.html.erb +33 -0
- data/demo/app/views/users/edit.html.erb +1 -0
- data/demo/app/views/users/index.html.erb +42 -0
- data/demo/app/views/users/new.html.erb +1 -0
- data/demo/bin/bundle +111 -0
- data/demo/bin/rails +8 -0
- data/demo/bin/rake +8 -0
- data/demo/bin/setup +37 -0
- data/demo/config/application.rb +28 -0
- data/demo/config/boot.rb +9 -0
- data/demo/config/cable.yml +10 -0
- data/demo/config/database.yml +25 -0
- data/demo/config/environment.rb +9 -0
- data/demo/config/environments/development.rb +74 -0
- data/demo/config/environments/production.rb +97 -0
- data/demo/config/environments/test.rb +64 -0
- data/demo/config/initializers/assets.rb +16 -0
- data/demo/config/initializers/content_security_policy.rb +29 -0
- data/demo/config/initializers/filter_parameter_logging.rb +12 -0
- data/demo/config/initializers/inflections.rb +20 -0
- data/demo/config/initializers/permissions_policy.rb +17 -0
- data/demo/config/initializers/rails_bootstrap_form.rb +10 -0
- data/demo/config/locales/en.rb +16 -0
- data/demo/config/puma.rb +47 -0
- data/demo/config/routes.rb +9 -0
- data/demo/config/storage.yml +34 -0
- data/demo/config.ru +10 -0
- data/demo/db/migrate/20230514054308_create_countries.rb +12 -0
- data/demo/db/migrate/20230514054851_create_fruits.rb +12 -0
- data/demo/db/migrate/20230514055237_create_users.rb +21 -0
- data/demo/db/migrate/20230514055840_create_addresses.rb +17 -0
- data/demo/db/migrate/20230514060556_create_skills.rb +12 -0
- data/demo/db/migrate/20230514061100_create_user_skills.rb +13 -0
- data/demo/db/schema.rb +69 -0
- data/demo/db/seeds.rb +15 -0
- data/demo/public/favicon.ico +0 -0
- data/lib/generators/rails_bootstrap_form/install_generator.rb +25 -0
- data/lib/generators/rails_bootstrap_form/templates/install.rb +10 -0
- data/lib/rails_bootstrap_form/action_view_extensions/bootstrap_form_helper.rb +54 -0
- data/lib/rails_bootstrap_form/bootstrap_form_builder.rb +24 -0
- data/lib/rails_bootstrap_form/bootstrap_form_options.rb +71 -0
- data/lib/rails_bootstrap_form/configuration.rb +26 -0
- data/lib/rails_bootstrap_form/version.rb +1 -1
- data/lib/rails_bootstrap_form.rb +20 -1
- metadata +66 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7902b4c3c6edd102d01a2008a8d69a639b6afde3a93997c202e9267dcda93e4b
         | 
| 4 | 
            +
              data.tar.gz: 4e65ba157ac848d45093d2aeda0673e840335bafd24b5861b0551dddc6cd130b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 1641aaa9fa84627e32bd9d5d59c7bfb6c89f12fd7498a6ed443309125ee11b4a79a8f7636b55da81e28a003146e00707c89df0d10c2e2d58957a975a035af3dc
         | 
| 7 | 
            +
              data.tar.gz: 9ecea91f9b5c2af60282eb938e957e18cbfcbc7b089341b126db05728cdb44dd41cb4af9632e1cf6e6a14b6146a3b5c8841af3cd3c95a24b7c77af8dabcd6d10
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
| @@ -0,0 +1 @@ | |
| 1 | 
            +
             | 
    
        data/demo/.ruby-version
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            ruby-3.2.2
         | 
    
        data/demo/Rakefile
    ADDED
    
    | @@ -0,0 +1,10 @@ | |
| 1 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
            # -*- frozen_string_literal: true -*-
         | 
| 3 | 
            +
            # -*- warn_indent: true -*-
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            # Add your own tasks in files placed in lib/tasks ending in .rake,
         | 
| 6 | 
            +
            # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            require_relative "config/application"
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            Rails.application.load_tasks
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            //= link_directory ../stylesheets .css
         | 
| @@ -0,0 +1,70 @@ | |
| 1 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
            # -*- frozen_string_literal: true -*-
         | 
| 3 | 
            +
            # -*- warn_indent: true -*-
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class UsersController < ApplicationController
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              before_action :find_user, except: [:index, :new, :create]
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              def index
         | 
| 10 | 
            +
                @users = ::User.all
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              def new
         | 
| 14 | 
            +
                @user = ::User.new
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              def create
         | 
| 18 | 
            +
                @user = ::User.new(user_params)
         | 
| 19 | 
            +
                if @user.save
         | 
| 20 | 
            +
                  redirect_to users_path
         | 
| 21 | 
            +
                else
         | 
| 22 | 
            +
                  render :new, status: :unprocessable_entity
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def edit
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              def update
         | 
| 30 | 
            +
                if @user.update(user_params)
         | 
| 31 | 
            +
                  redirect_to users_path
         | 
| 32 | 
            +
                else
         | 
| 33 | 
            +
                  render :edit, status: :unprocessable_entity
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              def destroy
         | 
| 38 | 
            +
                @user.destroy
         | 
| 39 | 
            +
                redirect_to users_path
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              private
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              def user_params
         | 
| 45 | 
            +
                params.require(:user).permit(
         | 
| 46 | 
            +
                  :name,
         | 
| 47 | 
            +
                  :email,
         | 
| 48 | 
            +
                  :password,
         | 
| 49 | 
            +
                  :mobile_number,
         | 
| 50 | 
            +
                  :birth_date,
         | 
| 51 | 
            +
                  :terms,
         | 
| 52 | 
            +
                  :excellence,
         | 
| 53 | 
            +
                  :blog_url,
         | 
| 54 | 
            +
                  :fruit_id,
         | 
| 55 | 
            +
                  :favorite_color,
         | 
| 56 | 
            +
                  skill_ids: [],
         | 
| 57 | 
            +
                  address_attributes: [
         | 
| 58 | 
            +
                    :street,
         | 
| 59 | 
            +
                    :state,
         | 
| 60 | 
            +
                    :city,
         | 
| 61 | 
            +
                    :postal_code,
         | 
| 62 | 
            +
                    :country_id,
         | 
| 63 | 
            +
                  ]
         | 
| 64 | 
            +
                )
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              def find_user
         | 
| 68 | 
            +
                @user = ::User.find(params.fetch(:id))
         | 
| 69 | 
            +
              end
         | 
| 70 | 
            +
            end
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
            # -*- frozen_string_literal: true -*-
         | 
| 3 | 
            +
            # -*- warn_indent: true -*-
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class Country < ApplicationRecord
         | 
| 6 | 
            +
              DEFAULT_OPTIONS = [
         | 
| 7 | 
            +
                "India",
         | 
| 8 | 
            +
                "Ireland",
         | 
| 9 | 
            +
                "United States",
         | 
| 10 | 
            +
                "United Kingdom",
         | 
| 11 | 
            +
                "Spain",
         | 
| 12 | 
            +
                "France",
         | 
| 13 | 
            +
                "Canada"
         | 
| 14 | 
            +
              ].freeze
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              has_many :addresses, dependent: :restrict_with_exception
         | 
| 17 | 
            +
            end
         | 
| @@ -0,0 +1,14 @@ | |
| 1 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
            # -*- frozen_string_literal: true -*-
         | 
| 3 | 
            +
            # -*- warn_indent: true -*-
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class Fruit < ApplicationRecord
         | 
| 6 | 
            +
              DEFAULT_OPTIONS = [
         | 
| 7 | 
            +
                "Mango",
         | 
| 8 | 
            +
                "Apple",
         | 
| 9 | 
            +
                "Orange",
         | 
| 10 | 
            +
                "Watermelon"
         | 
| 11 | 
            +
              ].freeze
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              has_many :users, dependent: :restrict_with_exception
         | 
| 14 | 
            +
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
            # -*- frozen_string_literal: true -*-
         | 
| 3 | 
            +
            # -*- warn_indent: true -*-
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class Skill < ApplicationRecord
         | 
| 6 | 
            +
              DEFAULT_OPTIONS = [
         | 
| 7 | 
            +
                "Communication",
         | 
| 8 | 
            +
                "Problem Solving",
         | 
| 9 | 
            +
                "Leadership",
         | 
| 10 | 
            +
                "Writing",
         | 
| 11 | 
            +
                "Creativity",
         | 
| 12 | 
            +
                "Time Management",
         | 
| 13 | 
            +
                "Team Work",
         | 
| 14 | 
            +
                "Negotiation",
         | 
| 15 | 
            +
                "Decision Making",
         | 
| 16 | 
            +
                "Management"
         | 
| 17 | 
            +
              ].freeze
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              has_many :user_skills, dependent: :restrict_with_exception
         | 
| 20 | 
            +
              has_many :users, through: :user_skills, source: :user
         | 
| 21 | 
            +
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
            # -*- frozen_string_literal: true -*-
         | 
| 3 | 
            +
            # -*- warn_indent: true -*-
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class User < ApplicationRecord
         | 
| 6 | 
            +
              has_one :address, dependent: :destroy
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              has_many :user_skills, dependent: :destroy
         | 
| 9 | 
            +
              has_many :skills, through: :user_skills, source: :skill
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              belongs_to :fruit
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              delegate :name, to: :fruit, prefix: true
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              accepts_nested_attributes_for :address, update_only: true
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              def address
         | 
| 18 | 
            +
                super.presence || build_address
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            <!DOCTYPE html>
         | 
| 2 | 
            +
            <html>
         | 
| 3 | 
            +
              <head>
         | 
| 4 | 
            +
                <title>RailsBootstrapForms - Demo Application</title>
         | 
| 5 | 
            +
                <meta name="viewport" content="width=device-width,initial-scale=1">
         | 
| 6 | 
            +
                <%= csrf_meta_tags %>
         | 
| 7 | 
            +
                <%= csp_meta_tag %>
         | 
| 8 | 
            +
                <%= stylesheet_link_tag "application" %>
         | 
| 9 | 
            +
              </head>
         | 
| 10 | 
            +
              <body>
         | 
| 11 | 
            +
                <div class="container-fluid p-3">
         | 
| 12 | 
            +
                  <%= yield %>
         | 
| 13 | 
            +
                </div>
         | 
| 14 | 
            +
              </body>
         | 
| 15 | 
            +
            </html>
         | 
| @@ -0,0 +1,49 @@ | |
| 1 | 
            +
            <div class="card card-primary my-3">
         | 
| 2 | 
            +
              <div class="card-header fw-bold">
         | 
| 3 | 
            +
                Profile Form (Without RailsBootstrapForm)
         | 
| 4 | 
            +
              </div>
         | 
| 5 | 
            +
              <div class="card-body">
         | 
| 6 | 
            +
                <%= form_for @user do |form| %>
         | 
| 7 | 
            +
                  <%= form.text_field :name, autocomplete: "new-name" %>
         | 
| 8 | 
            +
                  <%= form.email_field :email %>
         | 
| 9 | 
            +
                  <%= form.password_field :password, autocomplete: "new-password" %>
         | 
| 10 | 
            +
                  <%= form.phone_field :mobile_number %>
         | 
| 11 | 
            +
                  <%= form.date_field :birth_date %>
         | 
| 12 | 
            +
                  <%= form.check_box :terms %>
         | 
| 13 | 
            +
                  <%= form.range_field :excellence %>
         | 
| 14 | 
            +
                  <%= form.url_field :blog_url %>
         | 
| 15 | 
            +
                  <%= form.url_field :favorite_color %>
         | 
| 16 | 
            +
                  <%= form.select :fruit_id, options_for_select(::Fruit.pluck(:name, :id), form.object.fruit_id), include_blank: "Select Favorite Fruit" %>
         | 
| 17 | 
            +
                  <%= form.collection_check_boxes :skill_ids, ::Skill.all, :id, :name do |b| %>
         | 
| 18 | 
            +
                    <%= b.check_box + b.text %>
         | 
| 19 | 
            +
                  <% end %>
         | 
| 20 | 
            +
                  <%= form.fields_for :address, include_id: false do |address_form| %>
         | 
| 21 | 
            +
                    <%= address_form.text_area :street %>
         | 
| 22 | 
            +
                    <%= address_form.text_field :state %>
         | 
| 23 | 
            +
                    <%= address_form.text_field :city %>
         | 
| 24 | 
            +
                    <%= address_form.text_field :postal_code %>
         | 
| 25 | 
            +
                    <%= address_form.select :country_id, options_for_select(::Country.pluck(:name, :id), address_form.object.country_id), include_blank: "Select Country" %>
         | 
| 26 | 
            +
                  <% end %>
         | 
| 27 | 
            +
                  <div class="mt-3">
         | 
| 28 | 
            +
                    <%= form.submit "Register", class: "btn btn-primary" %>
         | 
| 29 | 
            +
                    <%= link_to "Cancel", users_path, class: "btn btn-secondary" %>
         | 
| 30 | 
            +
                  </div>
         | 
| 31 | 
            +
                <% end %>
         | 
| 32 | 
            +
              </div>
         | 
| 33 | 
            +
            </div>
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            <div class="card card-primary">
         | 
| 36 | 
            +
              <div class="card-header fw-bold">
         | 
| 37 | 
            +
                Login Form (Without RailsBootstrapForm)
         | 
| 38 | 
            +
              </div>
         | 
| 39 | 
            +
              <div class="card-body">
         | 
| 40 | 
            +
                <%= form_for @user do |form| %>
         | 
| 41 | 
            +
                  <%= form.email_field :email %>
         | 
| 42 | 
            +
                  <%= form.password_field :password, autocomplete: "new-password" %>
         | 
| 43 | 
            +
                  <div class="mt-3">
         | 
| 44 | 
            +
                    <%= form.submit "Login", class: "btn btn-primary" %>
         | 
| 45 | 
            +
                    <%= link_to "Cancel", users_path, class: "btn btn-secondary" %>
         | 
| 46 | 
            +
                  </div>
         | 
| 47 | 
            +
                <% end %>
         | 
| 48 | 
            +
              </div>
         | 
| 49 | 
            +
            </div>
         | 
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            <div class="card card-primary my-3">
         | 
| 2 | 
            +
              <div class="card-header fw-bold">
         | 
| 3 | 
            +
                Profile Form (Vertical layout)
         | 
| 4 | 
            +
              </div>
         | 
| 5 | 
            +
              <div class="card-body">
         | 
| 6 | 
            +
                <%= bootstrap_form_for @user, bootstrap_form: {} do |form| %>
         | 
| 7 | 
            +
                  <%= form.text_field :name, autocomplete: "new-name", required: true, bootstrap_form: {} %>
         | 
| 8 | 
            +
                  <%= form.text_field :email, autocomplete: "new-email", bootstrap_form: {} %>
         | 
| 9 | 
            +
                  <%= form.text_field :password, autocomplete: "new-password" %>
         | 
| 10 | 
            +
                  <%= form.phone_field :mobile_number %>
         | 
| 11 | 
            +
                  <%= form.date_field :birth_date %>
         | 
| 12 | 
            +
                  <%= form.check_box :terms %>
         | 
| 13 | 
            +
                  <%= form.range_field :excellence %>
         | 
| 14 | 
            +
                  <%= form.url_field :blog_url %>
         | 
| 15 | 
            +
                  <%= form.url_field :favorite_color %>
         | 
| 16 | 
            +
                  <%= form.select :fruit_id, options_for_select(::Fruit.pluck(:name, :id), form.object.fruit_id), include_blank: "Select Favorite Fruit" %>
         | 
| 17 | 
            +
                  <%= form.collection_check_boxes :skill_ids, ::Skill.all, :id, :name do |b| %>
         | 
| 18 | 
            +
                    <%= b.check_box + b.text %>
         | 
| 19 | 
            +
                  <% end %>
         | 
| 20 | 
            +
                  <%= form.fields_for :address, include_id: false do |address_form| %>
         | 
| 21 | 
            +
                    <%= address_form.text_area :street %>
         | 
| 22 | 
            +
                    <%= address_form.text_field :state %>
         | 
| 23 | 
            +
                    <%= address_form.text_field :city %>
         | 
| 24 | 
            +
                    <%= address_form.text_field :postal_code %>
         | 
| 25 | 
            +
                    <%= address_form.select :country_id, options_for_select(::Country.pluck(:name, :id), address_form.object.country_id), {include_blank: "Select Country", bootstrap: {}} %>
         | 
| 26 | 
            +
                  <% end %>
         | 
| 27 | 
            +
                  <div class="mt-3">
         | 
| 28 | 
            +
                    <%= form.submit "Register", class: "btn btn-primary" %>
         | 
| 29 | 
            +
                    <%= link_to "Cancel", users_path, class: "btn btn-secondary" %>
         | 
| 30 | 
            +
                  </div>
         | 
| 31 | 
            +
                <% end %>
         | 
| 32 | 
            +
              </div>
         | 
| 33 | 
            +
            </div>
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            <%= render partial: "form" %>
         | 
| @@ -0,0 +1,42 @@ | |
| 1 | 
            +
            <div class="card card-primary">
         | 
| 2 | 
            +
              <div class="card-header">
         | 
| 3 | 
            +
                <div class="text-end">
         | 
| 4 | 
            +
                  <%= link_to "New user", new_user_path, class: "btn btn-primary" %>
         | 
| 5 | 
            +
                </div>
         | 
| 6 | 
            +
              </div>
         | 
| 7 | 
            +
              <div class="card-body">
         | 
| 8 | 
            +
                <div class="table-responsive mt-3">
         | 
| 9 | 
            +
                  <table class="table table-bordered table-stripped">
         | 
| 10 | 
            +
                    <thead>
         | 
| 11 | 
            +
                      <tr>
         | 
| 12 | 
            +
                        <th scope="col">#</th>
         | 
| 13 | 
            +
                        <th scope="col">Name</th>
         | 
| 14 | 
            +
                        <th scope="col">Email</th>
         | 
| 15 | 
            +
                        <th scope="col">Mobile number</th>
         | 
| 16 | 
            +
                        <th scope="col">Favorite Fruit</th>
         | 
| 17 | 
            +
                        <th scope="col">Country</th>
         | 
| 18 | 
            +
                        <th scope="col" width="15%">Actions</th>
         | 
| 19 | 
            +
                      </tr>
         | 
| 20 | 
            +
                    </thead>
         | 
| 21 | 
            +
                    <tbody>
         | 
| 22 | 
            +
                      <% @users.each.with_index(1) do |user, index| %>
         | 
| 23 | 
            +
                        <tr style="vertical-align: middle;">
         | 
| 24 | 
            +
                          <td><%= index %></td>
         | 
| 25 | 
            +
                          <td><%= user.name %></td>
         | 
| 26 | 
            +
                          <td><%= user.email %></td>
         | 
| 27 | 
            +
                          <td><%= user.mobile_number %></td>
         | 
| 28 | 
            +
                          <td><%= user.fruit_name %></td>
         | 
| 29 | 
            +
                          <td><%= user.address.country_name %></td>
         | 
| 30 | 
            +
                          <td>
         | 
| 31 | 
            +
                            <%= link_to "Edit", edit_user_path(user), class: "btn btn-sm btn-secondary" %>
         | 
| 32 | 
            +
                            <div class="d-inline-block">
         | 
| 33 | 
            +
                              <%= button_to "Delete", user, class: "btn btn-sm btn-danger", method: :delete %>
         | 
| 34 | 
            +
                            </div>
         | 
| 35 | 
            +
                          </td>
         | 
| 36 | 
            +
                        </tr>
         | 
| 37 | 
            +
                      <% end %>
         | 
| 38 | 
            +
                    </tbody>
         | 
| 39 | 
            +
                  </table>
         | 
| 40 | 
            +
                </div>
         | 
| 41 | 
            +
              </div>
         | 
| 42 | 
            +
            </div>
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            <%= render partial: "form" %>
         | 
    
        data/demo/bin/bundle
    ADDED
    
    | @@ -0,0 +1,111 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 3 | 
            +
            # -*- frozen_string_literal: true -*-
         | 
| 4 | 
            +
            # -*- warn_indent: true -*-
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            # This file was generated by Bundler.
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
            # The application 'bundle' is installed as part of a gem, and
         | 
| 10 | 
            +
            # this file is here to facilitate running it.
         | 
| 11 | 
            +
            #
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            require "rubygems"
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            m = Module.new do
         | 
| 16 | 
            +
              module_function
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              def invoked_as_script?
         | 
| 19 | 
            +
                File.expand_path($0) == File.expand_path(__FILE__)
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              def env_var_version
         | 
| 23 | 
            +
                ENV["BUNDLER_VERSION"]
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def cli_arg_version
         | 
| 27 | 
            +
                return unless invoked_as_script? # don't want to hijack other binstubs
         | 
| 28 | 
            +
                return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update`
         | 
| 29 | 
            +
                bundler_version = nil
         | 
| 30 | 
            +
                update_index = nil
         | 
| 31 | 
            +
                ARGV.each_with_index do |a, i|
         | 
| 32 | 
            +
                  if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN
         | 
| 33 | 
            +
                    bundler_version = a
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
                  next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
         | 
| 36 | 
            +
                  bundler_version = $1
         | 
| 37 | 
            +
                  update_index = i
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
                bundler_version
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              def gemfile
         | 
| 43 | 
            +
                gemfile = ENV["BUNDLE_GEMFILE"]
         | 
| 44 | 
            +
                return gemfile if gemfile && !gemfile.empty?
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                File.expand_path("../Gemfile", __dir__)
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
              def lockfile
         | 
| 50 | 
            +
                lockfile =
         | 
| 51 | 
            +
                  case File.basename(gemfile)
         | 
| 52 | 
            +
                  when "gems.rb" then gemfile.sub(/\.rb$/, ".locked")
         | 
| 53 | 
            +
                  else "#{gemfile}.lock"
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
                File.expand_path(lockfile)
         | 
| 56 | 
            +
              end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
              def lockfile_version
         | 
| 59 | 
            +
                return unless File.file?(lockfile)
         | 
| 60 | 
            +
                lockfile_contents = File.read(lockfile)
         | 
| 61 | 
            +
                return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
         | 
| 62 | 
            +
                Regexp.last_match(1)
         | 
| 63 | 
            +
              end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
              def bundler_requirement
         | 
| 66 | 
            +
                @bundler_requirement ||=
         | 
| 67 | 
            +
                  env_var_version ||
         | 
| 68 | 
            +
                  cli_arg_version ||
         | 
| 69 | 
            +
                  bundler_requirement_for(lockfile_version)
         | 
| 70 | 
            +
              end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
              def bundler_requirement_for(version)
         | 
| 73 | 
            +
                return "#{Gem::Requirement.default}.a" unless version
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                bundler_gem_version = Gem::Version.new(version)
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                bundler_gem_version.approximate_recommendation
         | 
| 78 | 
            +
              end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
              def load_bundler!
         | 
| 81 | 
            +
                ENV["BUNDLE_GEMFILE"] ||= gemfile
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                activate_bundler
         | 
| 84 | 
            +
              end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
              def activate_bundler
         | 
| 87 | 
            +
                gem_error = activation_error_handling do
         | 
| 88 | 
            +
                  gem "bundler", bundler_requirement
         | 
| 89 | 
            +
                end
         | 
| 90 | 
            +
                return if gem_error.nil?
         | 
| 91 | 
            +
                require_error = activation_error_handling do
         | 
| 92 | 
            +
                  require "bundler/version"
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
                return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION))
         | 
| 95 | 
            +
                warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`"
         | 
| 96 | 
            +
                exit 42
         | 
| 97 | 
            +
              end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
              def activation_error_handling
         | 
| 100 | 
            +
                yield
         | 
| 101 | 
            +
                nil
         | 
| 102 | 
            +
              rescue StandardError, LoadError => e
         | 
| 103 | 
            +
                e
         | 
| 104 | 
            +
              end
         | 
| 105 | 
            +
            end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
            m.load_bundler!
         | 
| 108 | 
            +
             | 
| 109 | 
            +
            if m.invoked_as_script?
         | 
| 110 | 
            +
              load Gem.bin_path("bundler", "bundle")
         | 
| 111 | 
            +
            end
         | 
    
        data/demo/bin/rails
    ADDED
    
    
    
        data/demo/bin/rake
    ADDED
    
    
    
        data/demo/bin/setup
    ADDED
    
    | @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 3 | 
            +
            # -*- frozen_string_literal: true -*-
         | 
| 4 | 
            +
            # -*- warn_indent: true -*-
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            require "fileutils"
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            # path to your application root.
         | 
| 9 | 
            +
            APP_ROOT = File.expand_path("..", __dir__)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            def system!(*args)
         | 
| 12 | 
            +
              system(*args) || abort("\n== Command #{args} failed ==")
         | 
| 13 | 
            +
            end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            FileUtils.chdir APP_ROOT do
         | 
| 16 | 
            +
              # This script is a way to set up or update your development environment automatically.
         | 
| 17 | 
            +
              # This script is idempotent, so that you can run it at any time and get an expectable outcome.
         | 
| 18 | 
            +
              # Add necessary setup steps to this file.
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              puts "== Installing dependencies =="
         | 
| 21 | 
            +
              system! "gem install bundler --conservative"
         | 
| 22 | 
            +
              system("bundle check") || system!("bundle install")
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              # puts "\n== Copying sample files =="
         | 
| 25 | 
            +
              # unless File.exist?("config/database.yml")
         | 
| 26 | 
            +
              #   FileUtils.cp "config/database.yml.sample", "config/database.yml"
         | 
| 27 | 
            +
              # end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              puts "\n== Preparing database =="
         | 
| 30 | 
            +
              system! "bin/rails db:prepare"
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              puts "\n== Removing old logs and tempfiles =="
         | 
| 33 | 
            +
              system! "bin/rails log:clear tmp:clear"
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              puts "\n== Restarting application server =="
         | 
| 36 | 
            +
              system! "bin/rails restart"
         | 
| 37 | 
            +
            end
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
            # -*- frozen_string_literal: true -*-
         | 
| 3 | 
            +
            # -*- warn_indent: true -*-
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            require_relative "boot"
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            require "rails/all"
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            # Require the gems listed in Gemfile, including any gems
         | 
| 10 | 
            +
            # you've limited to :test, :development, or :production.
         | 
| 11 | 
            +
            Bundler.require(*Rails.groups)
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            module Demo
         | 
| 14 | 
            +
              class Application < Rails::Application
         | 
| 15 | 
            +
                # Initialize configuration defaults for originally generated Rails version.
         | 
| 16 | 
            +
                config.load_defaults 7.0
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                # Configuration for the application, engines, and railties goes here.
         | 
| 19 | 
            +
                #
         | 
| 20 | 
            +
                # These settings can be overridden in specific environments using the files
         | 
| 21 | 
            +
                # in config/environments, which are processed later.
         | 
| 22 | 
            +
                #
         | 
| 23 | 
            +
                # config.time_zone = "Central Time (US & Canada)"
         | 
| 24 | 
            +
                # config.eager_load_paths << Rails.root.join("extras")
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                config.i18n.load_path += Dir[Rails.root.join("config", "locales", "**", "*.{rb,yml,yaml}")]
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
    
        data/demo/config/boot.rb
    ADDED
    
    | @@ -0,0 +1,9 @@ | |
| 1 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
            # -*- frozen_string_literal: true -*-
         | 
| 3 | 
            +
            # -*- warn_indent: true -*-
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            # Set up gems listed in the Gemfile.
         | 
| 6 | 
            +
            ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __dir__)
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"])
         | 
| 9 | 
            +
            $LOAD_PATH.unshift File.expand_path("../../lib", __dir__)
         |