tramway-admin 1.27.0.2 → 1.28
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/app/helpers/tramway/admin/actions_helper.rb +1 -1
- data/app/helpers/tramway/admin/inputs_helper.rb +41 -6
- data/app/helpers/tramway/admin/records_helper.rb +9 -9
- data/app/views/tramway/admin/shared/_input.html.haml +11 -22
- data/lib/tramway/admin.rb +10 -4
- data/lib/tramway/admin/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 85962c2ec92a777e283621ee5dbb244184ede26066d068bcedd6c54be51725b3
         | 
| 4 | 
            +
              data.tar.gz: 05457ce11d004c93e0df535d2eed83bdd528408afcc478671141608c920e95d6
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f9f7650c4ba3413663abcf989c26a514c5b0453f1e5be5a12615f4fd8dd697638a73fb354534f682c9c409228231093bc51206ffbbe1d359d8f942f0df720feb
         | 
| 7 | 
            +
              data.tar.gz: d26680183f6f456f14091e40e018c5f1ed456189b8c8989fb15b6956ac56da19a1141de90c34270bdbe9bd42839b232a4c945ab23cd89f6c761078277ca06582
         | 
| @@ -3,7 +3,7 @@ module Tramway::Admin::ActionsHelper | |
| 3 3 | 
             
                ::Tramway::Admin.action_is_available?(
         | 
| 4 4 | 
             
                  association_object,
         | 
| 5 5 | 
             
                  project: (@application_engine || @application.name),
         | 
| 6 | 
            -
                   | 
| 6 | 
            +
                  model_name: association_object.model.class.name,
         | 
| 7 7 | 
             
                  role: current_user.role,
         | 
| 8 8 | 
             
                  action: :destroy
         | 
| 9 9 | 
             
                ) 
         | 
| @@ -3,11 +3,14 @@ | |
| 3 3 | 
             
            module Tramway
         | 
| 4 4 | 
             
              module Admin
         | 
| 5 5 | 
             
                module InputsHelper
         | 
| 6 | 
            -
                  def association_params(form_object:, property:, value:, object:)
         | 
| 6 | 
            +
                  def association_params(form_object:, property:, value:, object:, options: {})
         | 
| 7 7 | 
             
                    full_class_name_association = form_object.class.full_class_name_association(property)
         | 
| 8 8 | 
             
                    unless full_class_name_association
         | 
| 9 9 | 
             
                      raise "It seems you\'ve defined association attributes with `property` method. Please, use `association` method. `association :#{property}`"
         | 
| 10 10 | 
             
                    end
         | 
| 11 | 
            +
                    if full_class_name_association.is_a? Array
         | 
| 12 | 
            +
                      raise "It seems you've used `association` input type in the Form. Please, use `polymorphic_association` type. `#{property}: :polymorphic_association`"
         | 
| 13 | 
            +
                    end
         | 
| 11 14 |  | 
| 12 15 | 
             
                    {
         | 
| 13 16 | 
             
                      label: false,
         | 
| @@ -20,30 +23,38 @@ module Tramway | |
| 20 23 | 
             
                      collection: full_class_name_association.active.map do |obj|
         | 
| 21 24 | 
             
                        decorator_class(full_class_name_association).decorate obj
         | 
| 22 25 | 
             
                      end.sort_by(&:name)
         | 
| 23 | 
            -
                    }
         | 
| 26 | 
            +
                    }.merge options
         | 
| 24 27 | 
             
                  end
         | 
| 25 28 |  | 
| 26 | 
            -
                  def polymorphic_association_params(object:, form_object:, property:, value:)
         | 
| 29 | 
            +
                  def polymorphic_association_params(object:, form_object:, property:, value:, options: {})
         | 
| 27 30 | 
             
                    full_class_names = form_object.model.class.send("#{property}_type").values.map &:constantize
         | 
| 28 31 | 
             
                    collection = full_class_names.map do |class_name|
         | 
| 29 32 | 
             
                      class_name.active.map do |obj|
         | 
| 30 33 | 
             
                        decorator_class(class_name).decorate obj
         | 
| 31 34 | 
             
                      end
         | 
| 32 35 | 
             
                    end.flatten.sort_by { |obj| obj.name.to_s }
         | 
| 36 | 
            +
                    builded_value = if form_object.send(property).present?
         | 
| 37 | 
            +
                                      "#{form_object.send(property).class.to_s.underscore}_#{form_object.send(property).id}"
         | 
| 38 | 
            +
                                    else
         | 
| 39 | 
            +
                                      "#{value[:type]&.underscore}_#{value[:id]}"
         | 
| 40 | 
            +
                                    end
         | 
| 33 41 | 
             
                    {
         | 
| 34 42 | 
             
                      as: :select,
         | 
| 35 43 | 
             
                      label: false,
         | 
| 36 44 | 
             
                      input_html: {
         | 
| 37 45 | 
             
                        name: "#{object}[#{property}]",
         | 
| 38 46 | 
             
                        id: "#{object}_#{property}",
         | 
| 39 | 
            -
                        value:  | 
| 47 | 
            +
                        value: builded_value
         | 
| 40 48 | 
             
                      },
         | 
| 41 | 
            -
                      selected:  | 
| 49 | 
            +
                      selected: builded_value,
         | 
| 42 50 | 
             
                      collection: collection,
         | 
| 43 51 | 
             
                      label_method: lambda do |obj|
         | 
| 44 52 | 
             
                        "#{obj.class.model_name.human} | #{obj.name}"
         | 
| 53 | 
            +
                      end,
         | 
| 54 | 
            +
                      value_method: lambda do |obj|
         | 
| 55 | 
            +
                        "#{obj.class.to_s.underscore.sub(/_decorator$/, '')}_#{obj.id}"
         | 
| 45 56 | 
             
                      end
         | 
| 46 | 
            -
                    }
         | 
| 57 | 
            +
                    }.merge options
         | 
| 47 58 | 
             
                  end
         | 
| 48 59 |  | 
| 49 60 | 
             
                  def value_from_params(model_class:, property:, type:)
         | 
| @@ -57,6 +68,30 @@ module Tramway | |
| 57 68 | 
             
                      params.dig(model_class.to_s.underscore, property.to_s)
         | 
| 58 69 | 
             
                    end
         | 
| 59 70 | 
             
                  end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                  def default_params(property:, object:, form_object:, value:, options: {})
         | 
| 73 | 
            +
                    {
         | 
| 74 | 
            +
                      label: false,
         | 
| 75 | 
            +
                      input_html: {
         | 
| 76 | 
            +
                        name: "#{object}[#{property}]",
         | 
| 77 | 
            +
                        id: "#{object}_#{property}",
         | 
| 78 | 
            +
                        value: (form_object.send(property) || form_object.model.send(property) || value)
         | 
| 79 | 
            +
                      },
         | 
| 80 | 
            +
                      selected: (form_object.model.send(property) || value)
         | 
| 81 | 
            +
                    }.merge options
         | 
| 82 | 
            +
                  end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                  def else_params(property:, object:, type:, form_object:, value:, options: {})
         | 
| 85 | 
            +
                    {
         | 
| 86 | 
            +
                      as: type,
         | 
| 87 | 
            +
                      label: false,
         | 
| 88 | 
            +
                      input_html: {
         | 
| 89 | 
            +
                        name: "#{object}[#{property}]",
         | 
| 90 | 
            +
                        id: "#{object}_#{property}",
         | 
| 91 | 
            +
                        value: (form_object.send(property) || form_object.model.send(property) || value)
         | 
| 92 | 
            +
                      }
         | 
| 93 | 
            +
                    }.merge options
         | 
| 94 | 
            +
                  end
         | 
| 60 95 | 
             
                end
         | 
| 61 96 | 
             
              end
         | 
| 62 97 | 
             
            end
         | 
| @@ -81,17 +81,17 @@ module Tramway::Admin | |
| 81 81 |  | 
| 82 82 | 
             
                  if association.options[:as].present? # polymorphic? conditiion
         | 
| 83 83 | 
             
                    new_record_path model: association.class_name,
         | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 84 | 
            +
                      redirect: current_model_record_path(object.model),
         | 
| 85 | 
            +
                      association.options[:class_name].underscore => {
         | 
| 86 | 
            +
                        association.options[:as] => object.id,
         | 
| 87 | 
            +
                        association.type => object.class.model_name
         | 
| 88 | 
            +
                      }
         | 
| 89 89 | 
             
                  else
         | 
| 90 90 | 
             
                    new_record_path model: association.class_name,
         | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 91 | 
            +
                      redirect: current_model_record_path(object.model),
         | 
| 92 | 
            +
                      association.options[:class_name].underscore => {
         | 
| 93 | 
            +
                        as || object.model.class.name.underscore => object.id
         | 
| 94 | 
            +
                      }
         | 
| 95 95 | 
             
                  end
         | 
| 96 96 | 
             
                end
         | 
| 97 97 | 
             
              end
         | 
| @@ -1,32 +1,21 @@ | |
| 1 1 | 
             
            - value = value_from_params(model_class: model_class, property: property, type: type)
         | 
| 2 2 | 
             
            - form_object = instance_variable_get "@#{object}_form"
         | 
| 3 | 
            -
            -  | 
| 3 | 
            +
            - input_params = { property: property, object: object, form_object: form_object, value: value }
         | 
| 4 | 
            +
            - if !type.class.in?([ Symbol, String ]) && type[:input_options]
         | 
| 5 | 
            +
              - input_params.merge!(options: type[:input_options])
         | 
| 6 | 
            +
              - type = type[:type]
         | 
| 7 | 
            +
            - if type.class.in?([ Symbol, String ]) || type&.dig(:input_options)
         | 
| 4 8 | 
             
              - type = type.to_sym
         | 
| 5 9 | 
             
              = form.label form_object.model.class.human_attribute_name property
         | 
| 6 10 | 
             
              - case type
         | 
| 7 11 | 
             
              - when :default
         | 
| 8 | 
            -
                = form.input property,  | 
| 12 | 
            +
                = form.input property, **default_params(**input_params)
         | 
| 9 13 | 
             
              - when :association
         | 
| 10 | 
            -
                = form.association property, **association_params( | 
| 14 | 
            +
                = form.association property, **association_params(**input_params)
         | 
| 11 15 | 
             
              - when :polymorphic_association
         | 
| 12 | 
            -
                = form.input property, **polymorphic_association_params( | 
| 13 | 
            -
                = form.input "#{property}_type", input_html: { name: "#{object}[#{property}_type]", id: "#{object}_#{property}_type", value: (form_object.send(property) || form_object.model.send("#{property}_type") || value[:type]) }, selected: (form_object.model.send("#{property}_type") || value[:type])
         | 
| 16 | 
            +
                = form.input property, **polymorphic_association_params(**input_params.merge(value: value))
         | 
| 14 17 | 
             
              - else
         | 
| 15 | 
            -
                = form.input property,  | 
| 18 | 
            +
                = form.input property, **else_params(**input_params.merge(type: type))
         | 
| 16 19 | 
             
            - else
         | 
| 17 | 
            -
              -  | 
| 18 | 
            -
             | 
| 19 | 
            -
                = form.label form_object.model.class.human_attribute_name property
         | 
| 20 | 
            -
                - case type[:type]
         | 
| 21 | 
            -
                - when :default
         | 
| 22 | 
            -
                  = form.input property, label: false, input_html: { name: "#{object}[#{property}]", id: "#{object}_#{property}", value: (form_object.send(property) || form_object.model.send(property) || value) }, selected: (form_object.model.send(property) || value), **options
         | 
| 23 | 
            -
                - when :association
         | 
| 24 | 
            -
                  = form.association property, **association_params(form_object: form_object, property: property, value: value, object: object), **options
         | 
| 25 | 
            -
                - when :polymorphic_association
         | 
| 26 | 
            -
                  = form.input property, **polymorphic_association_params(object: object, form_object: form_object, property: property, value: value[:id])
         | 
| 27 | 
            -
                  = form.input "#{property}_type", input_html: { name: "#{object}[#{property}_type]", id: "#{object}_#{property}_type", value: (form_object.send(property) || form_object.model.send("#{property}_type") || value[:type]) }, selected: (form_object.model.send("#{property}_type") || value[:type]), **options
         | 
| 28 | 
            -
                - else
         | 
| 29 | 
            -
                  = form.input property, as: type[:type].to_sym, label: false, input_html: { name: "#{object}[#{property}]", id: "#{object}_#{property}", value: (form_object.send(property) || form_object.model.send(property) || value) }, **options
         | 
| 30 | 
            -
              - else
         | 
| 31 | 
            -
                - property_value = form_object.model.values.present? && form_object.model.values[property.to_s]
         | 
| 32 | 
            -
                = render 'tramway/core/shared/input_extended', field: type[:extended_form_property], class_name: :record, value: property_value, f: form
         | 
| 20 | 
            +
              - property_value = form_object.model.values.present? && form_object.model.values[property.to_s]
         | 
| 21 | 
            +
              = render 'tramway/core/shared/input_extended', field: type[:extended_form_property], class_name: :record, value: property_value, f: form
         | 
    
        data/lib/tramway/admin.rb
    CHANGED
    
    | @@ -52,8 +52,8 @@ module Tramway | |
| 52 52 | 
             
                    end&.flatten || []
         | 
| 53 53 | 
             
                  end
         | 
| 54 54 |  | 
| 55 | 
            -
                  def action_is_available?(record, project:, role:,  | 
| 56 | 
            -
                    actions = select_actions(project: project, role: role,  | 
| 55 | 
            +
                  def action_is_available?(record, project:, role:, model_name:, action:)
         | 
| 56 | 
            +
                    actions = select_actions(project: project, role: role, model_name: model_name)
         | 
| 57 57 | 
             
                    availability = actions&.select do |a|
         | 
| 58 58 | 
             
                      if a.is_a? Symbol
         | 
| 59 59 | 
             
                        a == action.to_sym
         | 
| @@ -68,8 +68,14 @@ module Tramway | |
| 68 68 | 
             
                    availability.values.first.call record
         | 
| 69 69 | 
             
                  end
         | 
| 70 70 |  | 
| 71 | 
            -
                  def select_actions(project:, role:,  | 
| 72 | 
            -
                    @singleton_models&.dig(project, role | 
| 71 | 
            +
                  def select_actions(project:, role:, model_name:)
         | 
| 72 | 
            +
                    stringify_keys(@singleton_models&.dig(project, role))&.dig(model_name) || stringify_keys(@available_models&.dig(project, role))&.dig(model_name)
         | 
| 73 | 
            +
                  end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                  def stringify_keys(hash)
         | 
| 76 | 
            +
                    hash&.reduce({}) do |new_hash, pair|
         | 
| 77 | 
            +
                      new_hash.merge! pair[0].to_s => pair[1]
         | 
| 78 | 
            +
                    end
         | 
| 73 79 | 
             
                  end
         | 
| 74 80 | 
             
                end
         | 
| 75 81 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: tramway-admin
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: '1.28'
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Pavel Kalashnikov
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020-03- | 
| 11 | 
            +
            date: 2020-03-16 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bootstrap-kaminari-views
         |