kms_models 0.8.0 → 1.0.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/app/assets/javascripts/kms_models/application/controllers/fields_controller.coffee.erb +14 -2
 - data/app/assets/javascripts/kms_models/application/controllers/models_controller.coffee.erb +6 -2
 - data/app/assets/javascripts/templates/entries/index.html.slim +12 -1
 - data/app/assets/javascripts/templates/fields/has_many_field.html.slim +1 -1
 - data/app/assets/javascripts/templates/models/fields.html.slim +3 -2
 - data/app/assets/javascripts/templates/models/index.html.slim +13 -2
 - data/app/assets/stylesheets/kms_models/application.css +3 -0
 - data/app/controllers/kms/models/fields_controller.rb +23 -0
 - data/app/models/kms/page_decorator.rb +4 -2
 - data/app/serializers/kms/model_serializer.rb +1 -1
 - data/app/uploaders/entry_file_uploader.rb +1 -2
 - data/config/locales/en.yml +4 -0
 - data/config/locales/ru.yml +4 -0
 - data/config/routes.rb +1 -0
 - data/db/migrate/20170802063046_change_values_column_to_jsonb.rb +5 -0
 - data/db/migrate/20170802085121_add_position_to_kms_fields.rb +5 -0
 - data/lib/drops/kms/entry_drop.rb +21 -7
 - data/lib/generators/kms_models/install/install_generator.rb +4 -0
 - data/lib/kms/models/version.rb +1 -1
 - metadata +10 -7
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: a9b78c88773588da736e99bea8732e265229d7b4
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 07b6050158b77cbf3d16fcaad3462c8a9e34d834
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 5cd7755771682d738fc2c9ec9e4f03295676f86cae31d96c41c549715e74f85c256db3151bb218006012ec3f794b74f6fede7c57a9e0fa89ed43bb07c19725e4
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: bd40086173164ddb222e91075ba6e6e9e0ad2b3b7f5329f456799f62409a5c0385ada80bfeb81343d6fa6e2ac3fdbd33e31ee33ddae16a6610dca6a3c6b8c22e
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            FieldsController = ($scope, $state, Restangular, $stateParams) ->
         
     | 
| 
      
 1 
     | 
    
         
            +
            FieldsController = ($scope, $state, Restangular, $stateParams, TransliterationService) ->
         
     | 
| 
       2 
2 
     | 
    
         
             
              $scope.types = [
         
     | 
| 
       3 
3 
     | 
    
         
             
                { id: 'Kms::StringField', name: "<%= I18n.t("field_types.string") %>"},
         
     | 
| 
       4 
4 
     | 
    
         
             
                { id: 'Kms::TextField', name: "<%= I18n.t("field_types.text") %>"},
         
     | 
| 
         @@ -8,6 +8,14 @@ FieldsController = ($scope, $state, Restangular, $stateParams) -> 
     | 
|
| 
       8 
8 
     | 
    
         
             
                { id: 'Kms::BelongsToField', name: "<%= I18n.t("field_types.belongs_to") %>"},
         
     | 
| 
       9 
9 
     | 
    
         
             
              ]
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
      
 11 
     | 
    
         
            +
              $scope.fieldsSortableOptions =
         
     | 
| 
      
 12 
     | 
    
         
            +
                orderChanged: (event)->
         
     | 
| 
      
 13 
     | 
    
         
            +
                  for field, index in event.dest.sortableScope.modelValue
         
     | 
| 
      
 14 
     | 
    
         
            +
                    field_copy =
         
     | 
| 
      
 15 
     | 
    
         
            +
                      id: field.id
         
     | 
| 
      
 16 
     | 
    
         
            +
                      position: index
         
     | 
| 
      
 17 
     | 
    
         
            +
                    Restangular.restangularizeElement($scope.model, field_copy, 'fields').put()
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       11 
19 
     | 
    
         
             
              Restangular.all('resources').getList().then (templatable_types)->
         
     | 
| 
       12 
20 
     | 
    
         
             
                $scope.templatable_types = templatable_types
         
     | 
| 
       13 
21 
     | 
    
         | 
| 
         @@ -17,6 +25,10 @@ FieldsController = ($scope, $state, Restangular, $stateParams) -> 
     | 
|
| 
       17 
25 
     | 
    
         | 
| 
       18 
26 
     | 
    
         
             
              $scope.field = {}
         
     | 
| 
       19 
27 
     | 
    
         | 
| 
      
 28 
     | 
    
         
            +
              $scope.$watch 'field.name', (newValue, oldValue) ->
         
     | 
| 
      
 29 
     | 
    
         
            +
                if newValue? and !$scope.field.id
         
     | 
| 
      
 30 
     | 
    
         
            +
                  $scope.field.liquor_name = _.snakeCase TransliterationService.translit(newValue, 5).replace(/`/g, '')
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
       20 
32 
     | 
    
         
             
              $scope.formatType = (field)->
         
     | 
| 
       21 
33 
     | 
    
         
             
                fieldType = _.find $scope.types, (type) -> type.id == field.type
         
     | 
| 
       22 
34 
     | 
    
         
             
                if $scope.isAssociationField(field) then "#{fieldType.name} (#{$scope.getDisplayableTemplatableType(field)})" else fieldType.name
         
     | 
| 
         @@ -39,4 +51,4 @@ FieldsController = ($scope, $state, Restangular, $stateParams) -> 
     | 
|
| 
       39 
51 
     | 
    
         | 
| 
       40 
52 
     | 
    
         | 
| 
       41 
53 
     | 
    
         
             
            angular.module('KMS')
         
     | 
| 
       42 
     | 
    
         
            -
                .controller('FieldsController', ['$scope', '$state', 'Restangular', '$stateParams', FieldsController])
         
     | 
| 
      
 54 
     | 
    
         
            +
                .controller('FieldsController', ['$scope', '$state', 'Restangular', '$stateParams', 'TransliterationService', FieldsController])
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            ModelsController = ($scope, $state, Restangular, $stateParams, Alertify, ErrorsService) ->
         
     | 
| 
      
 1 
     | 
    
         
            +
            ModelsController = ($scope, $state, Restangular, $stateParams, Alertify, ErrorsService, TransliterationService) ->
         
     | 
| 
       2 
2 
     | 
    
         
             
              $scope.store = Restangular.all('models')
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
              Restangular.all('users').customGET('kms_user').then (current_user) ->
         
     | 
| 
         @@ -18,6 +18,10 @@ ModelsController = ($scope, $state, Restangular, $stateParams, Alertify, ErrorsS 
     | 
|
| 
       18 
18 
     | 
    
         
             
                if newFields and newFields.length > 0 and oldFields and oldFields.length == 0
         
     | 
| 
       19 
19 
     | 
    
         
             
                  $scope.model.label_field =newFields[0].liquor_name
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
      
 21 
     | 
    
         
            +
              $scope.$watch 'model.kms_model_name', (newValue, oldValue) ->
         
     | 
| 
      
 22 
     | 
    
         
            +
                if newValue? and !$scope.model.id
         
     | 
| 
      
 23 
     | 
    
         
            +
                  $scope.model.collection_name = _.snakeCase TransliterationService.translit(newValue, 5).replace(/`/g, '')
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
       21 
25 
     | 
    
         
             
              $scope.create = ->
         
     | 
| 
       22 
26 
     | 
    
         
             
                $scope.store.post($scope.model).then ->
         
     | 
| 
       23 
27 
     | 
    
         
             
                  # for adding to Menu - better to render resources via js
         
     | 
| 
         @@ -39,4 +43,4 @@ ModelsController = ($scope, $state, Restangular, $stateParams, Alertify, ErrorsS 
     | 
|
| 
       39 
43 
     | 
    
         | 
| 
       40 
44 
     | 
    
         | 
| 
       41 
45 
     | 
    
         
             
            angular.module('KMS')
         
     | 
| 
       42 
     | 
    
         
            -
                .controller('ModelsController', ['$scope', '$state', 'Restangular', '$stateParams', 'Alertify', 'ErrorsService', ModelsController])
         
     | 
| 
      
 46 
     | 
    
         
            +
                .controller('ModelsController', ['$scope', '$state', 'Restangular', '$stateParams', 'Alertify', 'ErrorsService', 'TransliterationService', ModelsController])
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            .row
         
     | 
| 
      
 1 
     | 
    
         
            +
            .row ng-show="entries.length"
         
     | 
| 
       2 
2 
     | 
    
         
             
              .col-lg-12
         
     | 
| 
       3 
3 
     | 
    
         
             
                .widget
         
     | 
| 
       4 
4 
     | 
    
         
             
                  .widget-header
         
     | 
| 
         @@ -19,3 +19,14 @@ 
     | 
|
| 
       19 
19 
     | 
    
         
             
                              .btn-group.pull-right
         
     | 
| 
       20 
20 
     | 
    
         
             
                                a.btn.btn-sm.btn-danger ng-click="destroy(entry)"
         
     | 
| 
       21 
21 
     | 
    
         
             
                                  i.fa.fa-times
         
     | 
| 
      
 22 
     | 
    
         
            +
            .row ng-show="!entries.length"
         
     | 
| 
      
 23 
     | 
    
         
            +
              .center-block
         
     | 
| 
      
 24 
     | 
    
         
            +
                .jumbotron.vertical-center.text-center
         
     | 
| 
      
 25 
     | 
    
         
            +
                  .container
         
     | 
| 
      
 26 
     | 
    
         
            +
                    h1
         
     | 
| 
      
 27 
     | 
    
         
            +
                      span.fa-stack.fa-lg
         
     | 
| 
      
 28 
     | 
    
         
            +
                        i.fa.fa-circle.fa-stack-2x
         
     | 
| 
      
 29 
     | 
    
         
            +
                        i.fa.fa-list.fa-stack-1x
         
     | 
| 
      
 30 
     | 
    
         
            +
                    p = I18n.t(:entries_description)
         
     | 
| 
      
 31 
     | 
    
         
            +
                    p
         
     | 
| 
      
 32 
     | 
    
         
            +
                      a.btn.btn-primary.btn-lg ui-sref="models.entries.new({modelId: model.id})" role="button" = I18n.t(:create_first_entry)
         
     | 
| 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            label for="{{ field.liquor_name }}"
         
     | 
| 
       2 
2 
     | 
    
         
             
              | {{ field.name }}
         
     | 
| 
       3 
3 
     | 
    
         
             
            ui-select multiple="" ng-model="entry.values[field.liquor_name]" theme="bootstrap" on-select="addObject($item, field)" on-remove='removeObject($item, field)'
         
     | 
| 
       4 
     | 
    
         
            -
              ui-select-match placeholder=I18n.t(:has_many_field_placeholder)
         
     | 
| 
      
 4 
     | 
    
         
            +
              ui-select-match placeholder=I18n.t(:has_many_field_placeholder) class="ui-select-match"
         
     | 
| 
       5 
5 
     | 
    
         
             
                | {{ $item.values[$item.model.label_field] || $item.id }}
         
     | 
| 
       6 
6 
     | 
    
         
             
              ui-select-choices repeat="childEntry.id as childEntry in {{ field.liquor_name }}"
         
     | 
| 
       7 
7 
     | 
    
         
             
                div ng-bind-html="childEntry.values[childEntry.model.label_field] | highlight: $select.search"
         
     | 
| 
         @@ -3,9 +3,10 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
                thead
         
     | 
| 
       4 
4 
     | 
    
         
             
                  tr
         
     | 
| 
       5 
5 
     | 
    
         
             
                    th colspan="4" = Kms::Model.human_attribute_name(:fields)
         
     | 
| 
       6 
     | 
    
         
            -
                tbody
         
     | 
| 
       7 
     | 
    
         
            -
                  tr ng-repeat="field in model.fields_attributes" ng-hide="field._destroy"
         
     | 
| 
      
 6 
     | 
    
         
            +
                tbody as-sortable="fieldsSortableOptions" ng-model="model.fields_attributes"
         
     | 
| 
      
 7 
     | 
    
         
            +
                  tr ng-repeat="field in model.fields_attributes" ng-hide="field._destroy" as-sortable-item=""
         
     | 
| 
       8 
8 
     | 
    
         
             
                    td
         
     | 
| 
      
 9 
     | 
    
         
            +
                      i.fa.fa-bars as-sortable-item-handle=""  
         
     | 
| 
       9 
10 
     | 
    
         
             
                      | {{ field.name }}
         
     | 
| 
       10 
11 
     | 
    
         
             
                    td
         
     | 
| 
       11 
12 
     | 
    
         
             
                      | {{ field.liquor_name }}
         
     | 
| 
         @@ -1,8 +1,8 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            .row
         
     | 
| 
      
 1 
     | 
    
         
            +
            .row ng-show="models.length"
         
     | 
| 
       2 
2 
     | 
    
         
             
              .col-lg-12
         
     | 
| 
       3 
3 
     | 
    
         
             
                .widget
         
     | 
| 
       4 
4 
     | 
    
         
             
                  .widget-header
         
     | 
| 
       5 
     | 
    
         
            -
                    i.fa.fa- 
     | 
| 
      
 5 
     | 
    
         
            +
                    i.fa.fa-tasks
         
     | 
| 
       6 
6 
     | 
    
         
             
                    = Kms::Model.model_name.human(count: 1.1)
         
     | 
| 
       7 
7 
     | 
    
         
             
                    a.btn.btn-sm.btn-primary.pull-right ui-sref="models.new"
         
     | 
| 
       8 
8 
     | 
    
         
             
                      = I18n.t("add_model")
         
     | 
| 
         @@ -18,3 +18,14 @@ 
     | 
|
| 
       18 
18 
     | 
    
         
             
                              .btn-group.pull-right
         
     | 
| 
       19 
19 
     | 
    
         
             
                                a.btn.btn-sm.btn-danger ng-click="destroy(model)" ng-show="currentUser.admin"
         
     | 
| 
       20 
20 
     | 
    
         
             
                                  i.fa.fa-times
         
     | 
| 
      
 21 
     | 
    
         
            +
            .row ng-show="!models.length"
         
     | 
| 
      
 22 
     | 
    
         
            +
              .center-block
         
     | 
| 
      
 23 
     | 
    
         
            +
                .jumbotron.vertical-center.text-center
         
     | 
| 
      
 24 
     | 
    
         
            +
                  .container
         
     | 
| 
      
 25 
     | 
    
         
            +
                    h1
         
     | 
| 
      
 26 
     | 
    
         
            +
                      span.fa-stack.fa-lg
         
     | 
| 
      
 27 
     | 
    
         
            +
                        i.fa.fa-circle.fa-stack-2x
         
     | 
| 
      
 28 
     | 
    
         
            +
                        i.fa.fa-tasks.fa-stack-1x
         
     | 
| 
      
 29 
     | 
    
         
            +
                    p = I18n.t(:models_description)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    p
         
     | 
| 
      
 31 
     | 
    
         
            +
                      a.btn.btn-primary.btn-lg ui-sref="models.new" role="button" = I18n.t(:create_first_model)
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Kms
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Models
         
     | 
| 
      
 3 
     | 
    
         
            +
                class FieldsController < ApplicationController
         
     | 
| 
      
 4 
     | 
    
         
            +
                  wrap_parameters :field, include: [:position]
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                  def update
         
     | 
| 
      
 7 
     | 
    
         
            +
                    model = Model.find(params[:model_id])
         
     | 
| 
      
 8 
     | 
    
         
            +
                    @field = model.fields.find(params[:id])
         
     | 
| 
      
 9 
     | 
    
         
            +
                    if @field.update(field_params)
         
     | 
| 
      
 10 
     | 
    
         
            +
                      head :no_content
         
     | 
| 
      
 11 
     | 
    
         
            +
                    else
         
     | 
| 
      
 12 
     | 
    
         
            +
                      render json: @field.to_json(methods: :errors), status: :unprocessable_entity
         
     | 
| 
      
 13 
     | 
    
         
            +
                    end
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  protected
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def field_params
         
     | 
| 
      
 19 
     | 
    
         
            +
                    params.require(:field).permit(:position)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,10 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            Kms::Page.class_eval do
         
     | 
| 
       2 
2 
     | 
    
         
             
              # fetch item by slug
         
     | 
| 
       3 
     | 
    
         
            -
              def fetch_item 
     | 
| 
      
 3 
     | 
    
         
            +
              def fetch_item(slug)
         
     | 
| 
       4 
4 
     | 
    
         
             
                return nil unless templatable?
         
     | 
| 
       5 
5 
     | 
    
         
             
                templatable_type.constantize.find_by_slug!(slug)
         
     | 
| 
       6 
6 
     | 
    
         
             
              rescue NameError
         
     | 
| 
       7 
     | 
    
         
            -
                Kms:: 
     | 
| 
      
 7 
     | 
    
         
            +
                model = Kms::Model.find(templatable_type.to_i)
         
     | 
| 
      
 8 
     | 
    
         
            +
                model.entries.find_by_slug(slug)
         
     | 
| 
      
 9 
     | 
    
         
            +
                # Kms::Entry.find_by_slug(slug)
         
     | 
| 
       8 
10 
     | 
    
         
             
              end
         
     | 
| 
       9 
11 
     | 
    
         | 
| 
       10 
12 
     | 
    
         
             
              # fetch items for templatable page
         
     | 
| 
         @@ -7,8 +7,7 @@ class EntryFileUploader < CarrierWave::Uploader::Base 
     | 
|
| 
       7 
7 
     | 
    
         
             
              # include CarrierWave::MiniMagick
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
              # Choose what kind of storage to use for this uploader:
         
     | 
| 
       10 
     | 
    
         
            -
              storage :file
         
     | 
| 
       11 
     | 
    
         
            -
              # storage :fog
         
     | 
| 
      
 10 
     | 
    
         
            +
              storage (ENV['KMS_ASSETS_STORAGE'] && ENV['KMS_ASSETS_STORAGE'].to_sym) || :file
         
     | 
| 
       12 
11 
     | 
    
         | 
| 
       13 
12 
     | 
    
         
             
              # Override the directory where uploaded files will be stored.
         
     | 
| 
       14 
13 
     | 
    
         
             
              # This is a sensible default for uploaders that are meant to be mounted:
         
     | 
    
        data/config/locales/en.yml
    CHANGED
    
    | 
         @@ -15,6 +15,10 @@ en: 
     | 
|
| 
       15 
15 
     | 
    
         
             
              allow_creation_using_form_field_hint: "On website you can place a form allowing to create model entries"
         
     | 
| 
       16 
16 
     | 
    
         
             
              has_many_field_placeholder: "Select related objects..."
         
     | 
| 
       17 
17 
     | 
    
         
             
              belongs_to_field_placeholder: "Select related object..."
         
     | 
| 
      
 18 
     | 
    
         
            +
              models_description: "Models are where you organize your content (basically dynamic) like 'News', 'Blog', 'Services' and etc."
         
     | 
| 
      
 19 
     | 
    
         
            +
              create_first_model: "Create first model"
         
     | 
| 
      
 20 
     | 
    
         
            +
              entries_description: "Here you would create content for corresponding Model"
         
     | 
| 
      
 21 
     | 
    
         
            +
              create_first_entry: "Create first entry"
         
     | 
| 
       18 
22 
     | 
    
         
             
              field_types:
         
     | 
| 
       19 
23 
     | 
    
         
             
                string: "String"
         
     | 
| 
       20 
24 
     | 
    
         
             
                text: "Text"
         
     | 
    
        data/config/locales/ru.yml
    CHANGED
    
    | 
         @@ -15,6 +15,10 @@ ru: 
     | 
|
| 
       15 
15 
     | 
    
         
             
              allow_creation_using_form_field_hint: "На сайте можно будет разместить форму для создания элементов модели"
         
     | 
| 
       16 
16 
     | 
    
         
             
              has_many_field_placeholder: "Выберите связанные объекты..."
         
     | 
| 
       17 
17 
     | 
    
         
             
              belongs_to_field_placeholder: "Выберите связанный объект..."
         
     | 
| 
      
 18 
     | 
    
         
            +
              models_description: "Модели - это ваш динамический контент. Например, 'Новости', 'Блог', 'Услуги' и тд."
         
     | 
| 
      
 19 
     | 
    
         
            +
              create_first_model: "Создать первую модель"
         
     | 
| 
      
 20 
     | 
    
         
            +
              entries_description: "Здесь вы можете создавать элементы соответствующей Модели"
         
     | 
| 
      
 21 
     | 
    
         
            +
              create_first_entry: "Создать первый элемент"
         
     | 
| 
       18 
22 
     | 
    
         
             
              field_types:
         
     | 
| 
       19 
23 
     | 
    
         
             
                string: "Строка"
         
     | 
| 
       20 
24 
     | 
    
         
             
                text: "Текст"
         
     | 
    
        data/config/routes.rb
    CHANGED
    
    
    
        data/lib/drops/kms/entry_drop.rb
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Kms
         
     | 
| 
       2 
2 
     | 
    
         
             
              class EntryDrop < Liquor::Drop
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
                attributes :id, :created_at, :permalink, :model_collection_name
         
     | 
| 
      
 4 
     | 
    
         
            +
                attributes :id, :created_at, :slug, :permalink, :model_collection_name
         
     | 
| 
       5 
5 
     | 
    
         
             
                scopes :order
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                # overriding methods cause we work with 'json' column
         
     | 
| 
         @@ -9,16 +9,16 @@ module Kms 
     | 
|
| 
       9 
9 
     | 
    
         
             
                  def find_by(_, fields={})
         
     | 
| 
       10 
10 
     | 
    
         
             
                    fields, = Liquor::Drop.unwrap_scope_arguments([ fields ])
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                     
     | 
| 
       13 
     | 
    
         
            -
                    result = @source.where( 
     | 
| 
      
 12 
     | 
    
         
            +
                    plain_fields, json_fields = fields_partition(fields)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    result = @source.where(fields_query(fields), *(json_fields.values + plain_fields.values).map(&:to_s)).first
         
     | 
| 
       14 
14 
     | 
    
         
             
                    Liquor::DropDelegation.wrap_element result if result
         
     | 
| 
       15 
15 
     | 
    
         
             
                  end
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
                  def find_all_by(_, fields={})
         
     | 
| 
       18 
18 
     | 
    
         
             
                    fields, = Liquor::Drop.unwrap_scope_arguments([ fields ])
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
                     
     | 
| 
       21 
     | 
    
         
            -
                    result = @source.where( 
     | 
| 
      
 20 
     | 
    
         
            +
                    plain_fields, json_fields = fields_partition(fields)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    result = @source.where(fields_query(fields), *(json_fields.values + plain_fields.values).map(&:to_s))
         
     | 
| 
       22 
22 
     | 
    
         
             
                    Liquor::DropDelegation.wrap_scope(result)
         
     | 
| 
       23 
23 
     | 
    
         
             
                  end
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
         @@ -26,8 +26,8 @@ module Kms 
     | 
|
| 
       26 
26 
     | 
    
         
             
                    args = Liquor::Drop.unwrap_scope_arguments(args)
         
     | 
| 
       27 
27 
     | 
    
         
             
                    parsed_args = args.map do |arg|
         
     | 
| 
       28 
28 
     | 
    
         
             
                      order_clause = arg.split(' ')
         
     | 
| 
       29 
     | 
    
         
            -
                      if order_clause[0].in?  
     | 
| 
       30 
     | 
    
         
            -
                         
     | 
| 
      
 29 
     | 
    
         
            +
                      if order_clause[0].in? Kms::Entry.column_names - ['values']
         
     | 
| 
      
 30 
     | 
    
         
            +
                        arg
         
     | 
| 
       31 
31 
     | 
    
         
             
                      else
         
     | 
| 
       32 
32 
     | 
    
         
             
                        ["values ->> '#{order_clause[0]}'", order_clause[1].to_s].join(' ')
         
     | 
| 
       33 
33 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -35,6 +35,20 @@ module Kms 
     | 
|
| 
       35 
35 
     | 
    
         
             
                    # we use reorder because by default we order by position
         
     | 
| 
       36 
36 
     | 
    
         
             
                    Liquor::DropDelegation.wrap_scope @source.reorder(*parsed_args)
         
     | 
| 
       37 
37 
     | 
    
         
             
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  private
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                  def fields_partition(fields)
         
     | 
| 
      
 42 
     | 
    
         
            +
                    fields.partition {|name, _| (Kms::Entry.column_names - ['values']).include? name.to_s}.map(&:to_h)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  def fields_query(fields)
         
     | 
| 
      
 46 
     | 
    
         
            +
                    plain_fields, json_fields = fields_partition(fields)
         
     | 
| 
      
 47 
     | 
    
         
            +
                    json_fields_query = json_fields.map {|name, _| "values ->> '#{name}' = ?" }.join(" AND ")
         
     | 
| 
      
 48 
     | 
    
         
            +
                    plain_fields_query = plain_fields.map {|name, _| "#{name} = ?"}.join(" AND ")
         
     | 
| 
      
 49 
     | 
    
         
            +
                    [json_fields_query, plain_fields_query].reject(&:empty?).join(' OR ')
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
       38 
52 
     | 
    
         
             
                end
         
     | 
| 
       39 
53 
     | 
    
         | 
| 
       40 
54 
     | 
    
         
             
                def initialize(source)
         
     | 
| 
         @@ -13,5 +13,9 @@ module KmsModels 
     | 
|
| 
       13 
13 
     | 
    
         
             
                  append_file "app/assets/javascripts/application.js", "//= require kms_models/application\n"
         
     | 
| 
       14 
14 
     | 
    
         
             
                end
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
      
 16 
     | 
    
         
            +
                def insert_stylesheet
         
     | 
| 
      
 17 
     | 
    
         
            +
                  gsub_file "app/assets/stylesheets/application.css", '*/', "*= require kms_models/application\n*/"
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       16 
20 
     | 
    
         
             
              end
         
     | 
| 
       17 
21 
     | 
    
         
             
            end
         
     | 
    
        data/lib/kms/models/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: kms_models
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.0.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Igor Petrov
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2017- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-08-02 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: friendly_id
         
     | 
| 
         @@ -30,28 +30,28 @@ dependencies: 
     | 
|
| 
       30 
30 
     | 
    
         
             
                requirements:
         
     | 
| 
       31 
31 
     | 
    
         
             
                - - ">="
         
     | 
| 
       32 
32 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       33 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 33 
     | 
    
         
            +
                    version: 1.0.0
         
     | 
| 
       34 
34 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       35 
35 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       36 
36 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       37 
37 
     | 
    
         
             
                requirements:
         
     | 
| 
       38 
38 
     | 
    
         
             
                - - ">="
         
     | 
| 
       39 
39 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       40 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 40 
     | 
    
         
            +
                    version: 1.0.0
         
     | 
| 
       41 
41 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       42 
42 
     | 
    
         
             
              name: combustion
         
     | 
| 
       43 
43 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       44 
44 
     | 
    
         
             
                requirements:
         
     | 
| 
       45 
45 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       46 
46 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       47 
     | 
    
         
            -
                    version: 0.5 
     | 
| 
      
 47 
     | 
    
         
            +
                    version: '0.5'
         
     | 
| 
       48 
48 
     | 
    
         
             
              type: :development
         
     | 
| 
       49 
49 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       50 
50 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       51 
51 
     | 
    
         
             
                requirements:
         
     | 
| 
       52 
52 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       53 
53 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
     | 
    
         
            -
                    version: 0.5 
     | 
| 
      
 54 
     | 
    
         
            +
                    version: '0.5'
         
     | 
| 
       55 
55 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       56 
56 
     | 
    
         
             
              name: factory_girl_rails
         
     | 
| 
       57 
57 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -133,6 +133,7 @@ files: 
     | 
|
| 
       133 
133 
     | 
    
         
             
            - app/assets/javascripts/templates/models/new.html.slim
         
     | 
| 
       134 
134 
     | 
    
         
             
            - app/assets/stylesheets/kms_models/application.css
         
     | 
| 
       135 
135 
     | 
    
         
             
            - app/controllers/kms/models/entries_controller.rb
         
     | 
| 
      
 136 
     | 
    
         
            +
            - app/controllers/kms/models/fields_controller.rb
         
     | 
| 
       136 
137 
     | 
    
         
             
            - app/controllers/kms/models/models_controller.rb
         
     | 
| 
       137 
138 
     | 
    
         
             
            - app/controllers/kms/public/entries_controller.rb
         
     | 
| 
       138 
139 
     | 
    
         
             
            - app/helpers/kms_models/application_helper.rb
         
     | 
| 
         @@ -169,6 +170,8 @@ files: 
     | 
|
| 
       169 
170 
     | 
    
         
             
            - db/migrate/20150901115303_add_class_name_to_kms_fields.rb
         
     | 
| 
       170 
171 
     | 
    
         
             
            - db/migrate/20150910081440_add_position_to_kms_entries.rb
         
     | 
| 
       171 
172 
     | 
    
         
             
            - db/migrate/20170209125819_add_allow_creation_using_form_to_models.rb
         
     | 
| 
      
 173 
     | 
    
         
            +
            - db/migrate/20170802063046_change_values_column_to_jsonb.rb
         
     | 
| 
      
 174 
     | 
    
         
            +
            - db/migrate/20170802085121_add_position_to_kms_fields.rb
         
     | 
| 
       172 
175 
     | 
    
         
             
            - lib/drops/kms/entry_drop.rb
         
     | 
| 
       173 
176 
     | 
    
         
             
            - lib/drops/kms/models_wrapper_drop.rb
         
     | 
| 
       174 
177 
     | 
    
         
             
            - lib/generators/kms_models/install/install_generator.rb
         
     | 
| 
         @@ -196,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       196 
199 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       197 
200 
     | 
    
         
             
            requirements: []
         
     | 
| 
       198 
201 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       199 
     | 
    
         
            -
            rubygems_version: 2. 
     | 
| 
      
 202 
     | 
    
         
            +
            rubygems_version: 2.6.11
         
     | 
| 
       200 
203 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       201 
204 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       202 
205 
     | 
    
         
             
            summary: Extension for KMS
         
     |