1. 25 10月, 2017 1 次提交
  2. 24 10月, 2017 2 次提交
  3. 23 10月, 2017 1 次提交
  4. 21 10月, 2017 1 次提交
    • A
      Let Hash#slice return a Hash · 01ae3966
      Akira Matsuda 提交于
      In order to keep this method compatible with the Ruby 2.5 version of Hash#slice.
      This bahavior is actually slightly incompatibile with previous versions of Active Support
      but it might not cause a real problem, since HWIA, the biggest use case of Hash subclassing here,
      already overrides `slice` to return another HWIA.
      01ae3966
  5. 04 10月, 2017 1 次提交
  6. 29 9月, 2017 1 次提交
  7. 27 9月, 2017 1 次提交
  8. 24 9月, 2017 1 次提交
  9. 17 9月, 2017 1 次提交
  10. 12 9月, 2017 1 次提交
    • D
      Add credentials using a generic EncryptedConfiguration class (#30067) · 69f976b8
      David Heinemeier Hansson 提交于
      * WIP: Add credentials using a generic EncryptedConfiguration class
      
      This is sketch code so far.
      
      * Flesh out EncryptedConfiguration and test it
      
      * Better name
      
      * Add command and generator for credentials
      
      * Use the Pathnames
      
      * Extract EncryptedFile from EncryptedConfiguration and add serializers
      
      * Test EncryptedFile
      
      * Extract serializer validation
      
      * Stress the point about losing comments
      
      * Allow encrypted configuration to be read without parsing for display
      
      * Use credentials by default and base them on the master key
      
      * Derive secret_key_base in test/dev, source it from credentials in other envs
      
      And document the usage.
      
      * Document the new credentials setup
      
      * Stop generating the secrets.yml file now that we have credentials
      
      * Document what we should have instead
      
      Still need to make it happen, tho.
      
      * [ci skip] Keep wording to `key base`; prefer defaults.
      
      Usually we say we change defaults, not "spec" out a release.
      
      Can't use backticks in our sdoc generated documentation either.
      
      * Abstract away OpenSSL; prefer MessageEncryptor.
      
      * Spare needless new when raising.
      
      * Encrypted file test shouldn't depend on subclass.
      
      * [ci skip] Some woordings.
      
      * Ditch serializer future coding.
      
      * I said flip it. Flip it good.
      
      * [ci skip] Move require_master_key to the real production.rb.
      
      * Add require_master_key to abort the boot process.
      
      In case the master key is required in a certain environment
      we should inspect that the key is there and abort if it isn't.
      
      * Print missing key message and exit immediately.
      
      Spares us a lengthy backtrace and prevents further execution.
      
      I've verified the behavior in a test app, but couldn't figure the
      test out as loading the app just exits immediately with:
      
      ```
      /Users/kasperhansen/Documents/code/rails/activesupport/lib/active_support/testing/isolation.rb:23:in `load': marshal data too short (ArgumentError)
      	from /Users/kasperhansen/Documents/code/rails/activesupport/lib/active_support/testing/isolation.rb:23:in `run'
      	from /Users/kasperhansen/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/minitest-5.10.2/lib/minitest.rb:830:in `run_one_method'
      	from /Users/kasperhansen/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/minitest-5.10.2/lib/minitest/parallel.rb:32:in `block (2 levels) in start'
      ```
      
      It's likely we need to capture and prevent the exit somehow.
      Kernel.stub(:exit) didn't work. Leaving it for tomorrow.
      
      * Fix require_master_key config test.
      
      Loading the app would trigger the `exit 1` per require_master_key's
      semantics, which then aborted the test.
      
      Fork and wait for the child process to finish, then inspect the
      exit status.
      
      Also check we aborted because of a missing master key, so something
      else didn't just abort the boot.
      
      Much <3 to @tenderlove for the tip.
      
      * Support reading/writing configs via methods.
      
      * Skip needless deep symbolizing.
      
      * Remove save; test config reader elsewhere.
      
      * Move secret_key_base check to when we're reading it.
      
      Otherwise we'll abort too soon since we don't assign the secret_key_base
      to secrets anymore.
      
      * Add missing string literal comments; require unneeded yaml require.
      
      * ya ya ya, rubocop.
      
      * Add master_key/credentials after bundle.
      
      Then we can reuse the existing message on `rails new bc4`.
      
      It'll look like:
      
      ```
      Using web-console 3.5.1 from https://github.com/rails/web-console.git (at master@ce985eb)
      Using rails 5.2.0.alpha from source at `/Users/kasperhansen/Documents/code/rails`
      Using sass-rails 5.0.6
      Bundle complete! 16 Gemfile dependencies, 72 gems now installed.
      Use `bundle info [gemname]` to see where a bundled gem is installed.
      Adding config/master.key to store the master encryption key: 97070158c44b4675b876373a6bc9d5a0
      
      Save this in a password manager your team can access.
      
      If you lose the key, no one, including you, can access anything encrypted with it.
      
            create  config/master.key
      ```
      
      And that'll be executed even if `--skip-bundle` was passed.
      
      * Ensure test app has secret_key_base.
      
      * Assign secret_key_base to app or omit.
      
      * Merge noise
      
      * Split options for dynamic delegation into its own method and use deep symbols to make it work
      
      * Update error to point to credentials instead
      
      * Appease Rubocop
      
      * Validate secret_key_base when reading it.
      
      Instead of relying on the validation in key_generator move that into
      secret_key_base itself.
      
      * Fix generator and secrets test.
      
      Manually add config.read_encrypted_secrets since it's not there by default
      anymore.
      
      Move mentions of config/secrets.yml to config/credentials.yml.enc.
      
      * Remove files I have no idea how they got here.
      
      * [ci skip] swap secrets for credentials.
      
      * [ci skip] And now, changelogs are coming.
      69f976b8
  11. 13 8月, 2017 1 次提交
    • A
      Test for the new exception of delegate_missing_to (#30191) · e6c310b3
      Anton Khamets 提交于
      * Add test for the new exception of delegate_missing_to
      
      * Add a changelog entry
      
      * Only check for nil if NoMethodError was raised
      
      * Make method private
      
      * Have to pass both target name and value
      
      * Inline the re-raise
      
      [Rafael Mendonça França + Anton Khamets]
      e6c310b3
  12. 07 8月, 2017 1 次提交
  13. 04 8月, 2017 1 次提交
  14. 03 8月, 2017 1 次提交
  15. 02 8月, 2017 1 次提交
  16. 28 7月, 2017 1 次提交
    • S
      Add missing support for modulo operations on durations · a54e13bd
      Sayan Chakraborty 提交于
      Rails 5.1 introduce an `ActiveSupport::Duration::Scalar` class as
      a wrapper around a numeric value as a way of ensuring a duration
      was the outcome of an expression. However the implementation was
      missing support for modulo operations. This commit adds support
      for those operations and should result in a duration being
      returned from expressions involving them.
      
      Fixes #29603 and #29743.
      a54e13bd
  17. 27 7月, 2017 1 次提交
    • A
      Fix division where a duration is the denominator · bfa878d3
      Andrew White 提交于
      PR #29163 introduced a change in behavior when a duration was
      the denominator in a calculation - this was incorrect as dividing
      by a duration should always return a `Numeric`. The behavior of
      previous versions of Rails has been restored.
      
      Fixes #29592.
      bfa878d3
  18. 24 7月, 2017 2 次提交
  19. 10 7月, 2017 1 次提交
  20. 12 6月, 2017 1 次提交
  21. 07 6月, 2017 1 次提交
    • J
      Cache: write_multi (#29366) · 2b96d582
      Jeremy Daer 提交于
      Rails.cache.write_multi foo: 'bar', baz: 'qux'
      
      Plus faster `fetch_multi` with stores that implement `write_multi_entries`.
      Keys that aren't found may be written to the cache store in one shot
      instead of separate writes.
      
      The default implementation simply calls `write_entry` for each entry.
      Stores may override if they're capable of one-shot bulk writes, like
      Redis `MSET`.
      2b96d582
  22. 06 6月, 2017 1 次提交
  23. 03 6月, 2017 1 次提交
  24. 30 5月, 2017 4 次提交
  25. 27 5月, 2017 1 次提交
    • D
      ActiveSupport::CurrentAttributes provides a thread-isolated attributes singleton (#29180) · 24a86443
      David Heinemeier Hansson 提交于
      * Add ActiveSupport::CurrentAttributes to provide a thread-isolated attributes singleton
      
      * Need to require first
      
      * Move stubs into test namespace.
      
      Thus they won't conflict with other Current and Person stubs.
      
      * End of the line for you, whitespace!
      
      * Support super in attribute methods.
      
      Define instance level accessors in an included module such that
      `super` in an overriden accessor works, akin to Active Model.
      
      * Spare users the manual require.
      
      Follow the example of concerns, autoload in the top level Active Support file.
      
      * Add bidelegation support
      
      * Rename #expose to #set. Simpler, clearer
      
      * Automatically reset every instance.
      
      Skips the need for users to actively embed something that resets
      their CurrentAttributes instances.
      
      * Fix test name; add tangible name value when blank.
      
      * Try to ensure we run after a request as well.
      
      * Delegate all missing methods to the instance
      
      This allows regular `delegate` to serve, so we don't need bidelegate.
      
      * Properly test resetting after execution cycle.
      
      Also remove the stale puts debugging.
      
      * Update documentation to match new autoreset
      24a86443
  26. 20 5月, 2017 1 次提交
    • A
      Fix implicit calculations with scalars and durations · 28938dd6
      Andrew White 提交于
      Previously calculations where the scalar is first would be converted
      to a duration of seconds but this causes issues with dates being
      converted to times, e.g:
      
          Time.zone = "Beijing"           # => Asia/Shanghai
          date = Date.civil(2017, 5, 20)  # => Mon, 20 May 2017
          2 * 1.day                       # => 172800 seconds
          date + 2 * 1.day                # => Mon, 22 May 2017 00:00:00 CST +08:00
      
      Now the `ActiveSupport::Duration::Scalar` calculation methods will try
      to maintain the part structure of the duration where possible, e.g:
      
          Time.zone = "Beijing"           # => Asia/Shanghai
          date = Date.civil(2017, 5, 20)  # => Mon, 20 May 2017
          2 * 1.day                       # => 2 days
          date + 2 * 1.day                # => Mon, 22 May 2017
      
      Fixes #29160, #28970.
      28938dd6
  27. 19 5月, 2017 3 次提交
  28. 30 4月, 2017 1 次提交
  29. 20 4月, 2017 1 次提交
  30. 15 4月, 2017 1 次提交
  31. 12 4月, 2017 1 次提交
  32. 11 4月, 2017 1 次提交
  33. 10 4月, 2017 1 次提交