smart_table 0.0.1

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.
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')