active_scaffold 3.7.12 → 4.0.0.rc1
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/CHANGELOG.rdoc +9 -23
- data/README.md +3 -2
- data/app/assets/config/active_scaffold_manifest.js +3 -0
- data/app/assets/javascripts/active_scaffold.js.erb +24 -34
- data/app/assets/javascripts/jquery/active_scaffold.js +41 -58
- data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +1 -1
- data/app/assets/stylesheets/active_scaffold_colors.scss +0 -7
- data/app/assets/stylesheets/active_scaffold_extensions.css.erb +2 -2
- data/app/assets/stylesheets/active_scaffold_jquery_ui.css.erb +7 -7
- data/app/assets/stylesheets/active_scaffold_layout.css +57 -30
- data/app/views/active_scaffold_overrides/_add_existing_form.html.erb +10 -10
- data/app/views/active_scaffold_overrides/_base_form.html.erb +21 -21
- data/app/views/active_scaffold_overrides/_create_form.html.erb +10 -7
- data/app/views/active_scaffold_overrides/_create_form_on_list.html.erb +5 -5
- data/app/views/active_scaffold_overrides/_field_search.html.erb +6 -6
- data/app/views/active_scaffold_overrides/_form.html.erb +11 -14
- data/app/views/active_scaffold_overrides/_form_association.html.erb +21 -12
- data/app/views/active_scaffold_overrides/_form_association_footer.html.erb +19 -10
- data/app/views/active_scaffold_overrides/_form_association_record.html.erb +15 -21
- data/app/views/active_scaffold_overrides/_form_messages.html.erb +2 -2
- data/app/views/active_scaffold_overrides/_horizontal_subform.html.erb +7 -6
- data/app/views/active_scaffold_overrides/_human_conditions.html.erb +2 -2
- data/app/views/active_scaffold_overrides/_list.html.erb +15 -8
- data/app/views/active_scaffold_overrides/_list_calculations.html.erb +2 -3
- data/app/views/active_scaffold_overrides/_list_header.html.erb +2 -2
- data/app/views/active_scaffold_overrides/_list_inline_adapter.html.erb +5 -5
- data/app/views/active_scaffold_overrides/_list_messages.html.erb +12 -3
- data/app/views/active_scaffold_overrides/_list_pagination.html.erb +3 -3
- data/app/views/active_scaffold_overrides/_list_pagination_links.html.erb +4 -4
- data/app/views/active_scaffold_overrides/_list_record.html.erb +6 -6
- data/app/views/active_scaffold_overrides/_list_with_header.html.erb +4 -4
- data/app/views/active_scaffold_overrides/_messages.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_refresh_list.js.erb +2 -2
- data/app/views/active_scaffold_overrides/_render_field.js.erb +4 -4
- data/app/views/active_scaffold_overrides/_row.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_search.html.erb +6 -5
- data/app/views/active_scaffold_overrides/_show.html.erb +3 -3
- data/app/views/active_scaffold_overrides/_show_actions.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_association.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_association_horizontal.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_association_vertical.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_columns.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_horizontal_record.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_update_actions.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_update_calculations.js.erb +2 -2
- data/app/views/active_scaffold_overrides/_update_column.js.erb +8 -7
- data/app/views/active_scaffold_overrides/_update_form.html.erb +5 -5
- data/app/views/active_scaffold_overrides/_update_messages.js.erb +1 -1
- data/app/views/active_scaffold_overrides/_vertical_subform.html.erb +4 -3
- data/app/views/active_scaffold_overrides/action_confirmation.html.erb +3 -3
- data/app/views/active_scaffold_overrides/add_existing.js.erb +6 -6
- data/app/views/active_scaffold_overrides/add_existing_form.html.erb +1 -1
- data/app/views/active_scaffold_overrides/add_tab.js.erb +15 -0
- data/app/views/active_scaffold_overrides/create.html.erb +1 -1
- data/app/views/active_scaffold_overrides/delete.html.erb +4 -4
- data/app/views/active_scaffold_overrides/destroy.js.erb +15 -13
- data/app/views/active_scaffold_overrides/edit_associated.js.erb +3 -3
- data/app/views/active_scaffold_overrides/field_search.html.erb +1 -1
- data/app/views/active_scaffold_overrides/form_messages.js.erb +1 -1
- data/app/views/active_scaffold_overrides/list.html.erb +1 -1
- data/app/views/active_scaffold_overrides/on_action_update.js.erb +13 -8
- data/app/views/active_scaffold_overrides/on_create.js.erb +34 -6
- data/app/views/active_scaffold_overrides/on_mark.js.erb +3 -3
- data/app/views/active_scaffold_overrides/on_update.js.erb +9 -9
- data/app/views/active_scaffold_overrides/render_field.js.erb +1 -1
- data/app/views/active_scaffold_overrides/render_field_inplace.html.erb +1 -1
- data/app/views/active_scaffold_overrides/row.js.erb +2 -2
- data/app/views/active_scaffold_overrides/search.html.erb +1 -1
- data/app/views/active_scaffold_overrides/show.html.erb +3 -3
- data/app/views/active_scaffold_overrides/update.html.erb +2 -2
- data/app/views/active_scaffold_overrides/update_column.js.erb +4 -4
- data/app/views/active_scaffold_overrides/update_row.js.erb +1 -1
- data/lib/active_scaffold/actions/common_search.rb +5 -3
- data/lib/active_scaffold/actions/core.rb +57 -32
- data/lib/active_scaffold/actions/create.rb +19 -17
- data/lib/active_scaffold/actions/delete.rb +10 -12
- data/lib/active_scaffold/actions/field_search.rb +28 -13
- data/lib/active_scaffold/actions/list.rb +34 -34
- data/lib/active_scaffold/actions/mark.rb +5 -5
- data/lib/active_scaffold/actions/nested.rb +64 -56
- data/lib/active_scaffold/actions/search.rb +2 -2
- data/lib/active_scaffold/actions/show.rb +5 -5
- data/lib/active_scaffold/actions/subform.rb +15 -4
- data/lib/active_scaffold/actions/update.rb +20 -20
- data/lib/active_scaffold/active_record_permissions.rb +4 -3
- data/lib/active_scaffold/attribute_params.rb +51 -50
- data/lib/active_scaffold/bridges/active_storage/active_storage_bridge.rb +4 -4
- data/lib/active_scaffold/bridges/active_storage/active_storage_helpers.rb +6 -2
- data/lib/active_scaffold/bridges/active_storage.rb +1 -1
- data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +3 -3
- data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +4 -1
- data/lib/active_scaffold/bridges/bitfields.rb +1 -1
- data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +9 -8
- data/lib/active_scaffold/bridges/cancan.rb +8 -8
- data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +1 -1
- data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +4 -3
- data/lib/active_scaffold/bridges/carrierwave.rb +2 -2
- data/lib/active_scaffold/bridges/chosen.rb +1 -5
- data/lib/active_scaffold/bridges/country_select/country_select_bridge_helper.rb +4 -2
- data/lib/active_scaffold/bridges/date_picker/ext.rb +20 -12
- data/lib/active_scaffold/bridges/date_picker/helper.rb +37 -33
- data/lib/active_scaffold/bridges/date_picker.rb +1 -4
- data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +1 -1
- data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +3 -2
- data/lib/active_scaffold/bridges/dragonfly.rb +1 -1
- data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +3 -2
- data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +2 -1
- data/lib/active_scaffold/bridges/file_column/form_ui.rb +4 -9
- data/lib/active_scaffold/bridges/file_column/list_ui.rb +6 -3
- data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +3 -3
- data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +1 -4
- data/lib/active_scaffold/bridges/file_column.rb +1 -0
- data/lib/active_scaffold/bridges/paper_trail/actions.rb +4 -2
- data/lib/active_scaffold/bridges/paper_trail/config.rb +1 -1
- data/lib/active_scaffold/bridges/paper_trail/helper.rb +1 -1
- data/lib/active_scaffold/bridges/paper_trail/paper_trail_bridge.rb +2 -1
- data/lib/active_scaffold/bridges/paperclip/list_ui.rb +3 -2
- data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +1 -1
- data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +10 -9
- data/lib/active_scaffold/bridges/paperclip.rb +2 -1
- data/lib/active_scaffold/bridges/record_select/helpers.rb +10 -11
- data/lib/active_scaffold/bridges/semantic_attributes/column.rb +3 -1
- data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +3 -7
- data/lib/active_scaffold/bridges/tiny_mce.rb +2 -7
- data/lib/active_scaffold/bridges/usa_state_select/usa_state_select_helper.rb +7 -7
- data/lib/active_scaffold/bridges.rb +7 -5
- data/lib/active_scaffold/config/base.rb +20 -24
- data/lib/active_scaffold/config/core.rb +27 -39
- data/lib/active_scaffold/config/create.rb +1 -1
- data/lib/active_scaffold/config/delete.rb +9 -9
- data/lib/active_scaffold/config/field_search.rb +4 -9
- data/lib/active_scaffold/config/form.rb +3 -1
- data/lib/active_scaffold/config/list.rb +19 -15
- data/lib/active_scaffold/config/nested.rb +2 -2
- data/lib/active_scaffold/config/search.rb +5 -5
- data/lib/active_scaffold/config/show.rb +1 -1
- data/lib/active_scaffold/config/subform.rb +1 -1
- data/lib/active_scaffold/config/update.rb +4 -5
- data/lib/active_scaffold/configurable.rb +2 -1
- data/lib/active_scaffold/constraints.rb +16 -11
- data/lib/active_scaffold/core.rb +25 -27
- data/lib/active_scaffold/data_structures/action_columns.rb +10 -3
- data/lib/active_scaffold/data_structures/action_link.rb +19 -9
- data/lib/active_scaffold/data_structures/action_links.rb +20 -26
- data/lib/active_scaffold/data_structures/actions.rb +3 -3
- data/lib/active_scaffold/data_structures/association/abstract.rb +8 -4
- data/lib/active_scaffold/data_structures/association/active_mongoid.rb +1 -0
- data/lib/active_scaffold/data_structures/association/active_record.rb +1 -4
- data/lib/active_scaffold/data_structures/column.rb +368 -327
- data/lib/active_scaffold/data_structures/columns.rb +3 -2
- data/lib/active_scaffold/data_structures/nested_info.rb +6 -5
- data/lib/active_scaffold/data_structures/proxy_column.rb +68 -0
- data/lib/active_scaffold/data_structures/set.rb +7 -4
- data/lib/active_scaffold/data_structures/sorting.rb +21 -12
- data/lib/active_scaffold/engine.rb +12 -12
- data/lib/active_scaffold/extensions/action_controller_rendering.rb +5 -5
- data/lib/active_scaffold/extensions/action_controller_rescueing.rb +1 -1
- data/lib/active_scaffold/extensions/action_view_rendering.rb +29 -31
- data/lib/active_scaffold/extensions/ice_nine.rb +2 -1
- data/lib/active_scaffold/extensions/localize.rb +2 -2
- data/lib/active_scaffold/extensions/name_option_for_datetime.rb +1 -1
- data/lib/active_scaffold/extensions/routing_mapper.rb +5 -4
- data/lib/active_scaffold/extensions/unsaved_associated.rb +3 -2
- data/lib/active_scaffold/finder.rb +71 -78
- data/lib/active_scaffold/helpers/action_link_helpers.rb +37 -49
- data/lib/active_scaffold/helpers/association_helpers.rb +3 -2
- data/lib/active_scaffold/helpers/controller_helpers.rb +18 -16
- data/lib/active_scaffold/helpers/form_column_helpers.rb +69 -53
- data/lib/active_scaffold/helpers/human_condition_helpers.rb +17 -15
- data/lib/active_scaffold/helpers/id_helpers.rb +5 -5
- data/lib/active_scaffold/helpers/list_column_helpers.rb +35 -38
- data/lib/active_scaffold/helpers/pagination_helpers.rb +4 -4
- data/lib/active_scaffold/helpers/search_column_helpers.rb +25 -34
- data/lib/active_scaffold/helpers/show_column_helpers.rb +7 -4
- data/lib/active_scaffold/helpers/tabs_helpers.rb +88 -0
- data/lib/active_scaffold/helpers/view_helpers.rb +15 -13
- data/lib/active_scaffold/marked_model.rb +1 -2
- data/lib/active_scaffold/orm_checks.rb +6 -4
- data/lib/active_scaffold/paginator.rb +3 -2
- data/lib/active_scaffold/registry.rb +5 -0
- data/lib/active_scaffold/tableless.rb +24 -14
- data/lib/active_scaffold/version.rb +4 -4
- data/lib/active_scaffold.rb +8 -34
- data/lib/generators/active_scaffold/controller_generator.rb +20 -20
- data/lib/generators/active_scaffold/install_generator.rb +4 -8
- data/lib/generators/active_scaffold/resource_generator.rb +31 -31
- data/lib/tasks/brakeman.rake +1 -1
- data/shoulda_macros/macros.rb +14 -14
- metadata +11 -232
- data/app/assets/javascripts/prototype/active_scaffold.js +0 -1249
- data/app/assets/javascripts/prototype/active_scaffold_chosen.js +0 -0
- data/app/assets/javascripts/prototype/dhtml_history.js +0 -870
- data/app/assets/javascripts/prototype/form_enhancements.js +0 -117
- data/app/assets/javascripts/prototype/tiny_mce_bridge.js +0 -17
- data/app/views/active_scaffold_overrides/_list_messages_content.html.erb +0 -8
- data/app/views/active_scaffold_overrides/_new_record.js.erb +0 -15
- data/app/views/active_scaffold_overrides/_popup_adapter.html.erb +0 -20
- data/app/views/active_scaffold_overrides/_refresh_create_form.js.erb +0 -12
- data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +0 -58
- data/lib/active_scaffold/bridges/calendar_date_select.rb +0 -17
- data/lib/active_scaffold/data_structures/action_link_separator.rb +0 -13
- data/lib/active_scaffold/extensions/cow_proxy.rb +0 -102
- data/test/active_scaffold_config_mock.rb +0 -33
- data/test/bridges/bridge_test.rb +0 -88
- data/test/bridges/date_picker_test.rb +0 -31
- data/test/bridges/paper_trail_test.rb +0 -16
- data/test/bridges/paperclip_test.rb +0 -85
- data/test/bridges/tiny_mce_test.rb +0 -61
- data/test/class_with_finder.rb +0 -42
- data/test/company.rb +0 -97
- data/test/config/base_test.rb +0 -17
- data/test/config/core_test.rb +0 -66
- data/test/config/create_test.rb +0 -72
- data/test/config/delete_test.rb +0 -35
- data/test/config/field_search_test.rb +0 -49
- data/test/config/list_test.rb +0 -134
- data/test/config/nested_test.rb +0 -55
- data/test/config/search_test.rb +0 -62
- data/test/config/show_test.rb +0 -45
- data/test/config/subform_test.rb +0 -19
- data/test/config/update_test.rb +0 -52
- data/test/const_mocker.rb +0 -32
- data/test/data_structures/action_columns_test.rb +0 -112
- data/test/data_structures/action_link_test.rb +0 -79
- data/test/data_structures/action_links_test.rb +0 -78
- data/test/data_structures/actions_test.rb +0 -25
- data/test/data_structures/association_column_test.rb +0 -41
- data/test/data_structures/column_test.rb +0 -186
- data/test/data_structures/columns_test.rb +0 -68
- data/test/data_structures/set_test.rb +0 -84
- data/test/data_structures/sorting_test.rb +0 -148
- data/test/data_structures/standard_column_test.rb +0 -23
- data/test/data_structures/validation_reflection_test.rb +0 -69
- data/test/data_structures/virtual_column_test.rb +0 -23
- data/test/extensions/action_view_rendering_test.rb +0 -20
- data/test/extensions/active_record_test.rb +0 -44
- data/test/extensions/routing_mapper_test.rb +0 -73
- data/test/helpers/form_column_helpers_test.rb +0 -34
- data/test/helpers/list_column_helpers_test.rb +0 -53
- data/test/helpers/pagination_helpers_test.rb +0 -65
- data/test/helpers/search_column_helpers_test.rb +0 -15
- data/test/misc/active_record_permissions_test.rb +0 -193
- data/test/misc/attribute_params_test.rb +0 -460
- data/test/misc/calculation_test.rb +0 -39
- data/test/misc/configurable_test.rb +0 -97
- data/test/misc/constraints_test.rb +0 -209
- data/test/misc/convert_numbers_format_test.rb +0 -171
- data/test/misc/finder_test.rb +0 -124
- data/test/misc/lang_test.rb +0 -10
- data/test/misc/parse_datetime_test.rb +0 -159
- data/test/misc/render_test.rb +0 -9
- data/test/misc/tableless_test.rb +0 -56
- data/test/mock_app/.gitignore +0 -2
- data/test/mock_app/Rakefile +0 -7
- data/test/mock_app/app/assets/config/manifest.js +0 -0
- data/test/mock_app/app/controllers/addresses_controller.rb +0 -4
- data/test/mock_app/app/controllers/application_controller.rb +0 -10
- data/test/mock_app/app/controllers/buildings_controller.rb +0 -4
- data/test/mock_app/app/controllers/cars_controller.rb +0 -5
- data/test/mock_app/app/controllers/contacts_controller.rb +0 -4
- data/test/mock_app/app/controllers/floors_controller.rb +0 -6
- data/test/mock_app/app/controllers/people_controller.rb +0 -8
- data/test/mock_app/app/controllers/roles_controller.rb +0 -4
- data/test/mock_app/app/helpers/application_helper.rb +0 -3
- data/test/mock_app/app/models/address.rb +0 -3
- data/test/mock_app/app/models/building.rb +0 -9
- data/test/mock_app/app/models/car.rb +0 -3
- data/test/mock_app/app/models/contact.rb +0 -3
- data/test/mock_app/app/models/file_model.rb +0 -31
- data/test/mock_app/app/models/floor.rb +0 -8
- data/test/mock_app/app/models/person.rb +0 -12
- data/test/mock_app/app/models/role.rb +0 -3
- data/test/mock_app/app/views/active_scaffold_overrides/_form.html.erb +0 -2
- data/test/mock_app/app/views/active_scaffold_overrides/list.html.erb +0 -2
- data/test/mock_app/app/views/people/_first_name_form_column.html.erb +0 -2
- data/test/mock_app/app/views/people/_form.html.erb +0 -2
- data/test/mock_app/app/views/people/list.html.erb +0 -2
- data/test/mock_app/config/application.rb +0 -14
- data/test/mock_app/config/boot.rb +0 -7
- data/test/mock_app/config/database.yml +0 -16
- data/test/mock_app/config/environment.rb +0 -6
- data/test/mock_app/config/environments/development.rb +0 -24
- data/test/mock_app/config/environments/production.rb +0 -49
- data/test/mock_app/config/environments/test.rb +0 -34
- data/test/mock_app/config/initializers/backtrace_silencers.rb +0 -7
- data/test/mock_app/config/initializers/inflections.rb +0 -10
- data/test/mock_app/config/initializers/mime_types.rb +0 -5
- data/test/mock_app/config/initializers/secret_token.rb +0 -11
- data/test/mock_app/config/initializers/session_store.rb +0 -8
- data/test/mock_app/config/initializers/wrap_parameters.rb +0 -14
- data/test/mock_app/config/locales/en.yml +0 -5
- data/test/mock_app/config/routes.rb +0 -17
- data/test/mock_app/config.ru +0 -4
- data/test/mock_app/db/schema.rb +0 -68
- data/test/mock_app/db/test.sqlite3 +0 -1
- data/test/model_stub.rb +0 -64
- data/test/performance/list_cars_performance_test.rb +0 -34
- data/test/performance/list_people_performance_test.rb +0 -31
- data/test/performance_test_help.rb +0 -3
- data/test/run_all.rb +0 -6
- data/test/test_helper.rb +0 -71
- data/vendor/assets/javascripts/getprototypeof.js +0 -12
@@ -1,209 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module ModelStubs
|
4
|
-
class ModelStub < ActiveRecord::Base
|
5
|
-
self.abstract_class = true
|
6
|
-
def self.columns; @columns ||= [ColumnMock.new('foo', '', 'string')] end
|
7
|
-
|
8
|
-
def self.columns_hash; @hash ||= Hash[@columns.map { |c| [c.name, c] }] end
|
9
|
-
|
10
|
-
if respond_to? :type_for_attribute
|
11
|
-
def self.type_for_attribute(column_name)
|
12
|
-
defined?(ActiveModel::Type) ? ActiveModel::Type::String.new : super
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.table_name
|
17
|
-
@table_name || to_s.split('::').last.underscore.pluralize
|
18
|
-
end
|
19
|
-
self.store_full_sti_class = false
|
20
|
-
def self.load_schema; end
|
21
|
-
end
|
22
|
-
|
23
|
-
##
|
24
|
-
## Standard associations
|
25
|
-
##
|
26
|
-
|
27
|
-
class Address < ModelStub
|
28
|
-
belongs_to :addressable, :polymorphic => true
|
29
|
-
end
|
30
|
-
|
31
|
-
class User < ModelStub
|
32
|
-
has_and_belongs_to_many :roles
|
33
|
-
has_one :subscription
|
34
|
-
has_one :address, :as => :addressable
|
35
|
-
end
|
36
|
-
|
37
|
-
class Service < ModelStub
|
38
|
-
has_many :subscriptions
|
39
|
-
has_many :users, :through => :subscriptions
|
40
|
-
end
|
41
|
-
|
42
|
-
class Subscription < ModelStub
|
43
|
-
belongs_to :service
|
44
|
-
belongs_to :user
|
45
|
-
end
|
46
|
-
|
47
|
-
class Role < ModelStub
|
48
|
-
has_and_belongs_to_many :users
|
49
|
-
end
|
50
|
-
|
51
|
-
##
|
52
|
-
## These versions of the associations require extra configuration to work properly
|
53
|
-
##
|
54
|
-
|
55
|
-
class OtherAddress < ModelStub
|
56
|
-
self.table_name = 'addresses'
|
57
|
-
belongs_to :other_addressable, :polymorphic => true
|
58
|
-
end
|
59
|
-
|
60
|
-
class OtherUser < ModelStub
|
61
|
-
self.table_name = 'users'
|
62
|
-
has_and_belongs_to_many :other_roles, :class_name => 'ModelStubs::OtherRole', :foreign_key => 'user_id', :association_foreign_key => 'role_id', :join_table => 'roles_users'
|
63
|
-
has_one :other_subscription, :class_name => 'ModelStubs::OtherSubscription', :foreign_key => 'user_id'
|
64
|
-
has_one :other_address, :as => :other_addressable, :class_name => 'ModelStubs::OtherAddress', :foreign_key => 'addressable_id'
|
65
|
-
end
|
66
|
-
|
67
|
-
class OtherService < ModelStub
|
68
|
-
self.table_name = 'services'
|
69
|
-
has_many :other_subscriptions, :class_name => 'ModelStubs::OtherSubscription', :foreign_key => 'service_id'
|
70
|
-
has_many :other_users, :through => :other_subscriptions # :class_name and :foreign_key are ignored for :through
|
71
|
-
end
|
72
|
-
|
73
|
-
class OtherSubscription < ModelStub
|
74
|
-
self.table_name = 'subscriptions'
|
75
|
-
belongs_to :other_service, :class_name => 'ModelStubs::OtherService', :foreign_key => 'service_id'
|
76
|
-
belongs_to :other_user, :class_name => 'ModelStubs::OtherUser', :foreign_key => 'user_id'
|
77
|
-
end
|
78
|
-
|
79
|
-
class OtherRole < ModelStub
|
80
|
-
self.table_name = 'roles'
|
81
|
-
has_and_belongs_to_many :other_users, :class_name => 'ModelStubs::OtherUser', :foreign_key => 'role_id', :association_foreign_key => 'user_id', :join_table => 'roles_users'
|
82
|
-
end
|
83
|
-
|
84
|
-
class PrimaryKeyUser < ModelStub
|
85
|
-
has_many :locations, :class_name => 'PrimaryKeyLocation', :foreign_key => :username, :primary_key => :name
|
86
|
-
end
|
87
|
-
|
88
|
-
class PrimaryKeyLocation < ModelStub
|
89
|
-
belongs_to :user, :class_name => 'PrimaryKeyUser', :foreign_key => :username, :primary_key => :name
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
class ConstraintsTestObject
|
94
|
-
# stub out what the mixin expects to find ...
|
95
|
-
def self.before_action(*); end
|
96
|
-
|
97
|
-
def self.helper_method(*); end
|
98
|
-
attr_accessor :active_scaffold_preload
|
99
|
-
attr_accessor :active_scaffold_references
|
100
|
-
attr_accessor :active_scaffold_habtm_joins
|
101
|
-
attr_accessor :active_scaffold_config
|
102
|
-
attr_accessor :params
|
103
|
-
def merge_conditions(old, new)
|
104
|
-
[old, new].compact.flatten
|
105
|
-
end
|
106
|
-
|
107
|
-
# mixin the constraint code
|
108
|
-
include ActiveScaffold::Constraints
|
109
|
-
|
110
|
-
# make the constraints read-write, instead of coming from the session
|
111
|
-
attr_accessor :active_scaffold_constraints
|
112
|
-
|
113
|
-
def initialize
|
114
|
-
@active_scaffold_preload = []
|
115
|
-
@active_scaffold_references = []
|
116
|
-
@active_scaffold_habtm_joins = []
|
117
|
-
@params = {}
|
118
|
-
end
|
119
|
-
|
120
|
-
def params_hash?(value)
|
121
|
-
value.is_a? Hash
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
class ConstraintsTest < Minitest::Test
|
126
|
-
def setup
|
127
|
-
@test_object = ConstraintsTestObject.new
|
128
|
-
end
|
129
|
-
|
130
|
-
def test_constraint_conditions_for_default_associations
|
131
|
-
@test_object.active_scaffold_config = config_for('user')
|
132
|
-
# has_one (vs belongs_to)
|
133
|
-
assert_constraint_condition({:subscription => 5}, [{'subscriptions' => {'id' => 5}}], 'find the user with subscription #5')
|
134
|
-
# habtm (vs habtm)
|
135
|
-
assert_constraint_condition({:roles => 4}, [{'roles' => {'id' => 4}}], 'find all users with role #4')
|
136
|
-
# has_one (vs polymorphic)
|
137
|
-
assert_constraint_condition({:address => 11}, [{'addresses' => {'id' => 11}}], 'find the user with address #11')
|
138
|
-
# reverse of a has_many :through
|
139
|
-
assert_constraint_condition({:subscription => {:service => 5}}, [{'services' => {'id' => 5}}], 'find all users subscribed to service #5')
|
140
|
-
assert(@test_object.active_scaffold_references.include?(:subscription => :service), 'multi-level association include')
|
141
|
-
|
142
|
-
@test_object.active_scaffold_config = config_for('subscription')
|
143
|
-
# belongs_to (vs has_one)
|
144
|
-
assert_constraint_condition({:user => 2}, [{'subscriptions' => {'user_id' => 2}}], 'find the subscription for user #2')
|
145
|
-
# belongs_to (vs has_many)
|
146
|
-
assert_constraint_condition({:service => 1}, [{'subscriptions' => {'service_id' => 1}}], 'find all subscriptions for service #1')
|
147
|
-
|
148
|
-
@test_object.active_scaffold_config = config_for('service')
|
149
|
-
# has_many (vs belongs_to)
|
150
|
-
assert_constraint_condition({:subscriptions => 10}, [{'subscriptions' => {'id' => 10}}], 'find the service with subscription #10')
|
151
|
-
# has_many :through (through has_many)
|
152
|
-
assert_constraint_condition({:users => 7}, [{'users' => {'id' => 7}}], 'find the service with user #7')
|
153
|
-
|
154
|
-
@test_object.active_scaffold_config = config_for('address')
|
155
|
-
# belongs_to :polymorphic => true
|
156
|
-
assert_constraint_condition({:addressable => ['ModelStubs::User', 14]}, [{'addresses' => {'addressable_id' => 14, 'addressable_type' => 'ModelStubs::User'}}], 'find all addresses for user #14')
|
157
|
-
end
|
158
|
-
|
159
|
-
def test_constraint_conditions_for_configured_associations
|
160
|
-
@test_object.active_scaffold_config = config_for('other_user')
|
161
|
-
# has_one (vs belongs_to)
|
162
|
-
assert_constraint_condition({:other_subscription => 5}, [{'subscriptions' => {'id' => 5}}], 'find the user with subscription #5')
|
163
|
-
# habtm (vs habtm)
|
164
|
-
assert_constraint_condition({:other_roles => 4}, [{'roles' => {'id' => 4}}], 'find all users with role #4')
|
165
|
-
# has_one (vs polymorphic)
|
166
|
-
assert_constraint_condition({:other_address => 11}, [{'addresses' => {'id' => 11}}], 'find the user with address #11')
|
167
|
-
# reverse of a has_many :through
|
168
|
-
assert_constraint_condition({:other_subscription => {:other_service => 5}}, [{'services' => {'id' => 5}}], 'find all users subscribed to service #5')
|
169
|
-
|
170
|
-
@test_object.active_scaffold_config = config_for('other_subscription')
|
171
|
-
# belongs_to (vs has_one)
|
172
|
-
assert_constraint_condition({:other_user => 2}, [{'subscriptions' => {'user_id' => 2}}], 'find the subscription for user #2')
|
173
|
-
# belongs_to (vs has_many)
|
174
|
-
assert_constraint_condition({:other_service => 1}, [{'subscriptions' => {'service_id' => 1}}], 'find all subscriptions for service #1')
|
175
|
-
|
176
|
-
@test_object.active_scaffold_config = config_for('other_service')
|
177
|
-
# has_many (vs belongs_to)
|
178
|
-
assert_constraint_condition({:other_subscriptions => 10}, [{'subscriptions' => {'id' => 10}}], 'find the service with subscription #10')
|
179
|
-
# has_many :through (through has_many)
|
180
|
-
assert_constraint_condition({:other_users => 7}, [{'users' => {'id' => 7}}], 'find the service with user #7')
|
181
|
-
|
182
|
-
@test_object.active_scaffold_config = config_for('other_address')
|
183
|
-
# belongs_to :polymorphic => true
|
184
|
-
assert_constraint_condition({:other_addressable => ['ModelStubs::OtherUser', 14]}, [{'addresses' => {'other_addressable_id' => 14, 'other_addressable_type' => 'ModelStubs::OtherUser'}}], 'find all addresses for user #14')
|
185
|
-
end
|
186
|
-
|
187
|
-
def test_constraint_conditions_for_normal_attributes
|
188
|
-
@test_object.active_scaffold_config = config_for('user')
|
189
|
-
assert_constraint_condition({'foo' => 'bar'}, [['"users"."foo" = ?', 'bar']], 'normal column-based constraint')
|
190
|
-
end
|
191
|
-
|
192
|
-
def test_constraint_conditions_for_associations_with_primary_key_option
|
193
|
-
@test_object.active_scaffold_config = config_for('primary_key_location')
|
194
|
-
# user = ModelStubs::PrimaryKeyUser.new(:id => 1, :name => 'User Name')
|
195
|
-
ModelStubs::PrimaryKeyUser.expects(:find).with(1).returns(stub(:id => 1, :name => 'User Name'))
|
196
|
-
assert_constraint_condition({'user' => 1}, [{'primary_key_locations' => {'username' => 'User Name'}}], 'association with primary-key constraint')
|
197
|
-
end
|
198
|
-
|
199
|
-
protected
|
200
|
-
|
201
|
-
def assert_constraint_condition(constraint, condition, message = nil)
|
202
|
-
@test_object.active_scaffold_constraints = constraint
|
203
|
-
assert_equal condition, @test_object.send(:conditions_from_constraints), message
|
204
|
-
end
|
205
|
-
|
206
|
-
def config_for(klass, namespace = nil)
|
207
|
-
super(klass, 'model_stubs/')
|
208
|
-
end
|
209
|
-
end
|
@@ -1,171 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'active_scaffold_config_mock'
|
3
|
-
|
4
|
-
class NumberModel < ActiveRecord::Base
|
5
|
-
include ActiveScaffold::ActiveRecordPermissions::ModelUserAccess::Model
|
6
|
-
def self.columns
|
7
|
-
@columns ||= [ColumnMock.new('id', '', 'int(11)'), ColumnMock.new('number', '', 'double(10,2)')]
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.columns_hash
|
11
|
-
@columns_hash ||= Hash[columns.map { |c| [c.name, c] }]
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.load_schema!
|
15
|
-
columns_hash.each do |name, column|
|
16
|
-
define_attribute(
|
17
|
-
name,
|
18
|
-
connection.lookup_cast_type_from_column(column),
|
19
|
-
default: column.default
|
20
|
-
)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class ConvertNumbersFormatTest < Minitest::Test
|
26
|
-
include ActiveScaffoldConfigMock
|
27
|
-
include ActiveScaffold::AttributeParams
|
28
|
-
include ActiveScaffold::Finder
|
29
|
-
include ActiveScaffold::Helpers::ControllerHelpers
|
30
|
-
|
31
|
-
def setup
|
32
|
-
NumberModel.load_schema! if Rails.version >= '5.0'
|
33
|
-
I18n.backend.store_translations :en, :number => {:format => {
|
34
|
-
:delimiter => ',',
|
35
|
-
:separator => '.'
|
36
|
-
}}
|
37
|
-
I18n.backend.store_translations :es, :number => {:format => {
|
38
|
-
:delimiter => '.',
|
39
|
-
:separator => ','
|
40
|
-
}}
|
41
|
-
I18n.backend.store_translations :ru, :number => {:currency => {
|
42
|
-
:format => {
|
43
|
-
:separator => ',',
|
44
|
-
:delimiter => ''
|
45
|
-
}
|
46
|
-
}}
|
47
|
-
|
48
|
-
@config = config_for('number_model')
|
49
|
-
@config.columns[:number].form_ui = nil
|
50
|
-
end
|
51
|
-
|
52
|
-
def teardown
|
53
|
-
I18n.locale = :en
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_english_format_with_decimal_separator_using_english_language
|
57
|
-
I18n.locale = :en
|
58
|
-
assert_equal 0.1, convert_number('.1')
|
59
|
-
assert_equal 0.1, convert_number('.100')
|
60
|
-
assert_equal 0.1, convert_number('0.1')
|
61
|
-
assert_equal 0.345, convert_number('0.345')
|
62
|
-
assert_equal 0.345, convert_number('+0.345')
|
63
|
-
assert_equal(-0.345, convert_number('-0.345'))
|
64
|
-
assert_equal 9.345, convert_number('9.345')
|
65
|
-
assert_equal 9.1, convert_number('9.1')
|
66
|
-
assert_equal 90.1, convert_number('90.1')
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_english_format_with_thousand_delimiter_using_english_language
|
70
|
-
I18n.locale = :en
|
71
|
-
assert_equal 1000, convert_number('1,000')
|
72
|
-
assert_equal 1000, convert_number('+1,000')
|
73
|
-
assert_equal(-1000, convert_number('-1,000'))
|
74
|
-
assert_equal 1_000_000, convert_number('1,000,000')
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_english_format_with_separator_and_delimiter_using_english_language
|
78
|
-
I18n.locale = :en
|
79
|
-
assert_equal 1234.1, convert_number('1,234.1')
|
80
|
-
assert_equal 1234.1, convert_number('1,234.100')
|
81
|
-
assert_equal 1234.345, convert_number('+1,234.345')
|
82
|
-
assert_equal(-1234.345, convert_number('-1,234.345'))
|
83
|
-
assert_equal 1_234_000.1, convert_number('1,234,000.100')
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_english_format_with_decimal_separator_using_spanish_language
|
87
|
-
I18n.locale = :es
|
88
|
-
assert_equal 0.1, convert_number('.1')
|
89
|
-
assert_equal 0.1, convert_number('0.1')
|
90
|
-
assert_equal 0.12, convert_number('+0.12')
|
91
|
-
assert_equal(-0.12, convert_number('-0.12'))
|
92
|
-
assert_equal 9.1, convert_number('9.1')
|
93
|
-
assert_equal 90.1, convert_number('90.1')
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_spanish_format_with_decimal_separator_using_spanish_language
|
97
|
-
I18n.locale = :es
|
98
|
-
assert_equal 0.1, convert_number(',1')
|
99
|
-
assert_equal 0.1, convert_number(',100')
|
100
|
-
assert_equal 0.1, convert_number('0,1')
|
101
|
-
assert_equal 0.345, convert_number('0,345')
|
102
|
-
assert_equal 0.345, convert_number('+0,345')
|
103
|
-
assert_equal(-0.345, convert_number('-0,345'))
|
104
|
-
assert_equal 9.1, convert_number('9,1')
|
105
|
-
assert_equal 90.1, convert_number('90,1')
|
106
|
-
assert_equal 9.1, convert_number('9,100')
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_spanish_format_with_thousand_delimiter_using_spanish_language
|
110
|
-
I18n.locale = :es
|
111
|
-
assert_equal 1000, convert_number('1.000')
|
112
|
-
assert_equal 1000, convert_number('+1.000')
|
113
|
-
assert_equal(-1000, convert_number('-1.000'))
|
114
|
-
assert_equal 1_000_000, convert_number('1.000.000')
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_spanish_format_with_separator_and_decimal_using_spanish_language
|
118
|
-
I18n.locale = :es
|
119
|
-
assert_equal 1230.1, convert_number('1.230,1')
|
120
|
-
assert_equal 1230.1, convert_number('1.230,100')
|
121
|
-
assert_equal 1234.345, convert_number('+1.234,345')
|
122
|
-
assert_equal(-1234.345, convert_number('-1.234,345'))
|
123
|
-
assert_equal 1_234_000.1, convert_number('1.234.000,100')
|
124
|
-
end
|
125
|
-
|
126
|
-
def test_english_currency_format_with_decimal_separator_using_russian_language
|
127
|
-
I18n.locale = :ru
|
128
|
-
assert_equal 0.1, convert_number('.1', :currency)
|
129
|
-
assert_equal 0.1, convert_number('0.1', :currency)
|
130
|
-
assert_equal 0.12, convert_number('+0.12', :currency)
|
131
|
-
assert_equal(-0.12, convert_number('-0.12', :currency))
|
132
|
-
assert_equal 9.1, convert_number('9.1', :currency)
|
133
|
-
assert_equal 90.1, convert_number('90.1', :currency)
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_russian_currency_format_with_decimal_separator_using_russian_language
|
137
|
-
I18n.locale = :ru
|
138
|
-
assert_equal 0.1, convert_number(',1', :currency)
|
139
|
-
assert_equal 0.1, convert_number(',100', :currency)
|
140
|
-
assert_equal 0.1, convert_number('0,1', :currency)
|
141
|
-
assert_equal 0.345, convert_number('0,345', :currency)
|
142
|
-
assert_equal 0.345, convert_number('+0,345', :currency)
|
143
|
-
assert_equal(-0.345, convert_number('-0,345', :currency))
|
144
|
-
assert_equal 9.1, convert_number('9,1', :currency)
|
145
|
-
assert_equal 90.1, convert_number('90,1', :currency)
|
146
|
-
assert_equal 9.1, convert_number('9,100', :currency)
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_english_format_with_decimal_separator_with_no_localized_format
|
150
|
-
I18n.locale = :ru
|
151
|
-
assert_equal 0.1, convert_number('.1')
|
152
|
-
assert_equal 0.1, convert_number('0.1')
|
153
|
-
end
|
154
|
-
|
155
|
-
private
|
156
|
-
|
157
|
-
def convert_number(value, format = nil)
|
158
|
-
record = NumberModel.new
|
159
|
-
@config.columns[:number].options[:format] = format unless format.nil?
|
160
|
-
update_record_from_params(record, @config.create.columns, HashWithIndifferentAccess.new(:number => value))
|
161
|
-
record.number
|
162
|
-
end
|
163
|
-
|
164
|
-
def params_hash?(value)
|
165
|
-
value.is_a? Hash
|
166
|
-
end
|
167
|
-
|
168
|
-
def params_hash(value)
|
169
|
-
value
|
170
|
-
end
|
171
|
-
end
|
data/test/misc/finder_test.rb
DELETED
@@ -1,124 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'class_with_finder'
|
3
|
-
|
4
|
-
class FinderTest < Minitest::Test
|
5
|
-
def setup
|
6
|
-
@klass = ClassWithFinder.new
|
7
|
-
@klass.active_scaffold_config.stubs(model: ModelStub)
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_create_conditions_for_columns
|
11
|
-
columns = [
|
12
|
-
ActiveScaffold::DataStructures::Column.new(:a, ModelStub),
|
13
|
-
ActiveScaffold::DataStructures::Column.new(:b, ModelStub)
|
14
|
-
]
|
15
|
-
tokens = %w[foo bar]
|
16
|
-
|
17
|
-
expected_conditions = [
|
18
|
-
['"model_stubs"."a" LIKE ? OR "model_stubs"."b" LIKE ?', '%foo%', '%foo%'],
|
19
|
-
['"model_stubs"."a" LIKE ? OR "model_stubs"."b" LIKE ?', '%bar%', '%bar%']
|
20
|
-
]
|
21
|
-
assert_equal expected_conditions, ClassWithFinder.conditions_for_columns(tokens, columns)
|
22
|
-
|
23
|
-
expected_conditions = [
|
24
|
-
'"model_stubs"."a" LIKE ? OR "model_stubs"."b" LIKE ?',
|
25
|
-
'%foo%', '%foo%'
|
26
|
-
]
|
27
|
-
assert_equal [expected_conditions], ClassWithFinder.conditions_for_columns('foo', columns)
|
28
|
-
|
29
|
-
assert_nil ClassWithFinder.conditions_for_columns('foo', [])
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_method_sorting
|
33
|
-
column = ActiveScaffold::DataStructures::Column.new('a', ModelStub)
|
34
|
-
column.sort_by :method => proc { self }
|
35
|
-
|
36
|
-
collection = [16_000, 2853, 98_765, 6188, 4]
|
37
|
-
assert_equal collection.sort, @klass.send(:sort_collection_by_column, collection, column, 'asc')
|
38
|
-
assert_equal collection.sort.reverse, @klass.send(:sort_collection_by_column, collection, column, 'desc')
|
39
|
-
|
40
|
-
collection = ['a', nil, 'b']
|
41
|
-
result = @klass.send(:sort_collection_by_column, collection, column, 'asc')
|
42
|
-
assert_equal [nil, 'a', 'b'], result
|
43
|
-
|
44
|
-
column.sort_by :method => 'self'
|
45
|
-
collection = [3, 1, 2]
|
46
|
-
assert_equal collection.sort, @klass.send(:sort_collection_by_column, collection, column, 'asc')
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_count_with_group
|
50
|
-
@klass.expects(:custom_finder_options).returns(:group => :a)
|
51
|
-
relation_class.any_instance.expects(:count).returns('foo' => 5, 'bar' => 4)
|
52
|
-
relation_class.any_instance.expects(:limit).with(20).returns(ModelStub.where(nil))
|
53
|
-
relation_class.any_instance.expects(:offset).with(0).returns(ModelStub.where(nil))
|
54
|
-
page = @klass.send :find_page, :per_page => 20, :pagination => true
|
55
|
-
page.items
|
56
|
-
|
57
|
-
assert_kind_of Integer, page.pager.count
|
58
|
-
assert_equal 2, page.pager.count
|
59
|
-
assert_equal 1, page.pager.number_of_pages
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_disabled_pagination
|
63
|
-
relation_class.any_instance.expects(:count).never
|
64
|
-
relation_class.any_instance.expects(:limit).never
|
65
|
-
relation_class.any_instance.expects(:offset).never
|
66
|
-
ModelStub.expects(:count).never
|
67
|
-
page = @klass.send :find_page, :per_page => 20, :pagination => false
|
68
|
-
page.items
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_infinite_pagination
|
72
|
-
ModelStub.expects(:count).never
|
73
|
-
@klass.send :find_page, :pagination => :infinite
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_condition_for_column
|
77
|
-
column = ActiveScaffold::DataStructures::Column.new('adult', Person)
|
78
|
-
assert_equal ['"people"."adult" = ?', false], ClassWithFinder.condition_for_column(column, '0', :full, {})
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_condition_for_polymorphic_column
|
82
|
-
column = ActiveScaffold::DataStructures::Column.new('addressable', Address)
|
83
|
-
column.search_sql = [{subquery: [Building, 'name']}]
|
84
|
-
condition = ClassWithFinder.condition_for_column(column, 'test search', :full, {})
|
85
|
-
assert_equal Building.where(['name LIKE ?', '%test search%']).select(:id).to_sql, condition[1].to_sql
|
86
|
-
assert_equal '"addresses"."addressable_id" IN (?) AND "addresses"."addressable_type" = ?', condition[0]
|
87
|
-
assert_equal ['Building'], condition[2..-1]
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_condition_for_polymorphic_column_with_relation
|
91
|
-
column = ActiveScaffold::DataStructures::Column.new('contactable', Contact)
|
92
|
-
column.search_sql = [{subquery: [Person.joins(:buildings), 'first_name', 'last_name']}]
|
93
|
-
condition = ClassWithFinder.condition_for_column(column, 'test search', :full, {})
|
94
|
-
assert_equal Person.joins(:buildings).where(['first_name LIKE ? OR last_name LIKE ?', '%test search%', '%test search%']).select(:id).to_sql, condition[1].to_sql
|
95
|
-
assert_equal '"contacts"."contactable_id" IN (?) AND "contacts"."contactable_type" = ?', condition[0]
|
96
|
-
assert_equal ['Person'], condition[2..-1]
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_subquery_condition_for_association_with_condition
|
100
|
-
column = ActiveScaffold::DataStructures::Column.new('owner', Building)
|
101
|
-
column.search_sql = [{subquery: [Person, 'first_name', 'last_name'], conditions: ['floor_count > 0']}]
|
102
|
-
column.search_ui = :text
|
103
|
-
condition = ClassWithFinder.condition_for_column(column, 'test search', :full, {})
|
104
|
-
assert_equal Person.where(['first_name LIKE ? OR last_name LIKE ?', '%test search%', '%test search%']).select(:id).to_sql, condition[1].to_sql
|
105
|
-
assert_equal '"buildings"."owner_id" IN (?) AND floor_count > 0', condition[0]
|
106
|
-
assert_equal [], condition[2..-1]
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_subquery_condition_for_association_with_conditions
|
110
|
-
column = ActiveScaffold::DataStructures::Column.new('owner', Building)
|
111
|
-
column.search_sql = [{subquery: [Person, 'first_name', 'last_name'], conditions: ['floor_count > 0 AND name != ?', '']}]
|
112
|
-
column.search_ui = :text
|
113
|
-
condition = ClassWithFinder.condition_for_column(column, 'test search', :full, {})
|
114
|
-
assert_equal Person.where(['first_name LIKE ? OR last_name LIKE ?', '%test search%', '%test search%']).select(:id).to_sql, condition[1].to_sql
|
115
|
-
assert_equal '"buildings"."owner_id" IN (?) AND floor_count > 0 AND name != ?', condition[0]
|
116
|
-
assert_equal [''], condition[2..-1]
|
117
|
-
end
|
118
|
-
|
119
|
-
private
|
120
|
-
|
121
|
-
def relation_class
|
122
|
-
@klass.active_scaffold_config.model.send(:relation).class
|
123
|
-
end
|
124
|
-
end
|
data/test/misc/lang_test.rb
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class LocalizationTest < Minitest::Test
|
4
|
-
def test_localization
|
5
|
-
assert_equal 'Dutch', as_(:dutch)
|
6
|
-
assert_equal 'dutch', as_('dutch')
|
7
|
-
I18n.backend.store_translations :en, :active_scaffold => {:create_model => 'Create %<model>s'}
|
8
|
-
assert_equal 'Create Test', as_(:create_model, :model => 'Test')
|
9
|
-
end
|
10
|
-
end
|
@@ -1,159 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'active_scaffold_config_mock'
|
3
|
-
|
4
|
-
class DateTimeModel < ActiveRecord::Base
|
5
|
-
include ActiveScaffold::ActiveRecordPermissions::ModelUserAccess::Model
|
6
|
-
def self.columns
|
7
|
-
@columns ||= [ColumnMock.new('id', '', 'int(11)'), ColumnMock.new('run_at', '', 'datetime')]
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.columns_hash
|
11
|
-
@columns_hash ||= Hash[columns.map { |c| [c.name, c] }]
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.load_schema!
|
15
|
-
columns_hash.each do |name, column|
|
16
|
-
define_attribute(
|
17
|
-
name,
|
18
|
-
connection.lookup_cast_type_from_column(column),
|
19
|
-
default: column.default
|
20
|
-
)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class ParseDatetimeTest < Minitest::Test
|
26
|
-
include ActiveScaffoldConfigMock
|
27
|
-
include ActiveScaffold::AttributeParams
|
28
|
-
include ActiveScaffold::Finder
|
29
|
-
|
30
|
-
def setup
|
31
|
-
DateTimeModel.load_schema! if Rails.version >= '5.0'
|
32
|
-
spanish = {
|
33
|
-
time: {
|
34
|
-
formats: {picker: '%a, %d %b %Y %H:%M:%S'}
|
35
|
-
},
|
36
|
-
date: {
|
37
|
-
day_names: %w[Domingo Lunes Martes Miércoles Jueves Viernes Sábado],
|
38
|
-
abbr_day_names: %w[Dom Lun Mar Mié Jue Vie Sáb],
|
39
|
-
month_names: [nil, 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
|
40
|
-
abbr_month_names: [nil, 'Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
|
41
|
-
formats: {default: '%Y-%m-%d', long: '%d de %B de %Y'}
|
42
|
-
}
|
43
|
-
}
|
44
|
-
I18n.backend.store_translations :es, spanish
|
45
|
-
|
46
|
-
@config = config_for('date_time_model')
|
47
|
-
end
|
48
|
-
|
49
|
-
def teardown
|
50
|
-
I18n.locale = :en
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_translate_to_english
|
54
|
-
I18n.locale = :es
|
55
|
-
assert_equal 'Mon, 03 Apr 2017 16:30:26', translate_datetime('Lun, 03 Abr 2017 16:30:26')
|
56
|
-
assert_equal 'Fri, 24 Mar 2017 16:30:26', translate_datetime('Vie, 24 Mar 2017 16:30:26')
|
57
|
-
assert_equal 'Tue, 28 Mar 2017 16:30:26', translate_datetime('Mar, 28 Mar 2017 16:30:26')
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_translate_to_english_with_different_order
|
61
|
-
I18n.locale = :es
|
62
|
-
format = '%d %b %Y, %a, %H:%M:%S'
|
63
|
-
assert_equal '03 Apr 2017, Mon, 16:30:26', translate_datetime('03 Abr 2017, Lun, 16:30:26', format)
|
64
|
-
assert_equal '24 Mar 2017, Fri, 16:30:26', translate_datetime('24 Mar 2017, Vie, 16:30:26', format)
|
65
|
-
assert_equal '28 Mar 2017, Tue, 16:30:26', translate_datetime('28 Mar 2017, Mar, 16:30:26', format)
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_translate_to_english_with_words
|
69
|
-
I18n.locale = :es
|
70
|
-
format = '%A, %d de %B %Y, %H:%M:%S'
|
71
|
-
assert_equal 'Monday, 03 de April de 2017, 16:30:26', translate_datetime('Lunes, 03 de Abril de 2017, 16:30:26', format)
|
72
|
-
assert_equal 'Friday, 24 de March de 2017, 16:30:26', translate_datetime('Viernes, 24 de Marzo de 2017, 16:30:26', format)
|
73
|
-
assert_equal 'Tuesday, 28 de March de 2017, 16:30:26', translate_datetime('Martes, 28 de Marzo de 2017, 16:30:26', format)
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_condition_for_spanish_datetime
|
77
|
-
with_js_framework :jquery do
|
78
|
-
I18n.locale = :es
|
79
|
-
assert_equal Time.zone.local(2017, 4, 3, 16, 30, 26), condition_value('Lun, 03 Abr 2017 16:30:26')
|
80
|
-
assert_equal Time.zone.local(2017, 3, 24, 16, 30, 26), condition_value('Vie, 24 Mar 2017 16:30:26')
|
81
|
-
assert_equal Time.zone.local(2017, 3, 28, 16, 30, 26), condition_value('Mar, 28 Mar 2017 16:30:26')
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_condition_for_english_datetime
|
86
|
-
with_js_framework :jquery do
|
87
|
-
assert_equal Time.zone.local(2017, 4, 3, 16, 30, 26), condition_value('Mon, 03 Apr 2017 16:30:26')
|
88
|
-
assert_equal Time.zone.local(2017, 3, 24, 16, 30, 26), condition_value('Fri, 24 Mar 2017 16:30:26')
|
89
|
-
assert_equal Time.zone.local(2017, 3, 28, 16, 30, 26), condition_value('Tue, 28 Mar 2017 16:30:26')
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_condition_for_english_datetime_without_time
|
94
|
-
with_js_framework :jquery do
|
95
|
-
assert_equal Time.zone.local(2017, 4, 3, 0, 0, 0), condition_value('Mon, 03 Apr 2017')
|
96
|
-
assert_equal Time.zone.local(2017, 3, 24, 0, 0, 0), condition_value('Fri, 24 Mar 2017')
|
97
|
-
assert_equal Time.zone.local(2017, 3, 28, 0, 0, 0), condition_value('Tue, 28 Mar 2017')
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_condition_for_default_datetime_without_time
|
102
|
-
assert_equal Time.zone.local(2017, 4, 3, 0, 0, 0), condition_value('2017-04-03')
|
103
|
-
assert_equal Time.zone.local(2017, 3, 24, 0, 0, 0), condition_value('2017-03-24')
|
104
|
-
assert_equal Time.zone.local(2017, 3, 28, 0, 0, 0), condition_value('2017-03-28')
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_condition_for_english_datetime_without_seconds
|
108
|
-
with_js_framework :jquery do
|
109
|
-
assert_equal Time.zone.local(2017, 4, 3, 16, 30), condition_value('Mon, 03 Apr 2017 16:30')
|
110
|
-
assert_equal Time.zone.local(2017, 3, 24, 16, 30), condition_value('Fri, 24 Mar 2017 16:30')
|
111
|
-
assert_equal Time.zone.local(2017, 3, 28, 16, 30), condition_value('Tue, 28 Mar 2017 16:30')
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def test_condition_for_default_datetime_without_seconds
|
116
|
-
assert_equal Time.zone.local(2017, 4, 3, 16, 30, 0), condition_value('2017-04-03 16:30')
|
117
|
-
assert_equal Time.zone.local(2017, 3, 24, 16, 30, 0), condition_value('2017-03-24 16:30')
|
118
|
-
assert_equal Time.zone.local(2017, 3, 28, 16, 30, 0), condition_value('2017-03-28 16:30')
|
119
|
-
end
|
120
|
-
|
121
|
-
def test_condition_for_time
|
122
|
-
assert_equal Time.current.change(hour: 16, min: 30), condition_value('16:30')
|
123
|
-
assert_equal Time.current.change(hour: 16, min: 30, sec: 26), condition_value('16:30:26')
|
124
|
-
end
|
125
|
-
|
126
|
-
def test_condition_for_datetime_with_zone
|
127
|
-
assert_equal ActiveSupport::TimeZone[3].local(2017, 4, 8, 16, 30, 0), condition_value('2017-04-08 16:30 +0300')
|
128
|
-
end
|
129
|
-
|
130
|
-
def test_condition_for_spanish_date
|
131
|
-
@config.columns[:run_at].options[:format] = :long
|
132
|
-
I18n.locale = :es
|
133
|
-
assert_equal Date.new(2017, 4, 3), condition_value('03 de Abril de 2017', :to_date)
|
134
|
-
assert_equal Date.new(2017, 3, 24), condition_value('24 de Marzo de 2017', :to_date)
|
135
|
-
assert_equal Date.new(2017, 3, 28), condition_value('28 de Marzo de 2017', :to_date)
|
136
|
-
end
|
137
|
-
|
138
|
-
def test_condition_for_english_date
|
139
|
-
@config.columns[:run_at].options[:format] = :long
|
140
|
-
assert_equal Date.new(2017, 4, 3), condition_value('April 03, 2017', :to_date)
|
141
|
-
assert_equal Date.new(2017, 3, 24), condition_value('March 24, 2017', :to_date)
|
142
|
-
assert_equal Date.new(2017, 3, 28), condition_value('March 28, 2017', :to_date)
|
143
|
-
end
|
144
|
-
|
145
|
-
private
|
146
|
-
|
147
|
-
def translate_datetime(value, format = nil)
|
148
|
-
format ||= I18n.t('time.formats.picker')
|
149
|
-
self.class.translate_days_and_months(value, format)
|
150
|
-
end
|
151
|
-
|
152
|
-
def condition_value(value, conversion = nil)
|
153
|
-
self.class.condition_value_for_datetime(@config.columns[:run_at], value, conversion || :to_time)
|
154
|
-
end
|
155
|
-
|
156
|
-
def params_hash?(value)
|
157
|
-
value.is_a? Hash
|
158
|
-
end
|
159
|
-
end
|