super 0.20.0 → 0.22.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/README.md +36 -48
- data/app/assets/javascripts/super/application.js +1201 -2092
- data/app/assets/stylesheets/super/application.css +54 -6569
- data/app/controllers/super/application_controller.rb +52 -47
- data/app/controllers/super/foundation_controller.rb +30 -0
- data/app/controllers/super/sitewide_controller.rb +36 -0
- data/app/controllers/super/substructure_controller.rb +40 -92
- data/app/controllers/super/view_controller.rb +59 -0
- data/app/views/layouts/super/application.html.erb +3 -3
- data/app/views/super/application/_batch_checkbox.csv.erb +1 -1
- data/app/views/super/application/_batch_checkbox.html.erb +1 -1
- data/app/views/super/application/_collection_header.html.erb +1 -1
- data/app/views/super/application/_csv_button.html.erb +1 -1
- data/app/views/super/application/_display_actions.html.erb +1 -1
- data/app/views/super/application/_display_index.html.erb +8 -2
- data/app/views/super/application/_display_rich_text.html.erb +1 -1
- data/app/views/super/application/_display_show.html.erb +10 -2
- data/app/views/super/application/_filter.html.erb +63 -59
- data/app/views/super/application/_form.html.erb +1 -1
- data/app/views/super/application/_form_fieldset.html.erb +1 -1
- data/app/views/super/application/_form_has_many.html.erb +2 -2
- data/app/views/super/application/_form_has_one.html.erb +1 -1
- data/app/views/super/application/_layout.html.erb +6 -8
- data/app/views/super/application/_link.html.erb +1 -6
- data/app/views/super/application/_member_header.html.erb +1 -1
- data/app/views/super/application/_panel.html.erb +1 -1
- data/app/views/super/application/_query.html.erb +13 -12
- data/app/views/super/application/_site_header.html.erb +2 -2
- data/app/views/super/application/_sort.html.erb +18 -14
- data/app/views/super/application/_sort_expression.html.erb +1 -1
- data/app/views/super/application/_view_chain.html.erb +1 -5
- data/app/views/super/application/edit.html.erb +1 -1
- data/app/views/super/application/index.html.erb +1 -1
- data/app/views/super/application/new.html.erb +1 -1
- data/app/views/super/application/show.html.erb +1 -1
- data/config/locales/en.yml +3 -0
- data/frontend/super-frontend/dist/application.css +54 -6569
- data/frontend/super-frontend/dist/application.js +1201 -2092
- data/lib/super/action_inquirer.rb +28 -8
- data/lib/super/assets.rb +2 -2
- data/lib/super/badge.rb +8 -23
- data/lib/super/cheat.rb +11 -5
- data/lib/super/client_error.rb +4 -0
- data/lib/super/compatibility.rb +4 -0
- data/lib/super/configuration.rb +3 -0
- data/lib/super/display/schema_types.rb +50 -71
- data/lib/super/display.rb +16 -15
- data/lib/super/error.rb +16 -2
- data/lib/super/filter/form_object.rb +2 -2
- data/lib/super/filter/operator.rb +1 -1
- data/lib/super/filter/schema_types.rb +1 -1
- data/lib/super/form/field_transcript.rb +4 -0
- data/lib/super/form/schema_types.rb +2 -2
- data/lib/super/form/strong_params.rb +1 -1
- data/lib/super/form_builder/base_methods.rb +3 -9
- data/lib/super/form_builder/flatpickr_methods.rb +3 -3
- data/lib/super/form_builder.rb +19 -21
- data/{app/helpers → lib}/super/form_builder_helper.rb +13 -2
- data/lib/super/link.rb +15 -6
- data/lib/super/link_builder.rb +4 -4
- data/lib/super/navigation.rb +49 -45
- data/lib/super/partial.rb +0 -12
- data/lib/super/plugin.rb +2 -2
- data/lib/super/query.rb +61 -0
- data/lib/super/{engine.rb → railtie.rb} +8 -1
- data/lib/super/render_helper.rb +31 -0
- data/lib/super/reset.rb +7 -5
- data/lib/super/schema/guesser.rb +5 -5
- data/lib/super/schema.rb +10 -4
- data/lib/super/sort.rb +2 -4
- data/lib/super/useful/deprecations.rb +16 -0
- data/lib/super/useful/enum.rb +1 -1
- data/lib/super/useful/i19.rb +1 -1
- data/lib/super/version.rb +1 -1
- data/lib/super/view_chain.rb +33 -4
- data/lib/super.rb +9 -2
- metadata +11 -49
- data/config/routes.rb +0 -4
- data/lib/super/query/form_object.rb +0 -48
| @@ -24,24 +24,44 @@ module Super | |
| 24 24 | 
             
                    "delete" => %w[destroy],
         | 
| 25 25 |  | 
| 26 26 | 
             
                    "collection" => %w[index new create],
         | 
| 27 | 
            -
                    "member" => %w[show edit update destroy] | 
| 27 | 
            +
                    "member" => %w[show edit update destroy]
         | 
| 28 28 | 
             
                  }
         | 
| 29 29 | 
             
                end
         | 
| 30 30 |  | 
| 31 31 | 
             
                # @return [ActionInquirer]
         | 
| 32 | 
            -
                def self.index | 
| 32 | 
            +
                def self.index!
         | 
| 33 | 
            +
                  new(default_for_resources, "index")
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 33 36 | 
             
                # @return [ActionInquirer]
         | 
| 34 | 
            -
                def self.show | 
| 37 | 
            +
                def self.show!
         | 
| 38 | 
            +
                  new(default_for_resources, "show")
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
             | 
| 35 41 | 
             
                # @return [ActionInquirer]
         | 
| 36 | 
            -
                def self.new | 
| 42 | 
            +
                def self.new!
         | 
| 43 | 
            +
                  new(default_for_resources, "new")
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 37 46 | 
             
                # @return [ActionInquirer]
         | 
| 38 | 
            -
                def self.edit | 
| 47 | 
            +
                def self.edit!
         | 
| 48 | 
            +
                  new(default_for_resources, "edit")
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
             | 
| 39 51 | 
             
                # @return [ActionInquirer]
         | 
| 40 | 
            -
                def self.create | 
| 52 | 
            +
                def self.create!
         | 
| 53 | 
            +
                  new(default_for_resources, "create")
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
             | 
| 41 56 | 
             
                # @return [ActionInquirer]
         | 
| 42 | 
            -
                def self.update | 
| 57 | 
            +
                def self.update!
         | 
| 58 | 
            +
                  new(default_for_resources, "update")
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
             | 
| 43 61 | 
             
                # @return [ActionInquirer]
         | 
| 44 | 
            -
                def self.destroy | 
| 62 | 
            +
                def self.destroy!
         | 
| 63 | 
            +
                  new(default_for_resources, "destroy")
         | 
| 64 | 
            +
                end
         | 
| 45 65 |  | 
| 46 66 | 
             
                def initialize(categories_and_their_actions, action)
         | 
| 47 67 | 
             
                  @categories = categories_and_their_actions.keys.map(&:to_s)
         | 
    
        data/lib/super/assets.rb
    CHANGED
    
    | @@ -16,7 +16,7 @@ module Super | |
| 16 16 | 
             
                end
         | 
| 17 17 |  | 
| 18 18 | 
             
                def self.use_webpacker(assets, grep: nil)
         | 
| 19 | 
            -
                  assets = [assets] if !assets. | 
| 19 | 
            +
                  assets = [assets] if !assets.is_a?(Array)
         | 
| 20 20 |  | 
| 21 21 | 
             
                  assets.map do |asset|
         | 
| 22 22 | 
             
                    grep_matches = grep && asset === grep
         | 
| @@ -29,7 +29,7 @@ module Super | |
| 29 29 | 
             
                end
         | 
| 30 30 |  | 
| 31 31 | 
             
                def self.use_sprockets(assets, grep: nil)
         | 
| 32 | 
            -
                  assets = [assets] if !assets. | 
| 32 | 
            +
                  assets = [assets] if !assets.is_a?(Array)
         | 
| 33 33 |  | 
| 34 34 | 
             
                  assets.map do |asset|
         | 
| 35 35 | 
             
                    grep_matches = grep && asset === grep
         | 
    
        data/lib/super/badge.rb
    CHANGED
    
    | @@ -9,37 +9,22 @@ module Super | |
| 9 9 | 
             
                  yellow: "bg-yellow-400 text-black",
         | 
| 10 10 | 
             
                  green: "bg-green-700 text-white",
         | 
| 11 11 | 
             
                  blue: "bg-blue-700 text-white",
         | 
| 12 | 
            -
                  purple: "bg-purple-800 text-white" | 
| 12 | 
            +
                  purple: "bg-purple-800 text-white"
         | 
| 13 13 | 
             
                }
         | 
| 14 14 |  | 
| 15 | 
            -
                def initialize(text,  | 
| 15 | 
            +
                def initialize(text, style:)
         | 
| 16 | 
            +
                  if !STYLES.key?(style)
         | 
| 17 | 
            +
                    raise Super::Error::Initialization, "`style:` must be one of #{STYLES.keys.inspect}"
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 16 20 | 
             
                  @text = text
         | 
| 17 | 
            -
                  @ | 
| 21 | 
            +
                  @style = style
         | 
| 18 22 | 
             
                end
         | 
| 19 23 |  | 
| 20 24 | 
             
                def styles
         | 
| 21 25 | 
             
                  return @styles if instance_variable_defined?(:@styles)
         | 
| 22 | 
            -
                  @styles =
         | 
| 23 | 
            -
                    if requested_styles.delete(:reset)
         | 
| 24 | 
            -
                      []
         | 
| 25 | 
            -
                    else
         | 
| 26 | 
            -
                      COMMON_STYLES
         | 
| 27 | 
            -
                    end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                  if requested_styles.empty?
         | 
| 30 | 
            -
                    @styles += [STYLES[:light]]
         | 
| 31 | 
            -
                  else
         | 
| 32 | 
            -
                    requested_styles.each do |style|
         | 
| 33 | 
            -
                      @styles +=
         | 
| 34 | 
            -
                        if STYLES.key?(style)
         | 
| 35 | 
            -
                          [STYLES[style]]
         | 
| 36 | 
            -
                        else
         | 
| 37 | 
            -
                          [style]
         | 
| 38 | 
            -
                        end
         | 
| 39 | 
            -
                    end
         | 
| 40 | 
            -
                  end
         | 
| 41 26 |  | 
| 42 | 
            -
                  @styles
         | 
| 27 | 
            +
                  @styles = COMMON_STYLES + [STYLES.fetch(@style)]
         | 
| 43 28 | 
             
                end
         | 
| 44 29 |  | 
| 45 30 | 
             
                def to_s
         | 
    
        data/lib/super/cheat.rb
    CHANGED
    
    | @@ -3,13 +3,19 @@ | |
| 3 3 | 
             
            module Super
         | 
| 4 4 | 
             
              class Cheat
         | 
| 5 5 | 
             
                def controller
         | 
| 6 | 
            -
                  paths = %w[ | 
| 6 | 
            +
                  paths = %w[
         | 
| 7 | 
            +
                    ../../app/controllers/super/application_controller.rb
         | 
| 8 | 
            +
                    ../../app/controllers/super/view_controller.rb
         | 
| 9 | 
            +
                    ../../app/controllers/super/sitewide_controller.rb
         | 
| 10 | 
            +
                    ../../app/controllers/super/substructure_controller.rb
         | 
| 11 | 
            +
                    ../../app/controllers/super/foundation_controller.rb
         | 
| 12 | 
            +
                  ]
         | 
| 7 13 | 
             
                  methods =
         | 
| 8 14 | 
             
                    paths
         | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 15 | 
            +
                      .map { |f| File.read(File.expand_path(f, __dir__)) }
         | 
| 16 | 
            +
                      .flat_map { |content| content.scan(/^\s+(?:helper_method )?def .*$/) }
         | 
| 17 | 
            +
                      .reject { |method| method =~ /\bdef self\./ }
         | 
| 18 | 
            +
                      .map { |method| method.strip.sub(/^(?:helper_method )?def /, "#") }
         | 
| 13 19 |  | 
| 14 20 | 
             
                  puts "== Super::ApplicationController"
         | 
| 15 21 | 
             
                  puts methods.join("\n")
         | 
    
        data/lib/super/client_error.rb
    CHANGED
    
    | @@ -6,9 +6,13 @@ module Super | |
| 6 6 | 
             
              # See also `Super::Error`
         | 
| 7 7 | 
             
              class ClientError < StandardError
         | 
| 8 8 | 
             
                class BadRequest < ClientError; end
         | 
| 9 | 
            +
             | 
| 9 10 | 
             
                class Unauthorized < ClientError; end
         | 
| 11 | 
            +
             | 
| 10 12 | 
             
                class Forbidden < ClientError; end
         | 
| 13 | 
            +
             | 
| 11 14 | 
             
                class NotFound < ClientError; end
         | 
| 15 | 
            +
             | 
| 12 16 | 
             
                class UnprocessableEntity < ClientError; end
         | 
| 13 17 |  | 
| 14 18 | 
             
                module Handling
         | 
    
        data/lib/super/compatibility.rb
    CHANGED
    
    | @@ -34,6 +34,10 @@ module Super | |
| 34 34 | 
             
                          def method_missing(method_name)
         | 
| 35 35 | 
             
                            Rails.application.routes.url_helpers.public_send(method_name)
         | 
| 36 36 | 
             
                          end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                          def respond_to_missing?(*args, **kwargs)
         | 
| 39 | 
            +
                            Rails.application.routes.url_helpers.respond_to?(*args, **kwargs)
         | 
| 40 | 
            +
                          end
         | 
| 37 41 | 
             
                        end
         | 
| 38 42 |  | 
| 39 43 | 
             
                        klass.new
         | 
    
        data/lib/super/configuration.rb
    CHANGED
    
    | @@ -24,6 +24,9 @@ module Super | |
| 24 24 | 
             
                include ActiveSupport::Configurable
         | 
| 25 25 |  | 
| 26 26 | 
             
                config_accessor(:title) { "Super Admin" }
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                # @!attribute [rw] index_records_per_page
         | 
| 29 | 
            +
                #   @return [Integer]
         | 
| 27 30 | 
             
                config_accessor(:index_records_per_page) { 100 }
         | 
| 28 31 | 
             
                config_accessor(:javascripts) do
         | 
| 29 32 | 
             
                  [Super::Assets.auto("super/application")]
         | 
| @@ -3,7 +3,7 @@ | |
| 3 3 | 
             
            module Super
         | 
| 4 4 | 
             
              class Display
         | 
| 5 5 | 
             
                class SchemaTypes
         | 
| 6 | 
            -
                  TYPES = Useful::Enum.new(: | 
| 6 | 
            +
                  TYPES = Useful::Enum.new(:attribute, :record, :none)
         | 
| 7 7 |  | 
| 8 8 | 
             
                  class Builder
         | 
| 9 9 | 
             
                    extend Useful::Builder
         | 
| @@ -12,40 +12,61 @@ module Super | |
| 12 12 | 
             
                      @transform_block = block
         | 
| 13 13 | 
             
                    end
         | 
| 14 14 |  | 
| 15 | 
            -
                    builder def real | 
| 16 | 
            -
             | 
| 15 | 
            +
                    builder def real
         | 
| 16 | 
            +
                      @real = true
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
                    builder def computed
         | 
| 19 | 
            +
                      @real = false
         | 
| 20 | 
            +
                    end
         | 
| 17 21 |  | 
| 18 | 
            -
                    builder def  | 
| 19 | 
            -
             | 
| 20 | 
            -
                     | 
| 22 | 
            +
                    builder def attribute
         | 
| 23 | 
            +
                      @type = :attribute
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
                    builder def record
         | 
| 26 | 
            +
                      @type = :record
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
                    builder def none
         | 
| 29 | 
            +
                      @type = :none
         | 
| 30 | 
            +
                    end
         | 
| 21 31 |  | 
| 22 | 
            -
                    builder def ignore_nil | 
| 32 | 
            +
                    builder def ignore_nil
         | 
| 33 | 
            +
                      @ignore_nil = true
         | 
| 34 | 
            +
                    end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                    builder def attribute_name(name) # standard:disable Style/TrivialAccessors
         | 
| 37 | 
            +
                      @attribute_name = name
         | 
| 38 | 
            +
                    end
         | 
| 23 39 |  | 
| 24 40 | 
             
                    def build
         | 
| 25 41 | 
             
                      Built.new(
         | 
| 26 42 | 
             
                        real: @real,
         | 
| 27 43 | 
             
                        type: @type,
         | 
| 28 44 | 
             
                        ignore_nil: !!@ignore_nil,
         | 
| 45 | 
            +
                        attribute_name: @attribute_name,
         | 
| 29 46 | 
             
                        &@transform_block
         | 
| 30 47 | 
             
                      )
         | 
| 31 48 | 
             
                    end
         | 
| 32 49 | 
             
                  end
         | 
| 33 50 |  | 
| 34 51 | 
             
                  class Built
         | 
| 35 | 
            -
                    def initialize(real:, type:, ignore_nil:, &transform_block)
         | 
| 52 | 
            +
                    def initialize(real:, type:, ignore_nil:, attribute_name:, &transform_block)
         | 
| 36 53 | 
             
                      @real = real
         | 
| 37 54 | 
             
                      @type = type
         | 
| 38 55 | 
             
                      @ignore_nil = ignore_nil
         | 
| 56 | 
            +
                      @attribute_name = attribute_name
         | 
| 39 57 | 
             
                      @transform_block = transform_block
         | 
| 40 58 | 
             
                    end
         | 
| 41 59 |  | 
| 42 | 
            -
                    def real | 
| 60 | 
            +
                    def real?
         | 
| 61 | 
            +
                      @real
         | 
| 62 | 
            +
                    end
         | 
| 43 63 | 
             
                    attr_reader :type
         | 
| 64 | 
            +
                    attr_reader :attribute_name
         | 
| 44 65 |  | 
| 45 66 | 
             
                    def present(attribute_name, value = nil)
         | 
| 46 67 | 
             
                      if @transform_block.nil?
         | 
| 47 68 | 
             
                        if attribute_name
         | 
| 48 | 
            -
                          raise Error::ArgumentError, "Transformation block is not set for  | 
| 69 | 
            +
                          raise Error::ArgumentError, "Transformation block is not set for attribute: #{attribute_name}"
         | 
| 49 70 | 
             
                        else
         | 
| 50 71 | 
             
                          raise Error::ArgumentError, "Transformation block is not set!"
         | 
| 51 72 | 
             
                        end
         | 
| @@ -61,97 +82,55 @@ module Super | |
| 61 82 | 
             
                    end
         | 
| 62 83 | 
             
                  end
         | 
| 63 84 |  | 
| 64 | 
            -
                  class Badge
         | 
| 65 | 
            -
                    extend Useful::Builder
         | 
| 66 | 
            -
             | 
| 67 | 
            -
                    def initialize(builder)
         | 
| 68 | 
            -
                      @builder = builder
         | 
| 69 | 
            -
                      @whens = {}
         | 
| 70 | 
            -
                      format_for_lookup(&:itself)
         | 
| 71 | 
            -
                      format_for_display(&:itself)
         | 
| 72 | 
            -
                    end
         | 
| 73 | 
            -
             | 
| 74 | 
            -
                    builder_with_block def when(*patterns, &block)
         | 
| 75 | 
            -
                      patterns.each do |pattern|
         | 
| 76 | 
            -
                        @whens[pattern] = block
         | 
| 77 | 
            -
                      end
         | 
| 78 | 
            -
                    end
         | 
| 79 | 
            -
             | 
| 80 | 
            -
                    builder_with_block def else(&block)
         | 
| 81 | 
            -
                      @else = block
         | 
| 82 | 
            -
                    end
         | 
| 83 | 
            -
             | 
| 84 | 
            -
                    builder_with_block def format_for_lookup(&block)
         | 
| 85 | 
            -
                      @format_for_lookup = block
         | 
| 86 | 
            -
                    end
         | 
| 87 | 
            -
             | 
| 88 | 
            -
                    builder_with_block def format_for_display(&block)
         | 
| 89 | 
            -
                      @format_for_display = block
         | 
| 90 | 
            -
                    end
         | 
| 91 | 
            -
             | 
| 92 | 
            -
                    def build
         | 
| 93 | 
            -
                      @builder.transform do |value|
         | 
| 94 | 
            -
                        lookup_value = @format_for_lookup.call(value)
         | 
| 95 | 
            -
                        block = @whens[lookup_value] || @else
         | 
| 96 | 
            -
                        Super::Badge.new(
         | 
| 97 | 
            -
                          @format_for_display.call(value),
         | 
| 98 | 
            -
                          styles: block&.call
         | 
| 99 | 
            -
                        )
         | 
| 100 | 
            -
                      end
         | 
| 101 | 
            -
                      @builder.build
         | 
| 102 | 
            -
                    end
         | 
| 103 | 
            -
                  end
         | 
| 104 | 
            -
             | 
| 105 85 | 
             
                  def initialize(fields:)
         | 
| 106 86 | 
             
                    @actions_called = false
         | 
| 107 87 | 
             
                    @fields = fields
         | 
| 108 88 | 
             
                  end
         | 
| 109 89 |  | 
| 110 | 
            -
                  def real(type = : | 
| 90 | 
            +
                  def real(type = :attribute, &transform_block)
         | 
| 111 91 | 
             
                    TYPES
         | 
| 112 92 | 
             
                      .case(type)
         | 
| 113 | 
            -
                      .when(: | 
| 93 | 
            +
                      .when(:attribute) { Builder.new.real.ignore_nil.attribute.transform(&transform_block) }
         | 
| 114 94 | 
             
                      .when(:record) { Builder.new.real.ignore_nil.record.transform(&transform_block) }
         | 
| 115 | 
            -
                      .when(:none) | 
| 95 | 
            +
                      .when(:none) { Builder.new.real.ignore_nil.none.transform(&transform_block) }
         | 
| 116 96 | 
             
                      .result
         | 
| 117 97 | 
             
                  end
         | 
| 118 98 |  | 
| 119 | 
            -
                  def computed(type = : | 
| 99 | 
            +
                  def computed(type = :attribute, &transform_block)
         | 
| 120 100 | 
             
                    TYPES
         | 
| 121 101 | 
             
                      .case(type)
         | 
| 122 | 
            -
                      .when(: | 
| 102 | 
            +
                      .when(:attribute) { Builder.new.computed.ignore_nil.attribute.transform(&transform_block) }
         | 
| 123 103 | 
             
                      .when(:record) { Builder.new.computed.ignore_nil.record.transform(&transform_block) }
         | 
| 124 | 
            -
                      .when(:none) | 
| 104 | 
            +
                      .when(:none) { Builder.new.computed.ignore_nil.none.transform(&transform_block) }
         | 
| 125 105 | 
             
                      .result
         | 
| 126 106 | 
             
                  end
         | 
| 127 107 |  | 
| 128 108 | 
             
                  def manual(&transform_block)
         | 
| 129 | 
            -
                    real(: | 
| 109 | 
            +
                    real(:attribute, &transform_block)
         | 
| 130 110 | 
             
                  end
         | 
| 131 111 |  | 
| 132 112 | 
             
                  def batch
         | 
| 133 113 | 
             
                    real do |value|
         | 
| 134 | 
            -
                      Partial.new("batch_checkbox", locals: { | 
| 114 | 
            +
                      Partial.new("batch_checkbox", locals: {value: value})
         | 
| 135 115 | 
             
                    end
         | 
| 136 116 | 
             
                  end
         | 
| 137 117 |  | 
| 138 | 
            -
                  def string | 
| 118 | 
            +
                  def string
         | 
| 119 | 
            +
                    real(&:to_s)
         | 
| 120 | 
            +
                  end
         | 
| 139 121 |  | 
| 140 | 
            -
                  def timestamp | 
| 141 | 
            -
             | 
| 122 | 
            +
                  def timestamp
         | 
| 123 | 
            +
                    real(&:to_s)
         | 
| 124 | 
            +
                  end
         | 
| 142 125 |  | 
| 143 | 
            -
                  def  | 
| 144 | 
            -
                     | 
| 145 | 
            -
                      Partial.new("display_rich_text", locals: { rich_text: value })
         | 
| 146 | 
            -
                    end
         | 
| 126 | 
            +
                  def time
         | 
| 127 | 
            +
                    real { |value| value.strftime("%H:%M:%S") }
         | 
| 147 128 | 
             
                  end
         | 
| 148 129 |  | 
| 149 | 
            -
                  def  | 
| 150 | 
            -
                     | 
| 151 | 
            -
             | 
| 152 | 
            -
                      builder.public_send(builder_method)
         | 
| 130 | 
            +
                  def rich_text
         | 
| 131 | 
            +
                    computed do |value|
         | 
| 132 | 
            +
                      Partial.new("display_rich_text", locals: {rich_text: value})
         | 
| 153 133 | 
             
                    end
         | 
| 154 | 
            -
                    Badge.new(builder)
         | 
| 155 134 | 
             
                  end
         | 
| 156 135 |  | 
| 157 136 | 
             
                  def actions
         | 
    
        data/lib/super/display.rb
    CHANGED
    
    | @@ -26,7 +26,9 @@ module Super | |
| 26 26 | 
             
                include Schema::Common
         | 
| 27 27 |  | 
| 28 28 | 
             
                def initialize
         | 
| 29 | 
            -
                  @fields = Super::Schema::Fields.new
         | 
| 29 | 
            +
                  @fields = Super::Schema::Fields.new(
         | 
| 30 | 
            +
                    transform_value_on_set: ->(val) { val.respond_to?(:build) ? val.build : val }
         | 
| 31 | 
            +
                  )
         | 
| 30 32 | 
             
                  @schema_types = SchemaTypes.new(fields: @fields)
         | 
| 31 33 |  | 
| 32 34 | 
             
                  yield(@fields, @schema_types)
         | 
| @@ -43,7 +45,7 @@ module Super | |
| 43 45 |  | 
| 44 46 | 
             
                def to_partial_path
         | 
| 45 47 | 
             
                  if @action_inquirer.nil?
         | 
| 46 | 
            -
                    raise Super::Error:: | 
| 48 | 
            +
                    raise Super::Error::Initialization,
         | 
| 47 49 | 
             
                      "You must call the `#apply` method after instantiating Super::Display"
         | 
| 48 50 | 
             
                  elsif @action_inquirer.index?
         | 
| 49 51 | 
             
                    "display_index"
         | 
| @@ -57,22 +59,21 @@ module Super | |
| 57 59 | 
             
                # @private
         | 
| 58 60 | 
             
                def render_attribute(template:, record:, column:)
         | 
| 59 61 | 
             
                  formatter = @fields[column]
         | 
| 60 | 
            -
                  formatter = formatter.build if formatter.respond_to?(:build)
         | 
| 61 62 |  | 
| 62 63 | 
             
                  formatted =
         | 
| 63 64 | 
             
                    SchemaTypes::TYPES
         | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 65 | 
            +
                      .case(formatter.type)
         | 
| 66 | 
            +
                      .when(:record) do
         | 
| 67 | 
            +
                        formatter.present(column, record)
         | 
| 68 | 
            +
                      end
         | 
| 69 | 
            +
                      .when(:attribute) do
         | 
| 70 | 
            +
                        value = record.public_send(column)
         | 
| 71 | 
            +
                        formatter.present(column, value)
         | 
| 72 | 
            +
                      end
         | 
| 73 | 
            +
                      .when(:none) do
         | 
| 74 | 
            +
                        formatter.present(column)
         | 
| 75 | 
            +
                      end
         | 
| 76 | 
            +
                      .result
         | 
| 76 77 |  | 
| 77 78 | 
             
                  if formatted.respond_to?(:to_partial_path)
         | 
| 78 79 | 
             
                    if formatted.respond_to?(:locals)
         | 
    
        data/lib/super/error.rb
    CHANGED
    
    | @@ -7,14 +7,19 @@ module Super | |
| 7 7 | 
             
              class Error < StandardError
         | 
| 8 8 | 
             
                # Error raised when some configuration is not set
         | 
| 9 9 | 
             
                class UnconfiguredConfiguration < Error; end
         | 
| 10 | 
            +
             | 
| 10 11 | 
             
                # Error raised when a configuration is set to a invalid value
         | 
| 11 12 | 
             
                class InvalidConfiguration < Error; end
         | 
| 13 | 
            +
             | 
| 12 14 | 
             
                # Error raised on problematic plugins, see `Super::Plugin`
         | 
| 13 15 | 
             
                class InvalidPluginArgument < Error; end
         | 
| 16 | 
            +
             | 
| 14 17 | 
             
                # Error raised on problematic ActionInquirer settings, see `Super::ActionInquirer`
         | 
| 15 18 | 
             
                class ActionInquirerError < Error; end
         | 
| 19 | 
            +
             | 
| 16 20 | 
             
                # Error raised when a `Super::Link` couldn't be found
         | 
| 17 21 | 
             
                class LinkNotRegistered < Error; end
         | 
| 22 | 
            +
             | 
| 18 23 | 
             
                # Error raised when rendering if `@view` wasn't set by the controller
         | 
| 19 24 | 
             
                class NothingToRender < Error
         | 
| 20 25 | 
             
                  def initialize(basename)
         | 
| @@ -24,23 +29,32 @@ module Super | |
| 24 29 | 
             
                    )
         | 
| 25 30 | 
             
                  end
         | 
| 26 31 | 
             
                end
         | 
| 27 | 
            -
             | 
| 32 | 
            +
             | 
| 33 | 
            +
                # Error raised when something wasn't initialized correctly, and if there isn't
         | 
| 28 34 | 
             
                # a more specific error
         | 
| 29 | 
            -
                class  | 
| 35 | 
            +
                class Initialization < Error; end
         | 
| 36 | 
            +
             | 
| 30 37 | 
             
                class ArgumentError < Error; end
         | 
| 38 | 
            +
             | 
| 31 39 | 
             
                class AlreadyRegistered < Error; end
         | 
| 40 | 
            +
             | 
| 32 41 | 
             
                class AlreadyTranscribed < Error; end
         | 
| 42 | 
            +
             | 
| 33 43 | 
             
                class NotImplementedError < Error; end
         | 
| 44 | 
            +
             | 
| 34 45 | 
             
                class IncompleteBuilder < Error; end
         | 
| 35 46 |  | 
| 36 47 | 
             
                class Enum < Error
         | 
| 37 48 | 
             
                  class ImpossibleValue < Enum; end
         | 
| 49 | 
            +
             | 
| 38 50 | 
             
                  class ArgumentError < Enum; end
         | 
| 51 | 
            +
             | 
| 39 52 | 
             
                  class UndefinedCase < Enum; end
         | 
| 40 53 | 
             
                end
         | 
| 41 54 |  | 
| 42 55 | 
             
                class ReorderableHash < Error
         | 
| 43 56 | 
             
                  class DuplicateKey < ReorderableHash; end
         | 
| 57 | 
            +
             | 
| 44 58 | 
             
                  class KeyError < ReorderableHash; end
         | 
| 45 59 | 
             
                end
         | 
| 46 60 |  | 
| @@ -44,8 +44,8 @@ module Super | |
| 44 44 | 
             
                      query_parameter_keys = [NULLARY] if query_parameter_keys.empty?
         | 
| 45 45 | 
             
                      @specified_values =
         | 
| 46 46 | 
             
                        query_parameter_keys
         | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 47 | 
            +
                          .map { |key| [key, @params[key].presence&.strip] }
         | 
| 48 | 
            +
                          .to_h
         | 
| 49 49 |  | 
| 50 50 | 
             
                      @specified_values.each do |key, value|
         | 
| 51 51 | 
             
                        define_singleton_method(key) { value }
         | 
| @@ -79,7 +79,7 @@ module Super | |
| 79 79 | 
             
                      end
         | 
| 80 80 |  | 
| 81 81 | 
             
                      if @extras.key?(:reader)
         | 
| 82 | 
            -
                         | 
| 82 | 
            +
                        @extras[:reader].to_s.singularize.humanize
         | 
| 83 83 | 
             
                      end
         | 
| 84 84 | 
             
                    end
         | 
| 85 85 |  | 
| @@ -142,7 +142,7 @@ module Super | |
| 142 142 | 
             
                  end
         | 
| 143 143 |  | 
| 144 144 | 
             
                  def self.define_schema_type_for(method_name)
         | 
| 145 | 
            -
                    class_eval(<<~RUBY)
         | 
| 145 | 
            +
                    class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
         | 
| 146 146 | 
             
                      def #{method_name}(*args, **kwargs)
         | 
| 147 147 | 
             
                        Direct.new(super_builder: true, method_name: :#{method_name}!, args: args, kwargs: kwargs)
         | 
| 148 148 | 
             
                      end
         | 
| @@ -3,7 +3,7 @@ | |
| 3 3 | 
             
            module Super
         | 
| 4 4 | 
             
              class FormBuilder
         | 
| 5 5 | 
             
                class Wrappers
         | 
| 6 | 
            -
                  skipped_field_helpers = [:label, :check_box, :radio_button, :fields_for, :fields, :hidden_field | 
| 6 | 
            +
                  skipped_field_helpers = [:label, :check_box, :radio_button, :fields_for, :fields, :hidden_field]
         | 
| 7 7 | 
             
                  (ActionView::Helpers::FormBuilder.field_helpers - skipped_field_helpers).each do |builder_method_name|
         | 
| 8 8 | 
             
                    class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
         | 
| 9 9 | 
             
                      def #{builder_method_name}(attribute, options = {})
         | 
| @@ -30,26 +30,20 @@ module Super | |
| 30 30 |  | 
| 31 31 | 
             
                  def check_box!(attribute, checked_value: "1", unchecked_value: "0", label_text: nil, label: {}, field: {}, show_errors: true)
         | 
| 32 32 | 
             
                    label[:super] ||= {}
         | 
| 33 | 
            -
                    label[:super] = { | 
| 33 | 
            +
                    label[:super] = {class: "select-none ml-1"}.merge(label[:super])
         | 
| 34 34 | 
             
                    container do
         | 
| 35 35 | 
             
                      compact_join([
         | 
| 36 36 | 
             
                        "<div>".html_safe,
         | 
| 37 37 | 
             
                        public_send(:check_box, attribute, field, checked_value, unchecked_value),
         | 
| 38 38 | 
             
                        public_send(:label, attribute, label_text, label),
         | 
| 39 39 | 
             
                        "</div>".html_safe,
         | 
| 40 | 
            -
                        show_errors && inline_errors(attribute) | 
| 40 | 
            +
                        show_errors && inline_errors(attribute)
         | 
| 41 41 | 
             
                      ])
         | 
| 42 42 | 
             
                    end
         | 
| 43 43 | 
             
                  end
         | 
| 44 44 |  | 
| 45 45 | 
             
                  ::Super::Form::SchemaTypes.define_schema_type_for(:check_box)
         | 
| 46 46 |  | 
| 47 | 
            -
                  # def file_field(attribute, options = {})
         | 
| 48 | 
            -
                  # end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                  # def file_field!(attribute, label_text: nil, label: {}, field: {}, show_errors: true)
         | 
| 51 | 
            -
                  # end
         | 
| 52 | 
            -
             | 
| 53 47 | 
             
                  def hidden_field(attribute, options = {})
         | 
| 54 48 | 
             
                    @builder.hidden_field(attribute, options)
         | 
| 55 49 | 
             
                  end
         | 
| @@ -10,7 +10,7 @@ module Super | |
| 10 10 | 
             
                      data: {
         | 
| 11 11 | 
             
                        controller: "flatpickr",
         | 
| 12 12 | 
             
                        flatpickr_options_value: {
         | 
| 13 | 
            -
                          dateFormat: "Y-m-d" | 
| 13 | 
            +
                          dateFormat: "Y-m-d"
         | 
| 14 14 | 
             
                        }
         | 
| 15 15 | 
             
                      }
         | 
| 16 16 | 
             
                    )
         | 
| @@ -33,7 +33,7 @@ module Super | |
| 33 33 | 
             
                        flatpickr_options_value: {
         | 
| 34 34 | 
             
                          enableSeconds: true,
         | 
| 35 35 | 
             
                          enableTime: true,
         | 
| 36 | 
            -
                          dateFormat: "Z" | 
| 36 | 
            +
                          dateFormat: "Z"
         | 
| 37 37 | 
             
                        }
         | 
| 38 38 | 
             
                      }
         | 
| 39 39 | 
             
                    )
         | 
| @@ -57,7 +57,7 @@ module Super | |
| 57 57 | 
             
                          enableSeconds: true,
         | 
| 58 58 | 
             
                          enableTime: true,
         | 
| 59 59 | 
             
                          noCalendar: true,
         | 
| 60 | 
            -
                          dateFormat: "H:i:S" | 
| 60 | 
            +
                          dateFormat: "H:i:S"
         | 
| 61 61 | 
             
                        }
         | 
| 62 62 | 
             
                      }
         | 
| 63 63 | 
             
                    )
         |