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,83 +1,152 @@
|
|
1
|
-
module Wallaby
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
model_class
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
html_options[
|
68
|
-
|
69
|
-
html_options
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
1
|
+
module Wallaby
|
2
|
+
# Links helper
|
3
|
+
module LinksHelper
|
4
|
+
# Permit the params used by Wallaby
|
5
|
+
def index_params
|
6
|
+
params.except(:resources, :utf8).permit(:filter, :page, :per, :q, :sort)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Return link to index page by a given model class
|
10
|
+
# If user's not authorized, nil will be returned
|
11
|
+
# @param model_class [Class] model class
|
12
|
+
# @param url_params [ActionController::Parameters, Hash]
|
13
|
+
# @param html_options [Hash] (see ActionView::Helpers::UrlHelper#link_to)
|
14
|
+
# @return [String, nil] anchor element
|
15
|
+
def index_link(model_class, url_params: {}, html_options: {}, &block)
|
16
|
+
return if cannot? :index, model_class
|
17
|
+
html_options, block = LinkOptionsNormalizer.normalize(
|
18
|
+
html_options, block,
|
19
|
+
block: -> { to_model_label model_class }
|
20
|
+
)
|
21
|
+
|
22
|
+
path = index_path model_class, url_params: url_params
|
23
|
+
link_to path, html_options, &block
|
24
|
+
end
|
25
|
+
|
26
|
+
# Return link to create page by a given model class
|
27
|
+
# If user's not authorized, nil will be returned
|
28
|
+
# @param model_class [Class] model class
|
29
|
+
# @param options [Hash]
|
30
|
+
# @param html_options [Hash] (see ActionView::Helpers::UrlHelper#link_to)
|
31
|
+
# @return [String, nil] anchor element
|
32
|
+
def new_link(model_class, html_options: {}, &block)
|
33
|
+
return if cannot? :new, model_class
|
34
|
+
html_options, block = LinkOptionsNormalizer.normalize(
|
35
|
+
html_options, block,
|
36
|
+
class: 'resource__create',
|
37
|
+
block: -> { t 'links.new', model: to_model_label(model_class) }
|
38
|
+
)
|
39
|
+
|
40
|
+
link_to new_path(model_class), html_options, &block
|
41
|
+
end
|
42
|
+
|
43
|
+
# Return link to show page by a given model class
|
44
|
+
# If user's not authorized, resource label will be returned
|
45
|
+
# @param resource [Object, Wallaby::ResourceDecorator] model class
|
46
|
+
# @param options [Hash]
|
47
|
+
# @param html_options [Hash] (see ActionView::Helpers::UrlHelper#link_to)
|
48
|
+
# @return [String] anchor element / text
|
49
|
+
def show_link(resource, options: {}, html_options: {}, &block)
|
50
|
+
# NOTE: to_s is a must
|
51
|
+
# if a block is returning integer (e.g. `{ 1 }`)
|
52
|
+
# `link_to` will render blank text note inside hyper link
|
53
|
+
html_options, block = LinkOptionsNormalizer.normalize(
|
54
|
+
html_options, block,
|
55
|
+
block: -> { decorate(resource).to_label.to_s }
|
56
|
+
)
|
57
|
+
|
58
|
+
default = options[:readonly] && block.call || nil
|
59
|
+
return default if cannot? :show, extract(resource)
|
60
|
+
link_to show_path(resource), html_options, &block
|
61
|
+
end
|
62
|
+
|
63
|
+
# Return link to edit page by a given model class
|
64
|
+
# If user's not authorized, resource label will be returned
|
65
|
+
# @param resource [Object, Wallaby::ResourceDecorator] model class
|
66
|
+
# @param options [Hash]
|
67
|
+
# @param html_options [Hash] (see ActionView::Helpers::UrlHelper#link_to)
|
68
|
+
# @return [String] anchor element / text
|
69
|
+
def edit_link(resource, options: {}, html_options: {}, &block)
|
70
|
+
default = options[:readonly] && decorate(resource).to_label || nil
|
71
|
+
return default if cannot? :edit, extract(resource)
|
72
|
+
|
73
|
+
html_options, block = LinkOptionsNormalizer.normalize(
|
74
|
+
html_options, block,
|
75
|
+
class: 'resource__update',
|
76
|
+
block: -> { "#{t 'links.edit'} #{decorate(resource).to_label}" }
|
77
|
+
)
|
78
|
+
|
79
|
+
link_to edit_path(resource), html_options, &block
|
80
|
+
end
|
81
|
+
|
82
|
+
# Return link to delete action by a given model class
|
83
|
+
# If user's not authorized, nil will be returned
|
84
|
+
# @param resource [Object, Wallaby::ResourceDecorator] model class
|
85
|
+
# @param options [Hash]
|
86
|
+
# @param html_options [Hash] (see ActionView::Helpers::UrlHelper#link_to)
|
87
|
+
# @return [String, nil] anchor element
|
88
|
+
def delete_link(resource, html_options: {}, &block)
|
89
|
+
return if cannot? :destroy, extract(resource)
|
90
|
+
|
91
|
+
html_options, block = LinkOptionsNormalizer.normalize(
|
92
|
+
html_options, block,
|
93
|
+
class: 'resource__destroy',
|
94
|
+
block: -> { t 'links.delete' }
|
95
|
+
)
|
96
|
+
|
97
|
+
html_options[:method] ||= :delete
|
98
|
+
html_options[:data] ||= {}
|
99
|
+
html_options[:data][:confirm] ||= t 'links.confirm.delete'
|
100
|
+
|
101
|
+
link_to show_path(resource), html_options, &block
|
102
|
+
end
|
103
|
+
|
104
|
+
# Return link to cancel an action
|
105
|
+
# @param html_options [Hash] (see ActionView::Helpers::UrlHelper#link_to)
|
106
|
+
# @return [String] HTML anchor element
|
107
|
+
def cancel_link(html_options = {}, &block)
|
108
|
+
block ||= -> { t 'links.cancel' }
|
109
|
+
link_to :back, html_options, &block
|
110
|
+
end
|
111
|
+
|
112
|
+
# Url for index page
|
113
|
+
# @param model_class [Class]
|
114
|
+
# @param url_params [ActionController::Parameters, Hash]
|
115
|
+
# @return [String]
|
116
|
+
def index_path(model_class, url_params: {})
|
117
|
+
if url_params.is_a?(::ActionController::Parameters) \
|
118
|
+
&& !url_params.permitted?
|
119
|
+
url_params = {}
|
120
|
+
end
|
121
|
+
wallaby_engine.resources_path \
|
122
|
+
to_resources_name(model_class), url_params.to_h
|
123
|
+
end
|
124
|
+
|
125
|
+
# Url for new resource form page
|
126
|
+
# @param model_class [Class]
|
127
|
+
# @return [String]
|
128
|
+
def new_path(model_class)
|
129
|
+
wallaby_engine.new_resource_path to_resources_name(model_class)
|
130
|
+
end
|
131
|
+
|
132
|
+
# Url for show page of given resource
|
133
|
+
# @param resource [Object]
|
134
|
+
# @return [String]
|
135
|
+
def show_path(resource)
|
136
|
+
decorated = decorate resource
|
137
|
+
return unless decorated.primary_key_value
|
138
|
+
wallaby_engine.resource_path \
|
139
|
+
decorated.resources_name, decorated.primary_key_value
|
140
|
+
end
|
141
|
+
|
142
|
+
# Url for edit form page of given resource
|
143
|
+
# @param resource [Object]
|
144
|
+
# @return [String]
|
145
|
+
def edit_path(resource)
|
146
|
+
decorated = decorate resource
|
147
|
+
return unless decorated.primary_key_value
|
148
|
+
wallaby_engine.edit_resource_path \
|
149
|
+
decorated.resources_name, decorated.primary_key_value
|
150
|
+
end
|
82
151
|
end
|
83
152
|
end
|
@@ -1,55 +1,50 @@
|
|
1
|
-
module Wallaby
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
resource.map do |item|
|
10
|
-
decorator.decorate item
|
11
|
-
end
|
12
|
-
else
|
13
|
-
decorator = Wallaby::DecoratorFinder.find_resource resource.class
|
14
|
-
decorator.decorate resource
|
1
|
+
module Wallaby
|
2
|
+
# Resources helper
|
3
|
+
module ResourcesHelper
|
4
|
+
include FormHelper
|
5
|
+
include IndexHelper
|
6
|
+
|
7
|
+
def model_decorator(model_class)
|
8
|
+
Map.model_decorator_map model_class
|
15
9
|
end
|
16
|
-
end
|
17
10
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
else
|
22
|
-
resource
|
11
|
+
# Shortcut for `Wallaby.configuration.metadata
|
12
|
+
def default_metadata
|
13
|
+
Wallaby.configuration.metadata
|
23
14
|
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def model_decorator(model_class)
|
27
|
-
Wallaby::DecoratorFinder.find_model model_class
|
28
|
-
end
|
29
|
-
|
30
|
-
def model_servicer(model_decorator)
|
31
|
-
model_class = model_decorator.model_class
|
32
|
-
Wallaby::ServicerFinder.find(model_class).new model_class, model_decorator
|
33
|
-
end
|
34
|
-
|
35
|
-
def type_partial_render(options = {}, locals = {}, metadata_method = :show_metadata_of, &block)
|
36
|
-
decorated = locals[:object]
|
37
|
-
field_name = locals[:field_name].to_s
|
38
15
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
16
|
+
# Wrap resource into a decorator
|
17
|
+
# @param resource [Object, Enumerable]
|
18
|
+
# @return
|
19
|
+
# [Wallaby::ResourceDecorator, Enumerable<Wallaby::ResourceDecorator]
|
20
|
+
def decorate(resource)
|
21
|
+
return resource if resource.is_a? ResourceDecorator
|
22
|
+
return resource.map { |item| decorate item } if resource.respond_to? :map
|
23
|
+
decorator = Map.resource_decorator_map resource.class
|
24
|
+
decorator ? decorator.new(resource) : resource
|
25
|
+
end
|
43
26
|
|
44
|
-
|
45
|
-
|
27
|
+
# Get the origin resource object
|
28
|
+
# @param resource [Object, Wallaby::ResourceDecorator]
|
29
|
+
# @return [Object]
|
30
|
+
def extract(resource)
|
31
|
+
return resource.resource if resource.is_a? ResourceDecorator
|
32
|
+
resource
|
33
|
+
end
|
46
34
|
|
47
|
-
|
48
|
-
type_partial_render
|
49
|
-
|
35
|
+
# Render partial for index/show
|
36
|
+
def type_partial_render(options = {}, locals = {}, &block)
|
37
|
+
PartialRenderer.render self, options, locals, params[:action], &block
|
38
|
+
end
|
50
39
|
|
51
|
-
|
52
|
-
|
53
|
-
|
40
|
+
# Title for show page of given resource
|
41
|
+
# @param decorated [Wallaby::ResourceDecorator]
|
42
|
+
# @return [String]
|
43
|
+
def show_title(decorated)
|
44
|
+
raise ::ArgumentError unless decorated.is_a? ResourceDecorator
|
45
|
+
[
|
46
|
+
to_model_label(decorated.model_class), decorated.to_label
|
47
|
+
].compact.join ': '
|
48
|
+
end
|
54
49
|
end
|
55
50
|
end
|
@@ -1,25 +1,42 @@
|
|
1
|
-
module Wallaby
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
module Wallaby
|
2
|
+
# Secure helper
|
3
|
+
module SecureHelper
|
4
|
+
# Image portrait for given user
|
5
|
+
# @param user [Object]
|
6
|
+
# @return [String] IMG or I element
|
7
|
+
def user_portrait(user = current_user)
|
8
|
+
if user.respond_to? :email
|
9
|
+
https = "http#{request.ssl? ? 's' : EMPTY_STRING}"
|
10
|
+
email_md5 = Digest::MD5.hexdigest user.email.downcase
|
11
|
+
image_source = "#{https}://www.gravatar.com/avatar/#{email_md5}"
|
12
|
+
image_tag image_source, class: 'hidden-xs user-portrait'
|
13
|
+
else
|
14
|
+
content_tag :i, nil, class: 'fa fa-user user-portrait'
|
15
|
+
end
|
8
16
|
end
|
9
|
-
end
|
10
17
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
18
|
+
# Logout path for given user
|
19
|
+
# @param user [Object]
|
20
|
+
# @param app [Object]
|
21
|
+
# @return [String] HTML anchor element
|
22
|
+
def logout_path(user = current_user, app = main_app)
|
23
|
+
# TODO: use authenticater
|
24
|
+
path =
|
25
|
+
if defined? ::Devise
|
26
|
+
scope = ::Devise::Mapping.find_scope! user
|
27
|
+
"destroy_#{scope}_session_path"
|
28
|
+
else
|
29
|
+
'logout_path'
|
30
|
+
end
|
31
|
+
app.public_send path if app.respond_to? path
|
17
32
|
end
|
18
|
-
app.public_send path if app.respond_to? path
|
19
|
-
end
|
20
33
|
|
21
|
-
|
22
|
-
|
23
|
-
|
34
|
+
# Logout method
|
35
|
+
# @return [String, Symbol]
|
36
|
+
def logout_method
|
37
|
+
# TODO: use authenticater
|
38
|
+
method = Array(Devise.sign_out_via).first if defined? Devise
|
39
|
+
method || :delete
|
40
|
+
end
|
24
41
|
end
|
25
42
|
end
|
@@ -1,57 +1,66 @@
|
|
1
|
-
module Wallaby
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
module Wallaby
|
2
|
+
# Styling helper
|
3
|
+
module StylingHelper
|
4
|
+
# Shortcut to build up the html options as keyword arguments
|
5
|
+
# @param string_or_array [String, Array]
|
6
|
+
# @return [Hash]
|
7
|
+
def html_classes(string_or_array)
|
8
|
+
{ html_options: { class: string_or_array } }
|
9
|
+
end
|
5
10
|
|
6
|
-
|
7
|
-
|
11
|
+
# Shortcut for fontawesome icons
|
12
|
+
# @param icon_suffix [String]
|
13
|
+
# @param html_options [Hash]
|
14
|
+
# @return [String] HTML I element
|
15
|
+
def fa_icon(icon_suffix, html_options = {}, &block)
|
16
|
+
html_options[:class] = Array html_options[:class]
|
17
|
+
html_options[:class] << "fa fa-#{icon_suffix}"
|
8
18
|
|
9
|
-
|
10
|
-
|
11
|
-
(html_options[:data] ||= {}).merge! toggle: "tooltip", placement: "top"
|
19
|
+
content_tag :i, nil, html_options, &block
|
20
|
+
end
|
12
21
|
|
13
|
-
|
14
|
-
|
22
|
+
# Build up tooltip
|
23
|
+
# @param title [String]
|
24
|
+
# @param icon_suffix [String]
|
25
|
+
# @param html_options [Hash]
|
26
|
+
# @return [String] tooltip HTML
|
27
|
+
def itooltip(title, icon_suffix = 'info-circle', html_options = {})
|
28
|
+
html_options[:title] = title
|
29
|
+
(html_options[:data] ||= {}).merge! toggle: 'tooltip', placement: 'top'
|
15
30
|
|
16
|
-
|
17
|
-
icon_suffix = html_options.delete(:icon) || 'info-sign'
|
18
|
-
link_to options, html_options do
|
19
|
-
icon icon_suffix
|
31
|
+
fa_icon icon_suffix, html_options
|
20
32
|
end
|
21
|
-
end
|
22
33
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
end +
|
36
|
-
content_tag(:h4, title, class: 'modal-title')
|
37
|
-
end +
|
38
|
-
content_tag(:div, class: 'modal-body') do
|
39
|
-
body
|
40
|
-
end
|
41
|
-
end
|
34
|
+
# Build up modal
|
35
|
+
# @param title [String]
|
36
|
+
# @param body [String]
|
37
|
+
# @param html_options [Hash]
|
38
|
+
# @return [String] modal HTML
|
39
|
+
def imodal(title, body, html_options = {})
|
40
|
+
label ||= html_options.delete(:label) \
|
41
|
+
|| html_options.delete(:icon) || fa_icon('clone')
|
42
|
+
content_tag :span, class: 'modaler' do
|
43
|
+
concat link_to(label, '#', data: { target: '#imodal', toggle: 'modal' })
|
44
|
+
concat content_tag(:span, title, class: 'modaler__title')
|
45
|
+
concat content_tag(:span, body, class: 'modaler__body')
|
42
46
|
end
|
43
47
|
end
|
44
|
-
end
|
45
48
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
+
# @return [String] grey null
|
50
|
+
def null
|
51
|
+
muted 'null'
|
52
|
+
end
|
49
53
|
|
50
|
-
|
51
|
-
|
52
|
-
|
54
|
+
# @return [String] grey N/A
|
55
|
+
def na
|
56
|
+
muted 'n/a'
|
57
|
+
end
|
53
58
|
|
54
|
-
|
55
|
-
|
59
|
+
# Grey text
|
60
|
+
# @param text_content [String]
|
61
|
+
# @return [String] HTML I element
|
62
|
+
def muted(text_content)
|
63
|
+
content_tag :i, "<#{text_content}>", class: 'text-muted'
|
64
|
+
end
|
56
65
|
end
|
57
66
|
end
|
@@ -1,17 +1,24 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module Wallaby
|
2
|
+
# This is the abstract class that all ORM modes to have implemented.
|
3
|
+
class Mode
|
4
|
+
INTERFACE_METHODS = %w(
|
5
|
+
model_decorator model_finder
|
6
|
+
model_service_provider model_pagination_provider
|
7
|
+
).freeze
|
3
8
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
INTERFACE_METHODS.each do |method_id|
|
10
|
+
define_singleton_method method_id do
|
11
|
+
begin
|
12
|
+
method_class = __callee__.to_s.classify
|
13
|
+
class_name = "#{name}::#{method_class}"
|
14
|
+
parent_class = "Wallaby::#{method_class}".constantize
|
15
|
+
class_name.constantize.tap do |klass|
|
16
|
+
next if klass < parent_class
|
17
|
+
raise InvalidError, "#{klass} must inherit #{parent_class}"
|
18
|
+
end
|
19
|
+
rescue NameError
|
20
|
+
raise NotImplemented, class_name
|
12
21
|
end
|
13
|
-
rescue NameError
|
14
|
-
fail Wallaby::NotImplemented, class_name
|
15
22
|
end
|
16
23
|
end
|
17
24
|
end
|