tabula_rasa 0.0.2 → 0.0.3
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/tabula_rasa/base.rb +24 -3
- data/lib/tabula_rasa/column.rb +4 -4
- data/lib/tabula_rasa/row.rb +78 -0
- data/lib/tabula_rasa/version.rb +1 -1
- data/spec/config/spec.rb +1 -0
- data/spec/tabula_rasa/helper_body_spec.rb +172 -6
- data/spec/tabula_rasa/helper_head_spec.rb +3 -2
- data/spec/tabula_rasa/helper_integrated_spec.rb +2 -2
- metadata +3 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 85b6138d31f80d0ef643af81a02b77bcea0fc4b2
         | 
| 4 | 
            +
              data.tar.gz: 787437faf4bd0631fd23cc2ec3e64e8e48c2079a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 0647a914557c4b474c43013f1693e3454826feed995410445d39165f3dc270f07aba2805b9addf321aacfe634f57bc4a81dce0ac421d38348b6352ed12940c20
         | 
| 7 | 
            +
              data.tar.gz: 86b608afad417372b5eb3610823e6625e7cc8c6c42ae2a087e02ce6caa1ac72df3c4bd88397f4baf3b56c7130cc2251390337bf26f0461e2b8815aac9bc84bc3
         | 
    
        data/lib/tabula_rasa/base.rb
    CHANGED
    
    | @@ -1,10 +1,11 @@ | |
| 1 | 
            +
            require 'tabula_rasa/row'
         | 
| 1 2 | 
             
            require 'tabula_rasa/column'
         | 
| 2 3 |  | 
| 3 4 | 
             
            module TabulaRasa
         | 
| 4 5 | 
             
              class Base
         | 
| 5 | 
            -
                attr_reader :collection, : | 
| 6 | 
            +
                attr_reader :collection, :options
         | 
| 6 7 |  | 
| 7 | 
            -
                delegate : | 
| 8 | 
            +
                delegate :content_tag, :cycle, :dom_id, :dom_class, :safe_join, to: :view
         | 
| 8 9 |  | 
| 9 10 | 
             
                def initialize(collection, view, options = {}, &block)
         | 
| 10 11 | 
             
                  raise ArgumentError, 'TabulaRasa only works on ActiveRecord Relation instances' unless collection.is_a?(ActiveRecord::Relation)
         | 
| @@ -14,6 +15,7 @@ module TabulaRasa | |
| 14 15 | 
             
                  @klass = collection.klass
         | 
| 15 16 | 
             
                  @columns = []
         | 
| 16 17 | 
             
                  yield self if block_given?
         | 
| 18 | 
            +
                  ensure_row
         | 
| 17 19 | 
             
                end
         | 
| 18 20 |  | 
| 19 21 | 
             
                def render
         | 
| @@ -25,8 +27,15 @@ module TabulaRasa | |
| 25 27 | 
             
                  @columns << Column.new(self, *args, &block)
         | 
| 26 28 | 
             
                end
         | 
| 27 29 |  | 
| 30 | 
            +
                def row(options = {}, &block)
         | 
| 31 | 
            +
                  raise ArgumentError, 'Row definition cannot be called more than once' if @row.present?
         | 
| 32 | 
            +
                  @row = Row.new(self, options, &block)
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 28 35 | 
             
              private
         | 
| 29 36 |  | 
| 37 | 
            +
                attr_reader :view, :klass, :columns
         | 
| 38 | 
            +
             | 
| 30 39 | 
             
                def content
         | 
| 31 40 | 
             
                  safe_join [thead, tbody]
         | 
| 32 41 | 
             
                end
         | 
| @@ -47,7 +56,7 @@ module TabulaRasa | |
| 47 56 |  | 
| 48 57 | 
             
                def collection_body
         | 
| 49 58 | 
             
                  rows = collection.map do |member|
         | 
| 50 | 
            -
                    content_tag :tr do
         | 
| 59 | 
            +
                    content_tag :tr, @row.options_for(member) do
         | 
| 51 60 | 
             
                      cells = columns.map do |column|
         | 
| 52 61 | 
             
                        column.body_content_for member
         | 
| 53 62 | 
             
                      end
         | 
| @@ -57,8 +66,20 @@ module TabulaRasa | |
| 57 66 | 
             
                  safe_join rows
         | 
| 58 67 | 
             
                end
         | 
| 59 68 |  | 
| 69 | 
            +
                def empty_body
         | 
| 70 | 
            +
                  content_tag :tr, class: 'empty' do
         | 
| 71 | 
            +
                    content_tag :td, colspan: columns.size do
         | 
| 72 | 
            +
                      "No #{klass.table_name.downcase} present"
         | 
| 73 | 
            +
                    end
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
             | 
| 60 77 | 
             
                def table_options
         | 
| 61 78 | 
             
                  options.except :head, :body
         | 
| 62 79 | 
             
                end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                def ensure_row
         | 
| 82 | 
            +
                  @row ||= Row.new(self)
         | 
| 83 | 
            +
                end
         | 
| 63 84 | 
             
              end
         | 
| 64 85 | 
             
            end
         | 
    
        data/lib/tabula_rasa/column.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            module TabulaRasa
         | 
| 2 2 | 
             
              class Column
         | 
| 3 | 
            -
                delegate : | 
| 3 | 
            +
                delegate :content_tag, to: :base
         | 
| 4 4 |  | 
| 5 5 | 
             
                def initialize(base, *args, &block)
         | 
| 6 6 | 
             
                  @base = base
         | 
| @@ -23,7 +23,7 @@ module TabulaRasa | |
| 23 23 | 
             
                  content_tag :td, body_value_for(instance), options[:body]
         | 
| 24 24 | 
             
                end
         | 
| 25 25 |  | 
| 26 | 
            -
                def  | 
| 26 | 
            +
                def value(&block)
         | 
| 27 27 | 
             
                  @body_value_option = block if block_given?
         | 
| 28 28 | 
             
                end
         | 
| 29 29 |  | 
| @@ -61,9 +61,9 @@ module TabulaRasa | |
| 61 61 | 
             
                def body_value_for(instance)
         | 
| 62 62 | 
             
                  value = body_value_option || instance.send(attribute)
         | 
| 63 63 | 
             
                  if value.respond_to?(:call)
         | 
| 64 | 
            -
                    value.call | 
| 64 | 
            +
                    value.call instance
         | 
| 65 65 | 
             
                  else
         | 
| 66 | 
            -
                     | 
| 66 | 
            +
                    value.to_s
         | 
| 67 67 | 
             
                  end
         | 
| 68 68 | 
             
                end
         | 
| 69 69 | 
             
              end
         | 
| @@ -0,0 +1,78 @@ | |
| 1 | 
            +
            module TabulaRasa
         | 
| 2 | 
            +
              class Row
         | 
| 3 | 
            +
                # NOTE: Need to handle ALL valid HTML5 attributes
         | 
| 4 | 
            +
                ATTRIBUTES = [:id, :class]
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                delegate :cycle, :dom_id, :dom_class, to: :base
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                def initialize(base, options = {}, &block)
         | 
| 9 | 
            +
                  @base = base
         | 
| 10 | 
            +
                  @options = options
         | 
| 11 | 
            +
                  yield self if block_given?
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                def options_for(instance)
         | 
| 15 | 
            +
                  {
         | 
| 16 | 
            +
                    id: [id_value_for(instance), dom_id_for(instance)].compact.join(' ').squish,
         | 
| 17 | 
            +
                    class: [class_value_for(instance), zebrastripe, dom_class_for(instance)].compact.join(' ').squish
         | 
| 18 | 
            +
                  }.merge data_values_for(instance)
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                def data(key, &block)
         | 
| 22 | 
            +
                  options[:data] ||= {}
         | 
| 23 | 
            +
                  options[:data][key] = block
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                ATTRIBUTES.each do |attribute|
         | 
| 27 | 
            +
                  define_method attribute do |&block|
         | 
| 28 | 
            +
                    options[attribute] = block
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              private
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                attr_reader :base, :options
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                def zebrastripe
         | 
| 37 | 
            +
                  case base.options[:zebra]
         | 
| 38 | 
            +
                  when false
         | 
| 39 | 
            +
                    # Nothing
         | 
| 40 | 
            +
                  when nil
         | 
| 41 | 
            +
                    cycle *%w{even odd}
         | 
| 42 | 
            +
                  when Array
         | 
| 43 | 
            +
                    cycle *base.options[:zebra]
         | 
| 44 | 
            +
                  else
         | 
| 45 | 
            +
                    raise ArgumentError, "Invalid value for options[:zebra]: #{base.options[:zebra]}. Should be array."
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                def dom_id_for(instance)
         | 
| 50 | 
            +
                  return unless base.options[:dom_id] == true
         | 
| 51 | 
            +
                  dom_id(instance) unless id_value_for(instance).present?
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def dom_class_for(instance)
         | 
| 55 | 
            +
                  dom_class(instance) if base.options[:dom_class] == true
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                def data_values_for(instance)
         | 
| 59 | 
            +
                  return {} if options[:data].blank?
         | 
| 60 | 
            +
                  options[:data].inject({}) do |m, x|
         | 
| 61 | 
            +
                    key, value = x
         | 
| 62 | 
            +
                    m["data-#{key}"] = value.call(instance)
         | 
| 63 | 
            +
                    m
         | 
| 64 | 
            +
                  end
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                ATTRIBUTES.each do |attribute|
         | 
| 68 | 
            +
                  define_method "#{attribute}_value_for" do |instance|
         | 
| 69 | 
            +
                    value = options[attribute]
         | 
| 70 | 
            +
                    if value.respond_to?(:call)
         | 
| 71 | 
            +
                      value.call instance
         | 
| 72 | 
            +
                    else
         | 
| 73 | 
            +
                      value.to_s
         | 
| 74 | 
            +
                    end
         | 
| 75 | 
            +
                  end
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
            end
         | 
    
        data/lib/tabula_rasa/version.rb
    CHANGED
    
    
    
        data/spec/config/spec.rb
    CHANGED
    
    | @@ -3,6 +3,7 @@ class TabulaRasa::Spec < MiniTest::Spec | |
| 3 3 | 
             
              include ActionView::Helpers::TagHelper
         | 
| 4 4 | 
             
              include ActionView::Helpers::TextHelper
         | 
| 5 5 | 
             
              include ActionView::Helpers::OutputSafetyHelper
         | 
| 6 | 
            +
              include ActionView::RecordIdentifier
         | 
| 6 7 | 
             
              include TabulaRasa::Helpers
         | 
| 7 8 |  | 
| 8 9 | 
             
              attr_accessor :output_buffer
         | 
| @@ -35,8 +35,156 @@ describe TabulaRasa::Helpers, 'Head Specs' do | |
| 35 35 | 
             
                end
         | 
| 36 36 | 
             
              end
         | 
| 37 37 |  | 
| 38 | 
            -
               | 
| 39 | 
            -
             | 
| 38 | 
            +
              describe 'TR attributes' do
         | 
| 39 | 
            +
                it 'zebrastripes by default' do
         | 
| 40 | 
            +
                  captured = capture do
         | 
| 41 | 
            +
                    tabula_rasa @survivors do |t|
         | 
| 42 | 
            +
                      t.column :first_name
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                  rows = extract_all('table tbody tr', captured)
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  rows[0].attribute('class').value.must_equal 'even'
         | 
| 48 | 
            +
                  rows[1].attribute('class').value.must_equal 'odd'
         | 
| 49 | 
            +
                  rows[2].attribute('class').value.must_equal 'even'
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                it 'can disable zebrastripes' do
         | 
| 53 | 
            +
                  captured = capture do
         | 
| 54 | 
            +
                    tabula_rasa @survivors, zebra: false do |t|
         | 
| 55 | 
            +
                      t.column :first_name
         | 
| 56 | 
            +
                    end
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
                  rows = extract_all('table tbody tr', captured)
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                  rows.each do |row|
         | 
| 61 | 
            +
                    row.attribute('class').value.must_be_empty
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                it 'can customize zebrastripes' do
         | 
| 66 | 
            +
                  captured = capture do
         | 
| 67 | 
            +
                    tabula_rasa @survivors, zebra: %w{foo bar} do |t|
         | 
| 68 | 
            +
                      t.column :first_name
         | 
| 69 | 
            +
                    end
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
                  rows = extract_all('table tbody tr', captured)
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  rows[0].attribute('class').value.must_match /foo/
         | 
| 74 | 
            +
                  rows[1].attribute('class').value.must_match /bar/
         | 
| 75 | 
            +
                  rows[2].attribute('class').value.must_match /foo/
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                it 'raises ArgumentError when invalid zebra option given' do
         | 
| 79 | 
            +
                  proc {
         | 
| 80 | 
            +
                    tabula_rasa @survivors, zebra: 'string' do |t|
         | 
| 81 | 
            +
                      t.column :first_name
         | 
| 82 | 
            +
                    end
         | 
| 83 | 
            +
                  }.must_raise ArgumentError
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                it 'can set dom_id via option on the main method' do
         | 
| 87 | 
            +
                  captured = capture do
         | 
| 88 | 
            +
                    tabula_rasa @survivors, dom_id: true do |t|
         | 
| 89 | 
            +
                      t.column :first_name
         | 
| 90 | 
            +
                    end
         | 
| 91 | 
            +
                  end
         | 
| 92 | 
            +
                  rows = extract_all('table tbody tr', captured)
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                  rows.each_with_index do |row, n|
         | 
| 95 | 
            +
                    row.attribute('id').value.must_equal "survivor_#{@survivors[n].id}"
         | 
| 96 | 
            +
                  end
         | 
| 97 | 
            +
                end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                it 'overrides dom_id option when id is explicitly set on row' do
         | 
| 100 | 
            +
                  captured = capture do
         | 
| 101 | 
            +
                    tabula_rasa @survivors, dom_id: true do |t|
         | 
| 102 | 
            +
                      t.column :first_name
         | 
| 103 | 
            +
                      t.row do |r|
         | 
| 104 | 
            +
                        r.id do |instance|
         | 
| 105 | 
            +
                          "manual_#{instance.id}"
         | 
| 106 | 
            +
                        end
         | 
| 107 | 
            +
                      end
         | 
| 108 | 
            +
                    end
         | 
| 109 | 
            +
                  end
         | 
| 110 | 
            +
                  rows = extract_all('table tbody tr', captured)
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                  rows.each_with_index do |row, n|
         | 
| 113 | 
            +
                    row.attribute('id').value.must_equal "manual_#{@survivors[n].id}"
         | 
| 114 | 
            +
                  end
         | 
| 115 | 
            +
                end
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                it 'can set dom_class via option on the main method' do
         | 
| 118 | 
            +
                  captured = capture do
         | 
| 119 | 
            +
                    tabula_rasa @survivors, dom_class: true do |t|
         | 
| 120 | 
            +
                      t.column :first_name
         | 
| 121 | 
            +
                    end
         | 
| 122 | 
            +
                  end
         | 
| 123 | 
            +
                  rows = extract_all('table tbody tr', captured)
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                  rows.each_with_index do |row, n|
         | 
| 126 | 
            +
                    row.attribute('class').value.must_match dom_class(@survivors[n])
         | 
| 127 | 
            +
                  end
         | 
| 128 | 
            +
                end
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                it 'can set attributes via options on internal row method' do
         | 
| 131 | 
            +
                  captured = capture do
         | 
| 132 | 
            +
                    tabula_rasa @survivors do |t|
         | 
| 133 | 
            +
                      t.column :first_name
         | 
| 134 | 
            +
                      t.row class: 'useless_row_class_for_testing'
         | 
| 135 | 
            +
                    end
         | 
| 136 | 
            +
                  end
         | 
| 137 | 
            +
                  rows = extract_all('table tbody tr', captured)
         | 
| 138 | 
            +
                  rows.each do |row|
         | 
| 139 | 
            +
                    row.attribute('class').value.must_match /useless_row_class_for_testing/
         | 
| 140 | 
            +
                  end
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                  # Zebrastripes should still work as well
         | 
| 143 | 
            +
                  rows[0].attribute('class').value.must_match /even/
         | 
| 144 | 
            +
                  rows[1].attribute('class').value.must_match /odd/
         | 
| 145 | 
            +
                  rows[2].attribute('class').value.must_match /even/
         | 
| 146 | 
            +
                end
         | 
| 147 | 
            +
             | 
| 148 | 
            +
                it 'can set attributes via block on internal row method' do
         | 
| 149 | 
            +
                  captured = capture do
         | 
| 150 | 
            +
                    tabula_rasa @survivors do |t|
         | 
| 151 | 
            +
                      t.column :first_name
         | 
| 152 | 
            +
                      t.row do |r|
         | 
| 153 | 
            +
                        r.id do |instance|
         | 
| 154 | 
            +
                          "survivor_id_#{instance.id}"
         | 
| 155 | 
            +
                        end
         | 
| 156 | 
            +
                        r.class do |instance|
         | 
| 157 | 
            +
                          "survivor_class_#{instance.id}"
         | 
| 158 | 
            +
                        end
         | 
| 159 | 
            +
                        r.data :foo do |instance|
         | 
| 160 | 
            +
                          "foo_#{instance.id}"
         | 
| 161 | 
            +
                        end
         | 
| 162 | 
            +
                      end
         | 
| 163 | 
            +
                    end
         | 
| 164 | 
            +
                  end
         | 
| 165 | 
            +
                  rows = extract_all('table tbody tr', captured)
         | 
| 166 | 
            +
             | 
| 167 | 
            +
                  rows.each_with_index do |row, n|
         | 
| 168 | 
            +
                    row.attribute('id').value.must_match "survivor_id_#{@survivors[n].id}"
         | 
| 169 | 
            +
                    row.attribute('class').value.must_match "survivor_class_#{@survivors[n].id}"
         | 
| 170 | 
            +
                    row.attribute('data-foo').value.must_match "foo_#{@survivors[n].id}"
         | 
| 171 | 
            +
                  end
         | 
| 172 | 
            +
             | 
| 173 | 
            +
                  # Zebrastripes should still work as well
         | 
| 174 | 
            +
                  rows[0].attribute('class').value.must_match /even/
         | 
| 175 | 
            +
                  rows[1].attribute('class').value.must_match /odd/
         | 
| 176 | 
            +
                  rows[2].attribute('class').value.must_match /even/
         | 
| 177 | 
            +
                end
         | 
| 178 | 
            +
             | 
| 179 | 
            +
                it 'raises ArgumentError if row is defined more than once' do
         | 
| 180 | 
            +
                  proc {
         | 
| 181 | 
            +
                    tabula_rasa @survivors do |t|
         | 
| 182 | 
            +
                      t.row class: 'foo'
         | 
| 183 | 
            +
                      t.row class: 'bar'
         | 
| 184 | 
            +
                    end
         | 
| 185 | 
            +
                  }.must_raise(ArgumentError)
         | 
| 186 | 
            +
                end
         | 
| 187 | 
            +
              end
         | 
| 40 188 |  | 
| 41 189 | 
             
              describe 'TD attributes' do
         | 
| 42 190 | 
             
                it 'sets no attributes by default' do
         | 
| @@ -124,11 +272,11 @@ describe TabulaRasa::Helpers, 'Head Specs' do | |
| 124 272 | 
             
                  body.attributes.must_be_empty
         | 
| 125 273 | 
             
                end
         | 
| 126 274 |  | 
| 127 | 
            -
                it 'can override first argument via a  | 
| 275 | 
            +
                it 'can override first argument via a block for internal column method' do
         | 
| 128 276 | 
             
                  captured = capture do
         | 
| 129 277 | 
             
                    tabula_rasa @survivors do |t|
         | 
| 130 278 | 
             
                      t.column :whole_name do |c|
         | 
| 131 | 
            -
                        c. | 
| 279 | 
            +
                        c.value do |instance|
         | 
| 132 280 | 
             
                          "#{instance.first_name} #{instance.last_name}"
         | 
| 133 281 | 
             
                        end
         | 
| 134 282 | 
             
                      end
         | 
| @@ -142,11 +290,11 @@ describe TabulaRasa::Helpers, 'Head Specs' do | |
| 142 290 | 
             
                  end
         | 
| 143 291 | 
             
                end
         | 
| 144 292 |  | 
| 145 | 
            -
                it 'can override first argument via a  | 
| 293 | 
            +
                it 'can override first argument via a block for internal column method while setting attributes via options[:body]' do
         | 
| 146 294 | 
             
                  captured = capture do
         | 
| 147 295 | 
             
                    tabula_rasa @survivors do |t|
         | 
| 148 296 | 
             
                      t.column :whole_name, body: {id: 'id_value', class: 'class_value', arbitrary: 'arbitrary_value', value: 'Overridden Value'} do |c|
         | 
| 149 | 
            -
                        c. | 
| 297 | 
            +
                        c.value do |instance|
         | 
| 150 298 | 
             
                          "#{instance.first_name} #{instance.last_name}"
         | 
| 151 299 | 
             
                        end
         | 
| 152 300 | 
             
                      end
         | 
| @@ -169,5 +317,23 @@ describe TabulaRasa::Helpers, 'Head Specs' do | |
| 169 317 | 
             
                  table.attributes.must_be_empty
         | 
| 170 318 | 
             
                  body.attributes.must_be_empty
         | 
| 171 319 | 
             
                end
         | 
| 320 | 
            +
             | 
| 321 | 
            +
                it 'indicates the table is empty when collection is empty' do
         | 
| 322 | 
            +
                  @survivors = Survivor.none
         | 
| 323 | 
            +
                  captured = capture do
         | 
| 324 | 
            +
                    tabula_rasa @survivors do |t|
         | 
| 325 | 
            +
                      t.column :first_name
         | 
| 326 | 
            +
                    end
         | 
| 327 | 
            +
                  end
         | 
| 328 | 
            +
                  table = extract_first('table', captured)
         | 
| 329 | 
            +
                  body = extract_first('table tbody', captured)
         | 
| 330 | 
            +
                  cells = extract_all('table tbody td', captured)
         | 
| 331 | 
            +
             | 
| 332 | 
            +
                  cells.size.must_equal 1
         | 
| 333 | 
            +
                  cell = cells.first
         | 
| 334 | 
            +
                  cell.children.size.must_equal 1
         | 
| 335 | 
            +
                  cell.children.first.must_be :text?
         | 
| 336 | 
            +
                  cell.text.must_equal 'No survivors present'
         | 
| 337 | 
            +
                end
         | 
| 172 338 | 
             
              end
         | 
| 173 339 | 
             
            end
         | 
| @@ -35,8 +35,9 @@ describe TabulaRasa::Helpers, 'Head Specs' do | |
| 35 35 | 
             
                end
         | 
| 36 36 | 
             
              end
         | 
| 37 37 |  | 
| 38 | 
            -
              # NOTE: For now, I don't see the point of adding attributes on TR element.
         | 
| 38 | 
            +
              # NOTE: For now, I don't see the point of adding attributes on TR element on THEAD.
         | 
| 39 39 | 
             
              # I've had varying success styling on that and tend to style on the TH elements instead.
         | 
| 40 | 
            +
              # Also, unlike TBODY, there's only one row so... it's THEAD TR. Done!
         | 
| 40 41 |  | 
| 41 42 | 
             
              describe 'TH attributes' do
         | 
| 42 43 | 
             
                it 'sets no attributes by default' do
         | 
| @@ -115,7 +116,7 @@ describe TabulaRasa::Helpers, 'Head Specs' do | |
| 115 116 | 
             
                  head.attributes.must_be_empty
         | 
| 116 117 | 
             
                end
         | 
| 117 118 |  | 
| 118 | 
            -
                it 'raises ArgumentError if attempting to override content via a  | 
| 119 | 
            +
                it 'raises ArgumentError if attempting to override content via a block [as body can]' do
         | 
| 119 120 | 
             
                  proc {
         | 
| 120 121 | 
             
                    tabula_rasa @survivors do |t|
         | 
| 121 122 | 
             
                      t.column :first_name do |c|
         | 
| @@ -26,11 +26,11 @@ describe TabulaRasa::Helpers, 'Integrated [Head and Body] Specs' do | |
| 26 26 | 
             
                end
         | 
| 27 27 | 
             
              end
         | 
| 28 28 |  | 
| 29 | 
            -
              it 'can override body values via  | 
| 29 | 
            +
              it 'can override body values via a block while using attribute argument for head value' do
         | 
| 30 30 | 
             
                captured = capture do
         | 
| 31 31 | 
             
                  tabula_rasa @survivors do |t|
         | 
| 32 32 | 
             
                    t.column :whole_name do |c|
         | 
| 33 | 
            -
                      c. | 
| 33 | 
            +
                      c.value do |instance|
         | 
| 34 34 | 
             
                        "#{instance.first_name} #{instance.last_name}"
         | 
| 35 35 | 
             
                      end
         | 
| 36 36 | 
             
                    end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: tabula_rasa
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - RSL
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2013- | 
| 11 | 
            +
            date: 2013-11-01 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -125,6 +125,7 @@ files: | |
| 125 125 | 
             
            - lib/tabula_rasa/base.rb
         | 
| 126 126 | 
             
            - lib/tabula_rasa/column.rb
         | 
| 127 127 | 
             
            - lib/tabula_rasa/helpers.rb
         | 
| 128 | 
            +
            - lib/tabula_rasa/row.rb
         | 
| 128 129 | 
             
            - lib/tabula_rasa/version.rb
         | 
| 129 130 | 
             
            - spec/config/active_record.rb
         | 
| 130 131 | 
             
            - spec/config/spec.rb
         |