smart_table 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/Gemfile.lock +171 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +132 -0
  6. data/app/assets/javascripts/smart_table.js +137 -0
  7. data/app/assets/stylesheets/smart_table.scss +85 -0
  8. data/app/controllers/concerns/smart_table/smart_table_concern.rb +58 -0
  9. data/app/helpers/smart_table/smart_table_helper.rb +211 -0
  10. data/app/views/kaminari/smart_table/_first_page.html.erb +12 -0
  11. data/app/views/kaminari/smart_table/_gap.html.erb +8 -0
  12. data/app/views/kaminari/smart_table/_last_page.html.erb +12 -0
  13. data/app/views/kaminari/smart_table/_next_page.html.erb +12 -0
  14. data/app/views/kaminari/smart_table/_page.html.erb +10 -0
  15. data/app/views/kaminari/smart_table/_paginator.html.erb +25 -0
  16. data/app/views/kaminari/smart_table/_prev_page.html.erb +12 -0
  17. data/bin/console +14 -0
  18. data/bin/setup +8 -0
  19. data/config/locales/smart_table.en.yml +25 -0
  20. data/config/locales/smart_table.pt.yml +25 -0
  21. data/lib/generators/init_generator.rb +16 -0
  22. data/lib/generators/templates/smart_table_initializer.rb +6 -0
  23. data/lib/smart_table/config.rb +15 -0
  24. data/lib/smart_table/engine.rb +21 -0
  25. data/lib/smart_table/version.rb +3 -0
  26. data/lib/smart_table.rb +28 -0
  27. data/smart_table-0.0.1.gem +0 -0
  28. data/smart_table.gemspec +33 -0
  29. data/spec/dummy_app/Rakefile +6 -0
  30. data/spec/dummy_app/app/assets/config/manifest.js +3 -0
  31. data/spec/dummy_app/app/assets/javascripts/application.js +15 -0
  32. data/spec/dummy_app/app/assets/javascripts/cable.js +13 -0
  33. data/spec/dummy_app/app/assets/stylesheets/application.css +15 -0
  34. data/spec/dummy_app/app/channels/application_cable/channel.rb +4 -0
  35. data/spec/dummy_app/app/channels/application_cable/connection.rb +4 -0
  36. data/spec/dummy_app/app/controllers/application_controller.rb +2 -0
  37. data/spec/dummy_app/app/helpers/application_helper.rb +2 -0
  38. data/spec/dummy_app/app/jobs/application_job.rb +2 -0
  39. data/spec/dummy_app/app/mailers/application_mailer.rb +4 -0
  40. data/spec/dummy_app/app/models/application_record.rb +3 -0
  41. data/spec/dummy_app/app/views/layouts/application.html.erb +15 -0
  42. data/spec/dummy_app/app/views/layouts/mailer.html.erb +13 -0
  43. data/spec/dummy_app/app/views/layouts/mailer.text.erb +1 -0
  44. data/spec/dummy_app/bin/bundle +3 -0
  45. data/spec/dummy_app/bin/rails +4 -0
  46. data/spec/dummy_app/bin/rake +4 -0
  47. data/spec/dummy_app/bin/setup +36 -0
  48. data/spec/dummy_app/bin/update +31 -0
  49. data/spec/dummy_app/bin/yarn +11 -0
  50. data/spec/dummy_app/config/application.rb +17 -0
  51. data/spec/dummy_app/config/boot.rb +5 -0
  52. data/spec/dummy_app/config/cable.yml +10 -0
  53. data/spec/dummy_app/config/database.yml +25 -0
  54. data/spec/dummy_app/config/environment.rb +5 -0
  55. data/spec/dummy_app/config/environments/development.rb +61 -0
  56. data/spec/dummy_app/config/environments/production.rb +94 -0
  57. data/spec/dummy_app/config/environments/test.rb +46 -0
  58. data/spec/dummy_app/config/initializers/application_controller_renderer.rb +8 -0
  59. data/spec/dummy_app/config/initializers/assets.rb +14 -0
  60. data/spec/dummy_app/config/initializers/backtrace_silencers.rb +7 -0
  61. data/spec/dummy_app/config/initializers/content_security_policy.rb +25 -0
  62. data/spec/dummy_app/config/initializers/cookies_serializer.rb +5 -0
  63. data/spec/dummy_app/config/initializers/filter_parameter_logging.rb +4 -0
  64. data/spec/dummy_app/config/initializers/inflections.rb +16 -0
  65. data/spec/dummy_app/config/initializers/mime_types.rb +4 -0
  66. data/spec/dummy_app/config/initializers/wrap_parameters.rb +14 -0
  67. data/spec/dummy_app/config/locales/en.yml +33 -0
  68. data/spec/dummy_app/config/puma.rb +34 -0
  69. data/spec/dummy_app/config/routes.rb +3 -0
  70. data/spec/dummy_app/config/spring.rb +6 -0
  71. data/spec/dummy_app/config/storage.yml +34 -0
  72. data/spec/dummy_app/config.ru +5 -0
  73. data/spec/dummy_app/db/test.sqlite3 +0 -0
  74. data/spec/dummy_app/log/test.log +0 -0
  75. data/spec/dummy_app/package.json +5 -0
  76. data/spec/dummy_app/public/404.html +67 -0
  77. data/spec/dummy_app/public/422.html +67 -0
  78. data/spec/dummy_app/public/500.html +66 -0
  79. data/spec/dummy_app/public/apple-touch-icon-precomposed.png +0 -0
  80. data/spec/dummy_app/public/apple-touch-icon.png +0 -0
  81. data/spec/dummy_app/public/favicon.ico +0 -0
  82. data/spec/rails_helper.rb +13 -0
  83. data/spec/smart_table/app/controllers/concerns/smart_table_concern_spec.rb +104 -0
  84. data/spec/smart_table/app/helpers/smart_table_helper_spec.rb +48 -0
  85. data/spec/smart_table/lib/config_spec.rb +18 -0
  86. data/spec/smart_table/lib/engine_spec.rb +12 -0
  87. data/spec/smart_table_spec.rb +26 -0
  88. data/spec/spec_helper.rb +20 -0
  89. metadata +263 -0
@@ -0,0 +1,211 @@
1
+ module SmartTable
2
+ module SmartTableHelper
3
+
4
+ # include Kaminari helpers, like paginate
5
+ include Kaminari::Helpers::HelperMethods
6
+
7
+ # Renders pagination controls (centered, usually below the table). Usage:
8
+ #
9
+ # <%= smart_table_paginate @records, @total_records_count, Record.model_name.human %>
10
+ #
11
+ # This method requires the loaded records for the current page and the total
12
+ # record count (sum of all pages). It also requires the listed record's human
13
+ # name, so it can generate a human sentence for the number of records shown.
14
+ #
15
+ # When the user clicks on one of the page size's links, a new request to the
16
+ # index action is made, including a page number parameter available through
17
+ # smart_table_params.limit and smart_table_params.offset.
18
+ #
19
+ # These values can be passed to ActiveRecord directly, e.g.:
20
+ #
21
+ # @records = Record.
22
+ # limit(smart_table_params.limit).
23
+ # offset(smart_table_params.offset)
24
+
25
+ def smart_table_paginate(records, total_records_count, record_model_name)
26
+ raise 'smart_table_params must be called on the controller, before using smart_table_paginate helper' unless get_cached_smart_table_params
27
+
28
+ paginatable_array = Kaminari.
29
+ paginate_array(records, total_count: total_records_count).
30
+ page(get_cached_smart_table_params.page_number).
31
+ per(get_cached_smart_table_params.page_size)
32
+
33
+ html_elements = []
34
+
35
+ # call to Kaminari view helper
36
+ html_elements << paginate(paginatable_array, param_name: PAGE_PARAM, theme: "smart_table")
37
+
38
+ html_elements << content_tag(:div, class: 'text-center') do
39
+ # call to Kaminari view helper
40
+ page_entries_info(paginatable_array, entry_name: record_model_name.downcase)
41
+ end
42
+
43
+ html_elements.join.html_safe
44
+ end
45
+
46
+ SORT_ORDERS = ["asc", "desc"]
47
+
48
+ # Renders table header with sortable feature. Usage:
49
+ #
50
+ # <th><%= smart_table_sortable("Header Text", :attribute_name) %></th>
51
+ #
52
+ # This will generate a link that will make a new request to your index page,
53
+ # including a sort parameter that will be available through smart_table_params.sort.
54
+ # You can simply pass this parameter to ActiveRecord:
55
+ #
56
+ # @records = Record.order(smart_table_params.sort)
57
+
58
+ def smart_table_sortable(text, attribute)
59
+ raise 'smart_table_params must be called on the controller, before using smart_table_sortable helper' unless get_cached_smart_table_params
60
+
61
+ current_sort_state = get_cached_smart_table_params.sort
62
+ attribute = attribute.to_s
63
+
64
+ current_sort_attribute, current_sort_order = if current_sort_state.present?
65
+ current_sort_state.downcase.split
66
+ else
67
+ nil
68
+ end
69
+
70
+ next_sort_order = if current_sort_attribute == attribute
71
+ SORT_ORDERS[(SORT_ORDERS.index(current_sort_order) + 1) % SORT_ORDERS.size]
72
+ else
73
+ SORT_ORDERS.first
74
+ end
75
+
76
+ link_url = current_request_url_with_merged_query_params(SORT_PARAM => "#{attribute} #{next_sort_order}")
77
+ link_to link_url do
78
+ text.html_safe + ' ' + (
79
+ if current_sort_attribute == attribute && current_sort_order == 'asc'
80
+ "<span class='fa fa-sort-down'></span>".html_safe
81
+ elsif current_sort_attribute == attribute && current_sort_order == 'desc'
82
+ "<span class='fa fa-sort-up'></span>".html_safe
83
+ else
84
+ "<span class='fa fa-sort'></span>".html_safe
85
+ end
86
+ )
87
+ end
88
+ end
89
+
90
+ # Renders table page size selector (centered, usually below the table). Usage:
91
+ #
92
+ # <%= smart_table_page_size_selector @total_records_count, Record.model_name.human %>
93
+ #
94
+ # This method requires the total number of records, so it can prune the list
95
+ # of available page size to only the ones that make sense for a certain
96
+ # number of records. It also requires the listed record's human name, so
97
+ # it can generate a human sentence for the number of records shown.
98
+ #
99
+ # When the user clicks on one of the page size's links, a new request to the
100
+ # index action is made, including a page size parameter available through
101
+ # smart_table_params.limit and smart_table_params.offset.
102
+ #
103
+ # These values can be passed to ActiveRecord directly, e.g.:
104
+ #
105
+ # @records = Record.
106
+ # limit(smart_table_params.limit).
107
+ # offset(smart_table_params.offset)
108
+
109
+
110
+ def smart_table_page_size_selector(total_records_count, record_model_name)
111
+ raise 'smart_table_params must be called on the controller, before using smart_table_page_size_selector helper' unless get_cached_smart_table_params
112
+
113
+ page_sizes = PAGE_SIZES.dup
114
+ page_sizes << get_cached_smart_table_params.page_size.to_i if get_cached_smart_table_params.page_size
115
+ page_sizes.sort!
116
+
117
+ if page_sizes.last >= total_records_count || get_cached_smart_table_params.page_size.nil?
118
+ page_sizes.reject! {|size| size > total_records_count}
119
+ page_sizes << SHOW_ALL
120
+ end
121
+
122
+ content_tag(:div, class: 'text-center') do
123
+ (
124
+ record_model_name.pluralize + ' ' +
125
+ I18n.t('smart_table.per_page') + ': ' +
126
+ page_sizes.map do |page_size|
127
+ if page_size == get_cached_smart_table_params.page_size
128
+ page_size.to_s
129
+ else
130
+ human_page_size = (page_size == SHOW_ALL ? I18n.t('smart_table.show_all') : page_size.to_s)
131
+ link_to human_page_size, current_request_url_with_merged_query_params(PAGE_SIZE_PARAM => page_size)
132
+ end
133
+ end.join(' ')
134
+ ).html_safe
135
+ end
136
+ end
137
+
138
+ # Renders search field (right-aligned, usually above the table). Usage:
139
+ #
140
+ # <div>
141
+ # <%= smart_table_search %>
142
+ # </div>
143
+ #
144
+ # <table class='table'>
145
+ # <thead>
146
+ # ...
147
+ #
148
+ # When the user types something on the search field and focuses out (or
149
+ # presses ENTER), a new request is made to the index action, including a
150
+ # search parameter available through smart_table_params.search.
151
+ #
152
+ # You are responsible for using the search parameter to build a query in your
153
+ # own way e.g.:
154
+ #
155
+ # @records = Record.
156
+ # where(
157
+ # 'column1 LIKE ? OR column2 LIKE ?',
158
+ # *Array.new(2, "%#{ActiveRecord::Base.sanitize_sql_like(smart_table_params.search)}%")
159
+ # )
160
+
161
+ def smart_table_search
162
+ raise 'smart_table_params must be called on the controller, before using smart_table_search helper' unless get_cached_smart_table_params
163
+
164
+ text_field_tag(
165
+ SEARCH_PARAM,
166
+ get_cached_smart_table_params.search,
167
+ type: 'search', placeholder: I18n.t('smart_table.search'), class: 'smart_table_search', id: 'smart_table_search'
168
+ )
169
+ end
170
+
171
+ # Creates section for extra table filters. Usage:
172
+ #
173
+ # <%= smart_table_extra_filters do %>
174
+ # <%= check_box_tag 'somekey', 'value', params['somekey'] %>
175
+ # <%= select_tag "credit_card", options_for_select({"VISA" => 'visa', "MasterCard" => 'master_card'}, params['credit_card']) %>
176
+ # <%= text_field_tag "somefield", params['somefield'] %>
177
+ # <%= radio_button_tag("category", "", !params["category"].present?) %>
178
+ # <%= radio_button_tag("category", "rails", params["category"] == 'rails') %>
179
+ # <%= radio_button_tag("category", "java", params["category"] == 'java') %>
180
+ # <% end %>
181
+ #
182
+ # Everytime the user changes any of the fields inside this section, the page
183
+ # will be refreshed and the field value will be included to the request params.
184
+ #
185
+ # You are responsible for using the parameters by yourself when loading the
186
+ # records.
187
+
188
+ def smart_table_extra_filters(&block)
189
+ raise 'smart_table_params must be called on the controller, before using smart_table_extra_filters helper' unless get_cached_smart_table_params
190
+
191
+ content = capture(&block)
192
+ content_tag(:div,
193
+ content,
194
+ id: 'smart_table_extra_filters',
195
+ class: 'smart_table_extra_filters'
196
+ )
197
+ end
198
+
199
+ private
200
+
201
+ # generates url merging parameters to the current url
202
+ def current_request_url_with_merged_query_params(params)
203
+ request_url = URI::parse(request.url)
204
+ link_query_params = URI::decode_www_form(request_url.query || '').to_h.merge(params.stringify_keys)
205
+ link_url = request_url.dup
206
+ link_url.query = URI::encode_www_form(link_query_params)
207
+ link_url.to_s
208
+ end
209
+
210
+ end
211
+ end
@@ -0,0 +1,12 @@
1
+ <%# Link to the "First" page
2
+ - available local variables
3
+ url: url to the first page
4
+ current_page: a page object for the currently displayed page
5
+ total_pages: total number of pages
6
+ per_page: number of items to fetch per page
7
+ remote: data-remote
8
+ -%>
9
+
10
+ <% unless current_page.first? %>
11
+ <%= link_to t('views.pagination.first').html_safe, url, class: 'first', :remote => remote %>
12
+ <% end %>
@@ -0,0 +1,8 @@
1
+ <%# Non-link tag that stands for skipped pages...
2
+ - available local variables
3
+ current_page: a page object for the currently displayed page
4
+ total_pages: total number of pages
5
+ per_page: number of items to fetch per page
6
+ remote: data-remote
7
+ -%>
8
+ <span class="page gap"><%= t('views.pagination.truncate').html_safe %></span>
@@ -0,0 +1,12 @@
1
+ <%# Link to the "Last" page
2
+ - available local variables
3
+ url: url to the last page
4
+ current_page: a page object for the currently displayed page
5
+ total_pages: total number of pages
6
+ per_page: number of items to fetch per page
7
+ remote: data-remote
8
+ -%>
9
+
10
+ <% unless current_page.last? %>
11
+ <%= link_to t('views.pagination.last').html_safe, url, class: 'last', :remote => remote %>
12
+ <% end %>
@@ -0,0 +1,12 @@
1
+ <%# Link to the "Next" page
2
+ - available local variables
3
+ url: url to the next page
4
+ current_page: a page object for the currently displayed page
5
+ total_pages: total number of pages
6
+ per_page: number of items to fetch per page
7
+ remote: data-remote
8
+ -%>
9
+
10
+ <% unless current_page.last? %>
11
+ <%= link_to t('views.pagination.next').html_safe, url, class: 'next', :rel => 'next', :remote => remote %>
12
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <%# Link showing page number
2
+ - available local variables
3
+ page: a page object for "this" page
4
+ url: url to this page
5
+ current_page: a page object for the currently displayed page
6
+ total_pages: total number of pages
7
+ per_page: number of items to fetch per page
8
+ remote: data-remote
9
+ -%>
10
+ <%= link_to page, url, {:remote => remote, class: "page#{ ' current' if page.current? }", :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} %>
@@ -0,0 +1,25 @@
1
+ <%# The container tag
2
+ - available local variables
3
+ current_page: a page object for the currently displayed page
4
+ total_pages: total number of pages
5
+ per_page: number of items to fetch per page
6
+ remote: data-remote
7
+ paginator: the paginator that renders the pagination tags inside
8
+ -%>
9
+ <%= paginator.render do -%>
10
+ <div class="text-center">
11
+ <ul class="pagination">
12
+ <%= first_page_tag unless current_page.first? || total_pages <= 2 %>
13
+ <%= prev_page_tag unless current_page.first? %>
14
+ <% each_page do |page| -%>
15
+ <% if page.left_outer? || page.right_outer? || page.inside_window? -%>
16
+ <%= page_tag page %>
17
+ <% elsif !page.was_truncated? -%>
18
+ <%= gap_tag %>
19
+ <% end -%>
20
+ <% end -%>
21
+ <%= next_page_tag unless current_page.last? %>
22
+ <%= last_page_tag unless current_page.last? || total_pages <= 2 %>
23
+ </ul>
24
+ </div>
25
+ <% end -%>
@@ -0,0 +1,12 @@
1
+ <%# Link to the "Previous" page
2
+ - available local variables
3
+ url: url to the previous page
4
+ current_page: a page object for the currently displayed page
5
+ total_pages: total number of pages
6
+ per_page: number of items to fetch per page
7
+ remote: data-remote
8
+ -%>
9
+
10
+ <% unless current_page.first? %>
11
+ <%= link_to t('views.pagination.previous').html_safe, url, class: 'prev', rel: 'prev', :remote => remote %>
12
+ <% end %>
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "solvis_auth"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,25 @@
1
+ en:
2
+ views:
3
+ # Kaminari translations
4
+ pagination:
5
+ first: "&laquo; First"
6
+ last: "Last &raquo;"
7
+ previous: "&lsaquo; Prev"
8
+ next: "Next &rsaquo;"
9
+ truncate: "&hellip;"
10
+ helpers:
11
+ # Kaminari translations
12
+ page_entries_info:
13
+ one_page:
14
+ display_entries:
15
+ zero: "No %{entry_name} found"
16
+ one: "Displaying <b>1</b> %{entry_name}"
17
+ other: "Displaying <b>all %{count}</b> %{entry_name}"
18
+ more_pages:
19
+ display_entries: "Displaying %{entry_name} <b>%{first}&nbsp;-&nbsp;%{last}</b> of <b>%{total}</b> in total"
20
+
21
+ # smart_table gem's specific translations
22
+ smart_table:
23
+ per_page: "per page"
24
+ show_all: "All"
25
+ search: "Search"
@@ -0,0 +1,25 @@
1
+ pt:
2
+ views:
3
+ # Kaminari translations
4
+ pagination:
5
+ first: "&laquo; Primeira"
6
+ last: "Última &raquo;"
7
+ previous: "&lsaquo; Anterior"
8
+ next: "Próxima &rsaquo;"
9
+ truncate: "&hellip;"
10
+ helpers:
11
+ # Kaminari translations
12
+ page_entries_info:
13
+ one_page:
14
+ display_entries:
15
+ zero: "Sem %{entry_name} para exibir"
16
+ one: "Mostrando <b>1</b> %{entry_name}"
17
+ other: "Mostrando <b>todos %{count}</b> %{entry_name}"
18
+ more_pages:
19
+ display_entries: "Mostrando %{entry_name} <b>%{first}&nbsp;-&nbsp;%{last}</b> de <b>%{total}</b> no total"
20
+
21
+ # smart_table gem's specific translations
22
+ smart_table:
23
+ per_page: "por página"
24
+ show_all: "Tudo"
25
+ search: "Buscar"
@@ -0,0 +1,16 @@
1
+ require 'rails/generators'
2
+
3
+ # Generates gem initializer
4
+ #
5
+ # rails g smart_table:init
6
+ #
7
+
8
+ module SmartTable
9
+ class InitGenerator < Rails::Generators::Base
10
+ source_root File.expand_path('../templates', __FILE__)
11
+
12
+ def copy_initializer
13
+ copy_file 'smart_table_initializer.rb', 'config/initializers/smart_table.rb'
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,6 @@
1
+
2
+ # Check existing configs on lib/solvis_auth/config.rb
3
+
4
+ SmartTable.setup do |config|
5
+
6
+ end
@@ -0,0 +1,15 @@
1
+ module SmartTable
2
+ class Config
3
+ DEFAULT_CONFIGS = {
4
+
5
+ }
6
+
7
+ DEFAULT_CONFIGS.each do |config_name, default_value|
8
+ # defines accessors for each configuration on Config class
9
+ self.cattr_accessor config_name, instance_accessor: false
10
+ # initializes default value
11
+ self.send(config_name.to_s + '=', default_value)
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+
2
+ module SmartTable
3
+
4
+ class Engine < ::Rails::Engine
5
+
6
+ # This makes models, controllers and routes defined on this gem to be all
7
+ # scoped under SmartTable::
8
+ # Ref: http://edgeguides.rubyonrails.org/engines.html
9
+ isolate_namespace SmartTable
10
+
11
+ # This automatically includes smart_table methods on all controllers
12
+ initializer 'smart_table.action_controller' do |app|
13
+ ActiveSupport.on_load :action_controller do
14
+ include SmartTable::SmartTableConcern
15
+ helper SmartTable::SmartTableHelper
16
+ end
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,3 @@
1
+ module SmartTable
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,28 @@
1
+ require 'rails'
2
+ require 'kaminari'
3
+
4
+ require 'smart_table/engine' if defined?(Rails::Engine)
5
+
6
+ require 'smart_table/version'
7
+ require 'smart_table/config'
8
+ require 'generators/init_generator'
9
+
10
+
11
+ module SmartTable
12
+
13
+ # Method called on the gem initializer
14
+ def self.setup
15
+ if block_given?
16
+ yield Config
17
+ end
18
+ end
19
+
20
+ # Constants
21
+ SORT_PARAM = :st_sort
22
+ PAGE_PARAM = :st_page
23
+ PAGE_SIZE_PARAM = :st_page_size
24
+ SEARCH_PARAM = :st_search
25
+ SHOW_ALL = 'show_all'
26
+ PAGE_SIZES = [10,50,200]
27
+
28
+ end
Binary file
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'smart_table/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "smart_table"
9
+ spec.version = SmartTable::VERSION
10
+ spec.authors = ["Henrique Gubert"]
11
+ spec.email = ["guberthenrique@hotmail.com"]
12
+
13
+ spec.summary = %q{Implements tables with pagination and search for Rails,
14
+ with server-side content loading.}
15
+ spec.description = %q{}
16
+
17
+ spec.files = Dir[File.dirname(__FILE__) + '/**/*'].reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ # this gem should be used in a rails app
23
+ spec.add_runtime_dependency 'rails', '<5.3.0', '>4.2.0'
24
+ spec.add_runtime_dependency 'kaminari', '~> 0'
25
+ spec.add_runtime_dependency 'font-awesome-rails', '~> 0'
26
+
27
+ spec.add_development_dependency "bundler", "~> 1.16"
28
+ spec.add_development_dependency "rake", "~> 12.0"
29
+ spec.add_development_dependency "rspec", "~> 3.0"
30
+ spec.add_development_dependency 'rspec-rails', '~> 3.7'
31
+ spec.add_development_dependency 'sqlite3', '~> 0'
32
+ spec.add_development_dependency "byebug", '~> 9'
33
+ end
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require_relative 'config/application'
5
+
6
+ Rails.application.load_tasks
@@ -0,0 +1,3 @@
1
+ //= link_tree ../images
2
+ //= link_directory ../javascripts .js
3
+ //= link_directory ../stylesheets .css
@@ -0,0 +1,15 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file. JavaScript code in this file should be added after the last require_* statement.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require rails-ujs
14
+ //= require activestorage
15
+ //= require_tree .
@@ -0,0 +1,13 @@
1
+ // Action Cable provides the framework to deal with WebSockets in Rails.
2
+ // You can generate new channels where WebSocket features live using the `rails generate channel` command.
3
+ //
4
+ //= require action_cable
5
+ //= require_self
6
+ //= require_tree ./channels
7
+
8
+ (function() {
9
+ this.App || (this.App = {});
10
+
11
+ App.cable = ActionCable.createConsumer();
12
+
13
+ }).call(this);
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. Styles in this file should be added after the last require_* statement.
11
+ * It is generally better to create a new file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,4 @@
1
+ module ApplicationCable
2
+ class Channel < ActionCable::Channel::Base
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ApplicationCable
2
+ class Connection < ActionCable::Connection::Base
3
+ end
4
+ end
@@ -0,0 +1,2 @@
1
+ class ApplicationController < ActionController::Base
2
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ class ApplicationJob < ActiveJob::Base
2
+ end
@@ -0,0 +1,4 @@
1
+ class ApplicationMailer < ActionMailer::Base
2
+ default from: 'from@example.com'
3
+ layout 'mailer'
4
+ end
@@ -0,0 +1,3 @@
1
+ class ApplicationRecord < ActiveRecord::Base
2
+ self.abstract_class = true
3
+ end
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>DummyApp</title>
5
+ <%= csrf_meta_tags %>
6
+ <%= csp_meta_tag %>
7
+
8
+ <%= stylesheet_link_tag 'application', media: 'all' %>
9
+ <%= javascript_include_tag 'application' %>
10
+ </head>
11
+
12
+ <body>
13
+ <%= yield %>
14
+ </body>
15
+ </html>
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <style>
6
+ /* Email styles need to be inline */
7
+ </style>
8
+ </head>
9
+
10
+ <body>
11
+ <%= yield %>
12
+ </body>
13
+ </html>
@@ -0,0 +1 @@
1
+ <%= yield %>
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
3
+ load Gem.bin_path('bundler', 'bundle')