metasploit-model 0.24.1-java
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 +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +27 -0
- data/.rspec +4 -0
- data/.simplecov +38 -0
- data/.travis.yml +6 -0
- data/.yardopts +5 -0
- data/Gemfile +43 -0
- data/LICENSE +27 -0
- data/README.md +33 -0
- data/Rakefile +52 -0
- data/app/models/metasploit/model/association/reflection.rb +46 -0
- data/app/models/metasploit/model/module/ancestor/spec/template.rb +125 -0
- data/app/models/metasploit/model/module/class/spec/template.rb +92 -0
- data/app/models/metasploit/model/module/instance/spec/template.rb +97 -0
- data/app/models/metasploit/model/search/group/base.rb +21 -0
- data/app/models/metasploit/model/search/group/intersection.rb +4 -0
- data/app/models/metasploit/model/search/group/union.rb +4 -0
- data/app/models/metasploit/model/search/operation/base.rb +39 -0
- data/app/models/metasploit/model/search/operation/boolean.rb +36 -0
- data/app/models/metasploit/model/search/operation/date.rb +37 -0
- data/app/models/metasploit/model/search/operation/integer.rb +14 -0
- data/app/models/metasploit/model/search/operation/null.rb +26 -0
- data/app/models/metasploit/model/search/operation/set.rb +34 -0
- data/app/models/metasploit/model/search/operation/set/integer.rb +5 -0
- data/app/models/metasploit/model/search/operation/set/string.rb +5 -0
- data/app/models/metasploit/model/search/operation/string.rb +11 -0
- data/app/models/metasploit/model/search/operation/union.rb +59 -0
- data/app/models/metasploit/model/search/operator/association.rb +43 -0
- data/app/models/metasploit/model/search/operator/attribute.rb +60 -0
- data/app/models/metasploit/model/search/operator/base.rb +34 -0
- data/app/models/metasploit/model/search/operator/delegation.rb +40 -0
- data/app/models/metasploit/model/search/operator/deprecated/app.rb +27 -0
- data/app/models/metasploit/model/search/operator/deprecated/author.rb +33 -0
- data/app/models/metasploit/model/search/operator/deprecated/authority.rb +43 -0
- data/app/models/metasploit/model/search/operator/deprecated/platform.rb +45 -0
- data/app/models/metasploit/model/search/operator/deprecated/ref.rb +50 -0
- data/app/models/metasploit/model/search/operator/deprecated/text.rb +32 -0
- data/app/models/metasploit/model/search/operator/null.rb +44 -0
- data/app/models/metasploit/model/search/operator/single.rb +98 -0
- data/app/models/metasploit/model/search/operator/union.rb +33 -0
- data/app/models/metasploit/model/search/query.rb +171 -0
- data/app/models/metasploit/model/spec/template.rb +273 -0
- data/app/models/metasploit/model/visitation/visitor.rb +69 -0
- data/app/validators/derivation_validator.rb +17 -0
- data/app/validators/dynamic_length_validator.rb +45 -0
- data/app/validators/ip_format_validator.rb +31 -0
- data/app/validators/nil_validator.rb +16 -0
- data/app/validators/parameters_validator.rb +147 -0
- data/app/validators/password_is_strong_validator.rb +115 -0
- data/config/locales/en.yml +209 -0
- data/lib/metasploit/model.rb +38 -0
- data/lib/metasploit/model/architecture.rb +346 -0
- data/lib/metasploit/model/association.rb +49 -0
- data/lib/metasploit/model/association/error.rb +40 -0
- data/lib/metasploit/model/author.rb +58 -0
- data/lib/metasploit/model/authority.rb +134 -0
- data/lib/metasploit/model/authority/bid.rb +10 -0
- data/lib/metasploit/model/authority/cve.rb +10 -0
- data/lib/metasploit/model/authority/msb.rb +10 -0
- data/lib/metasploit/model/authority/osvdb.rb +10 -0
- data/lib/metasploit/model/authority/pmasa.rb +10 -0
- data/lib/metasploit/model/authority/secunia.rb +10 -0
- data/lib/metasploit/model/authority/us_cert_vu.rb +10 -0
- data/lib/metasploit/model/authority/waraxe.rb +31 -0
- data/lib/metasploit/model/authority/zdi.rb +10 -0
- data/lib/metasploit/model/base.rb +25 -0
- data/lib/metasploit/model/configuration.rb +72 -0
- data/lib/metasploit/model/configuration/autoload.rb +109 -0
- data/lib/metasploit/model/configuration/child.rb +12 -0
- data/lib/metasploit/model/configuration/error.rb +4 -0
- data/lib/metasploit/model/configuration/i18n.rb +54 -0
- data/lib/metasploit/model/configuration/parent.rb +50 -0
- data/lib/metasploit/model/configured.rb +46 -0
- data/lib/metasploit/model/derivation.rb +110 -0
- data/lib/metasploit/model/derivation/full_name.rb +25 -0
- data/lib/metasploit/model/email_address.rb +128 -0
- data/lib/metasploit/model/engine.rb +34 -0
- data/lib/metasploit/model/error.rb +7 -0
- data/lib/metasploit/model/file.rb +49 -0
- data/lib/metasploit/model/invalid.rb +17 -0
- data/lib/metasploit/model/module.rb +8 -0
- data/lib/metasploit/model/module/action.rb +58 -0
- data/lib/metasploit/model/module/ancestor.rb +494 -0
- data/lib/metasploit/model/module/architecture.rb +40 -0
- data/lib/metasploit/model/module/author.rb +47 -0
- data/lib/metasploit/model/module/class.rb +406 -0
- data/lib/metasploit/model/module/handler.rb +35 -0
- data/lib/metasploit/model/module/instance.rb +626 -0
- data/lib/metasploit/model/module/path.rb +165 -0
- data/lib/metasploit/model/module/platform.rb +38 -0
- data/lib/metasploit/model/module/rank.rb +91 -0
- data/lib/metasploit/model/module/reference.rb +38 -0
- data/lib/metasploit/model/module/stance.rb +22 -0
- data/lib/metasploit/model/module/target.rb +80 -0
- data/lib/metasploit/model/module/target/architecture.rb +42 -0
- data/lib/metasploit/model/module/target/platform.rb +42 -0
- data/lib/metasploit/model/module/type.rb +44 -0
- data/lib/metasploit/model/nilify_blanks.rb +53 -0
- data/lib/metasploit/model/platform.rb +250 -0
- data/lib/metasploit/model/real_pathname.rb +18 -0
- data/lib/metasploit/model/reference.rb +108 -0
- data/lib/metasploit/model/search.rb +63 -0
- data/lib/metasploit/model/search/association.rb +32 -0
- data/lib/metasploit/model/search/attribute.rb +51 -0
- data/lib/metasploit/model/search/operation.rb +31 -0
- data/lib/metasploit/model/search/operation/integer/value.rb +33 -0
- data/lib/metasploit/model/search/operation/string/value.rb +14 -0
- data/lib/metasploit/model/search/operator.rb +10 -0
- data/lib/metasploit/model/search/operator/help.rb +47 -0
- data/lib/metasploit/model/search/with.rb +40 -0
- data/lib/metasploit/model/spec.rb +140 -0
- data/lib/metasploit/model/spec/error.rb +9 -0
- data/lib/metasploit/model/spec/i18n_exception_handler.rb +19 -0
- data/lib/metasploit/model/spec/pathname_collision.rb +28 -0
- data/lib/metasploit/model/spec/template/write.rb +42 -0
- data/lib/metasploit/model/spec/temporary_pathname.rb +59 -0
- data/lib/metasploit/model/translation.rb +31 -0
- data/lib/metasploit/model/version.rb +31 -0
- data/lib/metasploit/model/visitation.rb +9 -0
- data/lib/metasploit/model/visitation/visit.rb +103 -0
- data/lib/tasks/yard.rake +30 -0
- data/metasploit-model.gemspec +39 -0
- data/script/rails +9 -0
- data/spec/app/models/metasploit/model/association/reflection_spec.rb +48 -0
- data/spec/app/models/metasploit/model/module/ancestor/spec/template_spec.rb +174 -0
- data/spec/app/models/metasploit/model/module/class/spec/template_spec.rb +222 -0
- data/spec/app/models/metasploit/model/module/instance/spec/template_spec.rb +201 -0
- data/spec/app/models/metasploit/model/search/group/base_spec.rb +5 -0
- data/spec/app/models/metasploit/model/search/group/intersection_spec.rb +5 -0
- data/spec/app/models/metasploit/model/search/group/union_spec.rb +5 -0
- data/spec/app/models/metasploit/model/search/operation/base_spec.rb +70 -0
- data/spec/app/models/metasploit/model/search/operation/boolean_spec.rb +56 -0
- data/spec/app/models/metasploit/model/search/operation/date_spec.rb +89 -0
- data/spec/app/models/metasploit/model/search/operation/integer_spec.rb +9 -0
- data/spec/app/models/metasploit/model/search/operation/null_spec.rb +64 -0
- data/spec/app/models/metasploit/model/search/operation/set/integer_spec.rb +7 -0
- data/spec/app/models/metasploit/model/search/operation/set/string_spec.rb +7 -0
- data/spec/app/models/metasploit/model/search/operation/set_spec.rb +126 -0
- data/spec/app/models/metasploit/model/search/operation/string_spec.rb +9 -0
- data/spec/app/models/metasploit/model/search/operation/union_spec.rb +124 -0
- data/spec/app/models/metasploit/model/search/operator/association_spec.rb +108 -0
- data/spec/app/models/metasploit/model/search/operator/attribute_spec.rb +104 -0
- data/spec/app/models/metasploit/model/search/operator/base_spec.rb +34 -0
- data/spec/app/models/metasploit/model/search/operator/delegation_spec.rb +108 -0
- data/spec/app/models/metasploit/model/search/operator/deprecated/app_spec.rb +62 -0
- data/spec/app/models/metasploit/model/search/operator/deprecated/author_spec.rb +161 -0
- data/spec/app/models/metasploit/model/search/operator/deprecated/authority_spec.rb +123 -0
- data/spec/app/models/metasploit/model/search/operator/deprecated/platform_spec.rb +112 -0
- data/spec/app/models/metasploit/model/search/operator/deprecated/ref_spec.rb +327 -0
- data/spec/app/models/metasploit/model/search/operator/deprecated/text_spec.rb +357 -0
- data/spec/app/models/metasploit/model/search/operator/null_spec.rb +41 -0
- data/spec/app/models/metasploit/model/search/operator/single_spec.rb +327 -0
- data/spec/app/models/metasploit/model/search/operator/union_spec.rb +92 -0
- data/spec/app/models/metasploit/model/search/query_spec.rb +742 -0
- data/spec/app/models/metasploit/model/spec/template_spec.rb +23 -0
- data/spec/app/models/metasploit/model/visitation/visitor_spec.rb +45 -0
- data/spec/app/validators/derivation_validator_spec.rb +92 -0
- data/spec/app/validators/dynamic_length_validator_spec.rb +293 -0
- data/spec/app/validators/ip_format_validator_spec.rb +124 -0
- data/spec/app/validators/nil_validator_spec.rb +69 -0
- data/spec/app/validators/parameters_validator_spec.rb +342 -0
- data/spec/app/validators/password_is_strong_validator_spec.rb +250 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.gitkeep +0 -0
- data/spec/dummy/app/models/dummy/architecture.rb +92 -0
- data/spec/dummy/app/models/dummy/author.rb +15 -0
- data/spec/dummy/app/models/dummy/authority.rb +130 -0
- data/spec/dummy/app/models/dummy/email_address.rb +27 -0
- data/spec/dummy/app/models/dummy/module/action.rb +25 -0
- data/spec/dummy/app/models/dummy/module/ancestor.rb +67 -0
- data/spec/dummy/app/models/dummy/module/architecture.rb +19 -0
- data/spec/dummy/app/models/dummy/module/author.rb +28 -0
- data/spec/dummy/app/models/dummy/module/class.rb +69 -0
- data/spec/dummy/app/models/dummy/module/instance.rb +209 -0
- data/spec/dummy/app/models/dummy/module/path.rb +64 -0
- data/spec/dummy/app/models/dummy/module/platform.rb +19 -0
- data/spec/dummy/app/models/dummy/module/rank.rb +44 -0
- data/spec/dummy/app/models/dummy/module/reference.rb +19 -0
- data/spec/dummy/app/models/dummy/module/target.rb +62 -0
- data/spec/dummy/app/models/dummy/module/target/architecture.rb +19 -0
- data/spec/dummy/app/models/dummy/module/target/platform.rb +19 -0
- data/spec/dummy/app/models/dummy/platform.rb +58 -0
- data/spec/dummy/app/models/dummy/reference.rb +31 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +43 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +27 -0
- data/spec/dummy/config/environments/production.rb +63 -0
- data/spec/dummy/config/environments/test.rb +29 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +9 -0
- data/spec/dummy/config/locales/en.yml +1 -0
- data/spec/dummy/config/routes.rb +2 -0
- data/spec/dummy/db/schema.rb +707 -0
- data/spec/dummy/lib/assets/.gitkeep +0 -0
- data/spec/dummy/log/.gitkeep +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/dummy/spec/factories/dummy/architectures.rb +13 -0
- data/spec/dummy/spec/factories/dummy/authorities.rb +32 -0
- data/spec/dummy/spec/factories/dummy/authors.rb +8 -0
- data/spec/dummy/spec/factories/dummy/email_addresses.rb +8 -0
- data/spec/dummy/spec/factories/dummy/module/actions.rb +13 -0
- data/spec/dummy/spec/factories/dummy/module/ancestors.rb +45 -0
- data/spec/dummy/spec/factories/dummy/module/architectures.rb +35 -0
- data/spec/dummy/spec/factories/dummy/module/authors.rb +10 -0
- data/spec/dummy/spec/factories/dummy/module/classes.rb +40 -0
- data/spec/dummy/spec/factories/dummy/module/instances.rb +86 -0
- data/spec/dummy/spec/factories/dummy/module/paths.rb +16 -0
- data/spec/dummy/spec/factories/dummy/module/platforms.rb +35 -0
- data/spec/dummy/spec/factories/dummy/module/ranks.rb +14 -0
- data/spec/dummy/spec/factories/dummy/module/references.rb +17 -0
- data/spec/dummy/spec/factories/dummy/module/target/architectures.rb +40 -0
- data/spec/dummy/spec/factories/dummy/module/target/platforms.rb +41 -0
- data/spec/dummy/spec/factories/dummy/module/targets.rb +46 -0
- data/spec/dummy/spec/factories/dummy/platforms.rb +3 -0
- data/spec/dummy/spec/factories/dummy/references.rb +26 -0
- data/spec/factories/metasploit/model/architectures.rb +6 -0
- data/spec/factories/metasploit/model/association/reflections.rb +9 -0
- data/spec/factories/metasploit/model/authorities.rb +28 -0
- data/spec/factories/metasploit/model/authors.rb +9 -0
- data/spec/factories/metasploit/model/bases.rb +10 -0
- data/spec/factories/metasploit/model/email_addresses.rb +14 -0
- data/spec/factories/metasploit/model/module/actions.rb +9 -0
- data/spec/factories/metasploit/model/module/ancestors.rb +180 -0
- data/spec/factories/metasploit/model/module/architectures.rb +15 -0
- data/spec/factories/metasploit/model/module/classes.rb +47 -0
- data/spec/factories/metasploit/model/module/handlers.rb +3 -0
- data/spec/factories/metasploit/model/module/instances.rb +83 -0
- data/spec/factories/metasploit/model/module/paths.rb +51 -0
- data/spec/factories/metasploit/model/module/platforms.rb +15 -0
- data/spec/factories/metasploit/model/module/ranks.rb +9 -0
- data/spec/factories/metasploit/model/module/references.rb +11 -0
- data/spec/factories/metasploit/model/module/stances.rb +3 -0
- data/spec/factories/metasploit/model/module/targets.rb +22 -0
- data/spec/factories/metasploit/model/module/types.rb +5 -0
- data/spec/factories/metasploit/model/references.rb +88 -0
- data/spec/factories/metasploit/model/search/operator/associations.rb +5 -0
- data/spec/factories/metasploit/model/search/operator/attributes.rb +7 -0
- data/spec/factories/metasploit/model/search/operator/bases.rb +5 -0
- data/spec/lib/metasploit/model/architecture_spec.rb +52 -0
- data/spec/lib/metasploit/model/association/error_spec.rb +48 -0
- data/spec/lib/metasploit/model/association_spec.rb +145 -0
- data/spec/lib/metasploit/model/author_spec.rb +6 -0
- data/spec/lib/metasploit/model/authority/bid_spec.rb +17 -0
- data/spec/lib/metasploit/model/authority/cve_spec.rb +17 -0
- data/spec/lib/metasploit/model/authority/msb_spec.rb +17 -0
- data/spec/lib/metasploit/model/authority/osvdb_spec.rb +17 -0
- data/spec/lib/metasploit/model/authority/pmasa_spec.rb +17 -0
- data/spec/lib/metasploit/model/authority/secunia_spec.rb +17 -0
- data/spec/lib/metasploit/model/authority/us_cert_vu_spec.rb +17 -0
- data/spec/lib/metasploit/model/authority/waraxe_spec.rb +51 -0
- data/spec/lib/metasploit/model/authority/zdi_spec.rb +21 -0
- data/spec/lib/metasploit/model/authority_spec.rb +10 -0
- data/spec/lib/metasploit/model/base_spec.rb +58 -0
- data/spec/lib/metasploit/model/configuration/autoload_spec.rb +165 -0
- data/spec/lib/metasploit/model/configuration/child_spec.rb +24 -0
- data/spec/lib/metasploit/model/configuration/error_spec.rb +5 -0
- data/spec/lib/metasploit/model/configuration/i18n_spec.rb +103 -0
- data/spec/lib/metasploit/model/configuration_spec.rb +106 -0
- data/spec/lib/metasploit/model/configured_spec.rb +41 -0
- data/spec/lib/metasploit/model/derivation/full_name_spec.rb +75 -0
- data/spec/lib/metasploit/model/derivation_spec.rb +217 -0
- data/spec/lib/metasploit/model/email_address_spec.rb +19 -0
- data/spec/lib/metasploit/model/engine_spec.rb +84 -0
- data/spec/lib/metasploit/model/file_spec.rb +43 -0
- data/spec/lib/metasploit/model/invalid_spec.rb +54 -0
- data/spec/lib/metasploit/model/module/action_spec.rb +6 -0
- data/spec/lib/metasploit/model/module/ancestor_spec.rb +6 -0
- data/spec/lib/metasploit/model/module/architecture_spec.rb +9 -0
- data/spec/lib/metasploit/model/module/author_spec.rb +6 -0
- data/spec/lib/metasploit/model/module/class_spec.rb +19 -0
- data/spec/lib/metasploit/model/module/handler_spec.rb +61 -0
- data/spec/lib/metasploit/model/module/instance_spec.rb +183 -0
- data/spec/lib/metasploit/model/module/path_spec.rb +6 -0
- data/spec/lib/metasploit/model/module/platform_spec.rb +9 -0
- data/spec/lib/metasploit/model/module/rank_spec.rb +29 -0
- data/spec/lib/metasploit/model/module/reference_spec.rb +9 -0
- data/spec/lib/metasploit/model/module/stance_spec.rb +30 -0
- data/spec/lib/metasploit/model/module/target/architecture_spec.rb +9 -0
- data/spec/lib/metasploit/model/module/target/platform_spec.rb +9 -0
- data/spec/lib/metasploit/model/module/target_spec.rb +9 -0
- data/spec/lib/metasploit/model/module/type_spec.rb +125 -0
- data/spec/lib/metasploit/model/nilify_blanks_spec.rb +156 -0
- data/spec/lib/metasploit/model/platform_spec.rb +100 -0
- data/spec/lib/metasploit/model/reference_spec.rb +21 -0
- data/spec/lib/metasploit/model/search/association_spec.rb +33 -0
- data/spec/lib/metasploit/model/search/attribute_spec.rb +99 -0
- data/spec/lib/metasploit/model/search/operation/integer/value_spec.rb +20 -0
- data/spec/lib/metasploit/model/search/operation/string/value_spec.rb +20 -0
- data/spec/lib/metasploit/model/search/operation_spec.rb +144 -0
- data/spec/lib/metasploit/model/search/operator/help_spec.rb +41 -0
- data/spec/lib/metasploit/model/search/with_spec.rb +81 -0
- data/spec/lib/metasploit/model/search_spec.rb +230 -0
- data/spec/lib/metasploit/model/spec/error_spec.rb +5 -0
- data/spec/lib/metasploit/model/spec/i18n_exception_handler_spec.rb +42 -0
- data/spec/lib/metasploit/model/spec/pathname_collision_spec.rb +55 -0
- data/spec/lib/metasploit/model/spec_spec.rb +114 -0
- data/spec/lib/metasploit/model/translation_spec.rb +82 -0
- data/spec/lib/metasploit/model/version_spec.rb +141 -0
- data/spec/lib/metasploit/model/visitation/visit_spec.rb +316 -0
- data/spec/lib/metasploit/model_spec.rb +68 -0
- data/spec/spec_helper.rb +48 -0
- data/spec/support/shared/contexts/metasploit/model/configuration.rb +11 -0
- data/spec/support/shared/contexts/metasploit/model/module/ancestor/contents/metasploit_module.rb +12 -0
- data/spec/support/shared/contexts/metasploit/model/module/ancestor/factory/contents.rb +10 -0
- data/spec/support/shared/contexts/metasploit/model/module/ancestor/factory/contents/metasploit_module.rb +15 -0
- data/spec/support/shared/contexts/metasploit/model/search/operator/union/children.rb +13 -0
- data/spec/support/shared/examples/derives.rb +115 -0
- data/spec/support/shared/examples/metasploit/model/architecture.rb +425 -0
- data/spec/support/shared/examples/metasploit/model/architecture/seed.rb +25 -0
- data/spec/support/shared/examples/metasploit/model/author.rb +27 -0
- data/spec/support/shared/examples/metasploit/model/authority.rb +124 -0
- data/spec/support/shared/examples/metasploit/model/authority/seed.rb +49 -0
- data/spec/support/shared/examples/metasploit/model/configuration/parent/child.rb +60 -0
- data/spec/support/shared/examples/metasploit/model/email_address.rb +220 -0
- data/spec/support/shared/examples/metasploit/model/module/action.rb +26 -0
- data/spec/support/shared/examples/metasploit/model/module/ancestor.rb +2004 -0
- data/spec/support/shared/examples/metasploit/model/module/ancestor/payload_factory.rb +63 -0
- data/spec/support/shared/examples/metasploit/model/module/architecture.rb +36 -0
- data/spec/support/shared/examples/metasploit/model/module/author.rb +29 -0
- data/spec/support/shared/examples/metasploit/model/module/class.rb +1514 -0
- data/spec/support/shared/examples/metasploit/model/module/handler.rb +21 -0
- data/spec/support/shared/examples/metasploit/model/module/instance.rb +1384 -0
- data/spec/support/shared/examples/metasploit/model/module/instance/class_methods.rb +537 -0
- data/spec/support/shared/examples/metasploit/model/module/instance/is_not_stanced_with_module_type.rb +22 -0
- data/spec/support/shared/examples/metasploit/model/module/instance/is_stanced_with_module_type.rb +38 -0
- data/spec/support/shared/examples/metasploit/model/module/instance/validates/dynamic_length_of.rb +131 -0
- data/spec/support/shared/examples/metasploit/model/module/path.rb +493 -0
- data/spec/support/shared/examples/metasploit/model/module/platform.rb +36 -0
- data/spec/support/shared/examples/metasploit/model/module/rank.rb +92 -0
- data/spec/support/shared/examples/metasploit/model/module/reference.rb +16 -0
- data/spec/support/shared/examples/metasploit/model/module/target.rb +29 -0
- data/spec/support/shared/examples/metasploit/model/module/target/architecture.rb +56 -0
- data/spec/support/shared/examples/metasploit/model/module/target/platform.rb +56 -0
- data/spec/support/shared/examples/metasploit/model/platform.rb +213 -0
- data/spec/support/shared/examples/metasploit/model/real_pathname.rb +29 -0
- data/spec/support/shared/examples/metasploit/model/reference.rb +410 -0
- data/spec/support/shared/examples/metasploit/model/search/operation/integer/value.rb +79 -0
- data/spec/support/shared/examples/metasploit/model/search/operation/string/value.rb +53 -0
- data/spec/support/shared/examples/metasploit/model/search/operator/help.rb +134 -0
- data/spec/support/shared/examples/metasploit/model/translation.rb +37 -0
- data/spec/support/shared/examples/search/query.rb +43 -0
- data/spec/support/shared/examples/search/query/metasploit/model/search/operator/deprecated/app.rb +44 -0
- data/spec/support/shared/examples/search/query/metasploit/model/search/operator/deprecated/authority.rb +60 -0
- data/spec/support/shared/examples/search_association.rb +13 -0
- data/spec/support/shared/examples/search_attribute.rb +27 -0
- data/spec/support/shared/examples/search_with.rb +36 -0
- data/spec/support/shared/matchers/allow_attribute.rb +17 -0
- data/spec/support/templates/metasploit/model/module/ancestors/_attributes.rb.erb +9 -0
- data/spec/support/templates/metasploit/model/module/ancestors/_methods.rb.erb +8 -0
- data/spec/support/templates/metasploit/model/module/ancestors/_validations.rb.erb +6 -0
- data/spec/support/templates/metasploit/model/module/ancestors/base.rb.erb +3 -0
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_auxiliary.rb.erb +1 -0
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_encoder.rb.erb +1 -0
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_exploit.rb.erb +1 -0
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_non_payload.rb.erb +5 -0
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_nop.rb.erb +1 -0
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_payload.rb.erb +4 -0
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_post.rb.erb +1 -0
- data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_handled.rb.erb +20 -0
- data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_single.rb.erb +1 -0
- data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_stage.rb.erb +0 -0
- data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_stager.rb.erb +1 -0
- data/spec/support/templates/metasploit/model/module/classes/_methods.rb.erb +9 -0
- metadata +747 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
# Raises all I18n errors as exceptions so that missing translations (or other errors) with en.yml are caught by the
|
2
|
+
# specs.
|
3
|
+
#
|
4
|
+
# @example Use in spec_helper.rb to find missing translations
|
5
|
+
# RSpec.configure do |config|
|
6
|
+
# config.before(:suite) do
|
7
|
+
# # catch missing translations
|
8
|
+
# I18n.exception_handler = Metasploit::Model::Spec::I18nExceptionHandler.new
|
9
|
+
# end
|
10
|
+
# end
|
11
|
+
class Metasploit::Model::Spec::I18nExceptionHandler < I18n::ExceptionHandler
|
12
|
+
# Raises `exception`.
|
13
|
+
#
|
14
|
+
# @return [void]
|
15
|
+
# @raise [Exception]
|
16
|
+
def call(exception, locale, key, options)
|
17
|
+
raise exception.to_exception
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Metasploit
|
2
|
+
module Model
|
3
|
+
module Spec
|
4
|
+
# Error raised if a Pathname already exists on disk when one of the real_paths for metasploit-models factories
|
5
|
+
# is generated or derived, which would indicate that a prior spec did not clean up properly.
|
6
|
+
class PathnameCollision < Metasploit::Model::Spec::Error
|
7
|
+
# Checks if there is a pathname collision.
|
8
|
+
#
|
9
|
+
# @param (see #initialize)
|
10
|
+
# @return [void]
|
11
|
+
# @raise [Metasploit::Model::Spec::PathnameCollision] if `pathname.exist?` is `true`.
|
12
|
+
def self.check!(pathname)
|
13
|
+
if pathname.exist?
|
14
|
+
raise new(pathname)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# @param pathname [Pathname] Pathname that already exists on disk
|
19
|
+
def initialize(pathname)
|
20
|
+
super(
|
21
|
+
"#{pathname} already exists. " \
|
22
|
+
"Metasploit::Model::Spec.remove_temporary_pathname was not called after the previous spec."
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Extend to add a class method to create a new template and write it only if valid.
|
2
|
+
#
|
3
|
+
# @example extend and write
|
4
|
+
# class MyTemplate
|
5
|
+
# extend Metasploit::Model::Spec::Template::Write
|
6
|
+
#
|
7
|
+
# def write
|
8
|
+
# ...
|
9
|
+
# end
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# success = MyTemplate.write(attributes)
|
13
|
+
module Metasploit::Model::Spec::Template::Write
|
14
|
+
# Writes template for `attributes` to disk if the created template is valid.
|
15
|
+
#
|
16
|
+
# @return [true] if template was valid and was written.
|
17
|
+
# @return [false] if template was invalid and was not written.
|
18
|
+
# @see #write!
|
19
|
+
def write(attributes={})
|
20
|
+
template = new(attributes)
|
21
|
+
|
22
|
+
written = template.valid?
|
23
|
+
|
24
|
+
if written
|
25
|
+
template.write
|
26
|
+
end
|
27
|
+
|
28
|
+
written
|
29
|
+
end
|
30
|
+
|
31
|
+
# Writes templates for `attributes` to disk if created template is valid; otherwise, raises an exception.
|
32
|
+
#
|
33
|
+
# @return [void]
|
34
|
+
# @raise [Metasploit::Model::Invalid] if template is invalid
|
35
|
+
# @see write
|
36
|
+
def write!(attributes={})
|
37
|
+
template = new(attributes)
|
38
|
+
|
39
|
+
template.valid!
|
40
|
+
template.write
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Metasploit
|
2
|
+
module Model
|
3
|
+
module Spec
|
4
|
+
# @example Temporary pathname creation and removal
|
5
|
+
#
|
6
|
+
# # spec/spec_helper.rb
|
7
|
+
# RSpec.config do |config|
|
8
|
+
# config.before(:suite) do
|
9
|
+
# Metasploit::Model::Spec.temporary_pathname = MyApp.root.join('spec', 'tmp')
|
10
|
+
# # Clean up any left over files from a previously aborted suite
|
11
|
+
# Metasploit::Model::Spec.remove_temporary_pathname
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# config.after(:each) do
|
15
|
+
# Metasploit::Model::Spec.remove_temporary_pathname
|
16
|
+
# end
|
17
|
+
# end
|
18
|
+
module TemporaryPathname
|
19
|
+
# Removes {#temporary_pathname} from disk if it's been set and exists on disk.
|
20
|
+
#
|
21
|
+
# @return [void]
|
22
|
+
def remove_temporary_pathname
|
23
|
+
begin
|
24
|
+
removal_pathname = temporary_pathname
|
25
|
+
rescue Metasploit::Model::Spec::Error
|
26
|
+
removal_pathname = nil
|
27
|
+
end
|
28
|
+
|
29
|
+
if removal_pathname and removal_pathname.exist?
|
30
|
+
removal_pathname.rmtree
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Pathname to hold temporary files for metasploit-model factories and sequence. The directory must be be
|
35
|
+
# safely writable and removable for specs that need to use the file system.
|
36
|
+
#
|
37
|
+
# @return [Pathname]
|
38
|
+
# @raise [Metasploit::Model::Spec::Error] if {#temporary_pathname} is not set prior to calling this method.
|
39
|
+
def temporary_pathname
|
40
|
+
unless instance_variable_defined?(:@temporary_pathname)
|
41
|
+
raise Metasploit::Model::Spec::Error, 'Metasploit::Model::Spec.temporary_pathname not set prior to use'
|
42
|
+
end
|
43
|
+
|
44
|
+
@temporary_pathname
|
45
|
+
end
|
46
|
+
|
47
|
+
# Sets the pathname to use for temporary directories and files used in metasploit_data_models factories and
|
48
|
+
# sequences.
|
49
|
+
#
|
50
|
+
# @param pathname [Pathname] path to a directory. It does not need to exist, but need to be in a writable parent
|
51
|
+
# directory so it can be removed by {#remove_temporary_pathname}.
|
52
|
+
# @return [Pathname] `pathname`
|
53
|
+
def temporary_pathname=(pathname)
|
54
|
+
@temporary_pathname = pathname
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# ActiveRecord::Translation is a dirty bastard and overrides `ActiveModel::Translation#lookup_ancestors`, so that it
|
2
|
+
# will only count superclasses, and not all ancestors. Metasploit::Model needs the original behavior so that its
|
3
|
+
# {Metasploit::Model::Module} modules can supply translations to both `ActiveRecord::Base` descendants in `Mdm` and
|
4
|
+
# `ActiveModel` descendants in `Metasploit::Framework`
|
5
|
+
#
|
6
|
+
# @see https://github.com/rails/rails/issues/11409
|
7
|
+
module Metasploit::Model::Translation
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
# Adds {#lookup_ancestors} and {#i18n_scope} so that {Metasploit::Model} modules can participate in translation
|
11
|
+
# lookups.
|
12
|
+
module ClassMethods
|
13
|
+
# When localizing a string, it goes through the lookup returned by this method, which is used in
|
14
|
+
# ActiveModel::Name#human, # ActiveModel::Errors#full_messages and ActiveModel::Translation#human_attribute_name.
|
15
|
+
#
|
16
|
+
# @return [Array<Module>] Array of `Class#ancestors` that respond to `module_name`.
|
17
|
+
def lookup_ancestors
|
18
|
+
self.ancestors.select { |ancestor|
|
19
|
+
ancestor.respond_to?(:model_name)
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
# Classes that include a metasploit-model are trying to share code between ActiveRecord and ActiveModel, so the scope
|
24
|
+
# should be neither 'activerecord' nor 'activemodel'.
|
25
|
+
#
|
26
|
+
# @return [String] `'metasploit.model'`
|
27
|
+
def i18n_scope
|
28
|
+
'metasploit.model'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Metasploit
|
2
|
+
module Model
|
3
|
+
# Holds components of {VERSION} as defined by {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0}.
|
4
|
+
module Version
|
5
|
+
# The major version number.
|
6
|
+
MAJOR = 0
|
7
|
+
# The minor version number, scoped to the {MAJOR} version number.
|
8
|
+
MINOR = 24
|
9
|
+
# The patch number, scoped to the {MINOR} version number.
|
10
|
+
PATCH = 1
|
11
|
+
|
12
|
+
# The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
|
13
|
+
# {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
|
14
|
+
#
|
15
|
+
# @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
|
16
|
+
# other than master.
|
17
|
+
def self.full
|
18
|
+
version = "#{MAJOR}.#{MINOR}.#{PATCH}"
|
19
|
+
|
20
|
+
if defined? PRERELEASE
|
21
|
+
version = "#{version}-#{PRERELEASE}"
|
22
|
+
end
|
23
|
+
|
24
|
+
version
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# @see Version.full
|
29
|
+
VERSION = Version.full
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
module Metasploit
|
2
|
+
module Model
|
3
|
+
module Visitation
|
4
|
+
# {ClassMethods#visit DSL} to declare {Metasploit::Model::Visitation::Visitor visitors} for a given `Module#name`
|
5
|
+
# (or any Class that has an ancestor in `Class#ancestors` with that `Module#name`) and then use then to {#visit}
|
6
|
+
# instances of those class and/or modules.
|
7
|
+
module Visit
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
# Adds {#visit} DSL to class to declare {Metasploit::Model::Visitation::Visitor visitors}.
|
11
|
+
module ClassMethods
|
12
|
+
# Defines how to visit a node with one or more `Module#names` in its `Module#ancestors`.
|
13
|
+
#
|
14
|
+
# @param module_names [Array<String>] Names of class/module to be visited with block.
|
15
|
+
# @yield [node] Block instance_exec'd on instance of the class {#visit} was called.
|
16
|
+
# @yieldparam node [Object]
|
17
|
+
# @return [Array<Metasploit::Model::Visitation::Visitor>] visitors created.
|
18
|
+
# @raise [ArgumentError] if `module_names` is empty
|
19
|
+
# @raise [Metasploit::Model::Invalid] unless `block` is given.
|
20
|
+
def visit(*module_names, &block)
|
21
|
+
if module_names.empty?
|
22
|
+
raise ArgumentError,
|
23
|
+
"At least one Modul#name must be passed to #{__method__} so the visitor(s) knows which Modules " \
|
24
|
+
"it/they can visit."
|
25
|
+
end
|
26
|
+
|
27
|
+
module_names.collect do |module_name|
|
28
|
+
visitor = Metasploit::Model::Visitation::Visitor.new(
|
29
|
+
:module_name => module_name,
|
30
|
+
:parent => self,
|
31
|
+
&block
|
32
|
+
)
|
33
|
+
visitor.valid!
|
34
|
+
|
35
|
+
visitor_by_module_name[visitor.module_name] = visitor
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# {Metasploit::Model::Visitation::Visitor Visitor} for `klass` or one of its `Class#ancestors`.
|
40
|
+
#
|
41
|
+
# @return [Metasploit::Model::Visitation::Visitor]
|
42
|
+
# @raise [TypeError] if there is not visitor for `klass` or one of its ancestors.
|
43
|
+
def visitor(klass)
|
44
|
+
visitor = visitor_by_module[klass]
|
45
|
+
|
46
|
+
unless visitor
|
47
|
+
klass.ancestors.each do |mod|
|
48
|
+
visitor = visitor_by_module[mod]
|
49
|
+
|
50
|
+
unless visitor
|
51
|
+
visitor = visitor_by_module_name[mod.name]
|
52
|
+
end
|
53
|
+
|
54
|
+
if visitor
|
55
|
+
visitor_by_module[klass] = visitor
|
56
|
+
|
57
|
+
break
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
unless visitor
|
63
|
+
raise TypeError,
|
64
|
+
"No visitor that handles #{klass} or " \
|
65
|
+
"any of its ancestors (#{klass.ancestors.map(&:name).to_sentence})"
|
66
|
+
end
|
67
|
+
|
68
|
+
visitor
|
69
|
+
end
|
70
|
+
|
71
|
+
# Allows {Metasploit::Model::Visitation::Visitor visitors} to be looked up by Module instead of `Module#name`.
|
72
|
+
#
|
73
|
+
# @return [Hash{Class => Metasploit::Model::Visitation::Visitor}]
|
74
|
+
def visitor_by_module
|
75
|
+
@visitor_by_module ||= {}
|
76
|
+
end
|
77
|
+
|
78
|
+
# Maps `Module#name` passed to {ClassMethods#visit} through :module_name to the
|
79
|
+
# {Metasploit::Model::Visitation::Visitor} with the `Module#name` as
|
80
|
+
# {Metasploit::Model::Visitation::Visitor#module_name}.
|
81
|
+
#
|
82
|
+
# @return [Hash{String => Metasploit::Model::Visitation::Visitor}]
|
83
|
+
def visitor_by_module_name
|
84
|
+
@visitor_by_module_name ||= {}
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
#
|
89
|
+
# Instance Methods
|
90
|
+
#
|
91
|
+
|
92
|
+
# Visits `node`
|
93
|
+
#
|
94
|
+
# @return (see Metasploit::Model::Visitation::Visitor#visit)
|
95
|
+
def visit(node)
|
96
|
+
visitor = self.class.visitor(node.class)
|
97
|
+
|
98
|
+
visitor.visit(self, node)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
data/lib/tasks/yard.rake
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# @note All options not specific to any given rake task should go in the .yardopts file so they are available to both
|
2
|
+
# the below rake tasks and when invoking `yard` from the command line
|
3
|
+
|
4
|
+
if defined? YARD
|
5
|
+
namespace :yard do
|
6
|
+
YARD::Rake::YardocTask.new(:doc) do |t|
|
7
|
+
# --no-stats here as 'stats' task called after will print fuller stats
|
8
|
+
t.options = ['--no-stats']
|
9
|
+
|
10
|
+
t.after = Proc.new {
|
11
|
+
Rake::Task['yard:stats'].execute
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Shows stats for YARD Documentation including listing undocumented modules, classes, constants, and methods"
|
16
|
+
task :stats => :environment do
|
17
|
+
stats = YARD::CLI::Stats.new
|
18
|
+
stats.run('--compact', '--list-undoc')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# @todo Figure out how to just clone description from yard:doc
|
23
|
+
desc "Generate YARD documentation"
|
24
|
+
# allow calling namespace to as a task that goes to default task for namespace
|
25
|
+
task :yard => ['yard:doc']
|
26
|
+
|
27
|
+
task :default => :yard
|
28
|
+
else
|
29
|
+
puts 'YARD not defined, so yard tasks cannot be setup.'
|
30
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'metasploit/model/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'metasploit-model'
|
8
|
+
spec.version = Metasploit::Model::VERSION
|
9
|
+
spec.authors = ['Luke Imhoff']
|
10
|
+
spec.email = ['luke_imhoff@rapid7.com']
|
11
|
+
spec.description = %q{Common code, such as validators and mixins, that are shared between ActiveModels in metasploit-framework and ActiveRecords in metasploit_data_models.}
|
12
|
+
spec.summary = %q{Metasploit Model Mixins and Validators}
|
13
|
+
|
14
|
+
spec.files = `git ls-files`.split($/)
|
15
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
16
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
|
+
spec.require_paths = ['lib']
|
18
|
+
|
19
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
20
|
+
spec.add_development_dependency 'rake'
|
21
|
+
|
22
|
+
# documentation
|
23
|
+
spec.add_development_dependency 'yard'
|
24
|
+
|
25
|
+
# Dependency loading
|
26
|
+
spec.add_runtime_dependency 'activesupport'
|
27
|
+
|
28
|
+
if RUBY_PLATFORM =~ /java/
|
29
|
+
# markdown formatting for yard
|
30
|
+
spec.add_development_dependency 'kramdown'
|
31
|
+
|
32
|
+
spec.platform = Gem::Platform::JAVA
|
33
|
+
else
|
34
|
+
# markdown formatting for yard
|
35
|
+
spec.add_development_dependency 'redcarpet'
|
36
|
+
|
37
|
+
spec.platform = Gem::Platform::RUBY
|
38
|
+
end
|
39
|
+
end
|
data/script/rails
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
+
|
4
|
+
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
5
|
+
ENGINE_PATH = File.expand_path('../../lib/metasploit/model/engine', __FILE__)
|
6
|
+
|
7
|
+
|
8
|
+
require 'rails/all'
|
9
|
+
require 'rails/engine/commands'
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Metasploit::Model::Association::Reflection do
|
4
|
+
context 'validations' do
|
5
|
+
it { should validate_presence_of :model }
|
6
|
+
it { should validate_presence_of :name }
|
7
|
+
it { should validate_presence_of :class_name }
|
8
|
+
end
|
9
|
+
|
10
|
+
context '#klass' do
|
11
|
+
subject(:klass) do
|
12
|
+
reflection.klass
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
let(:class_name) do
|
17
|
+
FactoryGirl.generate :metasploit_model_association_reflection_class_name
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:class_name_class) do
|
21
|
+
Class.new
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:model) do
|
25
|
+
Class.new
|
26
|
+
end
|
27
|
+
|
28
|
+
let(:name) do
|
29
|
+
FactoryGirl.generate :metasploit_model_association_reflection_name
|
30
|
+
end
|
31
|
+
|
32
|
+
let(:reflection) do
|
33
|
+
described_class.new(
|
34
|
+
:model => model,
|
35
|
+
:name => name,
|
36
|
+
:class_name => class_name
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
before(:each) do
|
41
|
+
stub_const(class_name, class_name_class)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should return Class with Class#name #class_name' do
|
45
|
+
klass.should == class_name_class
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|