rails 4.2.0 → 4.2.1.rc1
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 +4 -4
- data/guides/CHANGELOG.md +2 -0
- data/guides/assets/images/getting_started/article_with_comments.png +0 -0
- data/guides/bug_report_templates/action_controller_gem.rb +1 -1
- data/guides/bug_report_templates/active_record_gem.rb +1 -1
- data/guides/source/4_2_release_notes.md +3 -0
- data/guides/source/action_controller_overview.md +2 -59
- data/guides/source/action_mailer_basics.md +4 -2
- data/guides/source/association_basics.md +2 -3
- data/guides/source/{constant_autoloading_and_reloading.md → autoloading_and_reloading_constants.md} +40 -27
- data/guides/source/configuring.md +1 -1
- data/guides/source/contributing_to_ruby_on_rails.md +4 -0
- data/guides/source/documents.yaml +3 -3
- data/guides/source/getting_started.md +16 -10
- data/guides/source/i18n.md +2 -1
- data/guides/source/testing.md +11 -2
- data/guides/source/upgrading_ruby_on_rails.md +18 -2
- metadata +20 -20
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: fbf7ad3f9b760f4cdd5b30bc9dd9be23a6f7b7d4
         | 
| 4 | 
            +
              data.tar.gz: ca13bb97946fa9f4a9b8517fdf4043e711c0659b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: aaed05f1486fa27d89acc7239cbf07c87621dd63ab788e0a714567d90740109213a3042dbfdbad2436b6d8d26c56a7199ee7f0177cb82e86179141021dbf8475
         | 
| 7 | 
            +
              data.tar.gz: 872799adc56555f6417965d1b0ccf83e880dd5db9fd1e1baa26f6c9ecf0ea4bbd092e03a25d03f25f384df3aa9ad0cb94dc71b8064574ccb6a7cb40a5af83e10
         | 
    
        data/guides/CHANGELOG.md
    CHANGED
    
    
| Binary file | 
| @@ -90,6 +90,9 @@ Post.find(2)  # Subsequent calls reuse the cached prepared statement | |
| 90 90 | 
             
            Post.find_by_title('first post')
         | 
| 91 91 | 
             
            Post.find_by_title('second post')
         | 
| 92 92 |  | 
| 93 | 
            +
            Post.find_by(title: 'first post')
         | 
| 94 | 
            +
            Post.find_by(title: 'second post')
         | 
| 95 | 
            +
             | 
| 93 96 | 
             
            post.comments
         | 
| 94 97 | 
             
            post.comments(true)
         | 
| 95 98 | 
             
            ```
         | 
| @@ -735,7 +735,7 @@ You can choose not to yield and build the response yourself, in which case the a | |
| 735 735 |  | 
| 736 736 | 
             
            While the most common way to use filters is by creating private methods and using *_action to add them, there are two other ways to do the same thing.
         | 
| 737 737 |  | 
| 738 | 
            -
            The first is to use a block directly with the  | 
| 738 | 
            +
            The first is to use a block directly with the *\_action methods. The block receives the controller as an argument, and the `require_login` filter from above could be rewritten to use a block:
         | 
| 739 739 |  | 
| 740 740 | 
             
            ```ruby
         | 
| 741 741 | 
             
            class ApplicationController < ActionController::Base
         | 
| @@ -1164,67 +1164,10 @@ class ClientsController < ApplicationController | |
| 1164 1164 | 
             
            end
         | 
| 1165 1165 | 
             
            ```
         | 
| 1166 1166 |  | 
| 1167 | 
            -
            WARNING: You shouldn't do `rescue_from Exception` or `rescue_from StandardError` unless you have a particular reason as it will cause serious side-effects (e.g. you won't be able to see exception details and tracebacks during development). | 
| 1167 | 
            +
            WARNING: You shouldn't do `rescue_from Exception` or `rescue_from StandardError` unless you have a particular reason as it will cause serious side-effects (e.g. you won't be able to see exception details and tracebacks during development).
         | 
| 1168 1168 |  | 
| 1169 1169 | 
             
            NOTE: Certain exceptions are only rescuable from the `ApplicationController` class, as they are raised before the controller gets initialized and the action gets executed. See Pratik Naik's [article](http://m.onkey.org/2008/7/20/rescue-from-dispatching) on the subject for more information.
         | 
| 1170 1170 |  | 
| 1171 | 
            -
             | 
| 1172 | 
            -
            ### Custom errors page
         | 
| 1173 | 
            -
             | 
| 1174 | 
            -
            You can customize the layout of your error handling using controllers and views.
         | 
| 1175 | 
            -
            First define your app own routes to display the errors page.
         | 
| 1176 | 
            -
             | 
| 1177 | 
            -
            * `config/application.rb`
         | 
| 1178 | 
            -
             | 
| 1179 | 
            -
              ```ruby
         | 
| 1180 | 
            -
              config.exceptions_app = self.routes
         | 
| 1181 | 
            -
              ```
         | 
| 1182 | 
            -
             | 
| 1183 | 
            -
            * `config/routes.rb`
         | 
| 1184 | 
            -
             | 
| 1185 | 
            -
              ```ruby
         | 
| 1186 | 
            -
              match '/404', via: :all, to: 'errors#not_found'
         | 
| 1187 | 
            -
              match '/422', via: :all, to: 'errors#unprocessable_entity'
         | 
| 1188 | 
            -
              match '/500', via: :all, to: 'errors#server_error'
         | 
| 1189 | 
            -
              ```
         | 
| 1190 | 
            -
             | 
| 1191 | 
            -
            Create the controller and views.
         | 
| 1192 | 
            -
             | 
| 1193 | 
            -
            * `app/controllers/errors_controller.rb`
         | 
| 1194 | 
            -
             | 
| 1195 | 
            -
              ```ruby
         | 
| 1196 | 
            -
              class ErrorsController < ActionController::Base
         | 
| 1197 | 
            -
                layout 'error'
         | 
| 1198 | 
            -
             | 
| 1199 | 
            -
                def not_found
         | 
| 1200 | 
            -
                  render status: :not_found
         | 
| 1201 | 
            -
                end
         | 
| 1202 | 
            -
             | 
| 1203 | 
            -
                def unprocessable_entity
         | 
| 1204 | 
            -
                  render status: :unprocessable_entity
         | 
| 1205 | 
            -
                end
         | 
| 1206 | 
            -
             | 
| 1207 | 
            -
                def server_error
         | 
| 1208 | 
            -
                  render status: :server_error
         | 
| 1209 | 
            -
                end
         | 
| 1210 | 
            -
              end
         | 
| 1211 | 
            -
              ```
         | 
| 1212 | 
            -
             | 
| 1213 | 
            -
            * `app/views`
         | 
| 1214 | 
            -
             | 
| 1215 | 
            -
              ```
         | 
| 1216 | 
            -
              errors/
         | 
| 1217 | 
            -
                not_found.html.erb
         | 
| 1218 | 
            -
                unprocessable_entity.html.erb
         | 
| 1219 | 
            -
                server_error.html.erb
         | 
| 1220 | 
            -
              layouts/
         | 
| 1221 | 
            -
                error.html.erb
         | 
| 1222 | 
            -
              ```
         | 
| 1223 | 
            -
             | 
| 1224 | 
            -
            Do not forget to set the correct status code on the controller as shown before.
         | 
| 1225 | 
            -
             | 
| 1226 | 
            -
            WARNING: You should avoid using the database or any complex operations because the user is already on the error page. Generating another error while on an error page could cause issues like presenting an empty page for the users.
         | 
| 1227 | 
            -
             | 
| 1228 1171 | 
             
            Force HTTPS protocol
         | 
| 1229 1172 | 
             
            --------------------
         | 
| 1230 1173 |  | 
| @@ -48,7 +48,7 @@ create    test/mailers/previews/user_mailer_preview.rb | |
| 48 48 | 
             
            ```ruby
         | 
| 49 49 | 
             
            # app/mailers/application_mailer.rb
         | 
| 50 50 | 
             
            class ApplicationMailer < ActionMailer::Base
         | 
| 51 | 
            -
              default "from@example.com"
         | 
| 51 | 
            +
              default from: "from@example.com"
         | 
| 52 52 | 
             
              layout 'mailer'
         | 
| 53 53 | 
             
            end
         | 
| 54 54 |  | 
| @@ -743,7 +743,9 @@ Mailer framework. You can do this in an initializer file | |
| 743 743 | 
             
            `config/initializers/sandbox_email_interceptor.rb`
         | 
| 744 744 |  | 
| 745 745 | 
             
            ```ruby
         | 
| 746 | 
            -
             | 
| 746 | 
            +
            if Rails.env.staging?
         | 
| 747 | 
            +
              ActionMailer::Base.register_interceptor(SandboxEmailInterceptor)
         | 
| 748 | 
            +
            end
         | 
| 747 749 | 
             
            ```
         | 
| 748 750 |  | 
| 749 751 | 
             
            NOTE: The example above uses a custom environment called "staging" for a
         | 
| @@ -1977,8 +1977,8 @@ While Rails uses intelligent defaults that will work well in most situations, th | |
| 1977 1977 |  | 
| 1978 1978 | 
             
            ```ruby
         | 
| 1979 1979 | 
             
            class Parts < ActiveRecord::Base
         | 
| 1980 | 
            -
              has_and_belongs_to_many :assemblies,  | 
| 1981 | 
            -
                                                    | 
| 1980 | 
            +
              has_and_belongs_to_many :assemblies, -> { readonly },
         | 
| 1981 | 
            +
                                                   autosave: true
         | 
| 1982 1982 | 
             
            end
         | 
| 1983 1983 | 
             
            ```
         | 
| 1984 1984 |  | 
| @@ -1990,7 +1990,6 @@ The `has_and_belongs_to_many` association supports these options: | |
| 1990 1990 | 
             
            * `:foreign_key`
         | 
| 1991 1991 | 
             
            * `:join_table`
         | 
| 1992 1992 | 
             
            * `:validate`
         | 
| 1993 | 
            -
            * `:readonly`
         | 
| 1994 1993 |  | 
| 1995 1994 | 
             
            ##### `:association_foreign_key`
         | 
| 1996 1995 |  | 
    
        data/guides/source/{constant_autoloading_and_reloading.md → autoloading_and_reloading_constants.md}
    RENAMED
    
    | @@ -1,5 +1,5 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 1 | 
            +
            Autoloading and Reloading Constants
         | 
| 2 | 
            +
            ===================================
         | 
| 3 3 |  | 
| 4 4 | 
             
            This guide documents how constant autoloading and reloading works.
         | 
| 5 5 |  | 
| @@ -78,7 +78,8 @@ end | |
| 78 78 | 
             
            ```
         | 
| 79 79 |  | 
| 80 80 | 
             
            The *nesting* at any given place is the collection of enclosing nested class and
         | 
| 81 | 
            -
            module objects outwards.  | 
| 81 | 
            +
            module objects outwards. The nesting at any given place can be inspected with
         | 
| 82 | 
            +
            `Module.nesting`. For example, in the previous example, the nesting at
         | 
| 82 83 | 
             
            (1) is
         | 
| 83 84 |  | 
| 84 85 | 
             
            ```ruby
         | 
| @@ -111,6 +112,16 @@ certain nesting does not necessarily correlate with the namespaces at the spot. | |
| 111 112 | 
             
            Even more, they are totally independent, take for instance
         | 
| 112 113 |  | 
| 113 114 | 
             
            ```ruby
         | 
| 115 | 
            +
            module X
         | 
| 116 | 
            +
              module Y
         | 
| 117 | 
            +
              end
         | 
| 118 | 
            +
            end
         | 
| 119 | 
            +
             | 
| 120 | 
            +
            module A
         | 
| 121 | 
            +
              module B
         | 
| 122 | 
            +
              end
         | 
| 123 | 
            +
            end
         | 
| 124 | 
            +
             | 
| 114 125 | 
             
            module X::Y
         | 
| 115 126 | 
             
              module A::B
         | 
| 116 127 | 
             
                # (3)
         | 
| @@ -138,9 +149,10 @@ executed, and popped after it. | |
| 138 149 |  | 
| 139 150 | 
             
            * A singleton class opened with `class << object` gets pushed, and popped later.
         | 
| 140 151 |  | 
| 141 | 
            -
            * When  | 
| 152 | 
            +
            * When `instance_eval` is called using a string argument,
         | 
| 142 153 | 
             
            the singleton class of the receiver is pushed to the nesting of the eval'ed
         | 
| 143 | 
            -
            code.
         | 
| 154 | 
            +
            code. When `class_eval` or `module_eval` is called using a string argument,
         | 
| 155 | 
            +
            the receiver is pushed to the nesting of the eval'ed code.
         | 
| 144 156 |  | 
| 145 157 | 
             
            * The nesting at the top-level of code interpreted by `Kernel#load` is empty
         | 
| 146 158 | 
             
            unless the `load` call receives a true value as second argument, in which case
         | 
| @@ -151,8 +163,6 @@ the blocks that may be passed to `Class.new` and `Module.new` do not get the | |
| 151 163 | 
             
            class or module being defined pushed to their nesting. That's one of the
         | 
| 152 164 | 
             
            differences between defining classes and modules in one way or another.
         | 
| 153 165 |  | 
| 154 | 
            -
            The nesting at any given place can be inspected with `Module.nesting`.
         | 
| 155 | 
            -
             | 
| 156 166 | 
             
            ### Class and Module Definitions are Constant Assignments
         | 
| 157 167 |  | 
| 158 168 | 
             
            Let's suppose the following snippet creates a class (rather than reopening it):
         | 
| @@ -186,8 +196,8 @@ Project.name # => "Project" | |
| 186 196 | 
             
            ```
         | 
| 187 197 |  | 
| 188 198 | 
             
            Constant assignment has a special rule to make that happen: if the object
         | 
| 189 | 
            -
            being assigned is an anonymous class or module, Ruby sets  | 
| 190 | 
            -
             | 
| 199 | 
            +
            being assigned is an anonymous class or module, Ruby sets the object's name to
         | 
| 200 | 
            +
            the name of the constant.
         | 
| 191 201 |  | 
| 192 202 | 
             
            INFO. From then on, what happens to the constant and the instance does not
         | 
| 193 203 | 
             
            matter. For example, the constant could be deleted, the class object could be
         | 
| @@ -221,7 +231,7 @@ assignment. | |
| 221 231 | 
             
            Thus, when one informally says "the `String` class", that really means: the
         | 
| 222 232 | 
             
            class object stored in the constant called "String" in the class object stored
         | 
| 223 233 | 
             
            in the `Object` constant. `String` is otherwise an ordinary Ruby constant and
         | 
| 224 | 
            -
            everything related to constants  | 
| 234 | 
            +
            everything related to constants such as resolution algorithms applies to it.
         | 
| 225 235 |  | 
| 226 236 | 
             
            Likewise, in the controller
         | 
| 227 237 |  | 
| @@ -234,7 +244,7 @@ end | |
| 234 244 | 
             
            ```
         | 
| 235 245 |  | 
| 236 246 | 
             
            `Post` is not syntax for a class. Rather, `Post` is a regular Ruby constant. If
         | 
| 237 | 
            -
            all is good, the constant  | 
| 247 | 
            +
            all is good, the constant is evaluated to an object that responds to `all`.
         | 
| 238 248 |  | 
| 239 249 | 
             
            That is why we talk about *constant* autoloading, Rails has the ability to
         | 
| 240 250 | 
             
            load constants on the fly.
         | 
| @@ -256,7 +266,7 @@ module Colors | |
| 256 266 | 
             
            end
         | 
| 257 267 | 
             
            ```
         | 
| 258 268 |  | 
| 259 | 
            -
            First, when the `module` keyword is processed the interpreter creates a new
         | 
| 269 | 
            +
            First, when the `module` keyword is processed, the interpreter creates a new
         | 
| 260 270 | 
             
            entry in the constant table of the class object stored in the `Object` constant.
         | 
| 261 271 | 
             
            Said entry associates the name "Colors" to a newly created module object.
         | 
| 262 272 | 
             
            Furthermore, the interpreter sets the name of the new module object to be the
         | 
| @@ -270,7 +280,7 @@ In particular, `Colors::RED` is totally unrelated to any other `RED` constant | |
| 270 280 | 
             
            that may live in any other class or module object. If there were any, they
         | 
| 271 281 | 
             
            would have separate entries in their respective constant tables.
         | 
| 272 282 |  | 
| 273 | 
            -
             | 
| 283 | 
            +
            Pay special attention in the previous paragraphs to the distinction between
         | 
| 274 284 | 
             
            class and module objects, constant names, and value objects associated to them
         | 
| 275 285 | 
             
            in constant tables.
         | 
| 276 286 |  | 
| @@ -289,12 +299,14 @@ order. The ancestors of those elements are ignored. | |
| 289 299 |  | 
| 290 300 | 
             
            2. If not found, then the algorithm walks up the ancestor chain of the cref.
         | 
| 291 301 |  | 
| 292 | 
            -
            3. If not found | 
| 302 | 
            +
            3. If not found and the cref is a module, the constant is looked up in `Object`.
         | 
| 303 | 
            +
             | 
| 304 | 
            +
            4. If not found, `const_missing` is invoked on the cref. The default
         | 
| 293 305 | 
             
            implementation of `const_missing` raises `NameError`, but it can be overridden.
         | 
| 294 306 |  | 
| 295 307 | 
             
            Rails autoloading **does not emulate this algorithm**, but its starting point is
         | 
| 296 308 | 
             
            the name of the constant to be autoloaded, and the cref. See more in [Relative
         | 
| 297 | 
            -
            References](#relative-references).
         | 
| 309 | 
            +
            References](#autoloading-algorithms-relative-references).
         | 
| 298 310 |  | 
| 299 311 | 
             
            #### Resolution Algorithm for Qualified Constants
         | 
| 300 312 |  | 
| @@ -312,7 +324,7 @@ relative: `::Billing::Invoice`. That would force `Billing` to be looked up | |
| 312 324 | 
             
            only as a top-level constant.
         | 
| 313 325 |  | 
| 314 326 | 
             
            `Invoice` on the other hand is qualified by `Billing` and we are going to see
         | 
| 315 | 
            -
            its resolution next. Let's  | 
| 327 | 
            +
            its resolution next. Let's define *parent* to be that qualifying class or module
         | 
| 316 328 | 
             
            object, that is, `Billing` in the example above. The algorithm for qualified
         | 
| 317 329 | 
             
            constants goes like this:
         | 
| 318 330 |  | 
| @@ -328,7 +340,7 @@ checked. | |
| 328 340 |  | 
| 329 341 | 
             
            Rails autoloading **does not emulate this algorithm**, but its starting point is
         | 
| 330 342 | 
             
            the name of the constant to be autoloaded, and the parent. See more in
         | 
| 331 | 
            -
            [Qualified References](#qualified-references).
         | 
| 343 | 
            +
            [Qualified References](#autoloading-algorithms-qualified-references).
         | 
| 332 344 |  | 
| 333 345 |  | 
| 334 346 | 
             
            Vocabulary
         | 
| @@ -439,14 +451,14 @@ default it contains: | |
| 439 451 | 
             
              `app/controllers`. They do not need to be the default ones, any custom
         | 
| 440 452 | 
             
              directories like `app/workers` belong automatically to `autoload_paths`.
         | 
| 441 453 |  | 
| 442 | 
            -
            *  | 
| 454 | 
            +
            * Second level directories `app/{controllers,models}/concerns` in the
         | 
| 443 455 | 
             
              application and engines.
         | 
| 444 456 |  | 
| 445 457 | 
             
            * The directory `test/mailers/previews`.
         | 
| 446 458 |  | 
| 447 459 | 
             
            Also, this collection is configurable via `config.autoload_paths`. For example,
         | 
| 448 460 | 
             
            `lib` was in the list years ago, but no longer is. An application can opt-in
         | 
| 449 | 
            -
             | 
| 461 | 
            +
            by adding this to `config/application.rb`:
         | 
| 450 462 |  | 
| 451 463 | 
             
            ```ruby
         | 
| 452 464 | 
             
            config.autoload_paths += "#{Rails.root}/lib"
         | 
| @@ -683,12 +695,12 @@ creates an empty module and assigns it to the `Admin` constant on the fly. | |
| 683 695 | 
             
            ### Generic Procedure
         | 
| 684 696 |  | 
| 685 697 | 
             
            Relative references are reported to be missing in the cref where they were hit,
         | 
| 686 | 
            -
            and qualified references are reported to be missing in their parent | 
| 698 | 
            +
            and qualified references are reported to be missing in their parent (see
         | 
| 687 699 | 
             
            [Resolution Algorithm for Relative
         | 
| 688 700 | 
             
            Constants](#resolution-algorithm-for-relative-constants) at the beginning of
         | 
| 689 701 | 
             
            this guide for the definition of *cref*, and [Resolution Algorithm for Qualified
         | 
| 690 702 | 
             
            Constants](#resolution-algorithm-for-qualified-constants) for the definition of
         | 
| 691 | 
            -
            *parent | 
| 703 | 
            +
            *parent*).
         | 
| 692 704 |  | 
| 693 705 | 
             
            The procedure to autoload constant `C` in an arbitrary situation is as follows:
         | 
| 694 706 |  | 
| @@ -866,8 +878,8 @@ end | |
| 866 878 | 
             
            ```
         | 
| 867 879 |  | 
| 868 880 | 
             
            To resolve `User` Ruby checks `Admin` in the former case, but it does not in
         | 
| 869 | 
            -
            the latter because it does not belong to the nesting | 
| 870 | 
            -
            and [Resolution Algorithms](#resolution-algorithms). | 
| 881 | 
            +
            the latter because it does not belong to the nesting (see [Nesting](#nesting)
         | 
| 882 | 
            +
            and [Resolution Algorithms](#resolution-algorithms)).
         | 
| 871 883 |  | 
| 872 884 | 
             
            Unfortunately Rails autoloading does not know the nesting in the spot where the
         | 
| 873 885 | 
             
            constant was missing and so it is not able to act as Ruby would. In particular,
         | 
| @@ -889,7 +901,7 @@ end | |
| 889 901 |  | 
| 890 902 | 
             
            ### Autoloading and STI
         | 
| 891 903 |  | 
| 892 | 
            -
            Single Table Inheritance (STI) is a feature of Active Record that  | 
| 904 | 
            +
            Single Table Inheritance (STI) is a feature of Active Record that enables
         | 
| 893 905 | 
             
            storing a hierarchy of models in one single table. The API of such models is
         | 
| 894 906 | 
             
            aware of the hierarchy and encapsulates some common needs. For example, given
         | 
| 895 907 | 
             
            these classes:
         | 
| @@ -1171,7 +1183,8 @@ class Hotel | |
| 1171 1183 | 
             
            end
         | 
| 1172 1184 | 
             
            ```
         | 
| 1173 1185 |  | 
| 1174 | 
            -
            the expression `Hotel::Image` is ambiguous | 
| 1186 | 
            +
            the expression `Hotel::Image` is ambiguous because it depends on the execution
         | 
| 1187 | 
            +
            path.
         | 
| 1175 1188 |  | 
| 1176 1189 | 
             
            As [we saw before](#resolution-algorithm-for-qualified-constants), Ruby looks
         | 
| 1177 1190 | 
             
            up the constant in `Hotel` and its ancestors. If `app/models/image.rb` has
         | 
| @@ -1280,8 +1293,8 @@ c.user # surprisingly fine, User | |
| 1280 1293 | 
             
            c.user # NameError: uninitialized constant C::User
         | 
| 1281 1294 | 
             
            ```
         | 
| 1282 1295 |  | 
| 1283 | 
            -
            because it detects a parent namespace already has the constant (see [Qualified
         | 
| 1284 | 
            -
            References](#qualified-references). | 
| 1296 | 
            +
            because it detects that a parent namespace already has the constant (see [Qualified
         | 
| 1297 | 
            +
            References](#autoloading-algorithms-qualified-references)).
         | 
| 1285 1298 |  | 
| 1286 1299 | 
             
            As with pure Ruby, within the body of a direct descendant of `BasicObject` use
         | 
| 1287 1300 | 
             
            always absolute constant paths:
         | 
| @@ -197,7 +197,7 @@ The full set of methods that can be used in this block are as follows: | |
| 197 197 | 
             
            Every Rails application comes with a standard set of middleware which it uses in this order in the development environment:
         | 
| 198 198 |  | 
| 199 199 | 
             
            * `ActionDispatch::SSL` forces every request to be under HTTPS protocol. Will be available if `config.force_ssl` is set to `true`. Options passed to this can be configured by using `config.ssl_options`.
         | 
| 200 | 
            -
            * `ActionDispatch::Static` is used to serve static assets. Disabled if `config. | 
| 200 | 
            +
            * `ActionDispatch::Static` is used to serve static assets. Disabled if `config.serve_static_files` is `false`.
         | 
| 201 201 | 
             
            * `Rack::Lock` wraps the app in mutex so it can only be called by a single thread at a time. Only enabled when `config.cache_classes` is `false`.
         | 
| 202 202 | 
             
            * `ActiveSupport::Cache::Strategy::LocalCache` serves as a basic memory backed cache. This cache is not thread safe and is intended only for serving as a temporary memory cache for a single thread.
         | 
| 203 203 | 
             
            * `Rack::Runtime` sets an `X-Runtime` header, containing the time (in seconds) taken to execute the request.
         | 
| @@ -361,6 +361,10 @@ A CHANGELOG entry should summarize what was changed and should end with author's | |
| 361 361 |  | 
| 362 362 | 
             
            Your name can be added directly after the last word if you don't provide any code examples or don't need multiple paragraphs. Otherwise, it's best to make as a new paragraph.
         | 
| 363 363 |  | 
| 364 | 
            +
            ### Updating the Gemfile.lock
         | 
| 365 | 
            +
             | 
| 366 | 
            +
            Some changes requires the dependencies to be upgraded. In these cases make sure you run `bundle update` to get the right version of the dependency and commit the `Gemfile.lock` file within your changes.
         | 
| 367 | 
            +
             | 
| 364 368 | 
             
            ### Sanity Check
         | 
| 365 369 |  | 
| 366 370 | 
             
            You should not be the only person who looks at the code before you submit it.
         | 
| @@ -123,9 +123,9 @@ | |
| 123 123 | 
             
                  url: initialization.html
         | 
| 124 124 | 
             
                  description: This guide explains the internals of the Rails initialization process as of Rails 4
         | 
| 125 125 | 
             
                -
         | 
| 126 | 
            -
                  name:  | 
| 127 | 
            -
                  url:  | 
| 128 | 
            -
                  description: This guide documents how  | 
| 126 | 
            +
                  name: Autoloading and Reloading Constants
         | 
| 127 | 
            +
                  url: autoloading_and_reloading_constants.html
         | 
| 128 | 
            +
                  description: This guide documents how autoloading and reloading constants work.
         | 
| 129 129 | 
             
            -
         | 
| 130 130 | 
             
              name: Extending Rails
         | 
| 131 131 | 
             
              documents:
         | 
| @@ -191,6 +191,9 @@ following in the `blog` directory: | |
| 191 191 | 
             
            $ bin/rails server
         | 
| 192 192 | 
             
            ```
         | 
| 193 193 |  | 
| 194 | 
            +
            TIP: If you are using Windows, you have to pass the scripts under the `bin`
         | 
| 195 | 
            +
            folder directly to the Ruby interpreter e.g. `ruby bin\rails server`.
         | 
| 196 | 
            +
             | 
| 194 197 | 
             
            TIP: Compiling CoffeeScript and JavaScript asset compression requires you
         | 
| 195 198 | 
             
            have a JavaScript runtime available on your system, in the absence
         | 
| 196 199 | 
             
            of a runtime you will see an `execjs` error during asset compilation.
         | 
| @@ -1266,8 +1269,8 @@ bottom of the template: | |
| 1266 1269 | 
             
            ```html+erb
         | 
| 1267 1270 | 
             
            ...
         | 
| 1268 1271 |  | 
| 1269 | 
            -
            <%= link_to ' | 
| 1270 | 
            -
            <%= link_to ' | 
| 1272 | 
            +
            <%= link_to 'Edit', edit_article_path(@article) %> |
         | 
| 1273 | 
            +
            <%= link_to 'Back', articles_path %>
         | 
| 1271 1274 | 
             
            ```
         | 
| 1272 1275 |  | 
| 1273 1276 | 
             
            And here's how our app looks so far:
         | 
| @@ -1539,6 +1542,7 @@ class CreateComments < ActiveRecord::Migration | |
| 1539 1542 |  | 
| 1540 1543 | 
             
                  t.timestamps null: false
         | 
| 1541 1544 | 
             
                end
         | 
| 1545 | 
            +
                add_foreign_key :comments, :articles
         | 
| 1542 1546 | 
             
              end
         | 
| 1543 1547 | 
             
            end
         | 
| 1544 1548 | 
             
            ```
         | 
| @@ -1558,6 +1562,8 @@ run against the current database, so in this case you will just see: | |
| 1558 1562 | 
             
            ==  CreateComments: migrating =================================================
         | 
| 1559 1563 | 
             
            -- create_table(:comments)
         | 
| 1560 1564 | 
             
               -> 0.0115s
         | 
| 1565 | 
            +
            -- add_foreign_key(:comments, :articles)
         | 
| 1566 | 
            +
               -> 0.0000s
         | 
| 1561 1567 | 
             
            ==  CreateComments: migrated (0.0119s) ========================================
         | 
| 1562 1568 | 
             
            ```
         | 
| 1563 1569 |  | 
| @@ -1673,8 +1679,8 @@ So first, we'll wire up the Article show template | |
| 1673 1679 | 
             
              </p>
         | 
| 1674 1680 | 
             
            <% end %>
         | 
| 1675 1681 |  | 
| 1676 | 
            -
            <%= link_to ' | 
| 1677 | 
            -
            <%= link_to ' | 
| 1682 | 
            +
            <%= link_to 'Edit', edit_article_path(@article) %> |
         | 
| 1683 | 
            +
            <%= link_to 'Back', articles_path %>
         | 
| 1678 1684 | 
             
            ```
         | 
| 1679 1685 |  | 
| 1680 1686 | 
             
            This adds a form on the `Article` show page that creates a new comment by
         | 
| @@ -1754,8 +1760,8 @@ add that to the `app/views/articles/show.html.erb`. | |
| 1754 1760 | 
             
              </p>
         | 
| 1755 1761 | 
             
            <% end %>
         | 
| 1756 1762 |  | 
| 1757 | 
            -
            <%= link_to 'Edit | 
| 1758 | 
            -
            <%= link_to 'Back | 
| 1763 | 
            +
            <%= link_to 'Edit', edit_article_path(@article) %> |
         | 
| 1764 | 
            +
            <%= link_to 'Back', articles_path %>
         | 
| 1759 1765 | 
             
            ```
         | 
| 1760 1766 |  | 
| 1761 1767 | 
             
            Now you can add articles and comments to your blog and have them show up in the
         | 
| @@ -1820,8 +1826,8 @@ following: | |
| 1820 1826 | 
             
              </p>
         | 
| 1821 1827 | 
             
            <% end %>
         | 
| 1822 1828 |  | 
| 1823 | 
            -
            <%= link_to 'Edit | 
| 1824 | 
            -
            <%= link_to 'Back | 
| 1829 | 
            +
            <%= link_to 'Edit', edit_article_path(@article) %> |
         | 
| 1830 | 
            +
            <%= link_to 'Back', articles_path %>
         | 
| 1825 1831 | 
             
            ```
         | 
| 1826 1832 |  | 
| 1827 1833 | 
             
            This will now render the partial in `app/views/comments/_comment.html.erb` once
         | 
| @@ -1870,8 +1876,8 @@ Then you make the `app/views/articles/show.html.erb` look like the following: | |
| 1870 1876 | 
             
            <h2>Add a comment:</h2>
         | 
| 1871 1877 | 
             
            <%= render 'comments/form' %>
         | 
| 1872 1878 |  | 
| 1873 | 
            -
            <%= link_to 'Edit | 
| 1874 | 
            -
            <%= link_to 'Back | 
| 1879 | 
            +
            <%= link_to 'Edit', edit_article_path(@article) %> |
         | 
| 1880 | 
            +
            <%= link_to 'Back', articles_path %>
         | 
| 1875 1881 | 
             
            ```
         | 
| 1876 1882 |  | 
| 1877 1883 | 
             
            The second render just defines the partial template we want to render,
         | 
    
        data/guides/source/i18n.md
    CHANGED
    
    | @@ -807,7 +807,7 @@ So, for example, instead of the default error message `"cannot be blank"` you co | |
| 807 807 |  | 
| 808 808 | 
             
            | validation   | with option               | message                   | interpolation |
         | 
| 809 809 | 
             
            | ------------ | ------------------------- | ------------------------- | ------------- |
         | 
| 810 | 
            -
            | confirmation | -                         | :confirmation             |  | 
| 810 | 
            +
            | confirmation | -                         | :confirmation             | attribute     |
         | 
| 811 811 | 
             
            | acceptance   | -                         | :accepted                 | -             |
         | 
| 812 812 | 
             
            | presence     | -                         | :blank                    | -             |
         | 
| 813 813 | 
             
            | absence      | -                         | :present                  | -             |
         | 
| @@ -827,6 +827,7 @@ So, for example, instead of the default error message `"cannot be blank"` you co | |
| 827 827 | 
             
            | numericality | :equal_to                 | :equal_to                 | count         |
         | 
| 828 828 | 
             
            | numericality | :less_than                | :less_than                | count         |
         | 
| 829 829 | 
             
            | numericality | :less_than_or_equal_to    | :less_than_or_equal_to    | count         |
         | 
| 830 | 
            +
            | numericality | :other_than               | :other_than               | count         |
         | 
| 830 831 | 
             
            | numericality | :only_integer             | :not_an_integer           | -             |
         | 
| 831 832 | 
             
            | numericality | :odd                      | :odd                      | -             |
         | 
| 832 833 | 
             
            | numericality | :even                     | :even                     | -             |
         | 
    
        data/guides/source/testing.md
    CHANGED
    
    | @@ -221,7 +221,16 @@ Every test contains one or more assertions. Only when all the assertions are suc | |
| 221 221 |  | 
| 222 222 | 
             
            ### Maintaining the test database schema
         | 
| 223 223 |  | 
| 224 | 
            -
            In order to run your tests, your test database will need to have the current | 
| 224 | 
            +
            In order to run your tests, your test database will need to have the current
         | 
| 225 | 
            +
            structure. The test helper checks whether your test database has any pending
         | 
| 226 | 
            +
            migrations. If so, it will try to load your `db/schema.rb` or `db/structure.sql`
         | 
| 227 | 
            +
            into the test database. If migrations are still pending, an error will be
         | 
| 228 | 
            +
            raised. Usually this indicates that your schema is not fully migrated. Running
         | 
| 229 | 
            +
            the migrations against the development database (`bin/rake db:migrate`) will
         | 
| 230 | 
            +
            bring the schema up to date.
         | 
| 231 | 
            +
             | 
| 232 | 
            +
            NOTE: If existing migrations required modifications, the test database needs to
         | 
| 233 | 
            +
            be rebuilt. This can be done by executing `bin/rake db:test:prepare`.
         | 
| 225 234 |  | 
| 226 235 | 
             
            ### Running Tests
         | 
| 227 236 |  | 
| @@ -1100,7 +1109,7 @@ within a model: | |
| 1100 1109 | 
             
            ```ruby
         | 
| 1101 1110 | 
             
            require 'test_helper'
         | 
| 1102 1111 |  | 
| 1103 | 
            -
            class ProductTest <  | 
| 1112 | 
            +
            class ProductTest < ActiveJob::TestCase
         | 
| 1104 1113 | 
             
              test 'billing job scheduling' do
         | 
| 1105 1114 | 
             
                assert_enqueued_with(job: BillingJob) do
         | 
| 1106 1115 | 
             
                  product.charge(account)
         | 
| @@ -248,6 +248,22 @@ class Notifier < ActionMailer::Base | |
| 248 248 | 
             
            end
         | 
| 249 249 | 
             
            ```
         | 
| 250 250 |  | 
| 251 | 
            +
            ### Foreign Key Support
         | 
| 252 | 
            +
             | 
| 253 | 
            +
            The migration DSL has been expanded to support foreign key definitions. If
         | 
| 254 | 
            +
            you've been using the Foreigner gem, you might want to consider removing it.
         | 
| 255 | 
            +
            Note that the foreign key support of Rails is a subset of Foreigner. This means
         | 
| 256 | 
            +
            that not every Foreigner definition can be fully replaced by it's Rails
         | 
| 257 | 
            +
            migration DSL counterpart.
         | 
| 258 | 
            +
             | 
| 259 | 
            +
            The migration procedure is as follows:
         | 
| 260 | 
            +
             | 
| 261 | 
            +
            1. remove `gem "foreigner"` from the Gemfile.
         | 
| 262 | 
            +
            2. run `bundle install`.
         | 
| 263 | 
            +
            3. run `bin/rake db:schema:dump`.
         | 
| 264 | 
            +
            4. make sure that `db/schema.rb` contains every foreign key definition with
         | 
| 265 | 
            +
            the necessary options.
         | 
| 266 | 
            +
             | 
| 251 267 | 
             
            Upgrading from Rails 4.0 to Rails 4.1
         | 
| 252 268 | 
             
            -------------------------------------
         | 
| 253 269 |  | 
| @@ -766,7 +782,7 @@ file (in `config/application.rb`): | |
| 766 782 | 
             
            ```ruby
         | 
| 767 783 | 
             
            # Require the gems listed in Gemfile, including any gems
         | 
| 768 784 | 
             
            # you've limited to :test, :development, or :production.
         | 
| 769 | 
            -
            Bundler.require( | 
| 785 | 
            +
            Bundler.require(*Rails.groups)
         | 
| 770 786 | 
             
            ```
         | 
| 771 787 |  | 
| 772 788 | 
             
            ### vendor/plugins
         | 
| @@ -1110,7 +1126,7 @@ You can help test performance with these additions to your test environment: | |
| 1110 1126 |  | 
| 1111 1127 | 
             
            ```ruby
         | 
| 1112 1128 | 
             
            # Configure static asset server for tests with Cache-Control for performance
         | 
| 1113 | 
            -
            config. | 
| 1129 | 
            +
            config.serve_static_files = true
         | 
| 1114 1130 | 
             
            config.static_cache_control = 'public, max-age=3600'
         | 
| 1115 1131 | 
             
            ```
         | 
| 1116 1132 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rails
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 4.2. | 
| 4 | 
            +
              version: 4.2.1.rc1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - David Heinemeier Hansson
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2015-02-20 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -16,112 +16,112 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - '='
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: 4.2. | 
| 19 | 
            +
                    version: 4.2.1.rc1
         | 
| 20 20 | 
             
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - '='
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: 4.2. | 
| 26 | 
            +
                    version: 4.2.1.rc1
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: actionpack
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - '='
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: 4.2. | 
| 33 | 
            +
                    version: 4.2.1.rc1
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - '='
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: 4.2. | 
| 40 | 
            +
                    version: 4.2.1.rc1
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: actionview
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 44 | 
             
                requirements:
         | 
| 45 45 | 
             
                - - '='
         | 
| 46 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            -
                    version: 4.2. | 
| 47 | 
            +
                    version: 4.2.1.rc1
         | 
| 48 48 | 
             
              type: :runtime
         | 
| 49 49 | 
             
              prerelease: false
         | 
| 50 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - '='
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            -
                    version: 4.2. | 
| 54 | 
            +
                    version: 4.2.1.rc1
         | 
| 55 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 56 | 
             
              name: activemodel
         | 
| 57 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 58 | 
             
                requirements:
         | 
| 59 59 | 
             
                - - '='
         | 
| 60 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            -
                    version: 4.2. | 
| 61 | 
            +
                    version: 4.2.1.rc1
         | 
| 62 62 | 
             
              type: :runtime
         | 
| 63 63 | 
             
              prerelease: false
         | 
| 64 64 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 65 | 
             
                requirements:
         | 
| 66 66 | 
             
                - - '='
         | 
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            -
                    version: 4.2. | 
| 68 | 
            +
                    version: 4.2.1.rc1
         | 
| 69 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 70 | 
             
              name: activerecord
         | 
| 71 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 72 | 
             
                requirements:
         | 
| 73 73 | 
             
                - - '='
         | 
| 74 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            -
                    version: 4.2. | 
| 75 | 
            +
                    version: 4.2.1.rc1
         | 
| 76 76 | 
             
              type: :runtime
         | 
| 77 77 | 
             
              prerelease: false
         | 
| 78 78 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 79 | 
             
                requirements:
         | 
| 80 80 | 
             
                - - '='
         | 
| 81 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            -
                    version: 4.2. | 
| 82 | 
            +
                    version: 4.2.1.rc1
         | 
| 83 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 84 84 | 
             
              name: actionmailer
         | 
| 85 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 86 | 
             
                requirements:
         | 
| 87 87 | 
             
                - - '='
         | 
| 88 88 | 
             
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            -
                    version: 4.2. | 
| 89 | 
            +
                    version: 4.2.1.rc1
         | 
| 90 90 | 
             
              type: :runtime
         | 
| 91 91 | 
             
              prerelease: false
         | 
| 92 92 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 93 | 
             
                requirements:
         | 
| 94 94 | 
             
                - - '='
         | 
| 95 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            -
                    version: 4.2. | 
| 96 | 
            +
                    version: 4.2.1.rc1
         | 
| 97 97 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 98 98 | 
             
              name: activejob
         | 
| 99 99 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 100 100 | 
             
                requirements:
         | 
| 101 101 | 
             
                - - '='
         | 
| 102 102 | 
             
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            -
                    version: 4.2. | 
| 103 | 
            +
                    version: 4.2.1.rc1
         | 
| 104 104 | 
             
              type: :runtime
         | 
| 105 105 | 
             
              prerelease: false
         | 
| 106 106 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 107 | 
             
                requirements:
         | 
| 108 108 | 
             
                - - '='
         | 
| 109 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            -
                    version: 4.2. | 
| 110 | 
            +
                    version: 4.2.1.rc1
         | 
| 111 111 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 112 112 | 
             
              name: railties
         | 
| 113 113 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 114 114 | 
             
                requirements:
         | 
| 115 115 | 
             
                - - '='
         | 
| 116 116 | 
             
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            -
                    version: 4.2. | 
| 117 | 
            +
                    version: 4.2.1.rc1
         | 
| 118 118 | 
             
              type: :runtime
         | 
| 119 119 | 
             
              prerelease: false
         | 
| 120 120 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 121 | 
             
                requirements:
         | 
| 122 122 | 
             
                - - '='
         | 
| 123 123 | 
             
                  - !ruby/object:Gem::Version
         | 
| 124 | 
            -
                    version: 4.2. | 
| 124 | 
            +
                    version: 4.2.1.rc1
         | 
| 125 125 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 126 126 | 
             
              name: bundler
         | 
| 127 127 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -342,10 +342,10 @@ files: | |
| 342 342 | 
             
            - guides/source/api_documentation_guidelines.md
         | 
| 343 343 | 
             
            - guides/source/asset_pipeline.md
         | 
| 344 344 | 
             
            - guides/source/association_basics.md
         | 
| 345 | 
            +
            - guides/source/autoloading_and_reloading_constants.md
         | 
| 345 346 | 
             
            - guides/source/caching_with_rails.md
         | 
| 346 347 | 
             
            - guides/source/command_line.md
         | 
| 347 348 | 
             
            - guides/source/configuring.md
         | 
| 348 | 
            -
            - guides/source/constant_autoloading_and_reloading.md
         | 
| 349 349 | 
             
            - guides/source/contributing_to_ruby_on_rails.md
         | 
| 350 350 | 
             
            - guides/source/credits.html.erb
         | 
| 351 351 | 
             
            - guides/source/debugging_rails_applications.md
         | 
| @@ -398,7 +398,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 398 398 | 
             
                  version: 1.8.11
         | 
| 399 399 | 
             
            requirements: []
         | 
| 400 400 | 
             
            rubyforge_project: 
         | 
| 401 | 
            -
            rubygems_version: 2. | 
| 401 | 
            +
            rubygems_version: 2.4.5
         | 
| 402 402 | 
             
            signing_key: 
         | 
| 403 403 | 
             
            specification_version: 4
         | 
| 404 404 | 
             
            summary: Full-stack web application framework.
         |