1. 21 2月, 2017 40 次提交
    • A
      Prefer remove_method over undef_method · c116eaf2
      Andrew White 提交于
      Using `undef_method` means that when a route is removed any other
      implementations of that method in the ancestor chain are inaccessible
      so instead use `remove_method` which restores access to the ancestor.
      c116eaf2
    • A
      Support mapping of non-model classes · 81a6761a
      Andrew White 提交于
      81a6761a
    • A
      Raise an error if `direct` is inside a scope block · 80dcfd01
      Andrew White 提交于
      80dcfd01
    • A
      Add CHANGELOG entry for `direct` method · 960e73a9
      Andrew White 提交于
      960e73a9
    • A
      Add custom polymorphic mapping · 3bf47b01
      Andrew White 提交于
      Allow the use of `direct` to specify custom mappings for polymorphic_url, e.g:
      
        resource :basket
        direct(class: "Basket") { [:basket] }
      
      This will then generate the following:
      
        >> link_to "Basket", @basket
        => <a href="/basket">Basket</a>
      
      More importantly it will generate the correct url when used with `form_for`.
      
      Fixes #1769.
      3bf47b01
    • A
      Add test for calling a url helper in Mapper#direct · d67e2520
      Andrew White 提交于
      d67e2520
    • A
      Don't allocate a hash unnecessarily · 7d1e7380
      Andrew White 提交于
      7d1e7380
    • A
      Only accept symbols and strings for Mapper#direct · e96da0a7
      Andrew White 提交于
      e96da0a7
    • A
      Rename url_helper to direct · 47a27e89
      Andrew White 提交于
      47a27e89
    • A
      Add support for defining custom url helpers in routes.rb · ce7d5fb2
      Andrew White 提交于
      Allow the definition of custom url helpers that will be available
      automatically wherever standard url helpers are available. The
      current solution is to create helper methods in ApplicationHelper
      or some other helper module and this isn't a great solution since
      the url helper module can be called directly or included in another
      class which doesn't include the normal helper modules.
      
      Reference #22512.
      ce7d5fb2
    • A
      Wrap routes.url_helpers.url_for via a proxy · 31dc46cb
      Andrew White 提交于
      The singleton url_for on Rails.application.routes.url_helpers isn't the
      same as the url_for you get when you include the module in your class as
      the latter has support for polymorphic style routes, etc. whereas the
      former accepts only a hash and is the underlying implementation defined
      on ActionDispatch::Routing::RouteSet.
      
      This commit changes the singleton method to call through a proxy instance
      so that it gets the full range of features specified in the documentation
      for url_for.
      31dc46cb
    • R
      Tiny documentation edits [ci skip] · 658b5244
      Robin Dupret 提交于
      658b5244
    • G
      Merge pull request #28092 from sikachu/fix-define_attribute_method-with-symbol-in-ar · 5716c4dd
      Guillermo Iguaran 提交于
      Fix `define_attribute_method` with Symbol in AR
      5716c4dd
    • P
      Fix `define_attribute_method` with Symbol in AR · 0b157f8d
      Prem Sichanugrist 提交于
      This issue is only appear when you try to call `define_attribute_method`
      and passing a symbol in Active Record. It does not appear in isolation
      in Active Model itself.
      
      Before this patch, when you run `User.define_attribute_method :foo`, you
      will get:
      
          NoMethodError: undefined method `unpack' for :foo:Symbol
              from activerecord/lib/active_record/attribute_methods/read.rb:28:in `define_method_attribute'
              from activerecord/lib/active_record/attribute_methods/primary_key.rb:61:in `define_method_attribute'
              from activemodel/lib/active_model/attribute_methods.rb:292:in `block in define_attribute_method'
              from activemodel/lib/active_model/attribute_methods.rb:285:in `each'
              from activemodel/lib/active_model/attribute_methods.rb:285:in `define_attribute_method'
      
      This patch contains both a fix in Active Model and a test in Active
      Record for this error.
      0b157f8d
    • G
      Merge pull request #28088 from y-yagi/do_not_generate_templates_to_api_doc · ba22c5ee
      Guillermo Iguaran 提交于
      Do not display template files on API doc [ci skip]
      ba22c5ee
    • K
      Fix run_via[]= backwards compatibility. · c1b64429
      Kasper Timm Hansen 提交于
      ```
      Minitest.run_via[:rails] = true
      ```
      
      👆 would break because a simple alias won't catch the second
      true argument there.
      c1b64429
    • G
      Merge pull request #28055 from robertomiranda/patch-3 · de4c9186
      Guillermo Iguaran 提交于
      Use Puma 3.7
      de4c9186
    • V
      Merge pull request #28089 from kenta-s/improve-testing-docs · c1d57d74
      Vipul A M 提交于
      Fix some grammar in docs [ci skip]
      c1d57d74
    • K
      Fix some grammar in docs [ci skip] · 5d3abc06
      kenta-s 提交于
      5d3abc06
    • G
      Merge pull request #28081 from meinac/fix_redirect_method · 6df558f2
      Guillermo Iguaran 提交于
      Use `response#location` instead of `#location` in redirect.
      6df558f2
    • Y
      Do not display template files on API doc [ci skip] · 8e52ce9c
      yuuji.yaginuma 提交于
      8e52ce9c
    • R
      Use Puma 3.7.x · bd163bda
      Roberto Miranda 提交于
      ref this commit seems that has not been merged into 3.7 https://github.com/puma/puma/commit/42bec4600c51ab8a1c1ee5a0e1b738a4ffd82bf2
      bd163bda
    • M
      Merge pull request #28083 from eileencodes/ensure-test-threads-shared-db-conn · 0ce64183
      Matthew Draper 提交于
      Ensure test threads share a DB connection
      0ce64183
    • J
      Add missing space · ab014607
      Jon Moss 提交于
      [ci skip]
      ab014607
    • E
      Add changelog for system tests · 13151d51
      eileencodes 提交于
      13151d51
    • E
      Merge pull request #26703 from eileencodes/rails_system_tests · 2ee146af
      Eileen M. Uchitelle 提交于
      WIP: Capybara Integration with Rails (AKA System Tests)
      2ee146af
    • E
      Ensure test threads share a DB connection · d6466beb
      eileencodes 提交于
      This ensures multiple threads inside a transactional test to see consistent
      database state.
      
      When a system test starts Puma spins up one thread and Capybara spins up
      another thread. Because of this when tests are run the database cannot
      see what was inserted into the database on teardown. This is because
      there are two threads using two different connections.
      
      This change uses the statement cache to lock the threads to using a
      single connection ID instead of each not being able to see each other.
      This code only runs in the fixture setup and teardown so it does not
      affect real production databases.
      
      When a transaction is opened we set `lock_thread` to `Thread.current` so
      we can keep track of which connection the thread is using. When we
      rollback the transaction we unlock the thread and then there will be no
      left-over data in the database because the transaction will roll back
      the correct connections.
      
      [ Eileen M. Uchitelle, Matthew Draper ]
      d6466beb
    • K
      Merge pull request #27941 from y-yagi/prevent_multiple_values_being_set_to_run_via · ff326e74
      Kasper Timm Hansen 提交于
      Prevent multiple values being set to `run_via`
      ff326e74
    • K
      Revert "Merge pull request #27925 from robin850/hwia-removal" · 507c9970
      Kasper Timm Hansen 提交于
      Pointed out by @matthewd that the HWIA subclass changes the
      AS scoped class and top-level HWIA hierarchies out from under
      existing classes.
      
      This reverts commit 71da3909, reversing
      changes made to 41c33bd4.
      507c9970
    • E
      Clean up documentation · 42a6dbdf
      eileencodes 提交于
      There were some grammar issues and incorrect information in the system
      tests documentation.
      42a6dbdf
    • E
      Rename system_test_helper -> application_system_test_case · 2d61c5d8
      eileencodes 提交于
      This renames the system test helper file to be application system test
      case to match what the rest of Rails does. In the future we should
      consider changing the test_helper to match.
      2d61c5d8
    • E
      Fix default host in setup, move teardown to helper file · 161cf89e
      eileencodes 提交于
      * Override integration test default host
      
      Integration tests automatically set the default host to
      'http://example.com'. This works fine for integration tests because they
      are not real browser sessions, but doesn't work fine for system tests
      because they are real browser sessions.
      
      We can override this by setting the `host!` in `before_setup. The
      `Capybara.always_include_port` will allow the test to look at
      `127.0.0.1:port capybara picks` and properly redirect the test.
      
      Any application can override this by setting the `host!` in
      their system test helper. Generally though, applications are going to be
      using localhost.
      
      In this commit I also moved the setup and teardown into their own module
      for tidiness.
      
      * Move teardown settings into system test case
      
      These configuration options can be put into the system test case file
      instead of the generated system tests helper file. This is an
      implementation detail and therefore shouldn't be generated with the
      template.
      161cf89e
    • E
      Fix screenshot helper to provide correct file name · 983275eb
      eileencodes 提交于
      We only want the file name to include the word `failures` if it failed,
      not any time the user wants to take a screenshot during a test run.
      983275eb
    • E
      Add default configuration to generated system test helper · dbb60ff5
      eileencodes 提交于
      This serves as self documentation so users know how to change the
      driver.
      dbb60ff5
    • E
      Move and rename system tests · 1a0ca84a
      eileencodes 提交于
      * Move system tests back into Action Pack
      * Rename `ActionSystemTest` to `ActionDispatch::SystemTestCase`
      * Remove private base module and only make file for public
      `SystemTestCase` class, name private module `SystemTesting`
      * Rename `ActionSystemTestCase` to `ApplicationSystemTestCase`
      * Update corresponding documentation and guides
      * Delete old `ActionSystemTest` files
      1a0ca84a
    • E
      Rename server and remove optional port setting · 0a683085
      eileencodes 提交于
      I've renamed the server to `rails_puma` so that it doesn't override
      Capybara's default puma server. I've also removed the hard port setting.
      Users can simply use `Capybara.server_port` writer to set the port if
      they require that.
      0a683085
    • E
      Update documentation and guides · 893c3b62
      eileencodes 提交于
      Update the documentation after rewriting a majority of the functionality
      for system testing.
      893c3b62
    • E
      Rewrite API for ActionSystemTest · 3dfbe7e4
      eileencodes 提交于
      This is a major rewrite of what existed previously. After discussing
      this feature with DHH I realized that I was looking at the setup all
      wrong.
      
      I had originally mentally broken it into "what Rails wants" and "what
      Capybara already has".
      
      What happened after looking at it from DHH's angle was that I saw there
      was no reason to group settings by Driver but instead the following
      groups:
      
      - There will always be a `Driver`
        - This can selenium, poltergeist, or capybara webkit. Capybara already
          provides all of these and there's no reason to break them into a
          category of Rails' usese Selenium like this and Capybara uses it
          like that.
      - Only Selenium drivers care about `Browser`
        - Because of this it was weird to set it only in the Rails end.
        - Therefore only `Browser`, and not `Driver` cares about
          `screen_size`.
      - Puma is the default `Server` in Rails
        - Therefore there's no reason to explictly support Webkit
      
      Once I looked at it from this angle I was able to abstract all the
      settings away from grouping the drivers with their options.
      
      Now all the driver, server, and browser settings are abstracted away and
      not part of the public facing API.
      
      This means there's no requirement to initialize new classes to change
      the default settings and the public options API is much smaller.
      
      All of Rails preferred defaults are still there (selenium with port
      21800 using the chrome browser with a screen size of 1400x1400) but
      changing these no longer requires initializing a new class or
      understanding which driver you're using underneath (rails defaults or
      capybaras defaults respectively). Rails opinions are now simple defaults
      instead of doing a them versus us setup with Drivers and explicit
      options.
      
      Changing the defaults is simple. Call `driven_by` with different
      settings to change the defaults which will on their own initialize new
      classes and change the default settings.
      
      Use poltergeist with port 3000 for Puma
      
      ```
      driven_by :poltergeist, on: 3000
      ```
      
      Use selenium with the Chrome browser and a screen size of 800x800
      ```
      driven_by :selenium, using: :firefox, screen_size: [ 800, 800 ]
      ```
      
      The entire setup of how browser and drivers interact with each other are
      abstracted away and the only required argument is the driver name.
      3dfbe7e4
    • E
      Add guides for system testing · 62c7d983
      eileencodes 提交于
      This adds the required guides for how to write and use system tests in
      your application.
      62c7d983
    • E
      Cleanup Rails provided helpers · 3f414c22
      eileencodes 提交于
      1. Clean up screenshot helper
      
      Updates documentation to be clearer and separates the concerns of saving
      the image, setting the image path, and displaying the image.
      
      2. Remove Rails provided assertions for selectors
      
      This was moved upstream to Capybara and is no longer necessary to be
      included in Rails
      
      3. Remove form helper
      
      The form helper is pretty specific to Basecamp's needs and may not be
      helpful outside of Rails.
      3f414c22