active_list 6.5.1 → 6.6.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/lib/active_list.rb +11 -11
- data/lib/active_list/definition.rb +0 -2
- data/lib/active_list/definition/abstract_column.rb +4 -9
- data/lib/active_list/definition/action_column.rb +49 -57
- data/lib/active_list/definition/association_column.rb +26 -28
- data/lib/active_list/definition/attribute_column.rb +6 -11
- data/lib/active_list/definition/check_box_column.rb +0 -5
- data/lib/active_list/definition/data_column.rb +17 -24
- data/lib/active_list/definition/empty_column.rb +0 -4
- data/lib/active_list/definition/field_column.rb +0 -4
- data/lib/active_list/definition/status_column.rb +0 -4
- data/lib/active_list/definition/table.rb +31 -37
- data/lib/active_list/definition/text_field_column.rb +0 -4
- data/lib/active_list/exporters.rb +0 -4
- data/lib/active_list/exporters/abstract_exporter.rb +15 -19
- data/lib/active_list/exporters/csv_exporter.rb +5 -11
- data/lib/active_list/exporters/excel_csv_exporter.rb +7 -13
- data/lib/active_list/exporters/open_document_spreadsheet_exporter.rb +29 -35
- data/lib/active_list/generator.rb +27 -32
- data/lib/active_list/generator/finder.rb +35 -50
- data/lib/active_list/helpers.rb +6 -8
- data/lib/active_list/rails/engine.rb +3 -3
- data/lib/active_list/rails/integration.rb +2 -10
- data/lib/active_list/renderers.rb +0 -4
- data/lib/active_list/renderers/abstract_renderer.rb +2 -7
- data/lib/active_list/renderers/simple_renderer.rb +58 -71
- data/lib/active_list/version.rb +1 -3
- data/test/active_list_test.rb +4 -6
- data/test/code_generation_test.rb +0 -2
- data/test/dummy/Gemfile +1 -2
- data/test/dummy/app/controllers/contacts_controller.rb +10 -10
- data/test/dummy/app/controllers/people_controller.rb +10 -11
- data/test/dummy/config.ru +1 -1
- data/test/dummy/config/application.rb +2 -2
- data/test/dummy/config/boot.rb +1 -1
- data/test/dummy/config/environments/test.rb +6 -3
- data/test/dummy/config/initializers/session_store.rb +1 -1
- data/test/dummy/config/initializers/wrap_parameters.rb +1 -1
- data/test/dummy/db/seeds.rb +5 -5
- data/test/dummy/script/rails +2 -2
- data/test/people_controller_test.rb +11 -15
- data/test/table_test.rb +0 -1
- data/test/test_helper.rb +6 -7
- metadata +3 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 972efe1084c46b43af24147f815d2b63a0df506e
         | 
| 4 | 
            +
              data.tar.gz: 6f0597c282d17598f0a71641ac127cc0b7174ebd
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 15c0e1d3f882e0a7a4695f583e1b40db285370e09fdc7b62b89a3fe1d13cf9d9f603599b01e1ccd48be7349511d72181e00e59678b0335fe7fe2bea3f246ff42
         | 
| 7 | 
            +
              data.tar.gz: 7b94b8274545d712ce4e3aef8b1ba8ab8eb8b2002c2d8fb195524aa468088cb7c60a6d54a6acc58106676e348883227de63aff1ddadca640a850031e11ffc51a
         | 
    
        data/lib/active_list.rb
    CHANGED
    
    | @@ -1,3 +1,4 @@ | |
| 1 | 
            +
             | 
| 1 2 | 
             
            require 'csv'
         | 
| 2 3 | 
             
            require 'action_dispatch'
         | 
| 3 4 | 
             
            require 'rails'
         | 
| @@ -5,13 +6,12 @@ require 'code_string' | |
| 5 6 | 
             
            require 'i18n-complements'
         | 
| 6 7 |  | 
| 7 8 | 
             
            module ActiveList
         | 
| 8 | 
            -
             | 
| 9 9 | 
             
              # Build and returns a short UID
         | 
| 10 10 | 
             
              def self.new_uid
         | 
| 11 11 | 
             
                @@last_uid ||= 0
         | 
| 12 12 | 
             
                uid = @@last_uid.to_s(36).to_sym
         | 
| 13 13 | 
             
                @@last_uid += 1
         | 
| 14 | 
            -
                 | 
| 14 | 
            +
                uid
         | 
| 15 15 | 
             
              end
         | 
| 16 16 |  | 
| 17 17 | 
             
              autoload :VERSION,    'active_list/version'
         | 
| @@ -24,7 +24,7 @@ module ActiveList | |
| 24 24 | 
             
              # Set the temporary directory
         | 
| 25 25 | 
             
              # Pathname or callable are acceptable
         | 
| 26 26 | 
             
              def self.temporary_directory=(dir)
         | 
| 27 | 
            -
                if dir.respond_to?(:call)  | 
| 27 | 
            +
                if dir.respond_to?(:call) || dir.is_a?(Pathname)
         | 
| 28 28 | 
             
                  @@temporary_directory = dir
         | 
| 29 29 | 
             
                else
         | 
| 30 30 | 
             
                  @@temporary_directory = Pathname(dir)
         | 
| @@ -40,12 +40,13 @@ module ActiveList | |
| 40 40 | 
             
                end
         | 
| 41 41 | 
             
              end
         | 
| 42 42 |  | 
| 43 | 
            -
             | 
| 44 43 | 
             
              mattr_reader :renderers
         | 
| 45 44 | 
             
              @@renderers = {}
         | 
| 46 45 |  | 
| 47 46 | 
             
              def self.register_renderer(name, renderer)
         | 
| 48 | 
            -
                 | 
| 47 | 
            +
                unless renderer < ActiveList::Renderers::AbstractRenderer
         | 
| 48 | 
            +
                  fail ArgumentError, 'A renderer must be ActiveList::Renderers::Renderer'
         | 
| 49 | 
            +
                end
         | 
| 49 50 | 
             
                @@renderers[name] = renderer
         | 
| 50 51 | 
             
              end
         | 
| 51 52 |  | 
| @@ -53,10 +54,11 @@ module ActiveList | |
| 53 54 | 
             
              @@exporters = {}
         | 
| 54 55 |  | 
| 55 56 | 
             
              def self.register_exporter(name, exporter)
         | 
| 56 | 
            -
                 | 
| 57 | 
            +
                unless exporter < ActiveList::Exporters::AbstractExporter
         | 
| 58 | 
            +
                  fail ArgumentError, "ActiveList::Exporters::AbstractExporter expected (got #{exporter.name}/#{exporter.ancestors.inspect})"
         | 
| 59 | 
            +
                end
         | 
| 57 60 | 
             
                @@exporters[name] = exporter
         | 
| 58 61 | 
             
              end
         | 
| 59 | 
            -
             | 
| 60 62 | 
             
            end
         | 
| 61 63 |  | 
| 62 64 | 
             
            ActiveList.temporary_directory = Pathname(Dir.tmpdir)
         | 
| @@ -67,14 +69,12 @@ ActiveList.register_exporter(:ods,  ActiveList::Exporters::OpenDocumentSpreadshe | |
| 67 69 | 
             
            ActiveList.register_exporter(:csv,  ActiveList::Exporters::CsvExporter)
         | 
| 68 70 | 
             
            ActiveList.register_exporter(:xcsv, ActiveList::Exporters::ExcelCsvExporter)
         | 
| 69 71 |  | 
| 70 | 
            -
             | 
| 71 | 
            -
            unless "string".respond_to? :dig
         | 
| 72 | 
            +
            unless 'string'.respond_to? :dig
         | 
| 72 73 | 
             
              class ::String
         | 
| 73 74 | 
             
                def dig(depth = 1)
         | 
| 74 | 
            -
                   | 
| 75 | 
            +
                  strip.gsub(/^/, '  ' * depth) + "\n"
         | 
| 75 76 | 
             
                end
         | 
| 76 77 | 
             
              end
         | 
| 77 78 | 
             
            end
         | 
| 78 79 |  | 
| 79 | 
            -
             | 
| 80 80 | 
             
            require 'active_list/rails'
         | 
| @@ -1,5 +1,4 @@ | |
| 1 1 | 
             
            module ActiveList
         | 
| 2 | 
            -
             | 
| 3 2 | 
             
              module Definition
         | 
| 4 3 | 
             
                autoload :AbstractColumn,    'active_list/definition/abstract_column'
         | 
| 5 4 | 
             
                autoload :ActionColumn,      'active_list/definition/action_column'
         | 
| @@ -13,5 +12,4 @@ module ActiveList | |
| 13 12 | 
             
                autoload :Table,             'active_list/definition/table'
         | 
| 14 13 | 
             
                autoload :TextFieldColumn,   'active_list/definition/text_field_column'
         | 
| 15 14 | 
             
              end
         | 
| 16 | 
            -
             | 
| 17 15 | 
             
            end
         | 
| @@ -1,7 +1,5 @@ | |
| 1 1 | 
             
            module ActiveList
         | 
| 2 | 
            -
             | 
| 3 2 | 
             
              module Definition
         | 
| 4 | 
            -
             | 
| 5 3 | 
             
                class AbstractColumn
         | 
| 6 4 | 
             
                  attr_reader :table, :name, :id, :options
         | 
| 7 5 |  | 
| @@ -10,11 +8,11 @@ module ActiveList | |
| 10 8 | 
             
                    @name    = name.to_sym
         | 
| 11 9 | 
             
                    @options = options
         | 
| 12 10 | 
             
                    @hidden  = !!@options.delete(:hidden)
         | 
| 13 | 
            -
                    @id = ActiveList.new_uid
         | 
| 11 | 
            +
                    @id = 'c' + @table.new_column_id # ActiveList.new_uid
         | 
| 14 12 | 
             
                  end
         | 
| 15 13 |  | 
| 16 14 | 
             
                  def header_code
         | 
| 17 | 
            -
                     | 
| 15 | 
            +
                    fail NotImplementedError, "#{self.class.name}#header_code is not implemented."
         | 
| 18 16 | 
             
                  end
         | 
| 19 17 |  | 
| 20 18 | 
             
                  def hidden?
         | 
| @@ -39,16 +37,13 @@ module ActiveList | |
| 39 37 | 
             
                    @id
         | 
| 40 38 | 
             
                  end
         | 
| 41 39 |  | 
| 42 | 
            -
                   | 
| 40 | 
            +
                  alias_method :sort_id, :name
         | 
| 43 41 |  | 
| 44 42 | 
             
                  def check_options!(options, *keys)
         | 
| 45 43 | 
             
                    for key in options.keys
         | 
| 46 | 
            -
                       | 
| 44 | 
            +
                      fail ArgumentError, "Key :#{key} is unexpected. (Expecting: #{keys.to_sentence})"
         | 
| 47 45 | 
             
                    end
         | 
| 48 46 | 
             
                  end
         | 
| 49 | 
            -
             | 
| 50 47 | 
             
                end
         | 
| 51 | 
            -
             | 
| 52 48 | 
             
              end
         | 
| 53 | 
            -
             | 
| 54 49 | 
             
            end
         | 
| @@ -1,12 +1,10 @@ | |
| 1 1 | 
             
            # coding: utf-8
         | 
| 2 2 | 
             
            module ActiveList
         | 
| 3 | 
            -
             | 
| 4 3 | 
             
              module Definition
         | 
| 5 | 
            -
             | 
| 6 4 | 
             
                class ActionColumn < AbstractColumn
         | 
| 7 5 | 
             
                  include ActiveList::Helpers
         | 
| 8 6 |  | 
| 9 | 
            -
                  ID_PLACEHOLDER =  | 
| 7 | 
            +
                  ID_PLACEHOLDER = '##IDS##'
         | 
| 10 8 |  | 
| 11 9 | 
             
                  USE_MODES = [:none, :single, :many, :both]
         | 
| 12 10 |  | 
| @@ -16,25 +14,25 @@ module ActiveList | |
| 16 14 | 
             
                    super(table, name, options)
         | 
| 17 15 | 
             
                    @use_mode = (@options.delete(:on) || :single).to_sym
         | 
| 18 16 | 
             
                    unless USE_MODES.include?(@use_mode)
         | 
| 19 | 
            -
                       | 
| 17 | 
            +
                      fail "Invalid use mode: #{@use_mode.inspect}"
         | 
| 20 18 | 
             
                    end
         | 
| 21 | 
            -
                    if @name.to_s ==  | 
| 22 | 
            -
                      @options[:method] = :delete | 
| 19 | 
            +
                    if @name.to_s == 'destroy' && !@options.key?(:method)
         | 
| 20 | 
            +
                      @options[:method] = :delete
         | 
| 23 21 | 
             
                    end
         | 
| 24 | 
            -
                    if @name.to_s ==  | 
| 25 | 
            -
                      @options[:confirm] ||= :are_you_sure_you_want_to_delete | 
| 22 | 
            +
                    if @name.to_s == 'destroy' && !@options.key?(:confirm)
         | 
| 23 | 
            +
                      @options[:confirm] ||= :are_you_sure_you_want_to_delete
         | 
| 26 24 | 
             
                    end
         | 
| 27 | 
            -
                    @options[:if] ||= :destroyable? if @name.to_s ==  | 
| 28 | 
            -
                    @options[:if] ||= :editable?    if @name.to_s ==  | 
| 25 | 
            +
                    @options[:if] ||= :destroyable? if @name.to_s == 'destroy'
         | 
| 26 | 
            +
                    @options[:if] ||= :editable?    if @name.to_s == 'edit'
         | 
| 29 27 | 
             
                    @options[:confirm] = :are_you_sure if @options[:confirm].is_a?(TrueClass)
         | 
| 30 28 | 
             
                  end
         | 
| 31 29 |  | 
| 32 30 | 
             
                  def use_single?
         | 
| 33 | 
            -
                    @use_mode == :single  | 
| 31 | 
            +
                    @use_mode == :single || @use_mode == :both
         | 
| 34 32 | 
             
                  end
         | 
| 35 33 |  | 
| 36 34 | 
             
                  def use_many?
         | 
| 37 | 
            -
                    @use_mode == :many  | 
| 35 | 
            +
                    @use_mode == :many || @use_mode == :both
         | 
| 38 36 | 
             
                  end
         | 
| 39 37 |  | 
| 40 38 | 
             
                  def use_none?
         | 
| @@ -42,7 +40,7 @@ module ActiveList | |
| 42 40 | 
             
                  end
         | 
| 43 41 |  | 
| 44 42 | 
             
                  def global?
         | 
| 45 | 
            -
                    self.use_none?  | 
| 43 | 
            +
                    self.use_none? || self.use_many?
         | 
| 46 44 | 
             
                  end
         | 
| 47 45 |  | 
| 48 46 | 
             
                  def header_code
         | 
| @@ -53,17 +51,13 @@ module ActiveList | |
| 53 51 | 
             
                    url = @options[:url] ||= {}
         | 
| 54 52 | 
             
                    url[:controller] ||= (@options[:controller] || table.model.name.tableize)
         | 
| 55 53 | 
             
                    url[:action] ||= @name.to_s
         | 
| 56 | 
            -
                    if @options. | 
| 57 | 
            -
             | 
| 58 | 
            -
                     | 
| 59 | 
            -
                    if use_many? and use_mode == :many
         | 
| 60 | 
            -
                      url[:id] ||= ID_PLACEHOLDER
         | 
| 61 | 
            -
                    end
         | 
| 62 | 
            -
                    return url
         | 
| 54 | 
            +
                    url[:format] = @options[:format] if @options.key? :format
         | 
| 55 | 
            +
                    url[:id] ||= ID_PLACEHOLDER if use_many? && use_mode == :many
         | 
| 56 | 
            +
                    url
         | 
| 63 57 | 
             
                  end
         | 
| 64 58 |  | 
| 65 59 | 
             
                  def operation(record = 'record_of_the_death')
         | 
| 66 | 
            -
                    link_options =  | 
| 60 | 
            +
                    link_options = ''
         | 
| 67 61 | 
             
                    if @options[:confirm]
         | 
| 68 62 | 
             
                      link_options << ", 'data-confirm' => #{(@options[:confirm]).inspect}.t(scope: 'labels')"
         | 
| 69 63 | 
             
                    end
         | 
| @@ -71,62 +65,60 @@ module ActiveList | |
| 71 65 | 
             
                      link_options << ", method: :#{@options[:method].to_s.underscore}"
         | 
| 72 66 | 
             
                    end
         | 
| 73 67 | 
             
                    action = @name
         | 
| 74 | 
            -
                    format = @options[:format] ? ", format: '#{@options[:format]}'" :  | 
| 68 | 
            +
                    format = @options[:format] ? ", format: '#{@options[:format]}'" : ''
         | 
| 75 69 | 
             
                    if @options[:remote]
         | 
| 76 | 
            -
                       | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 70 | 
            +
                      fail StandardError, 'Sure to use :remote ?'
         | 
| 71 | 
            +
                    # remote_options = @options.dup
         | 
| 72 | 
            +
                    # remote_options['data-confirm'] = "#{@options[:confirm].inspect}.tl".c unless @options[:confirm].nil?
         | 
| 73 | 
            +
                    # remote_options.delete :remote
         | 
| 74 | 
            +
                    # remote_options.delete :image
         | 
| 75 | 
            +
                    # remote_options = remote_options.inspect.to_s
         | 
| 76 | 
            +
                    # remote_options = remote_options[1..-2]
         | 
| 77 | 
            +
                    # code  = "link_to_remote(#{image}"
         | 
| 78 | 
            +
                    # code += ", {url: {action: "+@name.to_s+", id: "+record+".id"+format+"}"
         | 
| 79 | 
            +
                    # code += ", "+remote_options+"}"
         | 
| 80 | 
            +
                    # code += ", {title: #{action.inspect}.tl}"
         | 
| 81 | 
            +
                    # code += ")"
         | 
| 88 82 | 
             
                    elsif @options[:actions]
         | 
| 89 83 | 
             
                      unless use_single?
         | 
| 90 | 
            -
                         | 
| 84 | 
            +
                        fail StandardError, 'Only compatible with single actions'
         | 
| 91 85 | 
             
                      end
         | 
| 92 86 | 
             
                      unless @options[:actions].is_a? Hash
         | 
| 93 | 
            -
                         | 
| 87 | 
            +
                        fail StandardError, ':actions parameter have to be a Hash.'
         | 
| 94 88 | 
             
                      end
         | 
| 95 89 | 
             
                      cases = []
         | 
| 96 90 | 
             
                      for expected, url in @options[:actions]
         | 
| 97 | 
            -
                        url[:id] ||=  | 
| 98 | 
            -
                        url[:id] =  | 
| 99 | 
            -
                        url[:redirect] ||=  | 
| 100 | 
            -
                        url.delete_if{| | 
| 101 | 
            -
                        cases << "#{record}.#{@name} == #{expected.inspect}\nlink_to(content_tag(:i) + h(#{url[:action].inspect}.t(scope: 'rest.actions'))" | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 91 | 
            +
                        url[:id] ||= 'RECORD.id'.c
         | 
| 92 | 
            +
                        url[:id] = 'RECORD.id'.c if url[:id] == ID_PLACEHOLDER
         | 
| 93 | 
            +
                        url[:redirect] ||= 'params[:redirect]'.c
         | 
| 94 | 
            +
                        url.delete_if { |_k, v| v.nil? }
         | 
| 95 | 
            +
                        cases << "#{record}.#{@name} == #{expected.inspect}\nlink_to(content_tag(:i) + h(#{url[:action].inspect}.t(scope: 'rest.actions'))"\
         | 
| 96 | 
            +
                                 ', {' + url.collect { |k, v| "#{k}: " + urlify(v, record) }.join(', ') + format + '}' \
         | 
| 97 | 
            +
                                                                                                                   ", {class: '#{@name}'" + link_options + '}'\
         | 
| 98 | 
            +
                                                                                                                                                           ")\n"
         | 
| 105 99 | 
             
                      end
         | 
| 106 100 |  | 
| 107 | 
            -
                      code =  | 
| 101 | 
            +
                      code = 'if ' + cases.join('elsif ') + 'end'
         | 
| 108 102 | 
             
                    else
         | 
| 109 103 | 
             
                      url = @options[:url] ||= {}
         | 
| 110 | 
            -
                      url[:controller] ||= (@options[:controller] ||  | 
| 104 | 
            +
                      url[:controller] ||= (@options[:controller] || 'RECORD.class.name.tableize'.c)
         | 
| 111 105 | 
             
                      url[:action] ||= @name.to_s
         | 
| 112 | 
            -
                      url[:id] ||=  | 
| 113 | 
            -
                      url[:id] =  | 
| 114 | 
            -
                      url[:redirect] ||=  | 
| 115 | 
            -
                      url.delete_if{| | 
| 116 | 
            -
                      url =  | 
| 117 | 
            -
                      code = "{class: '#{@name}'" + link_options +  | 
| 118 | 
            -
                      code = "link_to(content_tag(:i) + h(' ' + :#{action}.t(scope: 'rest.actions')), " + url +  | 
| 106 | 
            +
                      url[:id] ||= 'RECORD.id'.c
         | 
| 107 | 
            +
                      url[:id] = 'RECORD.id'.c if url[:id] == ID_PLACEHOLDER
         | 
| 108 | 
            +
                      url[:redirect] ||= 'params[:redirect]'.c
         | 
| 109 | 
            +
                      url.delete_if { |_k, v| v.nil? }
         | 
| 110 | 
            +
                      url = '{' + url.collect { |k, v| "#{k}: " + urlify(v, record) }.join(', ') + format + '}'
         | 
| 111 | 
            +
                      code = "{class: '#{@name}'" + link_options + '}'
         | 
| 112 | 
            +
                      code = "link_to(content_tag(:i) + h(' ' + :#{action}.t(scope: 'rest.actions')), " + url + ', ' + code + ')'
         | 
| 119 113 | 
             
                    end
         | 
| 120 114 | 
             
                    if @options[:if]
         | 
| 121 | 
            -
                      code =  | 
| 115 | 
            +
                      code = 'if ' + recordify!(@options[:if], record) + "\n" + code.dig + 'end'
         | 
| 122 116 | 
             
                    end
         | 
| 123 117 | 
             
                    if @options[:unless]
         | 
| 124 | 
            -
                      code =  | 
| 118 | 
            +
                      code = 'unless ' + recordify!(@options[:unless], record) + "\n" + code.dig + 'end'
         | 
| 125 119 | 
             
                    end
         | 
| 126 120 | 
             
                    code.c
         | 
| 127 121 | 
             
                  end
         | 
| 128 122 | 
             
                end
         | 
| 129 | 
            -
             | 
| 130 123 | 
             
              end
         | 
| 131 | 
            -
             | 
| 132 124 | 
             
            end
         | 
| @@ -1,85 +1,83 @@ | |
| 1 1 | 
             
            module ActiveList
         | 
| 2 | 
            -
             | 
| 3 2 | 
             
              module Definition
         | 
| 4 | 
            -
             | 
| 5 3 | 
             
                class AssociationColumn < DataColumn
         | 
| 6 | 
            -
             | 
| 7 4 | 
             
                  attr_reader :label_method, :reflection
         | 
| 8 5 |  | 
| 9 6 | 
             
                  def initialize(table, name, options = {})
         | 
| 10 7 | 
             
                    super(table, name, options)
         | 
| 11 8 | 
             
                    unless @options[:through]
         | 
| 12 | 
            -
                       | 
| 9 | 
            +
                      fail ArgumentError, 'Option :through must be given'
         | 
| 13 10 | 
             
                    end
         | 
| 14 11 | 
             
                    reflection_name = @options.delete(:through).to_sym
         | 
| 15 12 | 
             
                    if @reflection = @table.model.reflect_on_association(reflection_name)
         | 
| 16 13 | 
             
                      if @reflection.macro == :belongs_to
         | 
| 17 | 
            -
             | 
| 14 | 
            +
                      # Do some stuff
         | 
| 18 15 | 
             
                      elsif @reflection.macro == :has_one
         | 
| 19 | 
            -
             | 
| 16 | 
            +
                      # Do some stuff
         | 
| 20 17 | 
             
                      else
         | 
| 21 | 
            -
                         | 
| 18 | 
            +
                        fail ArgumentError, "Only belongs_to are usable. Can't handle: #{reflection.macro} :#{reflection.name}."
         | 
| 22 19 | 
             
                      end
         | 
| 23 20 | 
             
                    else
         | 
| 24 | 
            -
                       | 
| 21 | 
            +
                      fail UnknownReflection, "Reflection #{reflection_name} cannot be found for #{table.model.name}."
         | 
| 25 22 | 
             
                    end
         | 
| 26 | 
            -
                    unless klass =  | 
| 27 | 
            -
             | 
| 23 | 
            +
                    unless klass = begin
         | 
| 24 | 
            +
                                     @reflection.class_name.constantize
         | 
| 25 | 
            +
                                   rescue
         | 
| 26 | 
            +
                                     nil
         | 
| 27 | 
            +
                                   end
         | 
| 28 | 
            +
                      fail StandardError, "Given reflection #{reflection_name} seems to be invalid"
         | 
| 28 29 | 
             
                    end
         | 
| 29 30 | 
             
                    columns_def = klass.columns_hash.keys.map(&:to_sym)
         | 
| 30 31 | 
             
                    unless @label_method = @options.delete(:label_method)
         | 
| 31 32 | 
             
                      columns = columns_def + @reflection.class_name.constantize.instance_methods.map(&:to_sym)
         | 
| 32 | 
            -
                      unless @label_method = LABELS_COLUMNS.detect{|m| columns.include?(m)}
         | 
| 33 | 
            -
                         | 
| 33 | 
            +
                      unless @label_method = LABELS_COLUMNS.detect { |m| columns.include?(m) }
         | 
| 34 | 
            +
                        fail ArgumentError, ":label_method option must be given for association #{name}. (#{columns.inspect})"
         | 
| 34 35 | 
             
                      end
         | 
| 35 36 | 
             
                    end
         | 
| 36 37 | 
             
                    unless @sort_column = @options.delete(:sort)
         | 
| 37 38 | 
             
                      if columns_def.include?(@label_method)
         | 
| 38 39 | 
             
                        @sort_column = @label_method
         | 
| 39 40 | 
             
                      else
         | 
| 40 | 
            -
                        unless @sort_column = LABELS_COLUMNS.detect{|m| columns_def.include?(m)}
         | 
| 41 | 
            +
                        unless @sort_column = LABELS_COLUMNS.detect { |m| columns_def.include?(m) }
         | 
| 41 42 | 
             
                          @sort_column = :id
         | 
| 42 43 | 
             
                        end
         | 
| 43 44 | 
             
                      end
         | 
| 44 45 | 
             
                    end
         | 
| 45 46 | 
             
                  end
         | 
| 46 47 |  | 
| 47 | 
            -
             | 
| 48 48 | 
             
                  # Code for rows
         | 
| 49 49 | 
             
                  def datum_code(record = 'record_of_the_death', child = false)
         | 
| 50 | 
            -
                    code =  | 
| 50 | 
            +
                    code = ''
         | 
| 51 51 | 
             
                    if child
         | 
| 52 | 
            -
                      code =  | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 52 | 
            +
                      code = 'nil'
         | 
| 53 | 
            +
                    # if @options[:children].is_a?(FalseClass)
         | 
| 54 | 
            +
                    #   code = "nil"
         | 
| 55 | 
            +
                    # else
         | 
| 56 | 
            +
                    #   code = "#{record}.#{table.options[:children]}.#{@reflection.name}.#{@options[:children] || @label_method}"
         | 
| 57 | 
            +
                    # end
         | 
| 58 58 | 
             
                    else
         | 
| 59 59 | 
             
                      code = "(#{record}.#{@reflection.name} ? #{record}.#{@reflection.name}.#{@label_method} : nil)"
         | 
| 60 60 | 
             
                    end
         | 
| 61 | 
            -
                     | 
| 61 | 
            +
                    code.c
         | 
| 62 62 | 
             
                  end
         | 
| 63 63 |  | 
| 64 64 | 
             
                  def class_name
         | 
| 65 | 
            -
                     | 
| 65 | 
            +
                    @reflection.class_name
         | 
| 66 66 | 
             
                  end
         | 
| 67 67 |  | 
| 68 68 | 
             
                  def record_expr(record = 'record_of_the_death')
         | 
| 69 | 
            -
                     | 
| 69 | 
            +
                    "#{record}.#{@reflection.name}"
         | 
| 70 70 | 
             
                  end
         | 
| 71 71 |  | 
| 72 72 | 
             
                  def sort_expression
         | 
| 73 | 
            -
                    same_table_reflections = table.reflections.select{|r| r.table_name == @reflection.table_name}
         | 
| 74 | 
            -
                    if same_table_reflections.size > 1  | 
| 73 | 
            +
                    same_table_reflections = table.reflections.select { |r| r.table_name == @reflection.table_name }
         | 
| 74 | 
            +
                    if same_table_reflections.size > 1 && same_table_reflections.index { |r| r.name == @reflection.name } > 0
         | 
| 75 75 | 
             
                      # "#{@reflection.name.to_s.pluralize}_#{@reflection.class_name.constantize.table_name}.#{@sort_column}"
         | 
| 76 76 | 
             
                      "#{@reflection.name.to_s.pluralize}_#{table.model.table_name}.#{@sort_column}"
         | 
| 77 77 | 
             
                    else
         | 
| 78 78 | 
             
                      "#{@reflection.class_name.constantize.table_name}.#{@sort_column}"
         | 
| 79 79 | 
             
                    end
         | 
| 80 80 | 
             
                  end
         | 
| 81 | 
            -
             | 
| 82 81 | 
             
                end
         | 
| 83 | 
            -
             | 
| 84 82 | 
             
              end
         | 
| 85 83 | 
             
            end
         | 
| @@ -1,9 +1,6 @@ | |
| 1 1 | 
             
            module ActiveList
         | 
| 2 | 
            -
             | 
| 3 2 | 
             
              module Definition
         | 
| 4 | 
            -
             | 
| 5 3 | 
             
                class AttributeColumn < DataColumn
         | 
| 6 | 
            -
             | 
| 7 4 | 
             
                  attr_reader :column, :label_method, :sort_column
         | 
| 8 5 |  | 
| 9 6 | 
             
                  def initialize(table, name, options = {})
         | 
| @@ -18,31 +15,31 @@ module ActiveList | |
| 18 15 | 
             
                        @sort_column = :id
         | 
| 19 16 | 
             
                      end
         | 
| 20 17 | 
             
                    end
         | 
| 21 | 
            -
                    @column | 
| 18 | 
            +
                    @column = @table.model.columns_hash[@label_method.to_s]
         | 
| 22 19 | 
             
                  end
         | 
| 23 20 |  | 
| 24 21 | 
             
                  # Code for rows
         | 
| 25 22 | 
             
                  def datum_code(record = 'record_of_the_death', child = false)
         | 
| 26 | 
            -
                    code =  | 
| 23 | 
            +
                    code = ''
         | 
| 27 24 | 
             
                    if child
         | 
| 28 25 | 
             
                      if @options[:children].is_a?(FalseClass)
         | 
| 29 | 
            -
                        code =  | 
| 26 | 
            +
                        code = 'nil'
         | 
| 30 27 | 
             
                      else
         | 
| 31 28 | 
             
                        code = "#{record}.#{table.options[:children]}.#{@options[:children] || @label_method}"
         | 
| 32 29 | 
             
                      end
         | 
| 33 30 | 
             
                    else
         | 
| 34 31 | 
             
                      code = "#{record}.#{@label_method}"
         | 
| 35 32 | 
             
                    end
         | 
| 36 | 
            -
                     | 
| 33 | 
            +
                    code.c
         | 
| 37 34 | 
             
                  end
         | 
| 38 35 |  | 
| 39 36 | 
             
                  # Returns the class name of the used model
         | 
| 40 37 | 
             
                  def class_name
         | 
| 41 | 
            -
                     | 
| 38 | 
            +
                    table.model.name
         | 
| 42 39 | 
             
                  end
         | 
| 43 40 |  | 
| 44 41 | 
             
                  def enumerize?
         | 
| 45 | 
            -
                     | 
| 42 | 
            +
                    table.model.send(@label_method).send(:values)
         | 
| 46 43 | 
             
                    return true
         | 
| 47 44 | 
             
                  rescue
         | 
| 48 45 | 
             
                    return false
         | 
| @@ -51,8 +48,6 @@ module ActiveList | |
| 51 48 | 
             
                  def sort_expression
         | 
| 52 49 | 
             
                    "#{@table.model.table_name}.#{@sort_column}"
         | 
| 53 50 | 
             
                  end
         | 
| 54 | 
            -
             | 
| 55 51 | 
             
                end
         | 
| 56 | 
            -
             | 
| 57 52 | 
             
              end
         | 
| 58 53 | 
             
            end
         |