trk_datatables 0.2.12 → 0.2.13
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/Gemfile.lock +2 -2
- data/README.md +100 -1
- data/lib/trk_datatables/base.rb +1 -4
- data/lib/trk_datatables/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dfebccd40ad802ae6e7e6beb1eebec9099f9ede5bf4ed4d2f6f9ed92a08a8f03
|
|
4
|
+
data.tar.gz: 0fcb0efd54b898d2d2aa68ff76c095293fa0b57abb48a37bd893aa59a676ff4e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fa204f488a45f055b602e9baf8504cd64e8a91404a69800588065fcabbfa5a85ce2ae9220751fdf7633facdfe1627a98bae33354eabfaf6c64e9053f20f6472a
|
|
7
|
+
data.tar.gz: ba2fbe421642ed72bff9e023b541c4321c56baa653f54f1ac372d3e7d43233691a7316040340ff20c94e1d4fab6ceb5ce314fe0efeadfa65240e2dee2042593e
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -531,6 +531,94 @@ class MostLikedPostsDatatable < TrkDatatables::ActiveRecord
|
|
|
531
531
|
end
|
|
532
532
|
```
|
|
533
533
|
|
|
534
|
+
### Table less models
|
|
535
|
+
|
|
536
|
+
You can use raw sql to fetch the data and use it as a model.
|
|
537
|
+
Here is an example when there is no relations to other models
|
|
538
|
+
```
|
|
539
|
+
# app/models/table_less.rb
|
|
540
|
+
class TableLess < ApplicationRecord
|
|
541
|
+
self.abstract_class = true
|
|
542
|
+
|
|
543
|
+
def self.load_schema!
|
|
544
|
+
@columns_hash ||= {}
|
|
545
|
+
|
|
546
|
+
# From active_record/attributes.rb
|
|
547
|
+
attributes_to_define_after_schema_loads.each do |name, (type, options)|
|
|
548
|
+
type = ActiveRecord::Type.lookup(type, **options.except(:default)) if type.is_a?(Symbol)
|
|
549
|
+
|
|
550
|
+
define_attribute(name, type, **options.slice(:default))
|
|
551
|
+
|
|
552
|
+
# Improve Model#inspect output
|
|
553
|
+
@columns_hash[name.to_s] = ActiveRecord::ConnectionAdapters::Column.new(name.to_s, options[:default])
|
|
554
|
+
end
|
|
555
|
+
end
|
|
556
|
+
end
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
```
|
|
560
|
+
# app/models/translation.rb
|
|
561
|
+
class Translation < TableLess
|
|
562
|
+
self.table_name = :translations
|
|
563
|
+
|
|
564
|
+
attribute :translateable_type, :string, default: nil
|
|
565
|
+
attribute :translateable_id, :string, default: nil
|
|
566
|
+
attribute :column_name, :string, default: nil
|
|
567
|
+
attribute :column_value, :string, default: nil
|
|
568
|
+
|
|
569
|
+
belongs_to :translateable, polymorphic: true
|
|
570
|
+
end
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
```
|
|
574
|
+
# app/datatables/translations_datatable.rb
|
|
575
|
+
# rubocop:disable Layout/LineLength
|
|
576
|
+
class TranslationsDatatable < BaseDatatable
|
|
577
|
+
def columns
|
|
578
|
+
{
|
|
579
|
+
'translations.translateable_id': {},
|
|
580
|
+
'translations.translateable_type': {hide: true},
|
|
581
|
+
'translations.column_name': {},
|
|
582
|
+
'translations.column_value': {},
|
|
583
|
+
'': {},
|
|
584
|
+
}
|
|
585
|
+
end
|
|
586
|
+
|
|
587
|
+
def all_items
|
|
588
|
+
sql = <<~SQL.squish
|
|
589
|
+
(
|
|
590
|
+
(SELECT 'Activity' AS translateable_type, id AS translateable_id, 'name' AS column_name, name AS column_value FROM activities)
|
|
591
|
+
UNION
|
|
592
|
+
(SELECT 'Activity' AS translateable_type, id AS translateable_id, 'description' AS column_name, description AS column_value FROM activities)
|
|
593
|
+
) as translations
|
|
594
|
+
SQL
|
|
595
|
+
Translation.from([Arel.sql(sql)])
|
|
596
|
+
end
|
|
597
|
+
|
|
598
|
+
def rows(filtered)
|
|
599
|
+
filtered.map do |translation|
|
|
600
|
+
edit_link = @view.button_tag_open_modal(
|
|
601
|
+
@view.edit_translation_path(translation.translateable_id, translateable_type: translation.translateable_type, column_name: translation.column_name), title: @view.t_crud('edit', Translation)
|
|
602
|
+
)
|
|
603
|
+
[
|
|
604
|
+
@view.link_to(translation.translateable, translation.translateable),
|
|
605
|
+
translation.translateable_type,
|
|
606
|
+
translation.column_name,
|
|
607
|
+
translation.column_value,
|
|
608
|
+
edit_link,
|
|
609
|
+
]
|
|
610
|
+
end
|
|
611
|
+
end
|
|
612
|
+
end
|
|
613
|
+
# rubocop:enable Layout/LineLength
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
For column title we use `table_class.human_attribute_name column_name`. When
|
|
617
|
+
calculated_ columns is used than it can not find translation so better is to:
|
|
618
|
+
```
|
|
619
|
+
'string_calculated_in_db.column_value_translated': {search: false, title: @view.t('activerecord.attributes.translation.column_value_translated')},
|
|
620
|
+
```
|
|
621
|
+
|
|
534
622
|
### Default order and page length
|
|
535
623
|
|
|
536
624
|
You can override default order (index and direction) and default page length so
|
|
@@ -575,7 +663,18 @@ Default [DOM](https://datatables.net/reference/option/dom) is
|
|
|
575
663
|
To set parameters that you can use for links to set column search value, use
|
|
576
664
|
this `PostsDatatable.param_set 'users.email', 'my@email.com'`. For between
|
|
577
665
|
search you can use range `Time.zone.today..(Time.zone.today + 1.year)` and for
|
|
578
|
-
in multiple values use array `[Post.statuses[:draft]]
|
|
666
|
+
in multiple values use array `[Post.statuses[:draft]]`. Note that in Rails
|
|
667
|
+
`Time.zone.now.to_s` usually returns seconds ('23:59:59') but if you change
|
|
668
|
+
default format like in `config/initializers/time_formats.rb` with
|
|
669
|
+
`Time::DATE_FORMATS[:default] = '%d-%b-%Y %I:%M %p'` than range
|
|
670
|
+
`Time.zone.now.at_beginning_of_day..Time.zone.now.at_end_of_day` will not
|
|
671
|
+
include those at end of day since param will not include seconds ('23:59') so in
|
|
672
|
+
this case you can use range for strings
|
|
673
|
+
`Time.zone.now.at_beginning_of_day.to_s..Time.zone.now.at_end_of_day.to_s(:with_seconds)`
|
|
674
|
+
and config/initializers/time_formats.rb `Time::DATE_FORMATS[:with_seconds] = '%d-%b-%Y %I:%M:%S %p'`
|
|
675
|
+
|
|
676
|
+
(or use date `Time.zone.today..Time.zone.today` but that will not populate
|
|
677
|
+
datetime fields in dateRangePicker correctly)
|
|
579
678
|
|
|
580
679
|
```
|
|
581
680
|
<%= link_to 'Active posts for my@email.com', \
|
data/lib/trk_datatables/base.rb
CHANGED
|
@@ -241,10 +241,7 @@ module TrkDatatables
|
|
|
241
241
|
'Last Month':
|
|
242
242
|
Time.zone.today.prev_month.beginning_of_month.beginning_of_day...Time.zone.today.prev_month.end_of_month.end_of_day,
|
|
243
243
|
'This Year': Time.zone.today.beginning_of_year.beginning_of_day...Time.zone.today.end_of_day,
|
|
244
|
-
}
|
|
245
|
-
# datepicker expects format 2020-11-29 11:59:59
|
|
246
|
-
range.first.strftime('%F %T')..range.last.strftime('%F %T')
|
|
247
|
-
end
|
|
244
|
+
}
|
|
248
245
|
end
|
|
249
246
|
end
|
|
250
247
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: trk_datatables
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.13
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dusan Orlovic
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-05-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -220,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
220
220
|
- !ruby/object:Gem::Version
|
|
221
221
|
version: '0'
|
|
222
222
|
requirements: []
|
|
223
|
-
rubygems_version: 3.
|
|
223
|
+
rubygems_version: 3.2.15
|
|
224
224
|
signing_key:
|
|
225
225
|
specification_version: 4
|
|
226
226
|
summary: Gem that simplify using datatables with Ruby on Rails and Sinatra.
|