active-list 4.2.4 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/VERSION +1 -1
  3. data/{lib → app}/assets/images/active-list.png +0 -0
  4. data/app/assets/images/active-list.svg +415 -0
  5. data/{lib/assets/javascripts/active-list.jquery.js → app/assets/javascripts/active_list.jquery.js} +2 -2
  6. data/app/assets/stylesheets/active_list.css.scss +7 -0
  7. data/{lib/active-list/compass/stylesheets/active-list/_background.scss → app/assets/stylesheets/active_list/background.scss} +10 -8
  8. data/{lib/active-list/compass/stylesheets/active-list/_minimal.scss → app/assets/stylesheets/active_list/minimal.scss} +16 -16
  9. data/{lib/active-list/compass/stylesheets/active-list/_theme.scss → app/assets/stylesheets/active_list/theme.scss} +37 -37
  10. data/lib/active-list.rb +1 -37
  11. data/lib/active_list.rb +43 -0
  12. data/lib/active_list/action_pack.rb +46 -0
  13. data/lib/active_list/definition.rb +17 -0
  14. data/lib/active_list/definition/abstract_column.rb +54 -0
  15. data/lib/active_list/definition/action_column.rb +76 -0
  16. data/lib/active_list/definition/association_column.rb +80 -0
  17. data/lib/active_list/definition/attribute_column.rb +58 -0
  18. data/lib/active_list/definition/check_box_column.rb +17 -0
  19. data/lib/active_list/definition/data_column.rb +88 -0
  20. data/lib/active_list/definition/empty_column.rb +10 -0
  21. data/lib/active_list/definition/field_column.rb +20 -0
  22. data/lib/active_list/definition/status_column.rb +10 -0
  23. data/lib/active_list/definition/table.rb +159 -0
  24. data/lib/active_list/definition/text_field_column.rb +10 -0
  25. data/lib/active_list/exporters.rb +28 -0
  26. data/lib/active_list/exporters/abstract_exporter.rb +55 -0
  27. data/lib/active_list/exporters/csv_exporter.rb +32 -0
  28. data/lib/active_list/exporters/excel_csv_exporter.rb +38 -0
  29. data/lib/active_list/exporters/open_document_spreadsheet_exporter.rb +82 -0
  30. data/lib/active_list/generator.rb +122 -0
  31. data/lib/active_list/generator/finder.rb +150 -0
  32. data/lib/active_list/helpers.rb +33 -0
  33. data/lib/{active-list → active_list}/rails/engine.rb +3 -2
  34. data/lib/active_list/renderers.rb +25 -0
  35. data/lib/active_list/renderers/abstract_renderer.rb +29 -0
  36. data/lib/active_list/renderers/simple_renderer.rb +356 -0
  37. metadata +74 -55
  38. data/lib/active-list/action_pack.rb +0 -48
  39. data/lib/active-list/columns/action_column.rb +0 -83
  40. data/lib/active-list/columns/data_column.rb +0 -151
  41. data/lib/active-list/columns/field_column.rb +0 -29
  42. data/lib/active-list/compass/stylesheets/_active-list.scss +0 -7
  43. data/lib/active-list/definition.rb +0 -103
  44. data/lib/active-list/exporters.rb +0 -71
  45. data/lib/active-list/exporters/csv_exporter.rb +0 -30
  46. data/lib/active-list/exporters/excel_csv_exporter.rb +0 -36
  47. data/lib/active-list/exporters/open_document_spreadsheet_exporter.rb +0 -81
  48. data/lib/active-list/finder.rb +0 -134
  49. data/lib/active-list/generator.rb +0 -88
  50. data/lib/active-list/renderers.rb +0 -28
  51. data/lib/active-list/renderers/simple_renderer.rb +0 -335
  52. data/lib/assets/stylesheets/active-list.css.scss +0 -7
metadata CHANGED
@@ -1,95 +1,103 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active-list
3
3
  version: !ruby/object:Gem::Version
4
- version: !binary |-
5
- NC4yLjQ=
6
- prerelease:
4
+ version: 5.0.0
7
5
  platform: ruby
8
6
  authors:
9
7
  - Brice Texier
10
8
  autorequire:
11
9
  bindir: bin
12
10
  cert_chain: []
13
- date: 2013-03-15 00:00:00.000000000 Z
11
+ date: 2014-03-25 00:00:00.000000000 Z
14
12
  dependencies:
15
13
  - !ruby/object:Gem::Dependency
16
14
  name: rails
17
15
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
16
  requirements:
20
- - - ! '>='
17
+ - - '>='
21
18
  - !ruby/object:Gem::Version
22
- version: '3.1'
19
+ version: '3.2'
20
+ - - <
21
+ - !ruby/object:Gem::Version
22
+ version: '4.1'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
26
  requirements:
28
- - - ! '>='
27
+ - - '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '3.2'
30
+ - - <
29
31
  - !ruby/object:Gem::Version
30
- version: '3.1'
32
+ version: '4.1'
31
33
  - !ruby/object:Gem::Dependency
32
34
  name: compass-rails
33
35
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
36
  requirements:
36
- - - ! '>='
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ version: 1.1.7
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 1.1.7
47
+ - !ruby/object:Gem::Dependency
48
+ name: rubyzip
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - '>='
37
52
  - !ruby/object:Gem::Version
38
- version: '1'
53
+ version: '1.0'
39
54
  type: :runtime
40
55
  prerelease: false
41
56
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
57
  requirements:
44
- - - ! '>='
58
+ - - '>='
45
59
  - !ruby/object:Gem::Version
46
- version: '1'
60
+ version: '1.0'
47
61
  - !ruby/object:Gem::Dependency
48
62
  name: fastercsv
49
63
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
64
  requirements:
52
- - - ! '>='
65
+ - - '>='
53
66
  - !ruby/object:Gem::Version
54
67
  version: '1.5'
55
68
  type: :runtime
56
69
  prerelease: false
57
70
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
71
  requirements:
60
- - - ! '>='
72
+ - - '>='
61
73
  - !ruby/object:Gem::Version
62
74
  version: '1.5'
63
75
  - !ruby/object:Gem::Dependency
64
76
  name: i18n-complements
65
77
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
78
  requirements:
68
- - - ! '>='
79
+ - - '>='
69
80
  - !ruby/object:Gem::Version
70
81
  version: '0'
71
82
  type: :runtime
72
83
  prerelease: false
73
84
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
85
  requirements:
76
- - - ! '>='
86
+ - - '>='
77
87
  - !ruby/object:Gem::Version
78
88
  version: '0'
79
89
  - !ruby/object:Gem::Dependency
80
90
  name: sqlite3
81
91
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
92
  requirements:
84
- - - ! '>='
93
+ - - '>='
85
94
  - !ruby/object:Gem::Version
86
95
  version: '0'
87
96
  type: :development
88
97
  prerelease: false
89
98
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
99
  requirements:
92
- - - ! '>='
100
+ - - '>='
93
101
  - !ruby/object:Gem::Version
94
102
  version: '0'
95
103
  description: Generates action methods to provide clean tables.
@@ -103,51 +111,62 @@ files:
103
111
  - LICENSE
104
112
  - README.rdoc
105
113
  - VERSION
114
+ - app/assets/images/active-list.png
115
+ - app/assets/images/active-list.svg
116
+ - app/assets/javascripts/active_list.jquery.js
117
+ - app/assets/stylesheets/active_list.css.scss
118
+ - app/assets/stylesheets/active_list/background.scss
119
+ - app/assets/stylesheets/active_list/minimal.scss
120
+ - app/assets/stylesheets/active_list/theme.scss
106
121
  - lib/active-list.rb
107
- - lib/active-list/action_pack.rb
108
- - lib/active-list/columns/action_column.rb
109
- - lib/active-list/columns/data_column.rb
110
- - lib/active-list/columns/field_column.rb
111
- - lib/active-list/compass/stylesheets/_active-list.scss
112
- - lib/active-list/compass/stylesheets/active-list/_background.scss
113
- - lib/active-list/compass/stylesheets/active-list/_minimal.scss
114
- - lib/active-list/compass/stylesheets/active-list/_theme.scss
115
- - lib/active-list/definition.rb
116
- - lib/active-list/exporters.rb
117
- - lib/active-list/exporters/csv_exporter.rb
118
- - lib/active-list/exporters/excel_csv_exporter.rb
119
- - lib/active-list/exporters/open_document_spreadsheet_exporter.rb
120
- - lib/active-list/finder.rb
121
- - lib/active-list/generator.rb
122
- - lib/active-list/rails/engine.rb
123
- - lib/active-list/renderers.rb
124
- - lib/active-list/renderers/simple_renderer.rb
125
- - lib/assets/images/active-list.png
126
- - lib/assets/javascripts/active-list.jquery.js
127
- - lib/assets/stylesheets/active-list.css.scss
122
+ - lib/active_list.rb
123
+ - lib/active_list/action_pack.rb
124
+ - lib/active_list/definition.rb
125
+ - lib/active_list/definition/abstract_column.rb
126
+ - lib/active_list/definition/action_column.rb
127
+ - lib/active_list/definition/association_column.rb
128
+ - lib/active_list/definition/attribute_column.rb
129
+ - lib/active_list/definition/check_box_column.rb
130
+ - lib/active_list/definition/data_column.rb
131
+ - lib/active_list/definition/empty_column.rb
132
+ - lib/active_list/definition/field_column.rb
133
+ - lib/active_list/definition/status_column.rb
134
+ - lib/active_list/definition/table.rb
135
+ - lib/active_list/definition/text_field_column.rb
136
+ - lib/active_list/exporters.rb
137
+ - lib/active_list/exporters/abstract_exporter.rb
138
+ - lib/active_list/exporters/csv_exporter.rb
139
+ - lib/active_list/exporters/excel_csv_exporter.rb
140
+ - lib/active_list/exporters/open_document_spreadsheet_exporter.rb
141
+ - lib/active_list/generator.rb
142
+ - lib/active_list/generator/finder.rb
143
+ - lib/active_list/helpers.rb
144
+ - lib/active_list/rails/engine.rb
145
+ - lib/active_list/renderers.rb
146
+ - lib/active_list/renderers/abstract_renderer.rb
147
+ - lib/active_list/renderers/simple_renderer.rb
128
148
  homepage: http://github.com/burisu/active-list
129
149
  licenses:
130
150
  - MIT
151
+ metadata: {}
131
152
  post_install_message:
132
153
  rdoc_options: []
133
154
  require_paths:
134
155
  - lib
135
156
  required_ruby_version: !ruby/object:Gem::Requirement
136
- none: false
137
157
  requirements:
138
- - - ! '>='
158
+ - - '>='
139
159
  - !ruby/object:Gem::Version
140
160
  version: '0'
141
161
  required_rubygems_version: !ruby/object:Gem::Requirement
142
- none: false
143
162
  requirements:
144
- - - ! '>='
163
+ - - '>='
145
164
  - !ruby/object:Gem::Version
146
165
  version: '0'
147
166
  requirements: []
148
167
  rubyforge_project:
149
- rubygems_version: 1.8.23
168
+ rubygems_version: 2.0.14
150
169
  signing_key:
151
- specification_version: 3
170
+ specification_version: 4
152
171
  summary: Easy tables in Rails app
153
172
  test_files: []
@@ -1,48 +0,0 @@
1
- require 'action_controller'
2
- require 'action_view'
3
-
4
- module ActiveList
5
-
6
- module ActionController
7
-
8
- def self.included(base) #:nodoc:
9
- base.extend(ClassMethods)
10
- end
11
-
12
- module ClassMethods
13
- # Permits to define and generate methods to manage dynamic
14
- # table ActiveList
15
- def list(*args, &block)
16
- name, options = nil, {}
17
- name = args[0] if args[0].is_a? Symbol
18
- options = args[-1] if args[-1].is_a? Hash
19
- name ||= self.controller_name.to_sym
20
- model = (options[:model]||name).to_s.classify.constantize
21
- options[:controller_method_name] = "list#{'_'+name.to_s if name != self.controller_name.to_sym}"
22
- options[:view_method_name] = "_#{self.controller_name}_list_#{name}_tag"
23
- options[:records_variable_name] = "@#{name}"
24
- table = ActiveList::Table.new(name, model, options)
25
- if block_given?
26
- yield table
27
- else
28
- table.load_default_columns
29
- end
30
-
31
- class_eval(table.send(:generate_controller_method_code), __FILE__, __LINE__)
32
- ActionView::Base.send(:class_eval, table.send(:generate_view_method_code), __FILE__, __LINE__)
33
- end
34
-
35
- end
36
-
37
- end
38
-
39
- module ViewsHelper
40
- def list(*args, &block)
41
- name, options = nil, {}
42
- name = args[0] if args[0].is_a? Symbol
43
- options = args[-1] if args[-1].is_a? Hash
44
- self.send("_#{options[:controller]||self.controller_name}_#{__method__}_#{name||self.controller_name}_tag", &block)
45
- end
46
- end
47
-
48
- end
@@ -1,83 +0,0 @@
1
- # coding: utf-8
2
- module ActiveList
3
-
4
- class Table
5
-
6
- # Add a new method in Table which permit to define data columns
7
- def action(name, options = {})
8
- @columns << ActionColumn.new(self, name, options)
9
- end
10
-
11
- end
12
-
13
- class ActionColumn < Column
14
-
15
- def header_code
16
- "''"
17
- end
18
-
19
-
20
- def operation(record = 'record')
21
- @options[:method] = :delete if @name.to_s == "destroy" and !@options.has_key?(:method)
22
- @options[:confirm] = :are_you_sure_you_want_to_delete if @name.to_s == "destroy" and !@options.has_key?(:confirm)
23
- link_options = ""
24
- if @options['data-confirm'] or @options[:confirm]
25
- link_options << ", 'data-confirm' => ::I18n.translate('labels.#{@options['data-confirm']||@options[:confirm]}')"
26
- end
27
- if @options['data-method'] or @options[:method]
28
- link_options << ", :method => h('#{(@options['data-method']||@options[:method])}')"
29
- end
30
- action = @name
31
- format = @options[:format] ? ", :format=>'#{@options[:format]}'" : ""
32
- if @options[:remote]
33
- raise Exception.new("Sure to use :remote ?")
34
- remote_options = @options.dup
35
- remote_options['data-confirm'] = ::I18n.translate('labels.'+@options[:confirm].to_s) unless @options[:confirm].nil?
36
- remote_options.delete :remote
37
- remote_options.delete :image
38
- remote_options = remote_options.inspect.to_s
39
- remote_options = remote_options[1..-2]
40
- code = "link_to_remote(#{image}"
41
- code += ", {:url=>{:action=>:"+@name.to_s+", :id=>"+record+".id"+format+"}"
42
- code += ", "+remote_options+"}"
43
- code += ", {:title=>::I18n.translate('labels.#{action}')}"
44
- code += ")"
45
- elsif @options[:actions]
46
- raise Exception.new("options[:actions] have to be a Hash.") unless @options[:actions].is_a? Hash
47
- cases = []
48
- for a in @options[:actions]
49
- v = a[1][:action].to_s.split('_')[-1]
50
- cases << record+"."+@name.to_s+".to_s=="+a[0].inspect+"\nlink_to(content_tag(:i) + h(::I18n.translate('labels.#{v}'))"+
51
- ", {"+(a[1][:controller] ? ':controller=>:'+a[1][:controller].to_s+', ' : '')+":action=>'"+a[1][:action].to_s+"', :id=>"+record+".id"+format+"}"+
52
- # ", {:id=>'"+@name.to_s+"_'+"+record+".id.to_s"+link_options+"}"+
53
- ", {:class=>'#{@name}'"+link_options+"}"+
54
- ")\n"
55
- end
56
-
57
- code = "if "+cases.join("elsif ")+"end"
58
- else
59
- url = @options[:url] ||= {}
60
- url[:controller] ||= @options[:controller]||self.table.model.name.underscore.pluralize.to_sym
61
- url[:action] ||= @name
62
- url[:id] ||= "RECORD.id"
63
- url.delete_if{|k, v| v.nil?}
64
- url = "{"+url.collect{|k, v| ":#{k}=>"+(v.is_a?(String) ? v.gsub(/RECORD/, record) : v.inspect)}.join(", ")+format+"}"
65
- # code = "{:id=>'"+@name.to_s+"_'+"+record+".id.to_s"+link_options+"}"
66
- code = "{:class=>'#{@name}'"+link_options+"}"
67
- code = "link_to(content_tag(:i) + h(::I18n.translate('labels.#{action}')), "+url+", "+code+")"
68
- end
69
- if @options[:if]
70
- code = "if (" + (@options[:if].is_a?(Symbol) ? "#{record}.#{@options[:if]}" : @options[:if].to_s.gsub('RECORD', record)) + ")\n" + code + "\n end"
71
- end
72
- if @options[:unless]
73
- code = "unless (" + (@options[:unless].is_a?(Symbol) ? "#{record}.#{@options[:unless]}" : @options[:unless].to_s.gsub('RECORD', record)) + ")\n" + code + "\n end"
74
- end
75
- code
76
- end
77
-
78
-
79
-
80
-
81
- end
82
-
83
- end
@@ -1,151 +0,0 @@
1
- module ActiveList
2
-
3
- class Table
4
-
5
- # Retrieves all columns in database
6
- def table_columns
7
- cols = self.model_columns.collect{|c| c.name}
8
- @columns.select{|c| c.is_a? DataColumn and cols.include? c.name.to_s}
9
- end
10
-
11
- def data_columns
12
- @columns.select{|c| c.is_a? DataColumn}
13
- end
14
-
15
- # Add a new method in Table which permit to define data columns
16
- def column(name, options={})
17
- @columns << DataColumn.new(self, name, options)
18
- end
19
-
20
- end
21
-
22
- class DataColumn < Column
23
-
24
- def header_code
25
- if @options[:label].is_a? String
26
- "::I18n.translate('labels.#{@options[:label].strip}')"
27
- elsif through = @options[:through]
28
- through = [through] unless through.is_a? Array
29
- model, reflection = @table.model, nil
30
- for ref in through
31
- unless reflection.nil?
32
- model = reflection.class_name.constantize rescue nil
33
- end
34
- raise Exception.new("Unknown model #{reflection.class_name}") if model.nil?
35
- reflection = model.reflections[ref]
36
- raise Exception.new("Unknown reflection :#{ref} (#{through.inspect}) for the ActiveRecord: "+model.name) if reflection.nil?
37
- end
38
- "#{model.name}.human_attribute_name('#{reflection.name}')"
39
- else
40
- "#{@table.model.name}.human_attribute_name('#{@name}')"
41
- end
42
- end
43
-
44
-
45
- # Code for rows
46
- def datum_code(record='rekord', child = false)
47
- code = if child and @options[:children].is_a? Symbol
48
- "#{record}.#{@options[:children]}"
49
- elsif child and @options[:children].is_a? FalseClass
50
- "nil"
51
- elsif through = @options[:through] and !child
52
- through = [through] unless through.is_a?(Array)
53
- foreign_record = record
54
- through.each { |x| foreign_record += '.'+x.to_s }
55
- "(#{foreign_record}.#{@name} rescue nil)"
56
- else
57
- "#{record}.#{@name}"
58
- end
59
- return code
60
- end
61
-
62
- # Code for exportation
63
- def exporting_datum_code(record='rekord', noview=false)
64
- datum = self.datum_code(record)
65
- if self.datatype == :boolean
66
- datum = "(#{datum} ? ::I18n.translate('list.export.true_value') : ::I18n.translate('list.export.false_value'))"
67
- elsif self.datatype == :date
68
- datum = "(#{datum}.nil? ? '' : ::I18n.localize(#{datum}))"
69
- elsif self.datatype == :decimal and not noview
70
- currency = nil
71
- if currency = self.options[:currency]
72
- currency = currency[:body] if currency.is_a?(Hash)
73
- currency = :currency if currency.is_a?(TrueClass)
74
- currency = "RECORD.#{currency}" if currency.is_a?(Symbol)
75
- raise Exception.new("Option :currency is not valid. Hash, Symbol or true/false") unless currency.is_a?(String)
76
- end
77
- datum = "(#{datum}.nil? ? '' : ::I18n.localize(#{datum}#{', :currency=>'+currency.gsub(/RECORD/, record) if currency}))"
78
- elsif @name.to_s.match(/(^|\_)currency$/) and self.datatype == :string and self.limit == 3
79
- datum = "(#{datum}.nil? ? '' : ::I18n.currency_label(#{datum}))"
80
- elsif @name==:country and self.datatype == :string and self.limit == 2
81
- datum = "(#{datum}.nil? ? '' : ::I18n.translate('countries.'+#{datum}))"
82
- elsif @name==:language and self.datatype == :string and self.limit <= 8
83
- datum = "(#{datum}.nil? ? '' : ::I18n.translate('languages.'+#{datum}))"
84
- elsif self.enumerize?
85
- datum = "(#{datum}.nil? ? '' : #{datum}.text)"
86
- end
87
- return datum
88
- end
89
-
90
- # Returns the data type of the column if the column is in the database
91
- def datatype
92
- @options[:datatype] || (@column ? @column.type : nil)
93
- end
94
-
95
-
96
- def enumerize?
97
- if self.table.model.respond_to?(@name) and !@options[:through]
98
- if self.table.model.method(@name).arity.zero?
99
- if self.table.model.send(@name).respond_to?(:values)
100
- return true
101
- end
102
- end
103
- end
104
- return false
105
- end
106
-
107
- def numeric?
108
- [:decimal, :integer, :float, :numeric].include? self.datatype
109
- end
110
-
111
- # Returns the size/length of the column if the column is in the database
112
- def limit
113
- @column.limit if @column
114
- end
115
-
116
-
117
- # Returns the class name of the used model
118
- def class_name
119
- klass = self.table.model
120
- if through = @options[:through]
121
- through = [through] unless through.is_a? Array
122
- for ref in through
123
- klass = klass.reflections[ref].class_name.constantize
124
- end
125
- end
126
- return klass.name
127
- end
128
-
129
- # Defines if column is exportable
130
- def exportable?
131
- true
132
- end
133
-
134
- # Check if a column is sortable
135
- def sortable?
136
- #not self.action? and
137
- not self.options[:through] and not @column.nil?
138
- end
139
-
140
- # Generate code in order to get the (foreign) record of the column
141
- def record_expr(record='record')
142
- if @options[:through]
143
- return ([record]+[@options[:through]]).flatten.join(".")
144
- else
145
- return record
146
- end
147
- end
148
-
149
- end
150
-
151
- end