administrate 0.9.0 → 0.10.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.
Potentially problematic release.
This version of administrate might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/assets/javascripts/administrate/components/date_time_picker.js +5 -1
- data/app/controllers/administrate/application_controller.rb +17 -12
- data/app/views/administrate/application/_flashes.html.erb +1 -1
- data/app/views/fields/belongs_to/_index.html.erb +1 -1
- data/app/views/fields/belongs_to/_show.html.erb +1 -1
- data/app/views/fields/date_time/_form.html.erb +1 -1
- data/app/views/fields/date_time/_index.html.erb +1 -1
- data/app/views/fields/password/_form.html.erb +23 -0
- data/app/views/fields/password/_index.html.erb +18 -0
- data/app/views/fields/password/_show.html.erb +18 -0
- data/app/views/fields/time/_form.html.erb +22 -0
- data/app/views/fields/time/_index.html.erb +17 -0
- data/app/views/fields/time/_show.html.erb +17 -0
- data/config/locales/administrate.al.yml +28 -0
- data/config/locales/administrate.ja.yml +2 -2
- data/config/locales/administrate.ru.yml +2 -2
- data/docs/customizing_dashboards.md +67 -1
- data/docs/customizing_page_views.md +5 -1
- data/lib/administrate/base_dashboard.rb +2 -0
- data/lib/administrate/field/associative.rb +4 -4
- data/lib/administrate/field/belongs_to.rb +3 -1
- data/lib/administrate/field/date_time.rb +1 -1
- data/lib/administrate/field/deferred.rb +4 -0
- data/lib/administrate/field/password.rb +25 -0
- data/lib/administrate/field/polymorphic.rb +1 -1
- data/lib/administrate/field/time.rb +8 -0
- data/lib/administrate/namespace.rb +1 -1
- data/lib/administrate/order.rb +3 -1
- data/lib/administrate/search.rb +39 -5
- data/lib/administrate/version.rb +1 -1
- data/lib/generators/administrate/dashboard/dashboard_generator.rb +1 -1
- metadata +17 -8
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 9d7d418391f23f99dc9c37e3ce7dc127a6cff9eb45f6994d9604f3771f4f51b4
         | 
| 4 | 
            +
              data.tar.gz: cc2badcba457d79690e1ae05e2f03069ed1e13522a1a0f58ff2ad9b38ebc071d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: a7e684f116a9d44b54d32fcf6c12865f61dcae3749366c253fdb4d9003c2930c18303d034f16c0273c174c035bc05b4524042e6d09124051a68af40eac8a6dc1
         | 
| 7 | 
            +
              data.tar.gz: 4045bcd18584e285373a860c0f634f952aff238063a58862750fc5ad9988d8dac9e5bba18ce684be6d6b3a0a72ae3647f863d134cb756038fae7c5f5bd65e88c
         | 
| @@ -7,7 +7,7 @@ module Administrate | |
| 7 7 | 
             
                  resources = Administrate::Search.new(scoped_resource,
         | 
| 8 8 | 
             
                                                       dashboard_class,
         | 
| 9 9 | 
             
                                                       search_term).run
         | 
| 10 | 
            -
                  resources = resources | 
| 10 | 
            +
                  resources = apply_resource_includes(resources)
         | 
| 11 11 | 
             
                  resources = order.apply(resources)
         | 
| 12 12 | 
             
                  resources = resources.page(params[:page]).per(records_per_page)
         | 
| 13 13 | 
             
                  page = Administrate::Page::Collection.new(dashboard, order: order)
         | 
| @@ -16,7 +16,7 @@ module Administrate | |
| 16 16 | 
             
                    resources: resources,
         | 
| 17 17 | 
             
                    search_term: search_term,
         | 
| 18 18 | 
             
                    page: page,
         | 
| 19 | 
            -
                    show_search_bar: show_search_bar | 
| 19 | 
            +
                    show_search_bar: show_search_bar?,
         | 
| 20 20 | 
             
                  }
         | 
| 21 21 | 
             
                end
         | 
| 22 22 |  | 
| @@ -70,8 +70,11 @@ module Administrate | |
| 70 70 | 
             
                end
         | 
| 71 71 |  | 
| 72 72 | 
             
                def destroy
         | 
| 73 | 
            -
                  requested_resource.destroy
         | 
| 74 | 
            -
             | 
| 73 | 
            +
                  if requested_resource.destroy
         | 
| 74 | 
            +
                    flash[:notice] = translate_with_resource("destroy.success")
         | 
| 75 | 
            +
                  else
         | 
| 76 | 
            +
                    flash[:error] = requested_resource.errors.full_messages.join("<br/>")
         | 
| 77 | 
            +
                  end
         | 
| 75 78 | 
             
                  redirect_to action: :index
         | 
| 76 79 | 
             
                end
         | 
| 77 80 |  | 
| @@ -98,15 +101,15 @@ module Administrate | |
| 98 101 | 
             
                end
         | 
| 99 102 |  | 
| 100 103 | 
             
                def order
         | 
| 101 | 
            -
                  @ | 
| 104 | 
            +
                  @order ||= Administrate::Order.new(params[:order], params[:direction])
         | 
| 102 105 | 
             
                end
         | 
| 103 106 |  | 
| 104 107 | 
             
                def dashboard
         | 
| 105 | 
            -
                  @ | 
| 108 | 
            +
                  @dashboard ||= dashboard_class.new
         | 
| 106 109 | 
             
                end
         | 
| 107 110 |  | 
| 108 111 | 
             
                def requested_resource
         | 
| 109 | 
            -
                  @ | 
| 112 | 
            +
                  @requested_resource ||= find_resource(params[:id]).tap do |resource|
         | 
| 110 113 | 
             
                    authorize_resource(resource)
         | 
| 111 114 | 
             
                  end
         | 
| 112 115 | 
             
                end
         | 
| @@ -119,8 +122,10 @@ module Administrate | |
| 119 122 | 
             
                  resource_class.default_scoped
         | 
| 120 123 | 
             
                end
         | 
| 121 124 |  | 
| 122 | 
            -
                def  | 
| 123 | 
            -
                  dashboard.association_includes
         | 
| 125 | 
            +
                def apply_resource_includes(relation)
         | 
| 126 | 
            +
                  resource_includes = dashboard.association_includes
         | 
| 127 | 
            +
                  return relation if resource_includes.empty?
         | 
| 128 | 
            +
                  relation.includes(*resource_includes)
         | 
| 124 129 | 
             
                end
         | 
| 125 130 |  | 
| 126 131 | 
             
                def resource_params
         | 
| @@ -147,7 +152,7 @@ module Administrate | |
| 147 152 | 
             
                helper_method :resource_name
         | 
| 148 153 |  | 
| 149 154 | 
             
                def resource_resolver
         | 
| 150 | 
            -
                  @ | 
| 155 | 
            +
                  @resource_resolver ||=
         | 
| 151 156 | 
             
                    Administrate::ResourceResolver.new(controller_path)
         | 
| 152 157 | 
             
                end
         | 
| 153 158 |  | 
| @@ -160,11 +165,11 @@ module Administrate | |
| 160 165 |  | 
| 161 166 | 
             
                def show_search_bar?
         | 
| 162 167 | 
             
                  dashboard.attribute_types_for(
         | 
| 163 | 
            -
                    dashboard.collection_attributes
         | 
| 168 | 
            +
                    dashboard.collection_attributes,
         | 
| 164 169 | 
             
                  ).any? { |_name, attribute| attribute.searchable? }
         | 
| 165 170 | 
             
                end
         | 
| 166 171 |  | 
| 167 | 
            -
                def show_action?( | 
| 172 | 
            +
                def show_action?(_action, _resource)
         | 
| 168 173 | 
             
                  true
         | 
| 169 174 | 
             
                end
         | 
| 170 175 | 
             
                helper_method :show_action?
         | 
| @@ -14,7 +14,7 @@ This partial renders flash messages on every page. | |
| 14 14 | 
             
            <% if flash.any? %>
         | 
| 15 15 | 
             
              <div class="flashes">
         | 
| 16 16 | 
             
                <% flash.each do |key, value| -%>
         | 
| 17 | 
            -
                  <div class="flash flash-<%= key %>"><%= value %></div>
         | 
| 17 | 
            +
                  <div class="flash flash-<%= key %>"><%= value.html_safe %></div>
         | 
| 18 18 | 
             
                <% end -%>
         | 
| 19 19 | 
             
              </div>
         | 
| 20 20 | 
             
            <% end %>
         | 
| @@ -16,7 +16,7 @@ By default, the relationship is rendered as a link to the associated object. | |
| 16 16 | 
             
            %>
         | 
| 17 17 |  | 
| 18 18 | 
             
            <% if field.data %>
         | 
| 19 | 
            -
              <% if valid_action?(:show, field. | 
| 19 | 
            +
              <% if valid_action?(:show, field.associated_class) %>
         | 
| 20 20 | 
             
                <%= link_to(
         | 
| 21 21 | 
             
                  field.display_associated_resource,
         | 
| 22 22 | 
             
                  [namespace, field.data],
         | 
| @@ -16,7 +16,7 @@ By default, the relationship is rendered as a link to the associated object. | |
| 16 16 | 
             
            %>
         | 
| 17 17 |  | 
| 18 18 | 
             
            <% if field.data %>
         | 
| 19 | 
            -
              <% if valid_action?(:show, field. | 
| 19 | 
            +
              <% if valid_action?(:show, field.associated_class) %>
         | 
| 20 20 | 
             
                <%= link_to(
         | 
| 21 21 | 
             
                  field.display_associated_resource,
         | 
| 22 22 | 
             
                  [namespace, field.data],
         | 
| @@ -20,5 +20,5 @@ By default, the input is a text field that is augmented with [DateTimePicker]. | |
| 20 20 | 
             
              <%= f.label field.attribute %>
         | 
| 21 21 | 
             
            </div>
         | 
| 22 22 | 
             
            <div class="field-unit__field">
         | 
| 23 | 
            -
              <%= f.text_field field.attribute,  | 
| 23 | 
            +
              <%= f.text_field field.attribute, data: { type: 'datetime' }  %>
         | 
| 24 24 | 
             
            </div>
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            <%#
         | 
| 2 | 
            +
            # Password Form Partial
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            This partial renders an input element for a password attribute.
         | 
| 5 | 
            +
            By default, the input is a password field.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            ## Local variables:
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            - `f`:
         | 
| 10 | 
            +
              A Rails form generator, used to help create the appropriate input fields.
         | 
| 11 | 
            +
            - `field`:
         | 
| 12 | 
            +
              An instance of [Administrate::Field::Password][1].
         | 
| 13 | 
            +
              A wrapper around the Password.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            [1]: http://www.rubydoc.info/gems/administrate/Administrate/Field/Password
         | 
| 16 | 
            +
            %>
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            <div class="field-unit__label">
         | 
| 19 | 
            +
              <%= f.label field.attribute %>
         | 
| 20 | 
            +
            </div>
         | 
| 21 | 
            +
            <div class="field-unit__field">
         | 
| 22 | 
            +
              <%= f.password_field field.attribute, value: field.data %>
         | 
| 23 | 
            +
            </div>
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            <%#
         | 
| 2 | 
            +
            # Password Index Partial
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            This partial renders a password attribute
         | 
| 5 | 
            +
            to be displayed on a resource's index page.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            By default, the attribute is rendered as a truncated string.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            ## Local variables:
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            - `field`:
         | 
| 12 | 
            +
              An instance of [Administrate::Field::Password][1].
         | 
| 13 | 
            +
              A wrapper around the Password.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            [1]: http://www.rubydoc.info/gems/administrate/Administrate/Field/Password
         | 
| 16 | 
            +
            %>
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            <%= field.truncate %>
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            <%#
         | 
| 2 | 
            +
            # Password Show Partial
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            This partial renders a password attribute,
         | 
| 5 | 
            +
            to be displayed on a resource's show page.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            By default, the attribute is rendered as an truncate string.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            ## Local variables:
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            - `field`:
         | 
| 12 | 
            +
              An instance of [Administrate::Field::Password][1].
         | 
| 13 | 
            +
              A wrapper around the Password.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            [1]: http://www.rubydoc.info/gems/administrate/Administrate/Field/Password
         | 
| 16 | 
            +
            %>
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            <%= field.truncate %>
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            <%#
         | 
| 2 | 
            +
            # Time Form Partial
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            This partial renders an input element for time attributes.
         | 
| 5 | 
            +
            By default, the input is a select field for the time attributes.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            ## Local variables:
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            - `f`:
         | 
| 10 | 
            +
              A Rails form generator, used to help create the appropriate input fields.
         | 
| 11 | 
            +
            - `field`:
         | 
| 12 | 
            +
              An instance of [Administrate::Field::Time][1].
         | 
| 13 | 
            +
              A wrapper around the tmie attributes pulled from the model.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            %>
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            <div class="field-unit__label">
         | 
| 18 | 
            +
              <%= f.label field.attribute %>
         | 
| 19 | 
            +
            </div>
         | 
| 20 | 
            +
            <div class="field-unit__field">
         | 
| 21 | 
            +
              <%= f.text_field field.attribute, data: { type: 'time' } %>
         | 
| 22 | 
            +
            </div>
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            <%#
         | 
| 2 | 
            +
            # Time Index Partial
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            This partial renders an time attribute
         | 
| 5 | 
            +
            to be displayed on a resource's index page.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            By default, the attribute is rendered as a text tag.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            ## Local variables:
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            - `field`:
         | 
| 12 | 
            +
              An instance of [Administrate::Field::Time][1].
         | 
| 13 | 
            +
              A wrapper around the time attributes pulled from the model.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            %>
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            <%= field.data.strftime("%I:%M%p").to_s %>
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            <%#
         | 
| 2 | 
            +
            # Time Show Partial
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            This partial renders an time attribute,
         | 
| 5 | 
            +
            to be displayed on a resource's show page.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            By default, the attribute is rendered as a text tag.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            ## Local variables:
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            - `field`:
         | 
| 12 | 
            +
              An instance of [Administrate::Field::Time][1].
         | 
| 13 | 
            +
              A wrapper around the time attributes pulled from the model.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            %>
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            <%= field.data.strftime("%I:%M%p").to_s %>
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            al:
         | 
| 3 | 
            +
              administrate:
         | 
| 4 | 
            +
                actions:
         | 
| 5 | 
            +
                  confirm: A jeni te sigurtë?
         | 
| 6 | 
            +
                  destroy: Fshij
         | 
| 7 | 
            +
                  edit: Ndrysho
         | 
| 8 | 
            +
                  edit_resource: Ndrysho %{name}
         | 
| 9 | 
            +
                  show_resource: Trego %{name}
         | 
| 10 | 
            +
                  new_resource: Të re %{name}
         | 
| 11 | 
            +
                  back: Prapa
         | 
| 12 | 
            +
                controller:
         | 
| 13 | 
            +
                  create:
         | 
| 14 | 
            +
                    success: "%{resource} është krijuar me sukses."
         | 
| 15 | 
            +
                  destroy:
         | 
| 16 | 
            +
                    success: "%{resource} është fshirë me sukses."
         | 
| 17 | 
            +
                  update:
         | 
| 18 | 
            +
                    success: "%{resource} është azhurnuar me sukses."
         | 
| 19 | 
            +
                fields:
         | 
| 20 | 
            +
                  has_many:
         | 
| 21 | 
            +
                    more: Duke treguar %{count} nga %{total_count}
         | 
| 22 | 
            +
                    none: Asnjë
         | 
| 23 | 
            +
                form:
         | 
| 24 | 
            +
                  error: gabim
         | 
| 25 | 
            +
                  errors: "%{pluralized_errors} nuk e lejoj %{resource_name} të ruhet:"
         | 
| 26 | 
            +
                search:
         | 
| 27 | 
            +
                  clear: Pastro kërkimin
         | 
| 28 | 
            +
                  label: Kërko %{resource}
         | 
| @@ -21,8 +21,8 @@ ja: | |
| 21 21 | 
             
                    more: "%{total_count} 件中 %{count} 件表示"
         | 
| 22 22 | 
             
                    none: データがありません
         | 
| 23 23 | 
             
                form:
         | 
| 24 | 
            -
                  error:  | 
| 25 | 
            -
                  errors: "%{pluralized_errors} | 
| 24 | 
            +
                  error: エラー
         | 
| 25 | 
            +
                  errors: "%{pluralized_errors}のため%{resource_name}を保存できません。"
         | 
| 26 26 | 
             
                search:
         | 
| 27 27 | 
             
                  clear: 検索をクリアする
         | 
| 28 28 | 
             
                  label: サーチ %{resource}
         | 
| @@ -21,8 +21,8 @@ ru: | |
| 21 21 | 
             
                    more: "%{count} из %{total_count}"
         | 
| 22 22 | 
             
                    none: Нет
         | 
| 23 23 | 
             
                form:
         | 
| 24 | 
            -
                  error:  | 
| 25 | 
            -
                  errors: " | 
| 24 | 
            +
                  error: Ошибка
         | 
| 25 | 
            +
                  errors: "При сохранении %{resource_name} произошли ошибки:"
         | 
| 26 26 | 
             
                search:
         | 
| 27 27 | 
             
                  clear: Очистить поиск
         | 
| 28 28 | 
             
                  label: Поиск %{resource}
         | 
| @@ -10,7 +10,7 @@ require "administrate/dashboard/base" | |
| 10 10 |  | 
| 11 11 | 
             
            class CustomerDashboard < Administrate::Dashboard::Base
         | 
| 12 12 | 
             
              ATTRIBUTE_TYPES = {
         | 
| 13 | 
            -
                id: Field:: | 
| 13 | 
            +
                id: Field::Number,
         | 
| 14 14 | 
             
                name: Field::String,
         | 
| 15 15 | 
             
                email: Field::String,
         | 
| 16 16 | 
             
                created_at: Field::DateTime,
         | 
| @@ -62,6 +62,7 @@ specify, including: | |
| 62 62 | 
             
            - `Field::Select`
         | 
| 63 63 | 
             
            - `Field::String`
         | 
| 64 64 | 
             
            - `Field::Text`
         | 
| 65 | 
            +
            - `Field::Password`
         | 
| 65 66 |  | 
| 66 67 | 
             
            ## Customizing Fields
         | 
| 67 68 |  | 
| @@ -80,6 +81,30 @@ than one column. e.g.: `"name, email DESC"`. | |
| 80 81 | 
             
            `:foreign_key` - Specifies the name of the foreign key directly.
         | 
| 81 82 | 
             
            Defaults to `:#{attribute}_id`.
         | 
| 82 83 |  | 
| 84 | 
            +
            `:scope` - Specifies a custom scope inside a callable. Useful for preloading.
         | 
| 85 | 
            +
            Example: `.with_options(scope: -> { MyModel.includes(:rel).limit(5) })`
         | 
| 86 | 
            +
             | 
| 87 | 
            +
            `:class_name` - Specifies the name of the associated class.
         | 
| 88 | 
            +
            Defaults to `:#{attribute}.to_s.singularize.camelcase`.
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            `:searchable` - Specify if the attribute should be considered when searching.
         | 
| 91 | 
            +
            Default is `false`.
         | 
| 92 | 
            +
             | 
| 93 | 
            +
            `searchable_field` - Specify which column to use on the search, only applies
         | 
| 94 | 
            +
            if `searchable` is `true`
         | 
| 95 | 
            +
             | 
| 96 | 
            +
            For example:
         | 
| 97 | 
            +
             | 
| 98 | 
            +
            ```ruby
         | 
| 99 | 
            +
              country: Field::BelongsTo(
         | 
| 100 | 
            +
                searchable: true,
         | 
| 101 | 
            +
                seachable_field: 'name',
         | 
| 102 | 
            +
              )
         | 
| 103 | 
            +
            ```
         | 
| 104 | 
            +
             | 
| 105 | 
            +
            with this, you will be able to search through the column `name` from the
         | 
| 106 | 
            +
            association `belongs_to :country`, from your model.
         | 
| 107 | 
            +
             | 
| 83 108 | 
             
            **Field::HasMany**
         | 
| 84 109 |  | 
| 85 110 | 
             
            `:limit` - Set the number of resources to display in the show view. Default is
         | 
| @@ -93,8 +118,38 @@ Defaults to `:#{attribute}_id`. | |
| 93 118 |  | 
| 94 119 | 
             
            `:foreign_key` - Specifies the name of the foreign key directly. Defaults to `:#{attribute}_id`
         | 
| 95 120 |  | 
| 121 | 
            +
            `:class_name` - Specifies the name of the associated class.
         | 
| 122 | 
            +
            Defaults to `:#{attribute}.to_s.singularize.camelcase`.
         | 
| 123 | 
            +
             | 
| 124 | 
            +
            **Field::HasOne**
         | 
| 125 | 
            +
             | 
| 126 | 
            +
            `:class_name` - Specifies the name of the associated class.
         | 
| 127 | 
            +
            Defaults to `:#{attribute}.to_s.singularize.camelcase`.
         | 
| 128 | 
            +
             | 
| 129 | 
            +
            `:searchable` - Specify if the attribute should be considered when searching.
         | 
| 130 | 
            +
            Default is `false`.
         | 
| 131 | 
            +
             | 
| 132 | 
            +
            `searchable_field` - Specify which column to use on the search, only applies if
         | 
| 133 | 
            +
            `searchable` is `true`
         | 
| 134 | 
            +
             | 
| 135 | 
            +
            For example:
         | 
| 136 | 
            +
             | 
| 137 | 
            +
            ```ruby
         | 
| 138 | 
            +
              cities: Field::HasMany(
         | 
| 139 | 
            +
                searchable: true,
         | 
| 140 | 
            +
                seachable_field: 'name',
         | 
| 141 | 
            +
              )
         | 
| 142 | 
            +
            ```
         | 
| 143 | 
            +
             | 
| 144 | 
            +
            with this, you will be able to search through the column `name` from the
         | 
| 145 | 
            +
            association `has_many :cities`, from your model.
         | 
| 146 | 
            +
             | 
| 96 147 | 
             
            **Field::Number**
         | 
| 97 148 |  | 
| 149 | 
            +
            `:searchable` - Specify if the attribute should be considered when searching.
         | 
| 150 | 
            +
            Note that currently number fields are searched like text, which may yield
         | 
| 151 | 
            +
            more results than expected. Default is `false`.
         | 
| 152 | 
            +
             | 
| 98 153 | 
             
            `:decimals` - Set the number of decimals to display. Defaults to `0`.
         | 
| 99 154 |  | 
| 100 155 | 
             
            `:prefix` - Prefixes the number with a string. Defaults to `""`.
         | 
| @@ -158,6 +213,17 @@ Default is `false`. | |
| 158 213 | 
             
            `:truncate` - Set the number of characters to display in the index view.
         | 
| 159 214 | 
             
            Defaults to `50`.
         | 
| 160 215 |  | 
| 216 | 
            +
            **Field::Password**
         | 
| 217 | 
            +
             | 
| 218 | 
            +
            `:searchable` - Specify if the attribute should be considered when searching.
         | 
| 219 | 
            +
            Default is `false`.
         | 
| 220 | 
            +
             | 
| 221 | 
            +
            `:truncate` - Set the number of characters to display in the views.
         | 
| 222 | 
            +
            Defaults to `50`.
         | 
| 223 | 
            +
             | 
| 224 | 
            +
            `:character` - Set the replace character.
         | 
| 225 | 
            +
            Defaults to `•`.
         | 
| 226 | 
            +
             | 
| 161 227 | 
             
            ### Defining Labels
         | 
| 162 228 |  | 
| 163 229 | 
             
            To change the user-facing label for an attribute,
         | 
| @@ -67,7 +67,7 @@ and will leave the show pages for other resources unchanged. | |
| 67 67 | 
             
            ## Customizing layouts
         | 
| 68 68 |  | 
| 69 69 | 
             
            Many developers need to customize the layouts of their admin dashboard.
         | 
| 70 | 
            -
            It's  | 
| 70 | 
            +
            It's as easy as passing in the "layout" keyword to the view generators.
         | 
| 71 71 |  | 
| 72 72 | 
             
            ```bash
         | 
| 73 73 | 
             
            rails generate administrate:views:layout
         | 
| @@ -75,4 +75,8 @@ rails generate administrate:views:layout | |
| 75 75 | 
             
             # -> app/views/admin/application/_navigation.html.erb
         | 
| 76 76 | 
             
             # -> app/views/admin/application/_javascript.html.erb
         | 
| 77 77 | 
             
             # -> app/views/admin/application/_flashes.html.erb
         | 
| 78 | 
            +
             | 
| 79 | 
            +
             rails generate administrate:views:navigation
         | 
| 80 | 
            +
             # It only generates the sidebar partial
         | 
| 81 | 
            +
             # -> app/views/admin/application/_navigation.html.erb
         | 
| 78 82 | 
             
            ```
         | 
| @@ -9,6 +9,8 @@ require "administrate/field/polymorphic" | |
| 9 9 | 
             
            require "administrate/field/select"
         | 
| 10 10 | 
             
            require "administrate/field/string"
         | 
| 11 11 | 
             
            require "administrate/field/text"
         | 
| 12 | 
            +
            require "administrate/field/time"
         | 
| 13 | 
            +
            require "administrate/field/password"
         | 
| 12 14 |  | 
| 13 15 | 
             
            module Administrate
         | 
| 14 16 | 
             
              class BaseDashboard
         | 
| @@ -7,16 +7,16 @@ module Administrate | |
| 7 7 | 
             
                    associated_dashboard.display_resource(data)
         | 
| 8 8 | 
             
                  end
         | 
| 9 9 |  | 
| 10 | 
            +
                  def associated_class
         | 
| 11 | 
            +
                    associated_class_name.constantize
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 10 14 | 
             
                  protected
         | 
| 11 15 |  | 
| 12 16 | 
             
                  def associated_dashboard
         | 
| 13 17 | 
             
                    "#{associated_class_name}Dashboard".constantize.new
         | 
| 14 18 | 
             
                  end
         | 
| 15 19 |  | 
| 16 | 
            -
                  def associated_class
         | 
| 17 | 
            -
                    associated_class_name.constantize
         | 
| 18 | 
            -
                  end
         | 
| 19 | 
            -
             | 
| 20 20 | 
             
                  def associated_class_name
         | 
| 21 21 | 
             
                    options.fetch(:class_name, attribute.to_s.singularize.camelcase)
         | 
| 22 22 | 
             
                  end
         | 
| @@ -24,8 +24,10 @@ module Administrate | |
| 24 24 | 
             
                  private
         | 
| 25 25 |  | 
| 26 26 | 
             
                  def candidate_resources
         | 
| 27 | 
            +
                    scope = options[:scope] ? options[:scope].call : associated_class.all
         | 
| 28 | 
            +
             | 
| 27 29 | 
             
                    order = options.delete(:order)
         | 
| 28 | 
            -
                    order ?  | 
| 30 | 
            +
                    order ? scope.reorder(order) : scope
         | 
| 29 31 | 
             
                  end
         | 
| 30 32 |  | 
| 31 33 | 
             
                  def display_candidate_resource(resource)
         | 
| @@ -25,6 +25,10 @@ module Administrate | |
| 25 25 | 
             
                    options.fetch(:searchable, deferred_class.searchable?)
         | 
| 26 26 | 
             
                  end
         | 
| 27 27 |  | 
| 28 | 
            +
                  def searchable_field
         | 
| 29 | 
            +
                    options.fetch(:searchable_field)
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 28 32 | 
             
                  def permitted_attribute(attr, _options = nil)
         | 
| 29 33 | 
             
                    options.fetch(:foreign_key,
         | 
| 30 34 | 
             
                      deferred_class.permitted_attribute(attr, options))
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            require_relative "base"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Administrate
         | 
| 4 | 
            +
              module Field
         | 
| 5 | 
            +
                class Password < Field::Base
         | 
| 6 | 
            +
                  def self.searchable?
         | 
| 7 | 
            +
                    false
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  def truncate
         | 
| 11 | 
            +
                    data.to_s.gsub(/./, character)[0...truncation_length]
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  private
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def truncation_length
         | 
| 17 | 
            +
                    options.fetch(:truncate, 50)
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  def character
         | 
| 21 | 
            +
                    options.fetch(:character, "•")
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -12,7 +12,7 @@ module Administrate | |
| 12 12 |  | 
| 13 13 | 
             
                def routes
         | 
| 14 14 | 
             
                  @routes ||= all_routes.select do |controller, _action|
         | 
| 15 | 
            -
                    controller.starts_with?(namespace | 
| 15 | 
            +
                    controller.starts_with?("#{namespace}/")
         | 
| 16 16 | 
             
                  end.map do |controller, action|
         | 
| 17 17 | 
             
                    [controller.gsub(/^#{namespace}\//, ""), action]
         | 
| 18 18 | 
             
                  end
         | 
    
        data/lib/administrate/order.rb
    CHANGED
    
    | @@ -9,7 +9,9 @@ module Administrate | |
| 9 9 | 
             
                  return order_by_association(relation) unless
         | 
| 10 10 | 
             
                    reflect_association(relation).nil?
         | 
| 11 11 |  | 
| 12 | 
            -
                   | 
| 12 | 
            +
                  order = "#{relation.table_name}.#{attribute} #{direction}"
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  return relation.reorder(order) if
         | 
| 13 15 | 
             
                    relation.columns_hash.keys.include?(attribute.to_s)
         | 
| 14 16 |  | 
| 15 17 | 
             
                  relation
         | 
    
        data/lib/administrate/search.rb
    CHANGED
    
    | @@ -13,7 +13,7 @@ module Administrate | |
| 13 13 | 
             
                  if @term.blank?
         | 
| 14 14 | 
             
                    @scoped_resource.all
         | 
| 15 15 | 
             
                  else
         | 
| 16 | 
            -
                    @scoped_resource.where(query, *search_terms)
         | 
| 16 | 
            +
                    @scoped_resource.joins(tables_to_join).where(query, *search_terms)
         | 
| 17 17 | 
             
                  end
         | 
| 18 18 | 
             
                end
         | 
| 19 19 |  | 
| @@ -21,10 +21,10 @@ module Administrate | |
| 21 21 |  | 
| 22 22 | 
             
                def query
         | 
| 23 23 | 
             
                  search_attributes.map do |attr|
         | 
| 24 | 
            -
                    table_name =  | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
                    "LOWER( | 
| 24 | 
            +
                    table_name = query_table_name(attr)
         | 
| 25 | 
            +
                    attr_name = column_to_query(attr)
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    "LOWER(CAST(#{table_name}.#{attr_name} AS CHAR(256))) LIKE ?"
         | 
| 28 28 | 
             
                  end.join(" OR ")
         | 
| 29 29 | 
             
                end
         | 
| 30 30 |  | 
| @@ -42,6 +42,40 @@ module Administrate | |
| 42 42 | 
             
                  @dashboard_class::ATTRIBUTE_TYPES
         | 
| 43 43 | 
             
                end
         | 
| 44 44 |  | 
| 45 | 
            +
                def query_table_name(attr)
         | 
| 46 | 
            +
                  if association_search?(attr)
         | 
| 47 | 
            +
                    ActiveRecord::Base.connection.quote_table_name(attr.to_s.pluralize)
         | 
| 48 | 
            +
                  else
         | 
| 49 | 
            +
                    ActiveRecord::Base.connection.
         | 
| 50 | 
            +
                      quote_table_name(@scoped_resource.table_name)
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def column_to_query(attr)
         | 
| 55 | 
            +
                  if association_search?(attr)
         | 
| 56 | 
            +
                    ActiveRecord::Base.connection.
         | 
| 57 | 
            +
                      quote_column_name(attribute_types[attr].searchable_field)
         | 
| 58 | 
            +
                  else
         | 
| 59 | 
            +
                    ActiveRecord::Base.connection.quote_column_name(attr)
         | 
| 60 | 
            +
                  end
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                def tables_to_join
         | 
| 64 | 
            +
                  attribute_types.keys.select do |attribute|
         | 
| 65 | 
            +
                    attribute_types[attribute].searchable? && association_search?(attribute)
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
                end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                def association_search?(attribute)
         | 
| 70 | 
            +
                  return unless attribute_types[attribute].respond_to?(:deferred_class)
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                  [
         | 
| 73 | 
            +
                    Administrate::Field::BelongsTo,
         | 
| 74 | 
            +
                    Administrate::Field::HasMany,
         | 
| 75 | 
            +
                    Administrate::Field::HasOne,
         | 
| 76 | 
            +
                  ].include?(attribute_types[attribute].deferred_class)
         | 
| 77 | 
            +
                end
         | 
| 78 | 
            +
             | 
| 45 79 | 
             
                attr_reader :resolver, :term
         | 
| 46 80 | 
             
              end
         | 
| 47 81 | 
             
            end
         | 
    
        data/lib/administrate/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: administrate
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.10.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Nick Charlton
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2018- | 
| 12 | 
            +
            date: 2018-04-20 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: actionpack
         | 
| @@ -20,7 +20,7 @@ dependencies: | |
| 20 20 | 
             
                    version: '4.2'
         | 
| 21 21 | 
             
                - - "<"
         | 
| 22 22 | 
             
                  - !ruby/object:Gem::Version
         | 
| 23 | 
            -
                    version: ' | 
| 23 | 
            +
                    version: '6.0'
         | 
| 24 24 | 
             
              type: :runtime
         | 
| 25 25 | 
             
              prerelease: false
         | 
| 26 26 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -30,7 +30,7 @@ dependencies: | |
| 30 30 | 
             
                    version: '4.2'
         | 
| 31 31 | 
             
                - - "<"
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: ' | 
| 33 | 
            +
                    version: '6.0'
         | 
| 34 34 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 35 35 | 
             
              name: actionview
         | 
| 36 36 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -40,7 +40,7 @@ dependencies: | |
| 40 40 | 
             
                    version: '4.2'
         | 
| 41 41 | 
             
                - - "<"
         | 
| 42 42 | 
             
                  - !ruby/object:Gem::Version
         | 
| 43 | 
            -
                    version: ' | 
| 43 | 
            +
                    version: '6.0'
         | 
| 44 44 | 
             
              type: :runtime
         | 
| 45 45 | 
             
              prerelease: false
         | 
| 46 46 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -50,7 +50,7 @@ dependencies: | |
| 50 50 | 
             
                    version: '4.2'
         | 
| 51 51 | 
             
                - - "<"
         | 
| 52 52 | 
             
                  - !ruby/object:Gem::Version
         | 
| 53 | 
            -
                    version: ' | 
| 53 | 
            +
                    version: '6.0'
         | 
| 54 54 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 55 55 | 
             
              name: activerecord
         | 
| 56 56 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -60,7 +60,7 @@ dependencies: | |
| 60 60 | 
             
                    version: '4.2'
         | 
| 61 61 | 
             
                - - "<"
         | 
| 62 62 | 
             
                  - !ruby/object:Gem::Version
         | 
| 63 | 
            -
                    version: ' | 
| 63 | 
            +
                    version: '6.0'
         | 
| 64 64 | 
             
              type: :runtime
         | 
| 65 65 | 
             
              prerelease: false
         | 
| 66 66 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -70,7 +70,7 @@ dependencies: | |
| 70 70 | 
             
                    version: '4.2'
         | 
| 71 71 | 
             
                - - "<"
         | 
| 72 72 | 
             
                  - !ruby/object:Gem::Version
         | 
| 73 | 
            -
                    version: ' | 
| 73 | 
            +
                    version: '6.0'
         | 
| 74 74 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 75 75 | 
             
              name: autoprefixer-rails
         | 
| 76 76 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -253,6 +253,9 @@ files: | |
| 253 253 | 
             
            - app/views/fields/number/_form.html.erb
         | 
| 254 254 | 
             
            - app/views/fields/number/_index.html.erb
         | 
| 255 255 | 
             
            - app/views/fields/number/_show.html.erb
         | 
| 256 | 
            +
            - app/views/fields/password/_form.html.erb
         | 
| 257 | 
            +
            - app/views/fields/password/_index.html.erb
         | 
| 258 | 
            +
            - app/views/fields/password/_show.html.erb
         | 
| 256 259 | 
             
            - app/views/fields/polymorphic/_form.html.erb
         | 
| 257 260 | 
             
            - app/views/fields/polymorphic/_index.html.erb
         | 
| 258 261 | 
             
            - app/views/fields/polymorphic/_show.html.erb
         | 
| @@ -265,8 +268,12 @@ files: | |
| 265 268 | 
             
            - app/views/fields/text/_form.html.erb
         | 
| 266 269 | 
             
            - app/views/fields/text/_index.html.erb
         | 
| 267 270 | 
             
            - app/views/fields/text/_show.html.erb
         | 
| 271 | 
            +
            - app/views/fields/time/_form.html.erb
         | 
| 272 | 
            +
            - app/views/fields/time/_index.html.erb
         | 
| 273 | 
            +
            - app/views/fields/time/_show.html.erb
         | 
| 268 274 | 
             
            - app/views/layouts/administrate/application.html.erb
         | 
| 269 275 | 
             
            - config/i18n-tasks.yml
         | 
| 276 | 
            +
            - config/locales/administrate.al.yml
         | 
| 270 277 | 
             
            - config/locales/administrate.ar.yml
         | 
| 271 278 | 
             
            - config/locales/administrate.bs.yml
         | 
| 272 279 | 
             
            - config/locales/administrate.ca.yml
         | 
| @@ -312,10 +319,12 @@ files: | |
| 312 319 | 
             
            - lib/administrate/field/has_many.rb
         | 
| 313 320 | 
             
            - lib/administrate/field/has_one.rb
         | 
| 314 321 | 
             
            - lib/administrate/field/number.rb
         | 
| 322 | 
            +
            - lib/administrate/field/password.rb
         | 
| 315 323 | 
             
            - lib/administrate/field/polymorphic.rb
         | 
| 316 324 | 
             
            - lib/administrate/field/select.rb
         | 
| 317 325 | 
             
            - lib/administrate/field/string.rb
         | 
| 318 326 | 
             
            - lib/administrate/field/text.rb
         | 
| 327 | 
            +
            - lib/administrate/field/time.rb
         | 
| 319 328 | 
             
            - lib/administrate/generator_helpers.rb
         | 
| 320 329 | 
             
            - lib/administrate/namespace.rb
         | 
| 321 330 | 
             
            - lib/administrate/namespace/resource.rb
         |