1. 24 5月, 2018 2 次提交
  2. 23 5月, 2018 16 次提交
  3. 22 5月, 2018 4 次提交
    • U
      add CHANGELOG/Doc · e04a79e7
      utilum 提交于
      e04a79e7
    • U
      Allow Range#=== and Range#cover? on Range · 0fcb921a
      utilum 提交于
      ruby/ruby@989e07c features switching `Range#===` to use internal `r_cover_p`
      instead of rubyland `include?`. This breaks expected behavior of
      `ActiveSupport::CoreExt::Range` documented since at least 8b67a022.
      
      This patch adds overrides on `Range#cover?` and `Range#===` and places all
      three in a single module, `CompareWithRange`.
      
      *Requiring core_ext/range/include_range now causes a deprecation warnning*
      0fcb921a
    • Y
      Disable foreign keys during `alter_table` for sqlite3 adapter · 45881b0a
      Yasuo Honda 提交于
      Unlike other databases, changing SQLite3 table definitions need to create a temporary table.
      While changing table operations, the original table needs dropped which caused
      `SQLite3::ConstraintException: FOREIGN KEY constraint failed` if the table is referenced by foreign keys.
      This pull request disables foreign keys by `disable_referential_integrity`.
      
      Also `disable_referential_integrity` method needs to execute `defer_foreign_keys = ON`
      to defer re-enabling foreign keys until the transaction is committed.
      
      https://www.sqlite.org/pragma.html#pragma_defer_foreign_keys
      
      Fixes #31988
      
      - This `defer_foreign_keys = ON` has been supported since SQLite 3.8.0
      https://www.sqlite.org/releaselog/3_8_0.html and Rails 6 requires SQLite 3.8 #32923 now
      
      - <Models>.reset_column_information added to address `ActiveModel::UnknownAttributeError`
      
      ```
      Error:
      ActiveRecord::Migration::ForeignKeyChangeColumnTest#test_change_column_of_parent_table:
      ActiveModel::UnknownAttributeError: unknown attribute 'name' for ActiveRecord::Migration::ForeignKeyChangeColumnTest::Post.
      ```
      45881b0a
    • U
      remove unnecessary mocking in ActionCable tests · 78288f75
      utilum 提交于
      78288f75
  4. 21 5月, 2018 12 次提交
    • G
      Merge pull request #32936 from jacobsmith/image-variant-allow-disabling-options · 6c574ac5
      George Claghorn 提交于
      [ActiveStorage] Disable variant options when false or nil present
      6c574ac5
    • K
      Merge pull request #32523 from kaspth/enumerable-index-with-extension · 41147e3e
      Kasper Timm Hansen 提交于
      Add Enumerable#index_with.
      41147e3e
    • K
      [ci skip] Add documentation/changelog entry. · 429f15ff
      Kasper Timm Hansen 提交于
      429f15ff
    • K
      Add Enumerable#index_with. · 39c22303
      Kasper Timm Hansen 提交于
      In the app I'm working on I've wished that index_by had a buddy that would
      assign the hash value instead of the key multiple times.
      
      Enter index_with. Useful when building a hash from a static list of
      symbols. Before you'd do:
      
      ```ruby
      POST_ATTRIBUTES.map { |attr_name| [ attr_name, public_send(attr_name) ] }.to_h
      ```
      
      But now that's a little clearer and faster with:
      
      ````ruby
      POST_ATTRIBUTES.index_with { |attr_name| public_send(attr_name) }
      ```
      
      It's also useful when you have an enumerable that should be converted to a hash,
      but you don't want to muddle the code up with the overhead that it takes to create
      that hash. So before, that's:
      
      ```ruby
      WEEKDAYS.each_with_object(Hash.new) do |day, intervals|
        intervals[day] = [ Interval.all_day ]
      end
      ```
      
      And now it's just:
      
      ```ruby
      WEEKDAYS.index_with([ Interval.all_day ])
      ```
      
      It's also nice to quickly get a hash with either nil, [], or {} as the value.
      39c22303
    • K
      Merge pull request #32946 from coryjb/patch-1 · db485a8d
      Kasper Timm Hansen 提交于
      Exception wording change
      db485a8d
    • J
      Disable variant options when false or nil present · 0210ac0b
      Jacob Smith 提交于
      In response to https://github.com/rails/rails/issues/32917
      
      In the current implementation, ActiveStorage passes all options to the underlying processor,
      including when a key has a value of false.
      
      For example, passing:
      
      ```
      avatar.variant(resize: "100x100", monochrome: false, flip: "-90")
      ```
      
      will return a monochrome image (or an error, pending on ImageMagick configuration) because
      it passes `-monochrome false` to the command (but the command line does not allow disabling
      flags this way, as usually a user would omit the flag entirely to disable that feature).
      
      This fix only passes those keys forward to the underlying processor if the value responds to
      `present?`. In practice, this means that `false` or `nil` will be filtered out before going
      to the processor.
      
      One possible use case would be for a user to be able to apply different filters to an avatar.
      The code might look something like:
      
      ```
        variant_options = {
          monochrome: params[:monochrome],
          resize:     params[:resize]
        }
      
        avatar.variant(*variant_options)
      ```
      
      Obviously some sanitization may be beneficial in a real-world scenario, but this type of
      configuration object could be used in many other places as well.
      
      - Add removing falsy values from varaints to changelog
      
      - The entirety of #image_processing_transformation inject block was wrapped in `list.tap`
       to guard against the default `nil` being returned if no conditional was called.
      
      - add test for explicitly true variant options
      0210ac0b
    • K
      Rename exception variable to error. · ba07b5fc
      Kasper Timm Hansen 提交于
      Follows the change from 6fac9bd5, so the naming is consistent.
      ba07b5fc
    • C
      Exception wording change · 61ca9266
      Cory Becker 提交于
      61ca9266
    • R
      Merge pull request #32923 from yahonda/bump_sqlite3_version_to_38 · 054893d5
      Ryuta Kamizono 提交于
      Bump minimum SQLite version to 3.8
      054893d5
    • R
      Enable `Lint/StringConversionInInterpolation` rubocop rule · a77447f4
      Ryuta Kamizono 提交于
      To prevent redundant `to_s` like https://github.com/rails/rails/pull/32923#discussion_r189460008
      automatically in the future.
      a77447f4
    • Y
      Bump minimum SQLite version to 3.8 · d1a74c1e
      Yasuo Honda 提交于
      These OS versions have SQLite 3.8 or higher by default.
      
      - macOS 10.10 (Yosemite) or higher
      - Ubuntu 14.04 LTS or higher
      
      Raising the minimum version of SQLite 3.8 introduces these changes:
      
      - All of bundled adapters support `supports_multi_insert?`
      - SQLite 3.8 always satisifies `supports_foreign_keys_in_create?` and `supports_partial_index?`
      - sqlite adapter can support `alter_table` method for foreign key referenced tables by #32865
      - Deprecated `supports_multi_insert?` method
      d1a74c1e
    • R
      `SqlTypeMetadata` is :nodoc: class [ci skip] · 15d00f04
      Ryuta Kamizono 提交于
      So do not expose `PostgreSQLTypeMetadata` in the doc too.
      15d00f04
  5. 20 5月, 2018 1 次提交
  6. 19 5月, 2018 5 次提交
    • A
      Fix locale selector · d7f01a28
      aki 提交于
      d7f01a28
    • R
      5f8115a1
    • R
      Merge pull request #32911 from eugeneius/finalize_transaction_record_state · 87076601
      Ryuta Kamizono 提交于
      Finalize transaction record state after real transaction
      87076601
    • E
      Finalize transaction record state after real transaction · 5359428a
      Eugene Kenny 提交于
      After a real (non-savepoint) transaction has committed or rolled back,
      the original persistence-related state for all records modified in that
      transaction is discarded or restored, respectively.
      
      When the model has transactional callbacks, this happens synchronously
      in the `committed!` or `rolled_back!` methods; otherwise, it happens
      lazily the next time the record's persistence-related state is accessed.
      
      The synchronous code path always finalizes the state of the record, but
      the lazy code path only pops one "level" from the transaction counter,
      assuming it will always reach zero immediately after a real transaction.
      As the test cases included here demonstrate, that isn't always the case.
      
      By using the same logic as the synchronous code path, we ensure that the
      record's state is always updated after a real transaction has finished.
      5359428a
    • J
      Speed up xor_byte_strings by 70% · 8b10a941
      Jeremy Evans 提交于
      Benchmark:
      
      ```ruby
      require 'benchmark'
      require 'benchmark/ips'
      require 'securerandom'
      
      def xor_byte_strings(s1, s2) # :doc:
        s2_bytes = s2.bytes
        s1.each_byte.with_index { |c1, i| s2_bytes[i] ^= c1 }
        s2_bytes.pack("C*")
      end
      
      def xor_byte_strings_new(s1, s2) # :doc:
        s2 = s2.dup
        size = s1.bytesize
        i = 0
        while i < size
          s2.setbyte(i, s1.getbyte(i) ^ s2.getbyte(i))
          i += 1
        end
        s2
      end
      
      s1 = SecureRandom.random_bytes(32)
      s2 = SecureRandom.random_bytes(32)
      
      Benchmark.ips do |x|
        x.report("current"){xor_byte_strings(s1, s2)}
        x.report("new"){xor_byte_strings_new(s1, s2)}
        x.compare!
      end
      
      100000.times do |i|
        s3 = SecureRandom.random_bytes(32)
        s4 = SecureRandom.random_bytes(32)
        raise unless xor_byte_strings(s3, s4) == xor_byte_strings_new(s3, s4)
      end
      ```
      
      Results on ruby 2.5.1:
      
      ```
      Warming up --------------------------------------
                   current     6.519k i/100ms
                       new    10.508k i/100ms
      Calculating -------------------------------------
                   current     84.723k (_ 0.4%) i/s -    423.735k in   5.001456s
                       new    145.871k (_ 0.3%) i/s -    735.560k in   5.042606s
      
      Comparison:
                       new:   145870.6 i/s
                   current:    84723.4 i/s - 1.72x  slower
      ```
      8b10a941