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,58 +1,184 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module Wallaby
|
2
|
+
# Model Decorator interface, designed to maintain metadata information for all
|
3
|
+
# the fields coming from data source (database/api)
|
4
|
+
# @see Wallaby::ResourceDecorator for more information on how to customise
|
5
|
+
# metadata information
|
6
|
+
class ModelDecorator
|
7
|
+
attr_reader :model_class
|
8
|
+
attr_writer \
|
9
|
+
:field_names, :index_field_names, :show_field_names, :form_field_names
|
3
10
|
|
4
|
-
|
5
|
-
|
6
|
-
|
11
|
+
def initialize(model_class)
|
12
|
+
@model_class = model_class
|
13
|
+
end
|
7
14
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
def #{ prefix }fields=(#{ prefix }fields)
|
15
|
-
@#{ prefix }fields = #{ prefix }fields.with_indifferent_access
|
16
|
-
end
|
17
|
-
|
18
|
-
def #{ prefix }field_names
|
19
|
-
@#{ prefix }field_names ||= #{ prefix }fields.keys.tap do |names|
|
20
|
-
names.delete primary_key
|
21
|
-
names.unshift primary_key
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def #{ prefix }field_names=(#{ prefix }field_names)
|
26
|
-
@#{ prefix }field_names = #{ prefix }field_names
|
27
|
-
end
|
28
|
-
|
29
|
-
def #{ prefix }metadata_of(field_name)
|
30
|
-
#{ prefix }fields[field_name] || {}
|
31
|
-
end
|
32
|
-
|
33
|
-
def #{ prefix }label_of(field_name)
|
34
|
-
#{ prefix }metadata_of(field_name)[:label]
|
35
|
-
end
|
36
|
-
|
37
|
-
def #{ prefix }type_of(field_name)
|
38
|
-
#{ prefix }metadata_of(field_name)[:type]
|
39
|
-
end
|
40
|
-
RUBY
|
41
|
-
end
|
15
|
+
# @return [Hash] metadata information for all fields that index/show/form
|
16
|
+
# will copy
|
17
|
+
def fields
|
18
|
+
raise NotImplemented
|
19
|
+
end
|
42
20
|
|
43
|
-
|
44
|
-
|
45
|
-
|
21
|
+
# @param fields [Hash] metadata information for all fields
|
22
|
+
def fields=(fields)
|
23
|
+
@fields = ::ActiveSupport::HashWithIndifferentAccess.new fields
|
24
|
+
end
|
46
25
|
|
47
|
-
|
48
|
-
|
49
|
-
|
26
|
+
# @return [Array] field names
|
27
|
+
def field_names
|
28
|
+
@field_names ||= reposition fields.keys, primary_key
|
29
|
+
end
|
50
30
|
|
51
|
-
|
52
|
-
|
53
|
-
|
31
|
+
# @return [Hash] metadata information for a given field
|
32
|
+
def metadata_of(field_name)
|
33
|
+
fields[field_name] || {}
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [String] label for a given field
|
37
|
+
def label_of(field_name)
|
38
|
+
metadata_of(field_name)[:label]
|
39
|
+
end
|
40
|
+
|
41
|
+
# @return [String, Symbol] type for a given field
|
42
|
+
def type_of(field_name)
|
43
|
+
validate_presence_of metadata_of(field_name)[:type]
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [Hash] metadata information for all fields that would be used on
|
47
|
+
# index page
|
48
|
+
def index_fields
|
49
|
+
raise NotImplemented
|
50
|
+
end
|
51
|
+
|
52
|
+
# @param fields [Hash] metadata information for all fields that would be
|
53
|
+
# used on index page
|
54
|
+
def index_fields=(fields)
|
55
|
+
@index_fields = ::ActiveSupport::HashWithIndifferentAccess.new fields
|
56
|
+
end
|
57
|
+
|
58
|
+
# @return [Array] field names of index page
|
59
|
+
def index_field_names
|
60
|
+
@index_field_names ||= reposition index_fields.keys, primary_key
|
61
|
+
end
|
62
|
+
|
63
|
+
# @return [Hash] index metadata information for a given field
|
64
|
+
def index_metadata_of(field_name)
|
65
|
+
index_fields[field_name] || {}
|
66
|
+
end
|
67
|
+
|
68
|
+
# @return [String] index label for a given field
|
69
|
+
def index_label_of(field_name)
|
70
|
+
index_metadata_of(field_name)[:label]
|
71
|
+
end
|
72
|
+
|
73
|
+
# @return [String, Symbol] index type for a given field
|
74
|
+
def index_type_of(field_name)
|
75
|
+
validate_presence_of index_metadata_of(field_name)[:type]
|
76
|
+
end
|
77
|
+
|
78
|
+
# @return [Hash] metadata information for all fields that would be used on
|
79
|
+
# show page
|
80
|
+
def show_fields
|
81
|
+
raise NotImplemented
|
82
|
+
end
|
83
|
+
|
84
|
+
# @param fields [Hash] metadata information for all fields that would be
|
85
|
+
# used on show page
|
86
|
+
def show_fields=(fields)
|
87
|
+
@show_fields = ::ActiveSupport::HashWithIndifferentAccess.new fields
|
88
|
+
end
|
89
|
+
|
90
|
+
# @return [Array] field names of show page
|
91
|
+
def show_field_names
|
92
|
+
@show_field_names ||= reposition show_fields.keys, primary_key
|
93
|
+
end
|
94
|
+
|
95
|
+
# @return [Hash] show metadata information for a given field
|
96
|
+
def show_metadata_of(field_name)
|
97
|
+
show_fields[field_name] || {}
|
98
|
+
end
|
99
|
+
|
100
|
+
# @return [String] show label for a given field
|
101
|
+
def show_label_of(field_name)
|
102
|
+
show_metadata_of(field_name)[:label]
|
103
|
+
end
|
104
|
+
|
105
|
+
# @return [String, Symbol] show type for a given field
|
106
|
+
def show_type_of(field_name)
|
107
|
+
validate_presence_of show_metadata_of(field_name)[:type]
|
108
|
+
end
|
109
|
+
|
110
|
+
# @return [Hash] metadata information for all fields that would be used on
|
111
|
+
# form page
|
112
|
+
def form_fields
|
113
|
+
raise NotImplemented
|
114
|
+
end
|
115
|
+
|
116
|
+
# @param fields [Hash] metadata information for all fields that would be
|
117
|
+
# used on form page
|
118
|
+
def form_fields=(fields)
|
119
|
+
@form_fields = ::ActiveSupport::HashWithIndifferentAccess.new fields
|
120
|
+
end
|
121
|
+
|
122
|
+
# @return [Array] field names of form page
|
123
|
+
def form_field_names
|
124
|
+
@form_field_names ||= reposition form_fields.keys, primary_key
|
125
|
+
end
|
126
|
+
|
127
|
+
# @return [Hash] form metadata information for a given field
|
128
|
+
def form_metadata_of(field_name)
|
129
|
+
form_fields[field_name] || {}
|
130
|
+
end
|
131
|
+
|
132
|
+
# @return [String] form label for a given field
|
133
|
+
def form_label_of(field_name)
|
134
|
+
form_metadata_of(field_name)[:label]
|
135
|
+
end
|
136
|
+
|
137
|
+
# @return [String, Symbol] form type for a given field
|
138
|
+
def form_type_of(field_name)
|
139
|
+
validate_presence_of form_metadata_of(field_name)[:type]
|
140
|
+
end
|
141
|
+
|
142
|
+
# @return [Hash] custom filters
|
143
|
+
def filters
|
144
|
+
@filters ||= ::ActiveSupport::HashWithIndifferentAccess.new
|
145
|
+
end
|
146
|
+
|
147
|
+
# @return [Hash] errors
|
148
|
+
def form_active_errors(_resource)
|
149
|
+
raise NotImplemented
|
150
|
+
end
|
151
|
+
|
152
|
+
# @return [String] primary key
|
153
|
+
def primary_key
|
154
|
+
raise NotImplemented
|
155
|
+
end
|
156
|
+
|
157
|
+
# @param _resource [Object] resource
|
158
|
+
# @return [String] title of given resource
|
159
|
+
def guess_title(_resource)
|
160
|
+
raise NotImplemented
|
161
|
+
end
|
162
|
+
|
163
|
+
# @return [String] resources name mapped from model class
|
164
|
+
def resources_name
|
165
|
+
Map.resources_name_map @model_class
|
166
|
+
end
|
167
|
+
|
168
|
+
protected
|
169
|
+
|
170
|
+
# @param field_names [Array] field names
|
171
|
+
# @param primary_key [String] primary key name
|
172
|
+
# @return [Array] a list of field names that primary key goes first
|
173
|
+
def reposition(field_names, primary_key)
|
174
|
+
field_names.unshift(primary_key).uniq
|
175
|
+
end
|
54
176
|
|
55
|
-
|
56
|
-
|
177
|
+
# Ensure type is present
|
178
|
+
# @param type [String, Symbol, nil] type of a field
|
179
|
+
# @return [String, Symbol] type name
|
180
|
+
def validate_presence_of(type)
|
181
|
+
type || raise(::ArgumentError, 'Type is required.')
|
182
|
+
end
|
57
183
|
end
|
58
184
|
end
|
@@ -1,5 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
module Wallaby
|
2
|
+
# Model finder interface
|
3
|
+
class ModelFinder
|
4
|
+
# Need to implement this method to get all the available model for a mode
|
5
|
+
def all
|
6
|
+
raise NotImplemented
|
7
|
+
end
|
4
8
|
end
|
5
9
|
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
module Wallaby
|
2
|
+
# Model pagination provider interface
|
3
|
+
class ModelPaginationProvider
|
4
|
+
# @param collection
|
5
|
+
# @param params [ActionController::Parameters]
|
6
|
+
# @param options [Hash] options
|
7
|
+
# @param model_decorator [Wallaby::ModelDecorator, nil]
|
8
|
+
def initialize(collection, params, options: {}, model_decorator: nil)
|
9
|
+
@collection = collection
|
10
|
+
@params = params
|
11
|
+
@options = options
|
12
|
+
@model_decorator = model_decorator
|
13
|
+
end
|
14
|
+
|
15
|
+
# If a collection has pagination feature
|
16
|
+
def paginatable?
|
17
|
+
raise NotImplemented
|
18
|
+
end
|
19
|
+
|
20
|
+
# Check and see if it's the first page
|
21
|
+
# @return boolean
|
22
|
+
def first_page?
|
23
|
+
page_number > first_page_number
|
24
|
+
end
|
25
|
+
|
26
|
+
# Check and see if it's the previous page
|
27
|
+
# @return boolean
|
28
|
+
def prev_page?
|
29
|
+
page_number > first_page_number
|
30
|
+
end
|
31
|
+
|
32
|
+
# Check and see if it's the last page
|
33
|
+
# @return boolean
|
34
|
+
def last_page?
|
35
|
+
page_number < last_page_number
|
36
|
+
end
|
37
|
+
|
38
|
+
# Check and see if it's the next page
|
39
|
+
# @return boolean
|
40
|
+
def next_page?
|
41
|
+
page_number < last_page_number
|
42
|
+
end
|
43
|
+
|
44
|
+
# Find out the offset `from`
|
45
|
+
# @return [Integer]
|
46
|
+
def from
|
47
|
+
(page_number - 1) * page_size + 1
|
48
|
+
end
|
49
|
+
|
50
|
+
# Find out the offset `to`
|
51
|
+
# @return [Integer]
|
52
|
+
def to
|
53
|
+
[page_number * page_size, total].min
|
54
|
+
end
|
55
|
+
|
56
|
+
# Find out the total count of current query
|
57
|
+
# @return [Integer]
|
58
|
+
def total
|
59
|
+
raise NotImplemented
|
60
|
+
end
|
61
|
+
|
62
|
+
# Find out the current page size
|
63
|
+
# @return [Integer]
|
64
|
+
def page_size
|
65
|
+
raise NotImplemented
|
66
|
+
end
|
67
|
+
|
68
|
+
# Find out the current page number
|
69
|
+
# @return [Integer]
|
70
|
+
def page_number
|
71
|
+
raise NotImplemented
|
72
|
+
end
|
73
|
+
|
74
|
+
# Page number of first page
|
75
|
+
# @return [Integer]
|
76
|
+
def first_page_number
|
77
|
+
1
|
78
|
+
end
|
79
|
+
|
80
|
+
# Page number of last page
|
81
|
+
# @return [Integer]
|
82
|
+
def last_page_number
|
83
|
+
number_of_pages
|
84
|
+
end
|
85
|
+
|
86
|
+
# Page number of previous page
|
87
|
+
# @return [Integer]
|
88
|
+
def prev_page_number
|
89
|
+
[page_number - 1, first_page_number].max
|
90
|
+
end
|
91
|
+
|
92
|
+
# Page number of next page
|
93
|
+
# @return [Integer]
|
94
|
+
def next_page_number
|
95
|
+
[page_number + 1, last_page_number].min
|
96
|
+
end
|
97
|
+
|
98
|
+
# Total number of pages
|
99
|
+
# @return [Integer]
|
100
|
+
def number_of_pages
|
101
|
+
(total / page_size.to_f).ceil
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Wallaby
|
2
|
+
# Model service provider interface
|
3
|
+
class ModelServiceProvider
|
4
|
+
# @param model_class [Class] model class
|
5
|
+
# @param model_decorator [Wallaby::ModelDecorator, nil] model decorator
|
6
|
+
def initialize(model_class, model_decorator = nil)
|
7
|
+
raise ::ArgumentError, 'model class required' unless model_class
|
8
|
+
@model_class = model_class
|
9
|
+
@model_decorator = model_decorator || Map.model_decorator_map(model_class)
|
10
|
+
end
|
11
|
+
|
12
|
+
# To whitelist params for a model class
|
13
|
+
# @param _params [ActionController::Parameters]
|
14
|
+
def permit(_params)
|
15
|
+
raise NotImplemented
|
16
|
+
end
|
17
|
+
|
18
|
+
# Fetch collection by params
|
19
|
+
# @param _params [ActionController::Parameters]
|
20
|
+
# @param _authorizer
|
21
|
+
def collection(_params, _authorizer)
|
22
|
+
raise NotImplemented
|
23
|
+
end
|
24
|
+
|
25
|
+
# Paginate the records
|
26
|
+
# @param _query
|
27
|
+
# @param _params [ActionController::Parameters]
|
28
|
+
def paginate(_query, _params)
|
29
|
+
raise NotImplemented
|
30
|
+
end
|
31
|
+
|
32
|
+
# Initialize the model class using params
|
33
|
+
# @param _params [ActionController::Parameters]
|
34
|
+
# @param _authorizer
|
35
|
+
def new(_params, _authorizer)
|
36
|
+
raise NotImplemented
|
37
|
+
end
|
38
|
+
|
39
|
+
# Find a record using id
|
40
|
+
# @param _id [Object]
|
41
|
+
# @param _params [ActionController::Parameters]
|
42
|
+
# @param _authorizer
|
43
|
+
def find(_id, _params, _authorizer)
|
44
|
+
raise NotImplemented
|
45
|
+
end
|
46
|
+
|
47
|
+
# Save the newly initialized resource
|
48
|
+
# @param _resource [Object]
|
49
|
+
# @param _params [ActionController::Parameters]
|
50
|
+
# @param _authorizer
|
51
|
+
def create(_resource, _params, _authorizer)
|
52
|
+
raise NotImplemented
|
53
|
+
end
|
54
|
+
|
55
|
+
# Update the persisted resource
|
56
|
+
# @param _resource [Object]
|
57
|
+
# @param _params [ActionController::Parameters]
|
58
|
+
# @param _authorizer
|
59
|
+
def update(_resource, _params, _authorizer)
|
60
|
+
raise NotImplemented
|
61
|
+
end
|
62
|
+
|
63
|
+
# Destroy the given resource
|
64
|
+
# @param _resource [Object]
|
65
|
+
# @param _params [ActionController::Parameters]
|
66
|
+
# @param _authorizer
|
67
|
+
def destroy(_resource, _params, _authorizer)
|
68
|
+
raise NotImplemented
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Wallaby
|
2
|
+
# Model paginator
|
3
|
+
class AbstractResourcePaginator
|
4
|
+
def self.model_class
|
5
|
+
return unless self < ::Wallaby::ResourcePaginator
|
6
|
+
Map.model_class_map name.gsub('Paginator', EMPTY_STRING)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Delegate methods to pagination provider
|
10
|
+
instance_methods =
|
11
|
+
ModelPaginationProvider.instance_methods - ::Object.instance_methods
|
12
|
+
delegate(*instance_methods, to: :@provider)
|
13
|
+
|
14
|
+
def initialize(model_class, collection, params)
|
15
|
+
@model_class = model_class || self.class.model_class
|
16
|
+
raise ArgumentError, 'model class required' unless @model_class
|
17
|
+
@collection = collection
|
18
|
+
@params = params
|
19
|
+
@provider =
|
20
|
+
Map.pagination_provider_map(@model_class).new(@collection, @params)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Wallaby
|
2
|
+
# a parser to handle colon query
|
3
|
+
class Parser < Parslet::Parser
|
4
|
+
root(:statement)
|
5
|
+
rule(:statement) { expression >> (space >> expression).repeat }
|
6
|
+
rule(:expression) { colon_query | general_keyword }
|
7
|
+
rule(:colon_query) do
|
8
|
+
name.as(:left) >> operator.as(:op) >> keywords.as(:right)
|
9
|
+
end
|
10
|
+
rule(:name) { (space.absent? >> colon.absent? >> any).repeat(1) }
|
11
|
+
rule(:operator) { colon >> match('[^\s\'\"\:\,0-9a-zA-Z]').repeat(0, 3) }
|
12
|
+
rule(:keywords) { general_keyword >> (comma >> general_keyword).repeat }
|
13
|
+
rule(:general_keyword) { quoted_keyword | keyword }
|
14
|
+
|
15
|
+
# basic elements
|
16
|
+
rule(:quoted_keyword) do
|
17
|
+
open_quote >>
|
18
|
+
(close_quote.absent? >> any).repeat.as(:keyword) >>
|
19
|
+
close_quote
|
20
|
+
end
|
21
|
+
rule(:keyword) { ((space | comma).absent? >> any).repeat.as(:keyword) }
|
22
|
+
|
23
|
+
# atomic entities
|
24
|
+
rule(:comma) { str(',') }
|
25
|
+
rule(:space) { match('\s').repeat(1) }
|
26
|
+
rule(:colon) { str(':') }
|
27
|
+
|
28
|
+
# open-close elements
|
29
|
+
rule(:open_quote) { match('[\'\"]').capture(:quote) }
|
30
|
+
rule(:close_quote) { dynamic { |_src, ctx| str(ctx.captures[:quote]) } }
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Wallaby
|
2
|
+
# abstract responder for later usage
|
3
|
+
class AbstractResponder < ActionController::Responder
|
4
|
+
include ::Responders::FlashResponder
|
5
|
+
|
6
|
+
delegate :params, :headers, to: :request
|
7
|
+
|
8
|
+
def to_html
|
9
|
+
set_flash_message
|
10
|
+
if post? then create_action
|
11
|
+
elsif patch? || put? then update_action
|
12
|
+
elsif delete? then destroy_action
|
13
|
+
else default_render
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_csv
|
18
|
+
set_layout_to_none
|
19
|
+
headers['Content-Disposition'] = "attachment; filename=\"#{file_name}\""
|
20
|
+
default_render
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_json
|
24
|
+
set_layout_to_none
|
25
|
+
return default_render unless post? || patch? || put? || delete?
|
26
|
+
if has_errors? then \
|
27
|
+
render :bad_request, options.merge(status: :bad_request)
|
28
|
+
else render :form, options
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def create_action
|
35
|
+
if has_errors?
|
36
|
+
render :new, options
|
37
|
+
else
|
38
|
+
redirect_to resource_location
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def update_action
|
43
|
+
if has_errors?
|
44
|
+
render :edit, options
|
45
|
+
else
|
46
|
+
redirect_to resource_location
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def destroy_action
|
51
|
+
redirect_to resource_location
|
52
|
+
end
|
53
|
+
|
54
|
+
def file_name
|
55
|
+
timestamp = Time.zone.now.to_s(:number)
|
56
|
+
"#{params[:resources]}-exported-#{timestamp}.#{format}"
|
57
|
+
end
|
58
|
+
|
59
|
+
def set_layout_to_none
|
60
|
+
options[:layout] = false
|
61
|
+
end
|
62
|
+
|
63
|
+
def set_flash_message
|
64
|
+
# @see FlashResponder
|
65
|
+
set_flash_message! if set_flash_message?
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Wallaby
|
2
|
+
# Model servicer
|
3
|
+
class AbstractModelServicer
|
4
|
+
def self.model_class
|
5
|
+
return unless self < ::Wallaby::ModelServicer
|
6
|
+
Map.model_class_map name.gsub('Servicer', EMPTY_STRING)
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(model_class = nil, authorizer = nil)
|
10
|
+
@model_class = model_class || self.class.model_class
|
11
|
+
raise ArgumentError, 'model class required' unless @model_class
|
12
|
+
@authorizer = authorizer
|
13
|
+
@provider = Map.service_provider_map @model_class
|
14
|
+
end
|
15
|
+
|
16
|
+
def permit(params)
|
17
|
+
@provider.permit params
|
18
|
+
end
|
19
|
+
|
20
|
+
def collection(params)
|
21
|
+
@provider.collection params, @authorizer
|
22
|
+
end
|
23
|
+
|
24
|
+
def paginate(query, params)
|
25
|
+
@provider.paginate query, params
|
26
|
+
end
|
27
|
+
|
28
|
+
def new(params)
|
29
|
+
@provider.new params, @authorizer
|
30
|
+
end
|
31
|
+
|
32
|
+
def find(id, params)
|
33
|
+
@provider.find id, params, @authorizer
|
34
|
+
end
|
35
|
+
|
36
|
+
def create(resource, params)
|
37
|
+
@provider.create resource, params, @authorizer
|
38
|
+
end
|
39
|
+
|
40
|
+
def update(resource, params)
|
41
|
+
@provider.update resource, params, @authorizer
|
42
|
+
end
|
43
|
+
|
44
|
+
def destroy(resource, params)
|
45
|
+
@provider.destroy resource, params, @authorizer
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Wallaby
|
2
|
+
# Link renderer
|
3
|
+
class LinkOptionsNormalizer
|
4
|
+
class << self
|
5
|
+
def normalize(html_options, block, defaults)
|
6
|
+
block ||= defaults[:block]
|
7
|
+
html_options[:title] ||= defaults[:block].call
|
8
|
+
# allow empty class to be set
|
9
|
+
if !html_options.key?(:class) && defaults[:class]
|
10
|
+
html_options[:class] = defaults[:class]
|
11
|
+
end
|
12
|
+
[html_options, block]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|