cheveret 2.0.0.rc5 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -23,11 +23,10 @@
23
23
 
24
24
  module Cheveret
25
25
  module VERSION
26
- MAJOR = 2
26
+ MAJOR = 3
27
27
  MINOR = 0
28
28
  PATCH = 0
29
- BUILD = 'rc5'
30
29
 
31
- STRING = [ MAJOR, MINOR, PATCH, BUILD ].join('.')
30
+ STRING = [ MAJOR, MINOR, PATCH ].join('.')
32
31
  end
33
32
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cheveret
3
3
  version: !ruby/object:Gem::Version
4
- hash: 977940586
5
- prerelease: true
4
+ hash: 7
5
+ prerelease: false
6
6
  segments:
7
- - 2
7
+ - 3
8
8
  - 0
9
9
  - 0
10
- - rc5
11
- version: 2.0.0.rc5
10
+ version: 3.0.0
12
11
  platform: ruby
13
12
  authors:
14
13
  - Ben Caldwell
@@ -16,7 +15,7 @@ autorequire:
16
15
  bindir: bin
17
16
  cert_chain: []
18
17
 
19
- date: 2010-10-07 00:00:00 +11:00
18
+ date: 2010-12-01 00:00:00 +11:00
20
19
  default_executable:
21
20
  dependencies:
22
21
  - !ruby/object:Gem::Dependency
@@ -56,14 +55,19 @@ files:
56
55
  - cheveret.gemspec
57
56
  - init.rb
58
57
  - lib/cheveret.rb
59
- - lib/cheveret/base.rb
58
+ - lib/cheveret/adapter/active_record.rb
59
+ - lib/cheveret/adapter/sunspot.rb
60
+ - lib/cheveret/builder/divider.rb
60
61
  - lib/cheveret/column.rb
61
- - lib/cheveret/config.rb
62
- - lib/cheveret/dsl.rb
63
- - lib/cheveret/filtering.rb
64
62
  - lib/cheveret/helper.rb
65
- - lib/cheveret/rendering.rb
66
- - lib/cheveret/resizing.rb
63
+ - lib/cheveret/table.rb
64
+ - lib/cheveret/table/columns.rb
65
+ - lib/cheveret/table/data.rb
66
+ - lib/cheveret/table/locale.rb
67
+ - lib/cheveret/table/mapping.rb
68
+ - lib/cheveret/table/rendering.rb
69
+ - lib/cheveret/table/sizing.rb
70
+ - lib/cheveret/table/sorting.rb
67
71
  - lib/cheveret/version.rb
68
72
  - rails/init.rb
69
73
  - spec/cheveret_spec.rb
@@ -90,14 +94,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
90
94
  required_rubygems_version: !ruby/object:Gem::Requirement
91
95
  none: false
92
96
  requirements:
93
- - - ">"
97
+ - - ">="
94
98
  - !ruby/object:Gem::Version
95
- hash: 25
99
+ hash: 3
96
100
  segments:
97
- - 1
98
- - 3
99
- - 1
100
- version: 1.3.1
101
+ - 0
102
+ version: "0"
101
103
  requirements: []
102
104
 
103
105
  rubyforge_project:
@@ -1,124 +0,0 @@
1
- #--
2
- # Copyright (c) 2010 RateCity Pty. Ltd.
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # "Software"), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- module Cheveret
25
- module DSL
26
- def header_default(&block)
27
- raise NotImplementedError
28
- end
29
-
30
- def data_default(&block)
31
- raise NotImplementedError
32
- end
33
-
34
- # registers a new column with the specified options
35
- #
36
- # @example minimum required to define a column
37
- # column :author
38
- #
39
- # @example flexible width, sortable column
40
- # column :description => [ :flexible, :sortable ]
41
- #
42
- # @example fixed with column with no header label
43
- # column :check_box, :label => false, :width => 30
44
- #
45
- # @example sortable column with custom header label
46
- # column :published => [ :sortable ], :label => "Publish Date"
47
- #
48
- # @param [Symbol,Array] name_or_hash
49
- # the name of the column, optionally combined with any flags that should be
50
- # set to +true+
51
- #
52
- # @param [Hash] options a hash of options for the column
53
- #
54
- # @option options [Proc] :data
55
- #
56
- # @option options [Boolean] :flexible (false)
57
- # if +true+ the column will resize automatically depending on the size of the
58
- # table
59
- #
60
- # @option options [Proc] :header
61
- #
62
- # @option options [String,Boolean] :label
63
- # used to determine what gets used as a label in the column header. if set to
64
- # +false+ no lable will be rendered
65
- #
66
- # @option options [Boolean] :sortable (false)
67
- #
68
- # @option options [Integer] :width
69
- def column(name_or_hash, options={})
70
- if name_or_hash.is_a?(Hash)
71
- name = name_or_hash.except(:label, :hint, :width).keys.first
72
- name_or_hash.delete(name).each { |k| options[k] = true }
73
- options.merge!(name_or_hash)
74
- else
75
- name = name_or_hash
76
- end
77
-
78
- if @columns[name].present?
79
- options.each { |k, v| @columns[name].send(:"#{k}=", v) }
80
- else
81
- @columns[name] = Column.new(name, options)
82
- end
83
- end
84
-
85
- # define how to extract and render data value for a particular column
86
- #
87
- # chevert will call the block you define here to render the inner part of the
88
- # table data cell for each object in the collection
89
- #
90
- # if you don't specify one or more column names when calling this method,
91
- # cheveret will assume that you're defining the data block for the last column
92
- # you registered
93
- #
94
- # @example format money values in the view
95
- # - column :price
96
- # - data do |book|
97
- # %span= number_to_currency book.price
98
- #
99
- # @example define data block for multiple columns
100
- # - column :title
101
- # - column :author
102
- # - data [ :title, :author ] do |column, object|
103
- # %p{ :class => column.name }= object.send(column.name)
104
- def data(*args, &block)
105
- options = args.extract_options!
106
-
107
- [ *args.first || @columns.keys.last ].each do |column_name|
108
- column = @columns[column_name ]
109
- column.data = block
110
-
111
- instance_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
112
- def data_for_#{column.name}(object)
113
- capture(object, &@columns[:#{column.name}].data)
114
- end
115
- RUBY_EVAL
116
- end
117
- end
118
-
119
- def header(*args, &block)
120
- raise NotImplementedError
121
- end
122
-
123
- end
124
- end
@@ -1,85 +0,0 @@
1
- #--
2
- # Copyright (c) 2010 RateCity Pty. Ltd.
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # "Software"), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- module Cheveret
25
- module Rendering
26
- def render(collection, options={})
27
- options[:class] = [ 'table', options[:class] ].flatten.join(' ').strip
28
-
29
- content_tag(:div, options) do
30
- header + body(collection)
31
- end
32
- end
33
-
34
- def header(options={})
35
- row = @columns.values.map do |column|
36
- cell(:th, column) do
37
- type = column.sortable? ? :a : :span
38
- content_tag(type, column.label, {
39
- :title => column.hint,
40
- })
41
- end
42
- end
43
-
44
- content_tag(:div, :class => 'thead') do
45
- content_tag(:div, row, :class => 'tr')
46
- end
47
- end
48
-
49
- def body(collection, options={})
50
- content_tag(:div, rows(collection), {
51
- :class => 'tbody'
52
- })
53
- end
54
-
55
- def rows(collection, options={})
56
- collection.map { |object| row(object) }.join
57
- end
58
-
59
- # render a single table row for the specified data object
60
- #
61
- # @param [Object] object
62
- # @param [Hash] options
63
- #
64
- # @option options [Array] :only
65
- # @option options [Array] :except
66
- # @option options [Array,String] :class
67
- # @option options [Integer] :width
68
- def row(object, options={})
69
- alt = cycle('', 'alt', :name => 'cheveret')
70
- options[:class] = [ 'tr', alt, options[:class]].flatten.join(' ').strip
71
-
72
- content_tag(:div, options) do
73
- @columns.values.map do |column|
74
- cell(:td, column) { send(:"data_for_#{column.name}", object) rescue nil }
75
- end
76
- end
77
- end
78
-
79
- def cell(type, column, options={}, &block)
80
- options[:class] = [ type, column.name, options[:class] ].flatten.join(' ').strip
81
- content_tag(:div, yield, options)
82
- end
83
-
84
- end
85
- end
@@ -1,97 +0,0 @@
1
- #--
2
- # Copyright (c) 2010 RateCity Pty. Ltd.
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # "Software"), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- module Cheveret
25
- module Resizing
26
- def width
27
- @width || 0
28
- end
29
-
30
- # set width constraint for the table.
31
- #
32
- # if the width value is different to that previously set, cheveret will call the
33
- # #resize! method to adjust the widths of flexible columns to fit
34
- #
35
- # @param [Integer] new_width the maximum width of the table in pixels
36
- def width=(new_width)
37
- return @width if new_width == @width
38
-
39
- @width = new_width
40
- resize!
41
- end
42
-
43
- def config(new_config=nil)
44
- return super if new_config.nil?
45
-
46
- self.width = new_config.delete(:width) || self.width
47
- super
48
- end
49
-
50
- # some meta magic - make sure that the table is resized correctly before any of
51
- # the render methods start generating output
52
- [ :render, :header, :body, :rows ].each do |renderer|
53
- class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
54
- def #{renderer}(*args)
55
- config = args.extract_options!
56
-
57
- width = config.delete(:width)
58
- super(*args << config)
59
- end
60
- RUBY_EVAL
61
- end
62
-
63
- def cell(type, column, options={}, &block)
64
- options[:style] = "width: #{@widths[column.name] || column.width}px"
65
- super
66
- end
67
-
68
- # resize flexible columns in attempt to reduce the total width, making sure it
69
- # fits within the constraints of the table
70
- def resize!
71
- @widths = {}
72
-
73
- columns_width = 0
74
- flexibles = []
75
-
76
- @columns.values.each do |column|
77
- columns_width += column.width
78
- flexibles << column if column.flexible?
79
- end
80
-
81
- # todo: handle too-many/too-wide columns
82
- raise "uh-oh spaghettio-s" if columns_width > @width
83
-
84
- # todo: fix rounding in with calculation
85
- # todo: trim last column that fits into table width if necessary
86
- if columns_width < @width && !flexibles.empty?
87
- padding = (@width - columns_width) / flexibles.length
88
- flexibles.each { |column| @widths[column.name] = column.width + padding }
89
- end
90
- end
91
-
92
- def weigh!
93
- raise NotImplementedError
94
- end
95
-
96
- end
97
- end