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
@@ -2,30 +2,20 @@
|
|
2
2
|
# decorate first on every page or partial
|
3
3
|
decorated = decorate resource
|
4
4
|
%>
|
5
|
-
<article>
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
<%= show_title decorated %>
|
10
|
-
</h1>
|
5
|
+
<article class="resource">
|
6
|
+
<div class="resource__header">
|
7
|
+
<h1><%= show_title decorated %></h1>
|
8
|
+
<%= render 'resource_navs' %>
|
11
9
|
</div>
|
12
|
-
<%= render '
|
13
|
-
<section
|
14
|
-
<
|
15
|
-
|
16
|
-
<
|
17
|
-
<
|
18
|
-
<
|
19
|
-
</
|
20
|
-
|
21
|
-
|
22
|
-
<% decorated.show_field_names.each do |field_name| %>
|
23
|
-
<tr>
|
24
|
-
<th><%= decorated.show_label_of field_name %></th>
|
25
|
-
<td><%= type_partial_render decorated.show_type_of(field_name).to_s, object: decorated, field_name: field_name %></td>
|
26
|
-
</tr>
|
27
|
-
<% end %>
|
28
|
-
</tbody>
|
29
|
-
</table>
|
10
|
+
<%= render 'flash_messages' %>
|
11
|
+
<section>
|
12
|
+
<div class="resource__container">
|
13
|
+
<% decorated.show_field_names.each do |field_name| %>
|
14
|
+
<dl>
|
15
|
+
<dt><%= decorated.show_label_of field_name %></dt>
|
16
|
+
<dd><%= type_partial_render decorated.show_type_of(field_name), object: decorated, field_name: field_name %></dd>
|
17
|
+
</dl>
|
18
|
+
<% end %>
|
19
|
+
</div>
|
30
20
|
</section>
|
31
21
|
</article>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
{
|
2
|
+
"ignored_warnings": [
|
3
|
+
{
|
4
|
+
"warning_type": "Weak Hash",
|
5
|
+
"warning_code": 90,
|
6
|
+
"fingerprint": "5d66c37f6ad3a0646972a4cc758231c4c0f97dfb156eb73ed07792e19c592b13",
|
7
|
+
"check_name": "WeakHash",
|
8
|
+
"message": "Weak hashing algorithm (MD5) used",
|
9
|
+
"file": "lib/helpers/wallaby/secure_helper.rb",
|
10
|
+
"line": 7,
|
11
|
+
"link": "http://brakemanscanner.org/docs/warning_types/weak_hash/",
|
12
|
+
"code": "Digest::MD5.hexdigest(user.email.downcase)",
|
13
|
+
"render_path": null,
|
14
|
+
"location": {
|
15
|
+
"type": "method",
|
16
|
+
"class": "Wallaby::SecureHelper",
|
17
|
+
"method": "user_portrait"
|
18
|
+
},
|
19
|
+
"user_input": null,
|
20
|
+
"confidence": "Medium",
|
21
|
+
"note": ""
|
22
|
+
}
|
23
|
+
],
|
24
|
+
"updated": "2017-04-18 13:49:44 +0000",
|
25
|
+
"brakeman_version": "3.6.1"
|
26
|
+
}
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# Files in the config/locales directory are used for internationalization
|
2
|
+
# and are automatically loaded by Rails. If you want to use locales other
|
3
|
+
# than English, add the necessary files in this directory.
|
4
|
+
#
|
5
|
+
# To use the locales, use `I18n.t`:
|
6
|
+
#
|
7
|
+
# I18n.t 'hello'
|
8
|
+
#
|
9
|
+
# In views, this is aliased to just `t`:
|
10
|
+
#
|
11
|
+
# <%= t('hello') %>
|
12
|
+
#
|
13
|
+
# To use a different locale, set it with `I18n.locale`:
|
14
|
+
#
|
15
|
+
# I18n.locale = :es
|
16
|
+
#
|
17
|
+
# This would use the information in config/locales/es.yml.
|
18
|
+
#
|
19
|
+
# To learn more, please read the Rails Internationalization guide
|
20
|
+
# available at http://guides.rubyonrails.org/i18n.html.
|
21
|
+
|
22
|
+
en:
|
23
|
+
labels:
|
24
|
+
count: 'Count: '
|
25
|
+
auto_select_hint: 'Type to select...'
|
26
|
+
upload: 'Upload'
|
27
|
+
|
28
|
+
buttons:
|
29
|
+
save: 'Save'
|
30
|
+
|
31
|
+
links:
|
32
|
+
new: 'Create %{model}'
|
33
|
+
show: 'Show'
|
34
|
+
edit: 'Edit'
|
35
|
+
delete: 'Delete'
|
36
|
+
cancel: 'Cancel'
|
37
|
+
confirm:
|
38
|
+
delete: 'Please confirm to delete'
|
39
|
+
export: 'Export as %{ext}'
|
40
|
+
|
41
|
+
http_errors:
|
42
|
+
report_error_html: '<p>And report the error <a href="https://github.com/reinteractive/wallaby/issues/new" target="_blank">here</a>.</p>'
|
43
|
+
internal_server_error: 'Hope you feel better.'
|
44
|
+
bad_request: 'Your request is not supported.'
|
45
|
+
not_found: 'Not found.'
|
46
|
+
unprocessable_entity: 'Your request could not be processed.'
|
47
|
+
unauthorized: 'You need to sign in to access this page.'
|
48
|
+
forbidden: 'You need permission to access this page.'
|
49
|
+
|
50
|
+
json_errors:
|
51
|
+
internal_server_error: 'Service unavailable.'
|
52
|
+
bad_request: 'Your request is not supported.'
|
53
|
+
not_found: 'Not found.'
|
54
|
+
unprocessable_entity: 'Your request could not be processed.'
|
55
|
+
unauthorized: 'You need to sign in to access this page.'
|
56
|
+
forbidden: 'You need permission to access this page.'
|
57
|
+
|
58
|
+
errors:
|
59
|
+
not_found:
|
60
|
+
collection: 'Records could not be found. Click + button to add one.'
|
61
|
+
model: 'Model %{model} could not be found.'
|
62
|
+
resource: 'Record %{resource} could not be found.'
|
63
|
+
|
64
|
+
pagination:
|
65
|
+
prev: 'Prev'
|
66
|
+
next: 'Next'
|
67
|
+
from_to: '%{from} to %{to}'
|
68
|
+
of: ' of '
|
69
|
+
total_count: '%{total}'
|
70
|
+
pers: 'Page Size'
|
71
|
+
pages: 'Page Number'
|
72
|
+
|
73
|
+
filters:
|
74
|
+
title: 'Filters'
|
75
|
+
all: 'All'
|
76
|
+
|
77
|
+
search:
|
78
|
+
hint: 'Press enter to search.'
|
79
|
+
|
80
|
+
hints:
|
81
|
+
box_html: 'Format: <code>(x1, y1), (x2, y2)</code> where <i>(x1,y1)</i> and <i>(x2,y2)</i> are any two opposite corners of the box.'
|
82
|
+
cidr_html: 'Example: <code>192.168.1.1/24</code> which holds an IPv4 or IPv6 network specification.'
|
83
|
+
circle_html: 'Format: <code><(x, y), r></code> where <i>(x,y)</i> is the center point and <i>r</i> is the radius of the circle.'
|
84
|
+
hstore_html: 'Format: <code>"Key1" => "Value1", "Key2" => "Value2"</code> is used for input and output, includes zero or more <i>key => value</i> pairs separated by commas.'
|
85
|
+
inet_html: 'Example: <code>192.168.1.1/24</code> which holds an IPv4 or IPv6 network specification.'
|
86
|
+
line_html: 'Format: <code>{ A, B, C }</code> which are represented by the linear equation <i>Ax + By + C = 0</i>.'
|
87
|
+
lseg_html: 'Format: <code>[(x1, y1), (x2, y2)]</code> where <i>(x1,y1)</i> and <i>(x2,y2)</i> are the end points of the line segment.'
|
88
|
+
ltree_html: 'Example: <code>Top.Countries.Europe.Russia</code> which is a sequence of zero or more labels separated by dots.'
|
89
|
+
macaddr_html: 'Example: <code>08:00:2b:01:02:03</code> which stores MAC addresses.'
|
90
|
+
path_html: 'Format: <code>((x1, y1) , ... , (xn, yn))</code> where the points are the end points of the line segments comprising the path.'
|
91
|
+
polygon_html: 'Format: <code>((x1, y1) , ... , (xn, yn))</code> where the points are the end points of the line segments comprising the boundary of the polygon.'
|
data/config/massa.yml
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# By leaving this file empty, massa will run all default tools. You can check them here:
|
2
|
+
# https://github.com/lucascaton/massa/blob/master/config/default_tools.yml
|
3
|
+
# Otherwise you can define your own tools like in the following examples:
|
4
|
+
|
5
|
+
rubocop:
|
6
|
+
description: 'Rubocop'
|
7
|
+
command: 'bundle exec rubocop'
|
8
|
+
required: true
|
9
|
+
|
10
|
+
haml_lint:
|
11
|
+
description: 'HAML lint'
|
12
|
+
command: 'bundle exec haml-lint app/views'
|
13
|
+
required: true
|
14
|
+
|
15
|
+
brakeman:
|
16
|
+
description: 'Brakeman (security vulnerability scanner)'
|
17
|
+
command: 'bundle exec brakeman -Aqz4'
|
18
|
+
required: true
|
19
|
+
|
20
|
+
# rails_best_practices:
|
21
|
+
# description: 'Rails Best Practices'
|
22
|
+
# command: 'bundle exec rails_best_practices'
|
23
|
+
# required: true
|
24
|
+
#
|
25
|
+
i18n-tasks:
|
26
|
+
description: 'I18n translations'
|
27
|
+
command: 'bundle exec i18n-tasks missing'
|
28
|
+
required: false
|
29
|
+
|
30
|
+
# es_lint:
|
31
|
+
# description: 'ES lint'
|
32
|
+
# command: 'npm run eslint --ext js .'
|
33
|
+
# gem: false
|
34
|
+
# required: true
|
35
|
+
|
36
|
+
# karma:
|
37
|
+
# description: 'Karma (JS specs)'
|
38
|
+
# command: 'karma start --single-run --browsers PhantomJS'
|
39
|
+
# required: true
|
40
|
+
# gem: false
|
41
|
+
#
|
42
|
+
rspec-rails:
|
43
|
+
description: 'RSpec'
|
44
|
+
command: 'RAILS_ENV=test bundle exec rspec'
|
45
|
+
required: true
|
@@ -0,0 +1,42 @@
|
|
1
|
+
AddModelVirtualAttributeCheck: { }
|
2
|
+
AlwaysAddDbIndexCheck: { }
|
3
|
+
#CheckSaveReturnValueCheck: { }
|
4
|
+
#CheckDestroyReturnValueCheck: { }
|
5
|
+
DefaultScopeIsEvilCheck: { }
|
6
|
+
DryBundlerInCapistranoCheck: { }
|
7
|
+
#HashSyntaxCheck: { }
|
8
|
+
IsolateSeedDataCheck: { }
|
9
|
+
KeepFindersOnTheirOwnModelCheck: { }
|
10
|
+
LawOfDemeterCheck: { }
|
11
|
+
#LongLineCheck: { max_line_length: 80 }
|
12
|
+
MoveCodeIntoControllerCheck: { }
|
13
|
+
MoveCodeIntoHelperCheck: { array_count: 3 }
|
14
|
+
MoveCodeIntoModelCheck: { use_count: 2 }
|
15
|
+
MoveFinderToNamedScopeCheck: { }
|
16
|
+
MoveModelLogicIntoModelCheck: { use_count: 4 }
|
17
|
+
NeedlessDeepNestingCheck: { nested_count: 2 }
|
18
|
+
NotRescueExceptionCheck: { }
|
19
|
+
NotUseDefaultRouteCheck: { }
|
20
|
+
NotUseTimeAgoInWordsCheck: { }
|
21
|
+
OveruseRouteCustomizationsCheck: { customize_count: 3 }
|
22
|
+
ProtectMassAssignmentCheck: { }
|
23
|
+
RemoveEmptyHelpersCheck: { }
|
24
|
+
#RemoveTabCheck: { }
|
25
|
+
RemoveTrailingWhitespaceCheck: { }
|
26
|
+
RemoveUnusedMethodsInControllersCheck: { except_methods: [], ignored_files: 'app/controllers/wallaby/resources_controller.rb' }
|
27
|
+
RemoveUnusedMethodsInHelpersCheck: { except_methods: [] }
|
28
|
+
RemoveUnusedMethodsInModelsCheck: { except_methods: [] }
|
29
|
+
ReplaceComplexCreationWithFactoryMethodCheck: { attribute_assignment_count: 2 }
|
30
|
+
ReplaceInstanceVariableWithLocalVariableCheck: { ignored_files: ['app/views/wallaby/resources/form'] }
|
31
|
+
RestrictAutoGeneratedRoutesCheck: { }
|
32
|
+
SimplifyRenderInControllersCheck: { }
|
33
|
+
SimplifyRenderInViewsCheck: { }
|
34
|
+
#UseBeforeFilterCheck: { customize_count: 2 }
|
35
|
+
UseModelAssociationCheck: { }
|
36
|
+
UseMultipartAlternativeAsContentTypeOfEmailCheck: { }
|
37
|
+
#UseParenthesesInMethodDefCheck: { }
|
38
|
+
UseObserverCheck: { }
|
39
|
+
UseQueryAttributeCheck: { }
|
40
|
+
UseSayWithTimeInMigrationsCheck: { }
|
41
|
+
UseScopeAccessCheck: { }
|
42
|
+
UseTurboSprocketsRails3Check: { }
|
data/config/routes.rb
CHANGED
@@ -1,32 +1,38 @@
|
|
1
1
|
Wallaby::Engine.routes.draw do
|
2
|
-
root to: 'wallaby/
|
2
|
+
root to: 'wallaby/resources#home'
|
3
3
|
|
4
|
-
|
4
|
+
# NOTE: For health check if needed
|
5
|
+
# @see Wallaby::BaseController#healthy
|
6
|
+
get 'status', to: 'wallaby/resources#healthy'
|
5
7
|
|
8
|
+
# To generate error pages for all HTTP status
|
9
|
+
Wallaby::ERRORS.each do |status|
|
10
|
+
code = Rack::Utils::SYMBOL_TO_STATUS_CODE[status]
|
11
|
+
get status, to: "wallaby/resources##{status}"
|
12
|
+
get code.to_s, to: "wallaby/resources##{status}"
|
13
|
+
end
|
14
|
+
|
15
|
+
# This is to pass :resources and :action params onto
|
16
|
+
# `Wallaby::ResourcesRouter`.
|
17
|
+
# So that it could handle the request dispatching.
|
18
|
+
# Currently, it has implemented general CRUD resourceful routes
|
6
19
|
scope path: ':resources' do
|
7
20
|
with_options to: Wallaby::ResourcesRouter.new do |route|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
defaults: { action: 'edit' },
|
17
|
-
as: :edit_resource
|
18
|
-
route.get ':id',
|
19
|
-
defaults: { action: 'show' },
|
20
|
-
as: :resource
|
21
|
+
# @see Wallaby::AbstractResourcesController#index
|
22
|
+
route.get '', defaults: { action: 'index' }, as: :resources
|
23
|
+
# @see Wallaby::AbstractResourcesController#new
|
24
|
+
route.get 'new', defaults: { action: 'new' }, as: :new_resource
|
25
|
+
# @see Wallaby::AbstractResourcesController#edit
|
26
|
+
route.get ':id/edit', defaults: { action: 'edit' }, as: :edit_resource
|
27
|
+
# @see Wallaby::AbstractResourcesController#show
|
28
|
+
route.get ':id', defaults: { action: 'show' }, as: :resource
|
21
29
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
defaults: { action: 'destroy' }
|
29
|
-
end
|
30
|
+
# @see Wallaby::AbstractResourcesController#create
|
31
|
+
route.post '', defaults: { action: 'create' }
|
32
|
+
# @see Wallaby::AbstractResourcesController#update
|
33
|
+
route.match ':id', via: %i(patch put), defaults: { action: 'update' }
|
34
|
+
# @see Wallaby::AbstractResourcesController#destroy
|
35
|
+
route.delete ':id', defaults: { action: 'destroy' }
|
30
36
|
end
|
31
37
|
end
|
32
38
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Wallaby
|
2
|
+
class ActiveRecord
|
3
|
+
class ModelDecorator
|
4
|
+
class FieldsBuilder
|
5
|
+
# To build the metadata for associations
|
6
|
+
class AssociationBuilder
|
7
|
+
def update(metadata, reflection)
|
8
|
+
type = reflection.macro
|
9
|
+
metadata[:is_association] = true
|
10
|
+
metadata[:is_through] = through?(reflection)
|
11
|
+
metadata[:has_scope] = scope?(reflection)
|
12
|
+
metadata[:foreign_key] = foreign_key_for(reflection, type)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def foreign_key_for(reflection, type)
|
18
|
+
if type == :belongs_to || reflection.polymorphic?
|
19
|
+
reflection.foreign_key
|
20
|
+
elsif reflection.collection?
|
21
|
+
# @see https://github.com/rails/rails/blob/92703a9ea5d8b96f30e0b706b801c9185ef14f0e/activerecord/lib/active_record/associations/builder/collection_association.rb#L50
|
22
|
+
reflection.name.to_s.singularize << '_ids'
|
23
|
+
else
|
24
|
+
reflection.association_foreign_key
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def through?(reflection)
|
29
|
+
reflection.is_a? ::ActiveRecord::Reflection::ThroughReflection
|
30
|
+
end
|
31
|
+
|
32
|
+
def scope?(reflection)
|
33
|
+
reflection.scope.present?
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Wallaby
|
2
|
+
class ActiveRecord
|
3
|
+
class ModelDecorator
|
4
|
+
class FieldsBuilder
|
5
|
+
# To build the metadata for polymorphic
|
6
|
+
class PolymorphicBuilder
|
7
|
+
def update(metadata, reflection)
|
8
|
+
if reflection.polymorphic?
|
9
|
+
metadata[:is_polymorphic] = true
|
10
|
+
metadata[:polymorphic_type] = reflection.foreign_type
|
11
|
+
metadata[:polymorphic_list] = polymorphic_list_for(reflection)
|
12
|
+
else
|
13
|
+
metadata[:class] = reflection.klass
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def polymorphic_list_for(reflection)
|
20
|
+
all_model_class.each_with_object([]) do |model_class, list|
|
21
|
+
# TODO: need to check the class as well
|
22
|
+
if polymorphic_defined? model_class, reflection.name
|
23
|
+
list << model_class
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def all_model_class
|
29
|
+
Map
|
30
|
+
.mode_map
|
31
|
+
.select { |_, mode| mode == ::Wallaby::ActiveRecord }.keys
|
32
|
+
end
|
33
|
+
|
34
|
+
def polymorphic_defined?(model_class, polymorphic_name)
|
35
|
+
polymorphic_name_sym = polymorphic_name.try(:to_sym)
|
36
|
+
model_class.reflections.any? do |_field_name, reflection|
|
37
|
+
reflection.options[:as].try(:to_sym) == polymorphic_name_sym
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Wallaby
|
2
|
+
class ActiveRecord
|
3
|
+
class ModelDecorator
|
4
|
+
class FieldsBuilder
|
5
|
+
# To build the metadata for sti column
|
6
|
+
class StiBuilder
|
7
|
+
def initialize(model_class)
|
8
|
+
@model_class = model_class
|
9
|
+
end
|
10
|
+
|
11
|
+
def update(metadata, column)
|
12
|
+
return unless @model_class.inheritance_column == column.name
|
13
|
+
metadata[:type] = 'sti'.freeze
|
14
|
+
metadata[:sti_class_list] = sti_list(find_parent_of(@model_class))
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def sti_list(klass)
|
20
|
+
list = klass
|
21
|
+
.descendants
|
22
|
+
.each_with_object([klass]) do |child, result|
|
23
|
+
result << child
|
24
|
+
end
|
25
|
+
list.sort_by(&:name)
|
26
|
+
end
|
27
|
+
|
28
|
+
def find_parent_of(model_class)
|
29
|
+
parent = model_class
|
30
|
+
parent = parent.superclass until top_parent?(parent.superclass)
|
31
|
+
parent
|
32
|
+
end
|
33
|
+
|
34
|
+
def top_parent?(klass)
|
35
|
+
klass == ModelFinder.base ||
|
36
|
+
klass.respond_to?(:abstract_class?) && klass.abstract_class?
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -1,105 +1,52 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
name: column.name,
|
10
|
-
type: column.type.to_s,
|
11
|
-
label: @model_class.human_attribute_name(column.name),
|
12
|
-
is_origin: true
|
13
|
-
}
|
14
|
-
fields
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def association_fields
|
19
|
-
@model_class.reflections.inject({}) do |fields, (field_name, reflection)|
|
20
|
-
type = extract_type_from reflection
|
21
|
-
|
22
|
-
fields[field_name] = {
|
23
|
-
name: field_name,
|
24
|
-
type: type,
|
25
|
-
label: field_name.titleize,
|
26
|
-
is_origin: true,
|
27
|
-
is_association: true,
|
28
|
-
is_polymorphic: is_polymorphic?(reflection),
|
29
|
-
is_through: is_through?(reflection),
|
30
|
-
has_scope: has_scope?(reflection),
|
31
|
-
foreign_key: foreign_key_for(reflection, type),
|
32
|
-
polymorphic_type: polymorphic_type_for(reflection, type),
|
33
|
-
polymorphic_list: polymorphic_list_for(reflection),
|
34
|
-
class: class_for(reflection)
|
35
|
-
}
|
36
|
-
fields
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
protected
|
41
|
-
def has_scope?(reflection)
|
42
|
-
reflection.scope.present?
|
43
|
-
end
|
1
|
+
module Wallaby
|
2
|
+
class ActiveRecord
|
3
|
+
class ModelDecorator
|
4
|
+
# To search and build the metadata for fields
|
5
|
+
class FieldsBuilder
|
6
|
+
def initialize(model_class)
|
7
|
+
@model_class = model_class
|
8
|
+
end
|
44
9
|
|
45
|
-
|
46
|
-
|
47
|
-
|
10
|
+
def general_fields
|
11
|
+
@model_class.columns.each_with_object({}) do |column, fields|
|
12
|
+
metadata = {
|
13
|
+
name: column.name,
|
14
|
+
type: column.type.to_s.freeze,
|
15
|
+
label: @model_class.human_attribute_name(column.name),
|
16
|
+
is_origin: true
|
17
|
+
}
|
18
|
+
sti_builder.update(metadata, column)
|
19
|
+
fields[column.name] = metadata
|
20
|
+
end
|
21
|
+
end
|
48
22
|
|
49
|
-
|
50
|
-
|
51
|
-
|
23
|
+
def association_fields
|
24
|
+
@model_class.reflections.each_with_object({}) do |(name, ref), fields|
|
25
|
+
metadata = {
|
26
|
+
name: name, type: ref.macro.to_s,
|
27
|
+
label: @model_class.human_attribute_name(name),
|
28
|
+
is_origin: true
|
29
|
+
}
|
30
|
+
association_builder.update(metadata, ref)
|
31
|
+
polymorphic_builder.update(metadata, ref)
|
32
|
+
fields[name] = metadata
|
33
|
+
end
|
34
|
+
end
|
52
35
|
|
53
|
-
|
54
|
-
target = if is_through?(reflection)
|
55
|
-
reflection.delegate_reflection
|
56
|
-
else
|
57
|
-
reflection
|
58
|
-
end
|
59
|
-
target.class.name.match(/([^:]+)Reflection/)[1].underscore
|
60
|
-
end
|
36
|
+
protected
|
61
37
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
else
|
66
|
-
reflection.association_foreign_key.try do |foreign_key|
|
67
|
-
/many/ =~ type ? "#{ foreign_key }s" : foreign_key
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
38
|
+
def sti_builder
|
39
|
+
@sti_builder ||= StiBuilder.new(@model_class)
|
40
|
+
end
|
71
41
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
foreign_key.gsub %r(_ids?$), '_type'
|
76
|
-
end
|
77
|
-
end
|
42
|
+
def association_builder
|
43
|
+
@association_builder ||= AssociationBuilder.new
|
44
|
+
end
|
78
45
|
|
79
|
-
|
80
|
-
|
81
|
-
available_model_class.inject([]) do |list, model_class|
|
82
|
-
if model_defined_polymorphic_name? model_class, reflection.name
|
83
|
-
list << model_class
|
46
|
+
def polymorphic_builder
|
47
|
+
@polymorphic_builder ||= PolymorphicBuilder.new
|
84
48
|
end
|
85
|
-
list
|
86
49
|
end
|
87
|
-
end || []
|
88
|
-
end
|
89
|
-
|
90
|
-
def model_defined_polymorphic_name?(model_class, polymorphic_name)
|
91
|
-
model_class.reflections.any? do |field_name, reflection|
|
92
|
-
reflection.options[:as].to_s == polymorphic_name.to_s
|
93
50
|
end
|
94
51
|
end
|
95
|
-
|
96
|
-
def available_model_class
|
97
|
-
Wallaby::Map.mode_map.select do |_, mode|
|
98
|
-
mode == Wallaby::ActiveRecord
|
99
|
-
end.keys
|
100
|
-
end
|
101
|
-
|
102
|
-
def class_for(reflection)
|
103
|
-
reflection.class_name.constantize if !is_polymorphic? reflection
|
104
|
-
end
|
105
52
|
end
|