wallaby 5.0.1 → 5.1.3
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/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
|