wallaby 5.0.1 → 5.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +1 -3
- data/app/assets/images/wallaby/404.png +0 -0
- data/app/assets/images/wallaby/422.png +0 -0
- data/app/assets/images/wallaby/500.png +0 -0
- data/app/assets/javascripts/wallaby/application.js +1 -15
- data/app/assets/javascripts/wallaby/auto_select.js +77 -0
- data/app/assets/javascripts/wallaby/base.js +17 -0
- data/app/assets/javascripts/wallaby/setup.js.erb +60 -0
- data/app/assets/stylesheets/wallaby/application.scss +1 -51
- data/app/assets/stylesheets/wallaby/base/_layout.scss +257 -9
- data/app/assets/stylesheets/wallaby/base/_layout_desktop.scss +53 -0
- data/app/assets/stylesheets/wallaby/base/_mixins.scss +119 -0
- data/app/assets/stylesheets/wallaby/base/_override.scss +10 -0
- data/app/assets/stylesheets/wallaby/base/_vars.scss +72 -2
- data/app/assets/stylesheets/wallaby/base.scss +27 -0
- data/app/assets/stylesheets/wallaby/components/_auto_select.scss +119 -0
- data/app/assets/stylesheets/wallaby/components/_auto_select_desktop.scss +7 -0
- data/app/assets/stylesheets/wallaby/components/_color_square.scss +8 -0
- data/app/assets/stylesheets/wallaby/components/_filters.scss +14 -0
- data/app/assets/stylesheets/wallaby/components/_links.scss +25 -0
- data/app/assets/stylesheets/wallaby/components/_pagination.scss +35 -91
- data/app/assets/stylesheets/wallaby/components/_query.scss +101 -0
- data/app/assets/stylesheets/wallaby/components/_text.scss +6 -6
- data/app/assets/stylesheets/wallaby/pages/_error.scss +108 -0
- data/app/assets/stylesheets/wallaby/pages/_form.scss +40 -0
- data/app/assets/stylesheets/wallaby/pages/_index.scss +193 -0
- data/app/assets/stylesheets/wallaby/pages/_index_desktop.scss +22 -0
- data/app/assets/stylesheets/wallaby/pages/_show.scss +21 -0
- data/app/controllers/wallaby/abstract_resources_controller.rb +334 -0
- data/app/controllers/wallaby/application_controller.rb +45 -15
- data/app/controllers/wallaby/base_controller.rb +30 -0
- data/app/controllers/wallaby/resources_controller.rb +2 -131
- data/app/controllers/wallaby/secure_controller.rb +38 -24
- data/app/routes/wallaby/resources_router.rb +40 -43
- data/app/security/ability.rb +4 -28
- data/app/views/layouts/wallaby/application.html.erb +11 -6
- data/app/views/layouts/wallaby/error.html.erb +26 -4
- data/app/views/wallaby/error.html.erb +11 -0
- data/app/views/wallaby/error.json.jbuilder +8 -0
- data/app/views/wallaby/{shared → resources}/_flash_messages.html.erb +0 -0
- data/app/views/wallaby/resources/_footer.html.erb +1 -0
- data/app/views/wallaby/resources/_form.html.erb +2 -2
- data/app/views/wallaby/resources/_header.html.erb +38 -0
- data/app/views/wallaby/resources/_imodal.html.erb +13 -0
- data/app/views/wallaby/resources/_index_actions.html.erb +4 -1
- data/app/views/wallaby/resources/_index_filters.html.erb +23 -0
- data/app/views/wallaby/resources/_index_pagination.html.erb +63 -0
- data/app/views/wallaby/resources/_index_query.html.erb +23 -0
- data/app/views/wallaby/resources/_logo.html.erb +1 -0
- data/app/views/wallaby/resources/_navs.html.erb +9 -0
- data/app/views/wallaby/resources/_resource_actions.html.erb +3 -3
- data/app/views/wallaby/resources/{shared/_resource_nav.html.erb → _resource_navs.html.erb} +6 -6
- data/app/views/wallaby/resources/_title.html.erb +1 -0
- data/app/views/wallaby/resources/_user_menu.html.erb +5 -0
- data/app/views/wallaby/resources/bad_request.json.jbuilder +7 -0
- data/app/views/wallaby/resources/edit.html.erb +16 -12
- data/app/views/wallaby/resources/form/_belongs_to.html.erb +63 -12
- data/app/views/wallaby/resources/form/_bigint.html.erb +10 -1
- data/app/views/wallaby/resources/form/_bigserial.html.erb +18 -0
- data/app/views/wallaby/resources/form/_binary.html.erb +11 -2
- data/app/views/wallaby/resources/form/_bit.html.erb +10 -1
- data/app/views/wallaby/resources/form/_bit_varying.html.erb +10 -1
- data/app/views/wallaby/resources/form/_blob.html.erb +21 -0
- data/app/views/wallaby/resources/form/_boolean.html.erb +9 -0
- data/app/views/wallaby/resources/form/_box.html.erb +21 -0
- data/app/views/wallaby/resources/form/_cidr.html.erb +13 -1
- data/app/views/wallaby/resources/form/_circle.html.erb +21 -0
- data/app/views/wallaby/resources/form/_citext.html.erb +11 -2
- data/app/views/wallaby/resources/form/_color.html.erb +11 -2
- data/app/views/wallaby/resources/form/_date.html.erb +12 -3
- data/app/views/wallaby/resources/form/_daterange.html.erb +14 -5
- data/app/views/wallaby/resources/form/_datetime.html.erb +12 -3
- data/app/views/wallaby/resources/form/_decimal.html.erb +10 -1
- data/app/views/wallaby/resources/form/_dropdown.html.erb +18 -0
- data/app/views/wallaby/resources/form/_email.html.erb +9 -0
- data/app/views/wallaby/resources/form/_file.html.erb +21 -0
- data/app/views/wallaby/resources/form/_float.html.erb +10 -1
- data/app/views/wallaby/resources/form/_has_and_belongs_to_many.html.erb +53 -7
- data/app/views/wallaby/resources/form/_has_many.html.erb +52 -7
- data/app/views/wallaby/resources/form/_has_one.html.erb +10 -2
- data/app/views/wallaby/resources/form/_hstore.html.erb +12 -5
- data/app/views/wallaby/resources/form/_inet.html.erb +13 -1
- data/app/views/wallaby/resources/form/_int4range.html.erb +11 -2
- data/app/views/wallaby/resources/form/_int8range.html.erb +11 -2
- data/app/views/wallaby/resources/form/_integer.html.erb +10 -1
- data/app/views/wallaby/resources/form/_json.html.erb +13 -6
- data/app/views/wallaby/resources/form/_jsonb.html.erb +13 -6
- data/app/views/wallaby/resources/form/_line.html.erb +21 -0
- data/app/views/wallaby/resources/form/_longblob.html.erb +21 -0
- data/app/views/wallaby/resources/form/_longtext.html.erb +30 -0
- data/app/views/wallaby/resources/form/_lseg.html.erb +21 -0
- data/app/views/wallaby/resources/form/_ltree.html.erb +17 -1
- data/app/views/wallaby/resources/form/_macaddr.html.erb +13 -1
- data/app/views/wallaby/resources/form/_markdown.html.erb +29 -0
- data/app/views/wallaby/resources/form/_mediumblob.html.erb +21 -0
- data/app/views/wallaby/resources/form/_mediumtext.html.erb +30 -0
- data/app/views/wallaby/resources/form/_money.html.erb +10 -1
- data/app/views/wallaby/resources/form/_numrange.html.erb +11 -2
- data/app/views/wallaby/resources/form/_password.html.erb +14 -1
- data/app/views/wallaby/resources/form/_path.html.erb +17 -0
- data/app/views/wallaby/resources/form/_point.html.erb +11 -2
- data/app/views/wallaby/resources/form/_polygon.html.erb +17 -0
- data/app/views/wallaby/resources/form/_serial.html.erb +18 -0
- data/app/views/wallaby/resources/form/_sti.html.erb +18 -0
- data/app/views/wallaby/resources/form/_string.html.erb +14 -1
- data/app/views/wallaby/resources/form/_text.html.erb +11 -2
- data/app/views/wallaby/resources/form/_time.html.erb +12 -3
- data/app/views/wallaby/resources/form/_tinyblob.html.erb +21 -0
- data/app/views/wallaby/resources/form/_tinytext.html.erb +30 -0
- data/app/views/wallaby/resources/form/_tsrange.html.erb +14 -5
- data/app/views/wallaby/resources/form/_tstzrange.html.erb +14 -5
- data/app/views/wallaby/resources/form/_tsvector.html.erb +9 -0
- data/app/views/wallaby/resources/form/_unsigned_bigint.html.erb +18 -0
- data/app/views/wallaby/resources/form/_unsigned_decimal.html.erb +18 -0
- data/app/views/wallaby/resources/form/_unsigned_float.html.erb +18 -0
- data/app/views/wallaby/resources/form/_unsigned_integer.html.erb +18 -0
- data/app/views/wallaby/resources/form/_uuid.html.erb +10 -1
- data/app/views/wallaby/resources/form/_xml.html.erb +11 -5
- data/app/views/wallaby/resources/form.json.jbuilder +5 -0
- data/app/views/wallaby/{core → resources}/home.html.erb +1 -1
- data/app/views/wallaby/resources/index/_belongs_to.html.erb +5 -1
- data/app/views/wallaby/resources/index/_bigint.html.erb +4 -0
- data/app/views/wallaby/resources/index/_bigserial.html.erb +5 -0
- data/app/views/wallaby/resources/index/_binary.html.erb +5 -1
- data/app/views/wallaby/resources/index/_bit.html.erb +4 -0
- data/app/views/wallaby/resources/index/_bit_varying.html.erb +4 -0
- data/app/views/wallaby/resources/index/_blob.html.erb +5 -0
- data/app/views/wallaby/resources/index/_boolean.html.erb +5 -1
- data/app/views/wallaby/resources/index/_box.html.erb +16 -0
- data/app/views/wallaby/resources/index/_cidr.html.erb +5 -1
- data/app/views/wallaby/resources/index/_circle.html.erb +16 -0
- data/app/views/wallaby/resources/index/_citext.html.erb +5 -1
- data/app/views/wallaby/resources/index/_color.html.erb +6 -1
- data/app/views/wallaby/resources/index/_date.html.erb +4 -0
- data/app/views/wallaby/resources/index/_daterange.html.erb +5 -1
- data/app/views/wallaby/resources/index/_datetime.html.erb +5 -1
- data/app/views/wallaby/resources/index/_decimal.html.erb +4 -0
- data/app/views/wallaby/resources/index/_email.html.erb +4 -0
- data/app/views/wallaby/resources/index/_float.html.erb +4 -0
- data/app/views/wallaby/resources/index/_has_and_belongs_to_many.html.erb +6 -2
- data/app/views/wallaby/resources/index/_has_many.html.erb +6 -2
- data/app/views/wallaby/resources/index/_has_one.html.erb +5 -1
- data/app/views/wallaby/resources/index/_hstore.html.erb +6 -2
- data/app/views/wallaby/resources/index/_inet.html.erb +5 -1
- data/app/views/wallaby/resources/index/_int4range.html.erb +4 -0
- data/app/views/wallaby/resources/index/_int8range.html.erb +4 -0
- data/app/views/wallaby/resources/index/_integer.html.erb +4 -0
- data/app/views/wallaby/resources/index/_json.html.erb +5 -2
- data/app/views/wallaby/resources/index/_jsonb.html.erb +5 -2
- data/app/views/wallaby/resources/index/_line.html.erb +16 -0
- data/app/views/wallaby/resources/index/_longblob.html.erb +5 -0
- data/app/views/wallaby/resources/index/_longtext.html.erb +16 -0
- data/app/views/wallaby/resources/index/_lseg.html.erb +16 -0
- data/app/views/wallaby/resources/index/_ltree.html.erb +5 -1
- data/app/views/wallaby/resources/index/_macaddr.html.erb +4 -0
- data/app/views/wallaby/resources/index/_mediumblob.html.erb +5 -0
- data/app/views/wallaby/resources/index/_mediumtext.html.erb +16 -0
- data/app/views/wallaby/resources/index/_money.html.erb +4 -0
- data/app/views/wallaby/resources/index/_numrange.html.erb +4 -0
- data/app/views/wallaby/resources/index/_password.html.erb +9 -0
- data/app/views/wallaby/resources/index/_path.html.erb +16 -0
- data/app/views/wallaby/resources/index/_point.html.erb +4 -0
- data/app/views/wallaby/resources/index/_polygon.html.erb +16 -0
- data/app/views/wallaby/resources/index/_raw.html.erb +9 -0
- data/app/views/wallaby/resources/index/_serial.html.erb +5 -0
- data/app/views/wallaby/resources/index/_sti.html.erb +16 -0
- data/app/views/wallaby/resources/index/_string.html.erb +5 -1
- data/app/views/wallaby/resources/index/_text.html.erb +5 -1
- data/app/views/wallaby/resources/index/_time.html.erb +4 -0
- data/app/views/wallaby/resources/index/_tinyblob.html.erb +5 -0
- data/app/views/wallaby/resources/index/_tinytext.html.erb +16 -0
- data/app/views/wallaby/resources/index/_tsrange.html.erb +5 -1
- data/app/views/wallaby/resources/index/_tstzrange.html.erb +5 -1
- data/app/views/wallaby/resources/index/_tsvector.html.erb +5 -1
- data/app/views/wallaby/resources/index/_unsigned_bigint.html.erb +5 -0
- data/app/views/wallaby/resources/index/_unsigned_decimal.html.erb +5 -0
- data/app/views/wallaby/resources/index/_unsigned_float.html.erb +5 -0
- data/app/views/wallaby/resources/index/_unsigned_integer.html.erb +5 -0
- data/app/views/wallaby/resources/index/_uuid.html.erb +5 -1
- data/app/views/wallaby/resources/index/_xml.html.erb +5 -1
- data/app/views/wallaby/resources/index.csv.erb +26 -0
- data/app/views/wallaby/resources/index.html.erb +47 -59
- data/app/views/wallaby/resources/index.json.jbuilder +5 -0
- data/app/views/wallaby/resources/new.html.erb +12 -11
- data/app/views/wallaby/resources/show/_belongs_to.html.erb +5 -1
- data/app/views/wallaby/resources/show/_bigint.html.erb +4 -0
- data/app/views/wallaby/resources/show/_bigserial.html.erb +5 -0
- data/app/views/wallaby/resources/show/_binary.html.erb +5 -1
- data/app/views/wallaby/resources/show/_bit.html.erb +4 -0
- data/app/views/wallaby/resources/show/_bit_varying.html.erb +4 -0
- data/app/views/wallaby/resources/show/_blob.html.erb +5 -0
- data/app/views/wallaby/resources/show/_boolean.html.erb +5 -1
- data/app/views/wallaby/resources/show/_box.html.erb +9 -0
- data/app/views/wallaby/resources/show/_cidr.html.erb +5 -1
- data/app/views/wallaby/resources/show/_circle.html.erb +9 -0
- data/app/views/wallaby/resources/show/_citext.html.erb +4 -0
- data/app/views/wallaby/resources/show/_color.html.erb +6 -1
- data/app/views/wallaby/resources/show/_date.html.erb +4 -0
- data/app/views/wallaby/resources/show/_daterange.html.erb +4 -0
- data/app/views/wallaby/resources/show/_datetime.html.erb +4 -0
- data/app/views/wallaby/resources/show/_decimal.html.erb +4 -0
- data/app/views/wallaby/resources/show/_email.html.erb +4 -0
- data/app/views/wallaby/resources/show/_float.html.erb +4 -0
- data/app/views/wallaby/resources/show/_has_and_belongs_to_many.html.erb +6 -2
- data/app/views/wallaby/resources/show/_has_many.html.erb +6 -2
- data/app/views/wallaby/resources/show/_has_one.html.erb +5 -1
- data/app/views/wallaby/resources/show/_hstore.html.erb +4 -0
- data/app/views/wallaby/resources/show/_image.html.erb +9 -0
- data/app/views/wallaby/resources/show/_inet.html.erb +5 -1
- data/app/views/wallaby/resources/show/_int4range.html.erb +4 -0
- data/app/views/wallaby/resources/show/_int8range.html.erb +4 -0
- data/app/views/wallaby/resources/show/_integer.html.erb +4 -0
- data/app/views/wallaby/resources/show/_json.html.erb +4 -0
- data/app/views/wallaby/resources/show/_jsonb.html.erb +4 -0
- data/app/views/wallaby/resources/show/_line.html.erb +9 -0
- data/app/views/wallaby/resources/show/_longblob.html.erb +5 -0
- data/app/views/wallaby/resources/show/_longtext.html.erb +5 -0
- data/app/views/wallaby/resources/show/_lseg.html.erb +9 -0
- data/app/views/wallaby/resources/show/_ltree.html.erb +4 -0
- data/app/views/wallaby/resources/show/_macaddr.html.erb +4 -0
- data/app/views/wallaby/resources/show/_mediumblob.html.erb +5 -0
- data/app/views/wallaby/resources/show/_mediumtext.html.erb +5 -0
- data/app/views/wallaby/resources/show/_money.html.erb +4 -0
- data/app/views/wallaby/resources/show/_numrange.html.erb +4 -0
- data/app/views/wallaby/resources/show/_password.html.erb +9 -0
- data/app/views/wallaby/resources/show/_path.html.erb +9 -0
- data/app/views/wallaby/resources/show/_point.html.erb +4 -0
- data/app/views/wallaby/resources/show/_polygon.html.erb +9 -0
- data/app/views/wallaby/resources/show/_raw.html.erb +9 -0
- data/app/views/wallaby/resources/show/_serial.html.erb +5 -0
- data/app/views/wallaby/resources/show/_sti.html.erb +5 -0
- data/app/views/wallaby/resources/show/_string.html.erb +4 -0
- data/app/views/wallaby/resources/show/_text.html.erb +4 -0
- data/app/views/wallaby/resources/show/_time.html.erb +4 -0
- data/app/views/wallaby/resources/show/_tinyblob.html.erb +5 -0
- data/app/views/wallaby/resources/show/_tinytext.html.erb +5 -0
- data/app/views/wallaby/resources/show/_tsrange.html.erb +4 -0
- data/app/views/wallaby/resources/show/_tstzrange.html.erb +4 -0
- data/app/views/wallaby/resources/show/_tsvector.html.erb +4 -0
- data/app/views/wallaby/resources/show/_unsigned_bigint.html.erb +5 -0
- data/app/views/wallaby/resources/show/_unsigned_decimal.html.erb +5 -0
- data/app/views/wallaby/resources/show/_unsigned_float.html.erb +5 -0
- data/app/views/wallaby/resources/show/_unsigned_integer.html.erb +5 -0
- data/app/views/wallaby/resources/show/_uuid.html.erb +4 -0
- data/app/views/wallaby/resources/show/_xml.html.erb +4 -0
- data/app/views/wallaby/resources/show.html.erb +14 -24
- data/app/views/wallaby/resources/show.json.jbuilder +5 -0
- data/config/brakeman.ignore +26 -0
- data/config/locales/wallaby.en.yml +91 -0
- data/config/massa.yml +45 -0
- data/config/rails_best_practices.yml +42 -0
- data/config/routes.rb +29 -23
- data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder/association_builder.rb +39 -0
- data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder/polymorphic_builder.rb +44 -0
- data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder/sti_builder.rb +42 -0
- data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder.rb +41 -94
- data/lib/adaptors/wallaby/active_record/model_decorator/title_field_finder.rb +24 -14
- data/lib/adaptors/wallaby/active_record/model_decorator.rb +118 -64
- data/lib/adaptors/wallaby/active_record/model_finder.rb +44 -15
- data/lib/adaptors/wallaby/active_record/model_pagination_provider.rb +30 -0
- data/lib/adaptors/wallaby/active_record/model_service_provider/normalizer.rb +42 -0
- data/lib/adaptors/wallaby/active_record/model_service_provider/permitter.rb +64 -0
- data/lib/adaptors/wallaby/active_record/model_service_provider/querier/transformer.rb +70 -0
- data/lib/adaptors/wallaby/active_record/model_service_provider/querier.rb +102 -0
- data/lib/adaptors/wallaby/active_record/model_service_provider/validator.rb +29 -0
- data/lib/adaptors/wallaby/active_record/model_service_provider.rb +137 -0
- data/lib/adaptors/wallaby/active_record.rb +4 -1
- data/lib/decorators/wallaby/abstract_resource_decorator.rb +74 -0
- data/lib/decorators/wallaby/resource_decorator.rb +5 -76
- data/lib/errors/wallaby/model_not_found.rb +5 -1
- data/lib/errors/wallaby/not_found.rb +4 -0
- data/lib/errors/wallaby/resource_not_found.rb +5 -1
- data/lib/forms/wallaby/form_builder.rb +42 -19
- data/lib/helpers/wallaby/application_helper.rb +34 -24
- data/lib/helpers/wallaby/base_helper.rb +52 -0
- data/lib/helpers/wallaby/form_helper.rb +40 -16
- data/lib/helpers/wallaby/index_helper.rb +59 -0
- data/lib/helpers/wallaby/links_helper.rb +150 -81
- data/lib/helpers/wallaby/resources_helper.rb +41 -46
- data/lib/helpers/wallaby/secure_helper.rb +36 -19
- data/lib/helpers/wallaby/styling_helper.rb +53 -44
- data/lib/interfaces/wallaby/mode.rb +19 -12
- data/lib/interfaces/wallaby/model_decorator.rb +176 -50
- data/lib/interfaces/wallaby/model_finder.rb +7 -3
- data/lib/interfaces/wallaby/model_pagination_provider.rb +104 -0
- data/lib/interfaces/wallaby/model_service_provider.rb +71 -0
- data/lib/paginators/wallaby/abstract_resource_paginator.rb +23 -0
- data/lib/paginators/wallaby/resource_paginator.rb +6 -0
- data/lib/parsers/wallaby/parser.rb +32 -0
- data/lib/responders/wallaby/abstract_responder.rb +68 -0
- data/lib/responders/wallaby/resources_responder.rb +6 -0
- data/lib/servicers/wallaby/abstract_model_servicer.rb +48 -0
- data/lib/servicers/wallaby/model_servicer.rb +5 -0
- data/lib/services/wallaby/link_options_normalizer.rb +16 -0
- data/lib/services/wallaby/lookup_context_wrapper.rb +23 -30
- data/lib/services/wallaby/map/mode_mapper.rb +19 -0
- data/lib/services/wallaby/map/model_class_collector.rb +41 -0
- data/lib/services/wallaby/map/model_class_mapper.rb +24 -0
- data/lib/services/wallaby/map.rb +76 -39
- data/lib/services/wallaby/partial_renderer.rb +60 -0
- data/lib/services/wallaby/prefixes_builder.rb +54 -0
- data/lib/services/wallaby/sorting/hash_builder.rb +16 -0
- data/lib/services/wallaby/sorting/link_builder.rb +45 -0
- data/lib/services/wallaby/sorting/next_builder.rb +54 -0
- data/lib/services/wallaby/url_for.rb +36 -0
- data/lib/tree/wallaby/node.rb +17 -0
- data/lib/utils/wallaby/utils.rb +67 -22
- data/lib/wallaby/configuration/features.rb +12 -0
- data/lib/wallaby/configuration/metadata.rb +12 -0
- data/lib/wallaby/configuration/models.rb +27 -12
- data/lib/wallaby/configuration/pagination.rb +12 -0
- data/lib/wallaby/configuration/security.rb +55 -24
- data/lib/wallaby/configuration.rb +38 -19
- data/lib/wallaby/engine.rb +84 -39
- data/lib/wallaby/version.rb +1 -1
- data/lib/wallaby.rb +22 -3
- metadata +200 -55
- data/app/assets/javascripts/wallaby/form.js +0 -8
- data/app/assets/stylesheets/wallaby/base/_functions.scss +0 -0
- data/app/assets/stylesheets/wallaby/base/_normalize.scss +0 -0
- data/app/assets/stylesheets/wallaby/base/_reset.scss +0 -0
- data/app/assets/stylesheets/wallaby/components/_forms.scss +0 -53
- data/app/assets/stylesheets/wallaby/components/_nav.scss +0 -19
- data/app/assets/stylesheets/wallaby/components/_tables.scss +0 -78
- data/app/assets/stylesheets/wallaby/form.scss +0 -11
- data/app/controllers/wallaby/core_controller.rb +0 -28
- data/app/views/layouts/wallaby/_footer.html.erb +0 -2
- data/app/views/layouts/wallaby/_header.html.erb +0 -57
- data/app/views/layouts/wallaby/_navs.html.erb +0 -1
- data/app/views/wallaby/errors/access_denied.html.erb +0 -1
- data/app/views/wallaby/errors/not_authenticated.html.erb +0 -1
- data/app/views/wallaby/errors/not_found.html.erb +0 -6
- data/app/views/wallaby/errors/unprocessable_entity.erb +0 -1
- data/config/locales/en.yml +0 -29
- data/lib/adaptors/wallaby/active_record/model_operator/normalizer.rb +0 -44
- data/lib/adaptors/wallaby/active_record/model_operator/permitter.rb +0 -50
- data/lib/adaptors/wallaby/active_record/model_operator/querier.rb +0 -47
- data/lib/adaptors/wallaby/active_record/model_operator/validator.rb +0 -16
- data/lib/adaptors/wallaby/active_record/model_operator.rb +0 -82
- data/lib/errors/wallaby/deprecated.rb +0 -4
- data/lib/errors/wallaby/operation_not_found.rb +0 -4
- data/lib/handlers/wallaby/cached_compiled_erb.rb +0 -14
- data/lib/helpers/wallaby/core_helper.rb +0 -50
- data/lib/helpers/wallaby/paginatable_helper.rb +0 -9
- data/lib/helpers/wallaby/sorting_helper.rb +0 -43
- data/lib/interfaces/wallaby/model_operator.rb +0 -31
- data/lib/services/wallaby/decorator_finder.rb +0 -16
- data/lib/services/wallaby/model_servicer.rb +0 -38
- data/lib/services/wallaby/servicer_finder.rb +0 -5
@@ -1,40 +1,33 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module Wallaby
|
2
|
+
# Lookup context wrapper.
|
3
|
+
# This is to take care of missing template in production to return string
|
4
|
+
# template.
|
5
|
+
# @see Wallaby::PartialRenderer
|
6
|
+
class LookupContextWrapper
|
7
|
+
origin_methods = ::ActionView::LookupContext.instance_methods \
|
8
|
+
- ::Object.instance_methods - %i(find_template)
|
9
|
+
delegate(*origin_methods, to: :@lookup_context)
|
6
10
|
|
7
|
-
|
8
|
-
|
9
|
-
|
11
|
+
def initialize(lookup_context)
|
12
|
+
@lookup_context = lookup_context
|
13
|
+
end
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
+
def find_template(*args)
|
16
|
+
@lookup_context.find_template(*args)
|
17
|
+
rescue ::ActionView::MissingTemplate
|
18
|
+
raise if Rails.env.development?
|
19
|
+
BlankTemplate.new
|
15
20
|
end
|
16
|
-
end
|
17
21
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
@templates[key] = begin
|
23
|
-
yield
|
24
|
-
rescue ActionView::MissingTemplate
|
25
|
-
raise if Rails.env.development?
|
26
|
-
BlankTemplate.new
|
22
|
+
# Blank template to return nil. It should be used by production
|
23
|
+
class BlankTemplate < ::ActionView::Template::HTML
|
24
|
+
def initialize
|
25
|
+
super nil
|
27
26
|
end
|
28
|
-
end
|
29
|
-
@templates[key]
|
30
|
-
end
|
31
27
|
|
32
|
-
|
33
|
-
def initialize
|
34
|
-
super nil
|
35
|
-
end
|
28
|
+
def render(*args); end
|
36
29
|
|
37
|
-
|
30
|
+
def virtual_path(*args); end
|
38
31
|
end
|
39
32
|
end
|
40
33
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Wallaby
|
2
|
+
class Map
|
3
|
+
# To map model class to mode class so that we know how to handle a model
|
4
|
+
class ModeMapper
|
5
|
+
def initialize(mode_classes)
|
6
|
+
@mode_classes = mode_classes
|
7
|
+
end
|
8
|
+
|
9
|
+
def map
|
10
|
+
return {} if @mode_classes.blank?
|
11
|
+
@mode_classes.each_with_object({}) do |mode_class, map|
|
12
|
+
mode_class.model_finder.new.all.each do |model_class|
|
13
|
+
map[model_class] = mode_class
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Wallaby
|
2
|
+
class Map
|
3
|
+
# To collect model classes that are configured to be handled by Wallaby
|
4
|
+
class ModelClassCollector
|
5
|
+
def initialize(configuration)
|
6
|
+
@configuration = configuration
|
7
|
+
end
|
8
|
+
|
9
|
+
def collect
|
10
|
+
return all_models - excluded_models if configured_models.blank?
|
11
|
+
invalid_models_check
|
12
|
+
configured_models
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def invalid_models_check
|
18
|
+
invalid_models = configured_models - all_models
|
19
|
+
return if invalid_models.blank?
|
20
|
+
message = "#{invalid_models.to_sentence} are invalid models."
|
21
|
+
raise InvalidError, message
|
22
|
+
end
|
23
|
+
|
24
|
+
def models
|
25
|
+
@configuration.models
|
26
|
+
end
|
27
|
+
|
28
|
+
def all_models
|
29
|
+
Map.mode_map.keys
|
30
|
+
end
|
31
|
+
|
32
|
+
def excluded_models
|
33
|
+
models.excludes
|
34
|
+
end
|
35
|
+
|
36
|
+
def configured_models
|
37
|
+
models.presence
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Wallaby
|
2
|
+
class Map
|
3
|
+
# To map model class to a klass
|
4
|
+
class ModelClassMapper
|
5
|
+
def initialize(base_class)
|
6
|
+
@base_class = base_class
|
7
|
+
end
|
8
|
+
|
9
|
+
def map
|
10
|
+
(@base_class.try(:subclasses) || EMPTY_HASH)
|
11
|
+
.each_with_object({}) do |klass, map|
|
12
|
+
next if anonymous? klass
|
13
|
+
map[klass.model_class] = block_given? ? yield(klass) : klass
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def anonymous?(klass)
|
20
|
+
klass.name.blank?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/services/wallaby/map.rb
CHANGED
@@ -1,53 +1,90 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
map[model_class] = mode_class
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
1
|
+
module Wallaby
|
2
|
+
# Global storage of all the maps for model classes
|
3
|
+
class Map
|
4
|
+
# { model => mode }
|
5
|
+
def self.mode_map
|
6
|
+
@mode_map ||= ModeMapper.new(Mode.subclasses).map.freeze
|
11
7
|
end
|
12
|
-
end
|
13
8
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
9
|
+
# [ model classes ]
|
10
|
+
def self.model_classes
|
11
|
+
@model_classes ||=
|
12
|
+
ModelClassCollector.new(::Wallaby.configuration).collect.freeze
|
13
|
+
end
|
19
14
|
|
20
|
-
|
15
|
+
# { model => controller }
|
16
|
+
def self.controller_map(model_class)
|
17
|
+
@controller_map ||= ModelClassMapper.new(ResourcesController).map
|
18
|
+
@controller_map[model_class] ||= ResourcesController
|
19
|
+
end
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
21
|
+
# { model => model decorator }
|
22
|
+
def self.model_decorator_map(model_class)
|
23
|
+
@model_decorator_map ||= {}
|
24
|
+
@model_decorator_map[model_class] ||= begin
|
25
|
+
mode = mode_map[model_class]
|
26
|
+
mode.model_decorator.new model_class if mode
|
25
27
|
end
|
26
|
-
configed_models
|
27
28
|
end
|
28
|
-
end
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
# { model => resource decorator }
|
31
|
+
def self.resource_decorator_map(model_class)
|
32
|
+
@resource_decorator_map ||= ModelClassMapper.new(ResourceDecorator).map
|
33
|
+
@resource_decorator_map[model_class] ||= begin
|
34
|
+
ResourceDecorator if mode_map[model_class]
|
35
|
+
end
|
36
|
+
end
|
33
37
|
|
34
|
-
|
35
|
-
|
36
|
-
|
38
|
+
# { model => servicer }
|
39
|
+
def self.servicer_map(model_class)
|
40
|
+
@servicer_map ||= ModelClassMapper.new(ModelServicer).map
|
41
|
+
@servicer_map[model_class] ||= begin
|
42
|
+
ModelServicer if mode_map[model_class]
|
43
|
+
end
|
44
|
+
end
|
37
45
|
|
38
|
-
|
39
|
-
|
40
|
-
|
46
|
+
# { model => service_provider }
|
47
|
+
def self.service_provider_map(model_class)
|
48
|
+
@service_provider_map ||= {}
|
49
|
+
@service_provider_map[model_class] ||= begin
|
50
|
+
mode = mode_map[model_class]
|
51
|
+
mode.model_service_provider.new model_class if mode
|
52
|
+
end
|
53
|
+
end
|
41
54
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
.each do |klass|
|
48
|
-
map[klass.model_class] = klass
|
49
|
-
end
|
55
|
+
# { model => paginator }
|
56
|
+
def self.paginator_map(model_class)
|
57
|
+
@paginator_map ||= ModelClassMapper.new(ResourcePaginator).map
|
58
|
+
@paginator_map[model_class] ||= begin
|
59
|
+
ResourcePaginator if mode_map[model_class]
|
50
60
|
end
|
51
61
|
end
|
62
|
+
|
63
|
+
# { model => pagination_provider }
|
64
|
+
def self.pagination_provider_map(model_class)
|
65
|
+
@pagination_provider_map ||= {}
|
66
|
+
@pagination_provider_map[model_class] ||=
|
67
|
+
mode_map[model_class].try(:model_pagination_provider)
|
68
|
+
end
|
69
|
+
|
70
|
+
# { model => resources name }
|
71
|
+
def self.resources_name_map(model_class)
|
72
|
+
@resources_name_map ||= {}
|
73
|
+
@resources_name_map[model_class] ||= Utils.to_resources_name model_class
|
74
|
+
end
|
75
|
+
|
76
|
+
# { resources name => model }
|
77
|
+
def self.model_class_map(resources_name)
|
78
|
+
@model_class_map ||= {}
|
79
|
+
@model_class_map[resources_name] ||= Utils.to_model_class resources_name
|
80
|
+
end
|
81
|
+
|
82
|
+
# Clear all the class variables to nil
|
83
|
+
def self.clear
|
84
|
+
@mode_map, @model_classes, @controller_map, @model_decorator_map,
|
85
|
+
@resource_decorator_map, @servicer_map, @service_provider_map,
|
86
|
+
@paginator_map, @pagination_provider_map, @model_class_map,
|
87
|
+
@resources_name_map = []
|
88
|
+
end
|
52
89
|
end
|
53
90
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Wallaby
|
2
|
+
# Partial renderer
|
3
|
+
class PartialRenderer
|
4
|
+
class << self
|
5
|
+
# Render form partial
|
6
|
+
# @param view [ActionView] view
|
7
|
+
# @param options [String] partial name
|
8
|
+
# @param locals [Hash]
|
9
|
+
# @return [String] HTML
|
10
|
+
def render(view, options = {}, locals = {}, action_name = nil, &block)
|
11
|
+
decorated = locals[:object]
|
12
|
+
field_name = locals[:field_name].to_s
|
13
|
+
action_name ||= Utils.to_partial_name view.params[:action]
|
14
|
+
|
15
|
+
partial_arguments_check decorated, field_name
|
16
|
+
|
17
|
+
locals[:metadata] =
|
18
|
+
decorated.public_send :"#{action_name}_metadata_of", field_name
|
19
|
+
locals[:value] = decorated.public_send field_name
|
20
|
+
|
21
|
+
view.render(options, locals, &block) \
|
22
|
+
|| view.render('string', locals, &block)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Render form partial
|
26
|
+
# @param view [ActionView] view
|
27
|
+
# @param options [String] partial name
|
28
|
+
# @param locals [Hash]
|
29
|
+
# @return [String] HTML
|
30
|
+
def render_form(view, options = {}, locals = {}, &block)
|
31
|
+
form = locals[:form]
|
32
|
+
field_name = locals[:field_name].to_s
|
33
|
+
|
34
|
+
form_arguments_check form, field_name
|
35
|
+
|
36
|
+
decorated = locals[:object] = form.object
|
37
|
+
locals[:metadata] = decorated.form_metadata_of locals[:field_name]
|
38
|
+
locals[:value] = decorated.public_send locals[:field_name]
|
39
|
+
|
40
|
+
view.render(options, locals, &block) \
|
41
|
+
|| view.render('string', locals, &block)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def partial_arguments_check(object, field_name)
|
47
|
+
raise ArgumentError, 'Field name is required.' if field_name.blank?
|
48
|
+
raise ArgumentError, 'Object is not decorated.' \
|
49
|
+
unless object.is_a? ResourceDecorator
|
50
|
+
end
|
51
|
+
|
52
|
+
def form_arguments_check(form, field_name)
|
53
|
+
raise ArgumentError, 'Form is required.' if form.blank?
|
54
|
+
raise ArgumentError, 'Field name is required.' if field_name.blank?
|
55
|
+
raise ArgumentError, 'Object is not decorated.' \
|
56
|
+
unless form.object.is_a? ResourceDecorator
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Wallaby
|
2
|
+
# Prefix builder
|
3
|
+
class PrefixesBuilder
|
4
|
+
def initialize(origin_prefixes, controller_path, resources_name, params)
|
5
|
+
@origin_prefixes = origin_prefixes
|
6
|
+
@controller_path = controller_path
|
7
|
+
@resources_name = resources_name
|
8
|
+
@params = params
|
9
|
+
end
|
10
|
+
|
11
|
+
def build
|
12
|
+
prefixes = minimal_prefixes
|
13
|
+
prefixes.unshift mounted_prefix if resource_path != @controller_path
|
14
|
+
suffix = build_suffix(@params)
|
15
|
+
prefixes.each_with_object([]) do |prefix, result|
|
16
|
+
result << "#{prefix}/#{suffix}" << prefix if prefix
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
|
22
|
+
def minimal_prefixes
|
23
|
+
# this should contains only the current controller's path and wallaby path
|
24
|
+
index = @origin_prefixes.index wallaby_path
|
25
|
+
@origin_prefixes.slice 0..index
|
26
|
+
end
|
27
|
+
|
28
|
+
def mounted_prefix
|
29
|
+
prefix = mounted_path.try(:slice, 1..-1) || ''
|
30
|
+
prefix << SLASH unless prefix.empty?
|
31
|
+
prefix << resource_path if resource_path
|
32
|
+
end
|
33
|
+
|
34
|
+
def build_suffix(params)
|
35
|
+
Utils.to_partial_name params[:action]
|
36
|
+
end
|
37
|
+
|
38
|
+
def wallaby_path
|
39
|
+
ResourcesController.controller_path
|
40
|
+
end
|
41
|
+
|
42
|
+
def mounted_path
|
43
|
+
# TODO: need to find out if this will fail
|
44
|
+
# when wallaby is mounted more than once on different namespace?
|
45
|
+
Rails.application.routes.named_routes[:wallaby_engine].try do |route|
|
46
|
+
route.path.spec.to_s
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def resource_path
|
51
|
+
@resource_path ||= @resources_name.try :gsub, COLONS, SLASH
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Wallaby
|
2
|
+
module Sorting
|
3
|
+
# Turn a string `'name asc,id desc'` into sort hash
|
4
|
+
class HashBuilder
|
5
|
+
SORT_REGEX = /(([^\s,]+)\s+(asc|desc))\s*,?\s*/i
|
6
|
+
|
7
|
+
def self.build(sort_string)
|
8
|
+
::ActiveSupport::HashWithIndifferentAccess.new.tap do |hash|
|
9
|
+
(sort_string || EMPTY_STRING).scan SORT_REGEX do |_, key, order|
|
10
|
+
hash[key] = order
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Wallaby
|
2
|
+
module Sorting
|
3
|
+
# Build the sorting link
|
4
|
+
class LinkBuilder
|
5
|
+
delegate :model_class, to: :@model_decorator
|
6
|
+
|
7
|
+
def initialize(model_decorator, params, helper)
|
8
|
+
@model_decorator = model_decorator
|
9
|
+
@params = params
|
10
|
+
@helper = helper
|
11
|
+
end
|
12
|
+
|
13
|
+
# To turn sort string into a hash for later usage
|
14
|
+
# @return [Hash]
|
15
|
+
def current_sort
|
16
|
+
@current_sort ||= HashBuilder.build @params[:sort]
|
17
|
+
end
|
18
|
+
|
19
|
+
# Build sort link for given field name
|
20
|
+
# @param field_name [String]
|
21
|
+
# @return [String] link
|
22
|
+
def build(field_name)
|
23
|
+
metadata = @model_decorator.index_metadata_of field_name
|
24
|
+
label = Utils.to_field_label field_name, metadata
|
25
|
+
return label unless sortable? metadata
|
26
|
+
sort_field_name = metadata[:sort_field_name] || field_name
|
27
|
+
url_params = next_builder.next_params sort_field_name
|
28
|
+
@helper.index_link(model_class, url_params: url_params) { label }
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
# @see Wallaby::Sorting::NextBuilder
|
34
|
+
def next_builder
|
35
|
+
@next_builder ||= NextBuilder.new @params, current_sort
|
36
|
+
end
|
37
|
+
|
38
|
+
# If it's non-association field or custom sorting field
|
39
|
+
def sortable?(metadata)
|
40
|
+
metadata[:is_origin] && !metadata[:is_association] \
|
41
|
+
|| metadata[:sort_field_name]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Wallaby
|
2
|
+
module Sorting
|
3
|
+
# Pass field_name to generate sort param
|
4
|
+
class NextBuilder
|
5
|
+
ASC = 'asc'.freeze
|
6
|
+
DESC = 'desc'.freeze
|
7
|
+
|
8
|
+
def initialize(params, hash = nil)
|
9
|
+
@params = params
|
10
|
+
@hash = hash || HashBuilder.build(params[:sort])
|
11
|
+
end
|
12
|
+
|
13
|
+
def next_params(field_name)
|
14
|
+
params = clean_params
|
15
|
+
update params, :sort, complete_sorting_str_with(field_name)
|
16
|
+
params
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def clean_params
|
22
|
+
@params.except :resources, :controller, :action
|
23
|
+
end
|
24
|
+
|
25
|
+
def complete_sorting_str_with(field_name)
|
26
|
+
hash = @hash.except field_name
|
27
|
+
current_sort = @hash[field_name]
|
28
|
+
|
29
|
+
update hash, field_name, next_value_for(current_sort)
|
30
|
+
rebuild_str_from hash
|
31
|
+
end
|
32
|
+
|
33
|
+
def rebuild_str_from(hash)
|
34
|
+
hash.each_with_object '' do |(name, sort), str|
|
35
|
+
str << (str == EMPTY_STRING ? str : COMMA)
|
36
|
+
str << name << SPACE << sort
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def next_value_for(current)
|
41
|
+
case current
|
42
|
+
when ASC then DESC
|
43
|
+
when DESC then nil
|
44
|
+
else ASC
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def update(hash, key, value)
|
49
|
+
return hash.delete key if value.blank?
|
50
|
+
hash[key] = value
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Wallaby
|
2
|
+
# Url helper
|
3
|
+
class UrlFor
|
4
|
+
class << self
|
5
|
+
# Handle wallaby engine url properly.
|
6
|
+
# @param wallaby_engine [ActionDispatch::Routing::RoutesProxy]
|
7
|
+
# @param options [ActionController::Parameters, Hash]
|
8
|
+
# @return [String] url string for wallaby engine
|
9
|
+
def handle(wallaby_engine, options)
|
10
|
+
# NOTE: DEPRECATION WARNING: You are calling a `*_path` helper with the
|
11
|
+
# `only_path` option explicitly set to `false`.
|
12
|
+
# This option will stop working on path helpers in Rails 5.
|
13
|
+
# Use the corresponding `*_url` helper instead.
|
14
|
+
hash = normalize_params(options).except(:only_path)
|
15
|
+
case hash[:action]
|
16
|
+
when 'index', 'create' then wallaby_engine.resources_path hash
|
17
|
+
when 'new' then wallaby_engine.new_resource_path hash
|
18
|
+
when 'edit' then wallaby_engine.edit_resource_path hash
|
19
|
+
else wallaby_engine.resource_path hash
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
# We will need to normalize params and return a hash
|
26
|
+
# so that the url helper
|
27
|
+
# could build up the url properly.
|
28
|
+
# @param options [ActionController::Parameters, Hash]
|
29
|
+
# @return [Hash]
|
30
|
+
def normalize_params(options)
|
31
|
+
return options unless options.is_a? ActionController::Parameters
|
32
|
+
options.permit(:resources, :action, :id).to_h
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Wallaby
|
2
|
+
# Node to present tree structure
|
3
|
+
class Node
|
4
|
+
attr_reader :klass
|
5
|
+
attr_accessor :parent
|
6
|
+
|
7
|
+
delegate :name, to: :klass
|
8
|
+
|
9
|
+
def initialize(klass)
|
10
|
+
@klass = klass
|
11
|
+
end
|
12
|
+
|
13
|
+
def children
|
14
|
+
@children ||= []
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/utils/wallaby/utils.rb
CHANGED
@@ -1,31 +1,76 @@
|
|
1
|
-
module Wallaby
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module Wallaby
|
2
|
+
# Utils
|
3
|
+
module Utils
|
4
|
+
def self.to_resources_name(model_class)
|
5
|
+
return EMPTY_STRING if model_class.blank?
|
6
|
+
model_class.to_s.underscore.gsub(SLASH, COLONS).pluralize
|
7
|
+
end
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
def self.to_model_label(model_class)
|
10
|
+
return EMPTY_STRING if model_class.blank?
|
11
|
+
model_class_name = to_model_name model_class
|
12
|
+
model_class_name.titleize.gsub(SLASH, SPACE + SLASH + SPACE)
|
13
|
+
end
|
11
14
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
15
|
+
def self.to_model_name(resources_name)
|
16
|
+
return EMPTY_STRING if resources_name.blank?
|
17
|
+
resources_name.to_s.singularize.gsub(COLONS, SLASH).camelize
|
18
|
+
end
|
16
19
|
|
17
|
-
|
18
|
-
|
19
|
-
begin
|
20
|
+
def self.to_model_class(resources_name)
|
21
|
+
return if resources_name.blank?
|
20
22
|
class_name = to_model_name resources_name
|
23
|
+
# NOTE: do not use if statement instead of rescue here
|
24
|
+
# we want the class_name to be eagerly loaded
|
21
25
|
class_name.constantize
|
22
|
-
rescue
|
23
|
-
|
24
|
-
|
26
|
+
rescue NameError => _error
|
27
|
+
raise ModelNotFound, class_name
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.find_filter_name(filter_name, filters)
|
31
|
+
filter_name || # from params
|
32
|
+
filters.find { |_k, v| v[:default] }.try(:first) || # from default value
|
33
|
+
:all # last resort
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.to_field_label(field_name, metadata)
|
37
|
+
field_name = field_name.to_s if field_name.is_a? Symbol
|
38
|
+
metadata[:label] || field_name.humanize
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.to_partial_name(action_name)
|
42
|
+
FORM_ACTIONS.include?(action_name) ? 'form' : action_name
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.to_hash(array)
|
46
|
+
Hash[*array.flatten(1)]
|
25
47
|
end
|
26
|
-
end
|
27
48
|
|
28
|
-
|
29
|
-
|
49
|
+
# @see http://stackoverflow.com/a/8710663/1326499
|
50
|
+
def self.clone(object)
|
51
|
+
::Marshal.load(::Marshal.dump(object))
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.preload_all
|
55
|
+
::Wallaby::ApplicationController.to_s
|
56
|
+
preload 'app/models/**/*.rb'
|
57
|
+
preload 'app/decorators/**/*.rb'
|
58
|
+
preload 'app/controllers/**/*.rb'
|
59
|
+
preload 'app/servicers/**/*.rb'
|
60
|
+
preload 'app/**/*.rb'
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.preload(file_pattern)
|
64
|
+
Dir[file_pattern].each do |file_path|
|
65
|
+
begin
|
66
|
+
name = file_path[%r{app/[^/]+/(.+)\.rb}, 1].gsub('concerns/', '')
|
67
|
+
class_name = name.classify
|
68
|
+
class_name.constantize unless Module.const_defined? class_name
|
69
|
+
rescue NameError, LoadError => e
|
70
|
+
Rails.logger.debug ">>>>>>>>> PRELOAD ERROR: #{e.message}"
|
71
|
+
Rails.logger.debug e.backtrace.slice(0, 5)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
30
75
|
end
|
31
76
|
end
|