wice_grid 3.5.0 → 3.6.0.pre1

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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/.inch.yml +3 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +181 -0
  5. data/.travis.yml +22 -0
  6. data/{CHANGELOG → CHANGELOG.md} +95 -31
  7. data/Gemfile +4 -1
  8. data/README.md +1517 -0
  9. data/Rakefile +51 -7
  10. data/{SAVED_QUERIES_HOWTO.rdoc → SAVED_QUERIES_HOWTO.md} +34 -31
  11. data/TODO.md +16 -0
  12. data/lib/generators/wice_grid/add_migration_for_serialized_queries_generator.rb +4 -6
  13. data/lib/generators/wice_grid/install_generator.rb +2 -5
  14. data/lib/generators/wice_grid/templates/create_wice_grid_serialized_queries.rb +1 -0
  15. data/lib/generators/wice_grid/templates/wice_grid_config.rb +29 -34
  16. data/lib/wice/active_record_column_wrapper.rb +36 -17
  17. data/lib/wice/columns.rb +53 -52
  18. data/lib/wice/columns/column_action.rb +11 -13
  19. data/lib/wice/columns/column_boolean.rb +9 -11
  20. data/lib/wice/columns/column_bootstrap_datepicker.rb +48 -0
  21. data/lib/wice/columns/column_custom_dropdown.rb +22 -23
  22. data/lib/wice/columns/column_float.rb +2 -6
  23. data/lib/wice/columns/column_html5_datepicker.rb +31 -0
  24. data/lib/wice/columns/column_integer.rb +9 -13
  25. data/lib/wice/columns/column_jquery_datepicker.rb +49 -0
  26. data/lib/wice/columns/column_processor_index.rb +18 -13
  27. data/lib/wice/columns/column_rails_date_helper.rb +41 -0
  28. data/lib/wice/columns/column_rails_datetime_helper.rb +40 -0
  29. data/lib/wice/columns/column_range.rb +7 -11
  30. data/lib/wice/columns/column_string.rb +24 -20
  31. data/lib/wice/columns/common_date_datetime_mixin.rb +20 -0
  32. data/lib/wice/columns/common_js_date_datetime_conditions_generator_mixin.rb +39 -0
  33. data/lib/wice/columns/common_js_date_datetime_mixin.rb +15 -0
  34. data/lib/wice/columns/{column_date.rb → common_rails_date_datetime_conditions_generator_mixin.rb} +4 -22
  35. data/lib/wice/columns/common_standard_helper_date_datetime_mixin.rb +22 -0
  36. data/lib/wice/grid_output_buffer.rb +19 -10
  37. data/lib/wice/grid_renderer.rb +146 -85
  38. data/lib/wice/helpers/bs_calendar_helpers.rb +6 -7
  39. data/lib/wice/helpers/js_calendar_helpers.rb +19 -17
  40. data/lib/wice/helpers/wice_grid_misc_view_helpers.rb +18 -18
  41. data/lib/wice/helpers/wice_grid_serialized_queries_view_helpers.rb +44 -49
  42. data/lib/wice/helpers/wice_grid_view_helpers.rb +131 -134
  43. data/lib/wice/kaminari_monkey_patching.rb +3 -1
  44. data/lib/wice/table_column_matrix.rb +23 -8
  45. data/lib/wice/wice_grid_controller.rb +12 -16
  46. data/lib/wice/wice_grid_core_ext.rb +12 -20
  47. data/lib/wice/wice_grid_misc.rb +131 -53
  48. data/lib/wice/wice_grid_serialized_queries_controller.rb +10 -11
  49. data/lib/wice/wice_grid_serialized_query.rb +4 -3
  50. data/lib/wice/wice_grid_spreadsheet.rb +19 -18
  51. data/lib/wice_grid.rb +144 -135
  52. data/spec/schema.rb +9 -0
  53. data/spec/spec_helper.rb +75 -0
  54. data/spec/support/active_record.rb +11 -0
  55. data/spec/support/wice_grid_test_config.rb +172 -0
  56. data/spec/wice/grid_output_buffer_spec.rb +41 -0
  57. data/spec/wice/table_column_matrix_spec.rb +38 -0
  58. data/spec/wice/wice_grid_misc_spec.rb +159 -0
  59. data/spec/wice/wice_grid_spreadsheet_spec.rb +14 -0
  60. data/test/readme.txt +1 -1
  61. data/vendor/assets/javascripts/wice_grid_init.js.coffee +14 -8
  62. data/vendor/assets/stylesheets/wice_grid.scss +84 -0
  63. data/wice_grid.gemspec +32 -16
  64. metadata +217 -25
  65. data/README.rdoc +0 -1325
  66. data/lib/generators/wice_grid/templates/wice_grid.scss +0 -140
  67. data/lib/wice/columns/column_datetime.rb +0 -171
  68. data/vendor/assets/images/icons/grid/arrow_down.gif +0 -0
  69. data/vendor/assets/images/icons/grid/arrow_up.gif +0 -0
  70. data/vendor/assets/images/icons/grid/calendar_view_month.png +0 -0
  71. data/vendor/assets/images/icons/grid/collapse.gif +0 -0
  72. data/vendor/assets/images/icons/grid/delete.png +0 -0
  73. data/vendor/assets/images/icons/grid/expand.gif +0 -0
  74. data/vendor/assets/images/icons/grid/page_white_excel.png +0 -0
  75. data/vendor/assets/images/icons/grid/page_white_find.png +0 -0
  76. data/vendor/assets/images/icons/grid/table.png +0 -0
  77. data/vendor/assets/images/icons/grid/table_refresh.png +0 -0
  78. data/vendor/assets/images/icons/grid/tick_all.png +0 -0
  79. data/vendor/assets/images/icons/grid/untick_all.png +0 -0
data/spec/schema.rb ADDED
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+ ActiveRecord::Schema.define(version: 20150713103513) do
3
+ create_table 'dummies', force: :cascade do |t|
4
+ t.string 'name'
5
+
6
+ t.datetime 'created_at'
7
+ t.datetime 'updated_at'
8
+ end
9
+ end
@@ -0,0 +1,75 @@
1
+ # encoding: utf-8
2
+ # This file was generated by the `rspec --init` command. Conventionally, all
3
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
4
+ # The generated `.rspec` file contains `--require spec_helper` which will cause
5
+ # this file to always be loaded, without a need to explicitly require it in any
6
+ # files.
7
+ #
8
+ # Given that it is always loaded, you are encouraged to keep this file as
9
+ # light-weight as possible. Requiring heavyweight dependencies from this file
10
+ # will add to the boot time of your test suite on EVERY test run, even for an
11
+ # individual file that may not need all of that loaded. Instead, consider making
12
+ # a separate helper file that requires the additional dependencies and performs
13
+ # the additional setup, and require it from the spec files that actually need
14
+ # it.
15
+ #
16
+ # The `.rspec` file also contains a few flags that are not defaults but that
17
+ # users commonly want.
18
+ #
19
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
20
+
21
+ require 'rspec'
22
+ require 'coveralls'
23
+ require 'codeclimate-test-reporter'
24
+ require 'simplecov'
25
+
26
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
27
+ Coveralls::SimpleCov::Formatter,
28
+ SimpleCov::Formatter::HTMLFormatter,
29
+ CodeClimate::TestReporter::Formatter
30
+ ]
31
+ SimpleCov.start
32
+
33
+ begin
34
+ require 'support/active_record'
35
+ require 'action_controller'
36
+ require 'action_view'
37
+ require 'csv'
38
+
39
+ ActiveRecord::Base.logger = Logger.new(STDOUT)
40
+ rescue LoadError
41
+ puts 'LoadError'
42
+ end
43
+
44
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib'))
45
+ require 'wice_grid'
46
+ require 'support/wice_grid_test_config'
47
+
48
+ ActiveRecord::ConnectionAdapters::Column.send(:include, ::Wice::WiceGridExtentionToActiveRecordColumn)
49
+
50
+ ::Wice.on_action_view_load
51
+
52
+ RSpec.configure do |config|
53
+ # rspec-expectations config goes here. You can use an alternate
54
+ # assertion/expectation library such as wrong or the stdlib/minitest
55
+ # assertions if you prefer.
56
+ config.expect_with :rspec do |expectations|
57
+ # This option will default to `true` in RSpec 4. It makes the `description`
58
+ # and `failure_message` of custom matchers include text for helper methods
59
+ # defined using `chain`, e.g.:
60
+ # be_bigger_than(2).and_smaller_than(4).description
61
+ # # => "be bigger than 2 and smaller than 4"
62
+ # ...rather than:
63
+ # # => "be bigger than 2"
64
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
65
+ end
66
+
67
+ # rspec-mocks config goes here. You can use an alternate test double
68
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
69
+ config.mock_with :rspec do |mocks|
70
+ # Prevents you from mocking or stubbing a method that does not exist on
71
+ # a real object. This is generally recommended, and will default to
72
+ # `true` in RSpec 4.
73
+ mocks.verify_partial_doubles = true
74
+ end
75
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+ require 'active_record'
3
+
4
+ ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
5
+
6
+ load 'spec/schema.rb'
7
+
8
+ class Dummy < ActiveRecord::Base
9
+ end
10
+
11
+ Dummy.create(name: 'test')
@@ -0,0 +1,172 @@
1
+ # encoding: utf-8
2
+
3
+ # Default number of rows to show per page.
4
+ Wice::Defaults::PER_PAGE = 20
5
+
6
+ # Default order direction
7
+ Wice::Defaults::ORDER_DIRECTION = 'asc'
8
+
9
+ # Default name for a grid. A grid name is the basis for a lot of
10
+ # names including parameter names, DOM IDs, etc
11
+ # The shorter the name is the shorter the request URI will be.
12
+ Wice::Defaults::GRID_NAME = 'grid'
13
+
14
+ # If REUSE_LAST_COLUMN_FOR_FILTER_ICONS is true and the last column doesn't have any filter and column name, it will be used
15
+ # for filter related icons (filter icon, reset icon, show/hide icon), otherwise an additional table column is added.
16
+ Wice::Defaults::REUSE_LAST_COLUMN_FOR_FILTER_ICONS = true
17
+
18
+ # The label of the first option of a custom dropdown list meaning 'All items'
19
+ Wice::Defaults::CUSTOM_FILTER_ALL_LABEL = '--'
20
+
21
+ # A list of classes for the table tag of the grid
22
+ Wice::Defaults::DEFAULT_TABLE_CLASSES = ['table', 'table-bordered', 'table-striped']
23
+
24
+ # Allow switching between a single and multiple selection modes in custom filters (dropdown boxes)
25
+ Wice::Defaults::ALLOW_MULTIPLE_SELECTION = true
26
+
27
+ # Show the upper pagination panel by default or not
28
+ Wice::Defaults::SHOW_UPPER_PAGINATION_PANEL = false
29
+
30
+ # Disabling CSV export by default
31
+ Wice::Defaults::ENABLE_EXPORT_TO_CSV = false
32
+
33
+ # Default CSV field separator
34
+ Wice::Defaults::CSV_FIELD_SEPARATOR = ','
35
+
36
+ # The strategy when to show the filter.
37
+ # * <tt>:when_filtered</tt> - when the table is the result of filtering
38
+ # * <tt>:always</tt> - show the filter always
39
+ # * <tt>:no</tt> - never show the filter
40
+ Wice::Defaults::SHOW_FILTER = :always
41
+
42
+ # A boolean value specifying if a change in a filter triggers reloading of the grid.
43
+ Wice::Defaults::AUTO_RELOAD = false
44
+
45
+ # SQL operator used for matching strings in string filters.
46
+ Wice::Defaults::STRING_MATCHING_OPERATOR = 'LIKE'
47
+ # STRING_MATCHING_OPERATOR = 'ILIKE' # Use this for Postgresql case-insensitive matching.
48
+
49
+ # Defining one string matching operator globally for the whole application turns is not enough
50
+ # when you connect to two databases one of which is MySQL and the other is Postgresql.
51
+ # If the key for an adapter is missing it will fall back to Wice::Defaults::STRING_MATCHING_OPERATOR
52
+ Wice::Defaults::STRING_MATCHING_OPERATORS = {
53
+ 'ActiveRecord::ConnectionAdapters::MysqlAdapter' => 'LIKE',
54
+ 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter' => 'ILIKE'
55
+ }
56
+
57
+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
58
+ # Advanced Filters #
59
+
60
+ # Switch of the negation checkbox in all text filters
61
+ Wice::Defaults::NEGATION_IN_STRING_FILTERS = false
62
+
63
+ # Each WiceGrid filter column is defined in two classes, one used for rendering the filter, the other
64
+ # for generating query conditions. All these columns are in lib/wice/columns/*.rb .
65
+ # File lib/wice/columns/column_processor_index.rb lists all predefined processors.
66
+ # In most cases a processor is chosen automatically based on the DB column type,
67
+ # for example, integer columns
68
+ # can have two of processors, the default one with one input field, and a processor called "range",
69
+ # with 2 input fields. In this case it is possible to specify a processor in the column definition:
70
+ #
71
+ # g.column filter_type: :range
72
+ #
73
+ # It is also possible to define you own processors:
74
+ #
75
+ # Wice::Defaults::ADDITIONAL_COLUMN_PROCESSORS = {
76
+ # some_key_identifying_new_column_type: ['AViewColumnProcessorClass', 'ConditionsGeneratorClass'],
77
+ # another_key_identifying_new_column_type: ['AnotherViewColumnProcessorClass', 'AnotherConditionsGeneratorClass']
78
+ # }
79
+ #
80
+ # Column processor keys/names should not coincide with the existing keys/names (see lib/wice/columns/column_processor_index.rb)
81
+ # the value is a 2-element array with 2 strings, the first should be a name of view processor class inherited from
82
+ # Wice::Columns::ViewColumn, the second should be a name of conditions generator class inherited from
83
+ # Wice::Columns::ConditionsGeneratorColumn .
84
+
85
+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
86
+ # Showing All Records #
87
+
88
+ # Enable or disable showing all records (non-paginated table)
89
+ Wice::Defaults::ALLOW_SHOWING_ALL_RECORDS = true
90
+
91
+ # If number of all queries is more than this value, the user will be given a warning message
92
+ Wice::Defaults::START_SHOWING_WARNING_FROM = 100
93
+
94
+ # Hide the "show all" link if the number of all records is more than...
95
+ # Force-resets back to pagination starting from this value.
96
+ # Set to nil to always show it
97
+ Wice::Defaults::SHOW_ALL_ALLOWED_UP_TO = nil
98
+
99
+ #
100
+ # set to nil to skip the check
101
+ Wice::Defaults::SWITCH_BACK_TO_PAGINATION_FROM = nil
102
+
103
+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
104
+ # Saving Queries #
105
+
106
+ # ActiveRecord model to store queries. Read the documentation for details
107
+ # QUERY_STORE_MODEL = 'WiceGridSerializedQuery'
108
+ Wice::Defaults::QUERY_STORE_MODEL = 'WiceGridSerializedQuery'
109
+
110
+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
111
+ # Here go settings related to the calendar helpers #
112
+
113
+ # The default style of the date and datetime helper
114
+ # * <tt>:calendar</tt> - JS calendar
115
+ # * <tt>:html5</tt> - HTML5 date input field
116
+ # * <tt>:standard</tt> - standard Rails date and datetime helpers
117
+ # * <tt>:bootstrap</tt> - Bootstrap datepicker helper
118
+ Wice::Defaults::HELPER_STYLE = :calendar
119
+
120
+ # Format of the datetime displayed.
121
+ # If you change the format, make sure to check if +DATETIME_PARSER+ can still parse this string.
122
+ Wice::Defaults::DATETIME_FORMAT = '%Y-%m-%d %H:%M'
123
+
124
+ # Format of the date displayed.
125
+ # If you change the format, make sure to check if +DATE_PARSER+ can still parse this string.
126
+ Wice::Defaults::DATE_FORMAT = '%Y-%m-%d'
127
+
128
+ # Format of the date displayed in jQuery's Datepicker
129
+ # If you change the format, make sure to check if +DATE_PARSER+ can still parse this string.
130
+ Wice::Defaults::DATE_FORMAT_JQUERY = 'yy-mm-dd'
131
+
132
+ # Format of the date displayed in Bootstrap's Datepicker
133
+ # If you change the format, make sure to check if +DATE_PARSER+ can still parse this string.
134
+ Wice::Defaults::DATE_FORMAT_BOOTSTRAP = 'yyyy-mm-dd'
135
+
136
+ # With Calendar helpers enabled the parameter sent is the string displayed. This lambda will be given a date string in the
137
+ # format defined by +DATETIME_FORMAT+ and must generate a DateTime object.
138
+ # In many cases <tt>Time.zone.parse</tt> is enough, for instance, <tt>%Y-%m-%d</tt>. If you change the format, make sure to check this code
139
+ # and modify it if needed.
140
+ Wice::Defaults::DATETIME_PARSER = lambda do |datetime_string|
141
+ if datetime_string.blank?
142
+ nil
143
+ elsif Time.zone
144
+ Time.zone.parse(datetime_string)
145
+ else
146
+ Time.parse(datetime_string)
147
+ end
148
+ end
149
+
150
+ # The range of years to display in jQuery Datepicker.
151
+ # It can always be changed dynamically with the following javascript:
152
+ # $( ".hasDatepicker" ).datepicker( "option", "yearRange", "2000:2042" );
153
+ Wice::Defaults::DATEPICKER_YEAR_RANGE = (from = Date.current.year - 10).to_s + ':' + (from + 15).to_s
154
+
155
+ # With Calendar helpers enabled the parameter sent is the string displayed. This lambda will be given a date string in the
156
+ # format defined by +DATETIME+ and must generate a Date object.
157
+ # In many cases <tt>Date.parse</tt> is enough, for instance, <tt>%Y-%m-%d</tt>. If you change the format, make sure to check this code
158
+ # and modify it if needed.
159
+ Wice::Defaults::DATE_PARSER = lambda do |date_string|
160
+ if date_string.blank?
161
+ nil
162
+ else
163
+ begin
164
+ Date.parse(date_string)
165
+ rescue ArgumentError
166
+ nil
167
+ end
168
+ end
169
+ end
170
+
171
+ # The name of the page method (should correspond to Kaminari.config.page_method_name)
172
+ Wice::Defaults::PAGE_METHOD_NAME = :page
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+
3
+ describe Wice::GridOutputBuffer do
4
+ FILTER_COMMON_CODE = 'here filter code'
5
+
6
+
7
+ let(:buffer){Wice::GridOutputBuffer.new}
8
+
9
+ it 'should to_s' do
10
+ expect(buffer.to_s.class).to eq(ActiveSupport::SafeBuffer)
11
+ end
12
+
13
+ it 'should add_filter' do
14
+
15
+ expect(buffer.add_filter('key', FILTER_COMMON_CODE)).to eq(FILTER_COMMON_CODE)
16
+ end
17
+
18
+ it 'should filter_for' do
19
+
20
+ buffer.add_filter('key', FILTER_COMMON_CODE)
21
+ expect(buffer.filter_for('key')).to eq(FILTER_COMMON_CODE)
22
+ end
23
+
24
+ it 'should filter_for 2 times' do
25
+ buffer.add_filter('key', FILTER_COMMON_CODE)
26
+
27
+ expect(buffer.filter_for('key')).to eq(FILTER_COMMON_CODE)
28
+ expect { buffer.filter_for('key') }.to raise_error
29
+ end
30
+
31
+ it 'should filter_for without filters' do
32
+
33
+ expect { buffer.filter_for('key') }.to raise_error
34
+ end
35
+
36
+ it 'should filter_for return empty string' do
37
+ buffer.return_empty_strings_for_nonexistent_filters = true
38
+
39
+ expect(buffer.filter_for('key')).to eq('')
40
+ end
41
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+
3
+ describe Wice::TableColumnMatrix do
4
+ let(:general_conditions){ 'conditions' }
5
+
6
+ let(:table){ Wice::TableColumnMatrix.new }
7
+
8
+ it 'should new' do
9
+ expect(table.class).to eq(Wice::TableColumnMatrix)
10
+ end
11
+
12
+ it 'should add_condition' do
13
+
14
+ table.add_condition('key', general_conditions)
15
+
16
+ expect(table.conditions).to include(general_conditions)
17
+ end
18
+
19
+ it 'should set default_model_class' do
20
+
21
+ table.default_model_class = Dummy
22
+
23
+ expect(table.class).to eq(Wice::TableColumnMatrix)
24
+ end
25
+
26
+ it 'should get column' do
27
+
28
+ table.default_model_class = Dummy
29
+
30
+ expect(Dummy.columns).to include(table.get_column_by_model_class_and_column_name(Dummy, :name))
31
+ expect(Dummy.columns).to include(table.get_column_in_default_model_class_by_column_name(:name))
32
+ end
33
+
34
+ it 'should get column not initialized' do
35
+
36
+ expect { table.get_column_in_default_model_class_by_column_name(:name) }.to raise_error
37
+ end
38
+ end
@@ -0,0 +1,159 @@
1
+ # encoding: utf-8
2
+
3
+ context 'assoc_list_to_hash' do
4
+ it 'many elements in assocs' do
5
+ assocs = [:foo1, :foo2, :foo3, :foo4, :foo5]
6
+ out = Wice.assoc_list_to_hash(assocs)
7
+ expect(out).to eq(foo1: {foo2: {foo3: {foo4: :foo5}}})
8
+ end
9
+
10
+ it 'one element in assocs' do
11
+ assocs = [:foo1]
12
+ out = Wice.assoc_list_to_hash(assocs)
13
+ expect(out).to eq(:foo1)
14
+ end
15
+
16
+ it 'two elements in assocs' do
17
+ assocs = [:foo1, :foo2]
18
+ out = Wice.assoc_list_to_hash(assocs)
19
+ expect(out).to eq(foo1: :foo2)
20
+ end
21
+ end
22
+
23
+ context 'build_includes' do
24
+
25
+ it 'symbols + existing symbol' do
26
+ includes = [:a, :b, :c, :d, :e]
27
+
28
+ out = Wice.build_includes(includes, [:b])
29
+
30
+ expect(out).to eq([:a, :b, :c, :d, :e])
31
+ end
32
+
33
+ it 'symbols + non-existing symbol' do
34
+ includes = [:a, :b, :c, :d, :e]
35
+
36
+ out = Wice.build_includes(includes, [:x])
37
+
38
+ expect(out).to eq([:a, :b, :c, :d, :e, :x])
39
+ end
40
+
41
+ it 'symbols + non-existing hash' do
42
+ includes = [:a, :b, :c, :d, :e]
43
+
44
+ out = Wice.build_includes(includes, [:x, :y])
45
+
46
+ expect(out).to eq([:a, :b, :c, :d, :e, {x: :y}])
47
+ end
48
+
49
+
50
+ it 'symbols + existing hash' do
51
+ includes = [:a, :b, :c, :d, :e]
52
+
53
+ out = Wice.build_includes(includes, [:a, :x])
54
+
55
+ expect(out).to eq([{a: :x}, :b, :c, :d, :e])
56
+ end
57
+
58
+ it 'symbols with a hash + simple symbol' do
59
+ includes = [{a: :x}, :b, :c, :d, :e]
60
+
61
+ out = Wice.build_includes(includes, [:a])
62
+
63
+ expect(out).to eq([{a: :x}, :b, :c, :d, :e])
64
+ end
65
+
66
+ it 'symbols with a hash + hash' do
67
+ includes = [{a: :x}, :b, :c, :d, :e]
68
+
69
+ out = Wice.build_includes(includes, [:a, :x, :y])
70
+
71
+ expect(out).to eq([{a: {x: :y}}, :b, :c, :d, :e])
72
+ end
73
+
74
+ it 'symbols with a hash + hash (2)' do
75
+ includes = [{a: :x}, :b, :c, :d, :e]
76
+
77
+ out = Wice.build_includes(includes, [:a, :x])
78
+
79
+ expect(out).to eq([{a: :x}, :b, :c, :d, :e])
80
+ end
81
+
82
+ it 'symbols with a hash + the same hash' do
83
+ includes = [a: :x]
84
+
85
+ out = Wice.build_includes(includes, [:a, :x])
86
+
87
+ expect(out).to eq(a: :x)
88
+ end
89
+
90
+ it 'symbols with a hash + a deeper hash' do
91
+ includes = [{a: :x}]
92
+
93
+ out = Wice.build_includes(includes, [:a, :x, :y])
94
+
95
+ expect(out).to eq(a: {x: :y})
96
+ end
97
+
98
+ it 'a deeper hash + a deeper hash' do
99
+ includes = [a: {x: :y}]
100
+
101
+ out = Wice.build_includes(includes, [:a, :x, :z])
102
+
103
+ expect(out).to eq(a: [:y, :z])
104
+ end
105
+
106
+
107
+ it 'a deeper hash + the same deeper hash' do
108
+ includes = [{a: {x: :y}}]
109
+
110
+ out = Wice.build_includes(includes, [:a, :x, :y])
111
+
112
+ expect(out).to eq(a: {x: :y})
113
+ end
114
+
115
+ it '1 symbol + hash ' do
116
+ includes = :b
117
+
118
+ out = Wice.build_includes(includes, [:a, :x])
119
+
120
+ expect(out).to eq([:b, {a: :x}])
121
+ end
122
+
123
+ it 'nil + hash ' do
124
+ includes = nil
125
+
126
+ out = Wice.build_includes(includes, [:a, :x])
127
+
128
+ expect(out).to eq(a: :x)
129
+ end
130
+
131
+ it '1 symbol + nothing' do
132
+ includes = :b
133
+
134
+ out = Wice.build_includes(includes, [])
135
+
136
+ expect(out).to eq(:b)
137
+ end
138
+
139
+ it '1 symbol array + nothing' do
140
+ includes = [:b]
141
+
142
+ out = Wice.build_includes(includes, [])
143
+
144
+ expect(out).to eq(:b)
145
+ end
146
+
147
+ it 'validate_query_model' do
148
+ expect(Wice.get_query_store_model).to eq(WiceGridSerializedQuery)
149
+ end
150
+
151
+ it 'get_string_matching_operators' do
152
+ expect(Wice.get_string_matching_operators(Dummy)).to eq('LIKE')
153
+ end
154
+
155
+ it 'log' do
156
+ Wice.log('message')
157
+ end
158
+
159
+ end