seo_pages 1.3.1 → 1.3.2
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/app/controllers/seo_pages/seo_pages_controller.rb +1 -1
 - data/app/helpers/seo_pages/application_helper.rb +1 -1
 - data/app/models/seo_pages/seo_page.rb +27 -0
 - data/app/views/seo_pages/seo_pages/_form.html.erb +3 -0
 - data/db/migrate/20130927173154_add_is_regex_to_seo_pages.rb +5 -0
 - data/lib/seo_pages/version.rb +1 -1
 - data/test/dummy/app/assets/javascripts/products.js +2 -0
 - data/test/dummy/app/assets/stylesheets/products.css +4 -0
 - data/test/dummy/app/assets/stylesheets/scaffold.css +56 -0
 - data/test/dummy/app/controllers/products_controller.rb +58 -0
 - data/test/dummy/app/helpers/products_helper.rb +2 -0
 - data/test/dummy/app/models/product.rb +2 -0
 - data/test/dummy/app/views/layouts/application.html.erb +1 -1
 - data/test/dummy/app/views/products/_form.html.erb +21 -0
 - data/test/dummy/app/views/products/edit.html.erb +6 -0
 - data/test/dummy/app/views/products/index.html.erb +27 -0
 - data/test/dummy/app/views/products/new.html.erb +5 -0
 - data/test/dummy/app/views/products/show.html.erb +9 -0
 - data/test/dummy/config/routes.rb +2 -0
 - data/test/dummy/db/migrate/{20130909135320_create_seo_pages_seo_page_defaults.seo_pages.rb → 20130927171428_create_seo_pages_seo_page_defaults.seo_pages.rb} +0 -0
 - data/test/dummy/db/migrate/{20130909135321_create_seo_pages_seo_pages.seo_pages.rb → 20130927171429_create_seo_pages_seo_pages.seo_pages.rb} +0 -0
 - data/test/dummy/db/migrate/{20130909135322_create_default_record.seo_pages.rb → 20130927171430_create_default_record.seo_pages.rb} +0 -0
 - data/test/dummy/db/migrate/20130927171851_create_products.rb +9 -0
 - data/test/dummy/db/migrate/20130927173450_add_is_regex_to_seo_pages.seo_pages.rb +6 -0
 - data/test/dummy/db/schema.rb +8 -1
 - data/test/dummy/db/test.sqlite3 +0 -0
 - data/test/dummy/test/controllers/products_controller_test.rb +49 -0
 - data/test/dummy/test/fixtures/products.yml +7 -0
 - data/test/dummy/test/helpers/products_helper_test.rb +4 -0
 - data/test/dummy/test/models/product_test.rb +7 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/100254abd166c2c45a5851f4ca60e76e +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/{5e49a9e50308d9df9c3b978c189e1a95 → 1895131c40748b0414dc4ec32393fc06} +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/29e6f58c7f81b16f078c14b63ab2164e +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/2a899d1979e398f21f3393af6cc3da89 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/2e06c1d1fa05a4864c17ce06cbb8df6f +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/2e1453636c7989f68f8ff64a487c74a6 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/31710301f0d68b89727f5de964446610 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/371bf96e99717688ed7313a0c53f4212 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/3f0a55525ab570339c0fcbfb463fe069 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/4f0ccf0eb5b1919093867409e71115ab +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/510da110ae528e2d22533be39ff696c5 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/{b64ef79b76b687f0bcd96c61bfcbad04 → 541dd75ce6f1074444b0c96938b27732} +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/552b4516be6f766a2da35c26be2f1ecf +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/6025fb186ae1231e67f950857d969e18 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/6fc757c2c8329244ca95d6909865bbc2 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/8ea40d0224e2d772232dcbfbf0fc3005 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/{4f86487aa5d289eda467a8c6537a96d7 → 976cd53e8ad83f25733f23f56452eae0} +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/998581655254969187ae9e38e5dfd2bc +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/9d79a842f086f17d3420e5cb88710c10 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/{111856d8daa1082bf05efab4077547a6 → af7f07d8db8655b7b2c88bb46ca86cbb} +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/b618d1e91e964f790e3ab99ac0f1a717 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/c6dd8e9ad92af5994abfaafcc6b53e56 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/d3595d230717ab840e8f75b2c4557d46 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/df028ef849d9b6fc8046f3cdbec1784b +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/e26f396103ac57cdf4c55b6b461af9c0 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/e95e33937352131984bbe9271c9e978d +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/fd37851cdd36c36d11d133edab45a370 +0 -0
 - metadata +200 -139
 - data/test/dummy/db/development.sqlite3 +0 -0
 - data/test/dummy/log/development.log +0 -2735
 - data/test/dummy/tmp/cache/assets/development/sprockets/01fbd25f95749291c3002e82372ce4c7 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/19dc844a3495c2ebc1346a3a3c12e263 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/2147ddaeafe0b9a21df5d34acc0ddeed +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/2d8705afe57b62d44449d69f4222290f +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/65009485adc1a6a013669d3dd03bccf2 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/69d9fcd635a8a7e09a3553bb42dcb9fe +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/70a21f35131b909ba99755f18f61bc86 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/861696f6bec1e79e099c05ac9817ea73 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/b273afc43ae2c708d583ed1b9ee0dbdf +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/b51894bec29fad0fe908ff07013df296 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/d2b80b70d9f90c0787c9cdcfca9a7cc0 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/d85a70becfb7be07108c6a9b1a530599 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/dced4195b263fd551435b0ba4c6e1ce6 +0 -0
 - data/test/dummy/tmp/cache/assets/development/sprockets/e79502ecdcd92526d5d53dde53001f93 +0 -0
 - data/test/dummy/tmp/pids/server.pid +0 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 083afe98d92c2c4a03ba25db1dfc51d609c2adf9
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 1f6dcb3ca972f13845ebd6dba8fd9fe205fb095d
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: fb982e6957535b3e9f437f41ae61d28198dcc64a9faf3945d78899172ef9f4aa86a21834c765cd47c7a0e0e561a4b22a905904ee3e284e5c926383bca0fdd9b8
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 5403da8e53bf5b63a7fd7c6ae579559bd9d80e72f3fa1bf4a6ddefe0bddc0dc6d87e66ee6abf521a5664fb92610f40f1a44ec01046540409e1a4c2ac2167d9e4
         
     | 
| 
         @@ -57,7 +57,7 @@ module SeoPages 
     | 
|
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
                  # Only allow a trusted parameter "white list" through.
         
     | 
| 
       59 
59 
     | 
    
         
             
                  def seo_page_params
         
     | 
| 
       60 
     | 
    
         
            -
                    params.require(:seo_page).permit(:url_identifier, :page_title, :meta_keywords, :meta_description)
         
     | 
| 
      
 60 
     | 
    
         
            +
                    params.require(:seo_page).permit(:url_identifier, :is_regex, :page_title, :meta_keywords, :meta_description)
         
     | 
| 
       61 
61 
     | 
    
         
             
                  end
         
     | 
| 
       62 
62 
     | 
    
         
             
              end
         
     | 
| 
       63 
63 
     | 
    
         
             
            end
         
     | 
| 
         @@ -2,7 +2,7 @@ module SeoPages 
     | 
|
| 
       2 
2 
     | 
    
         
             
              module ApplicationHelper
         
     | 
| 
       3 
3 
     | 
    
         
             
                def seo_data
         
     | 
| 
       4 
4 
     | 
    
         
             
                  @seo_default ||= SeoPages::SeoPageDefault.first
         
     | 
| 
       5 
     | 
    
         
            -
                  @seo = SeoPages::SeoPage. 
     | 
| 
      
 5 
     | 
    
         
            +
                  @seo = SeoPages::SeoPage.find_by_url(request.fullpath) || SeoPages::SeoPage.new
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                  @seo.page_title ||= @seo_default.page_title
         
     | 
| 
       8 
8 
     | 
    
         
             
                  @seo.meta_keywords ||= @seo_default.meta_keywords
         
     | 
| 
         @@ -1,5 +1,32 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module SeoPages
         
     | 
| 
       2 
2 
     | 
    
         
             
              class SeoPage < ActiveRecord::Base
         
     | 
| 
       3 
3 
     | 
    
         
             
                validates :url_identifier, uniqueness: true
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                scope :regex, -> { where(is_regex: true)}
         
     | 
| 
      
 6 
     | 
    
         
            +
                scope :non_regex, -> { where(is_regex: false)}
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                @@regex = {}
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                def self.find_by_url(url)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  exact_match(url) || regex_match(url)
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                def self.exact_match(url)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  non_regex.where(url_identifier: url).first
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def self.regex_match(url)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  regex.to_a.find do |seo|
         
     | 
| 
      
 20 
     | 
    
         
            +
                    get_regex(seo.url_identifier) =~ url
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                def self.get_regex(url)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  if @@regex[url].nil? 
         
     | 
| 
      
 26 
     | 
    
         
            +
                    @@regex[url] = Regexp.new(url)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  else
         
     | 
| 
      
 28 
     | 
    
         
            +
                    @@regex[url]
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
       4 
31 
     | 
    
         
             
              end
         
     | 
| 
       5 
32 
     | 
    
         
             
            end
         
     | 
    
        data/lib/seo_pages/version.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,56 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            body { background-color: #fff; color: #333; }
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            body, p, ol, ul, td {
         
     | 
| 
      
 4 
     | 
    
         
            +
              font-family: verdana, arial, helvetica, sans-serif;
         
     | 
| 
      
 5 
     | 
    
         
            +
              font-size:   13px;
         
     | 
| 
      
 6 
     | 
    
         
            +
              line-height: 18px;
         
     | 
| 
      
 7 
     | 
    
         
            +
            }
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            pre {
         
     | 
| 
      
 10 
     | 
    
         
            +
              background-color: #eee;
         
     | 
| 
      
 11 
     | 
    
         
            +
              padding: 10px;
         
     | 
| 
      
 12 
     | 
    
         
            +
              font-size: 11px;
         
     | 
| 
      
 13 
     | 
    
         
            +
            }
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            a { color: #000; }
         
     | 
| 
      
 16 
     | 
    
         
            +
            a:visited { color: #666; }
         
     | 
| 
      
 17 
     | 
    
         
            +
            a:hover { color: #fff; background-color:#000; }
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            div.field, div.actions {
         
     | 
| 
      
 20 
     | 
    
         
            +
              margin-bottom: 10px;
         
     | 
| 
      
 21 
     | 
    
         
            +
            }
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            #notice {
         
     | 
| 
      
 24 
     | 
    
         
            +
              color: green;
         
     | 
| 
      
 25 
     | 
    
         
            +
            }
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            .field_with_errors {
         
     | 
| 
      
 28 
     | 
    
         
            +
              padding: 2px;
         
     | 
| 
      
 29 
     | 
    
         
            +
              background-color: red;
         
     | 
| 
      
 30 
     | 
    
         
            +
              display: table;
         
     | 
| 
      
 31 
     | 
    
         
            +
            }
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            #error_explanation {
         
     | 
| 
      
 34 
     | 
    
         
            +
              width: 450px;
         
     | 
| 
      
 35 
     | 
    
         
            +
              border: 2px solid red;
         
     | 
| 
      
 36 
     | 
    
         
            +
              padding: 7px;
         
     | 
| 
      
 37 
     | 
    
         
            +
              padding-bottom: 0;
         
     | 
| 
      
 38 
     | 
    
         
            +
              margin-bottom: 20px;
         
     | 
| 
      
 39 
     | 
    
         
            +
              background-color: #f0f0f0;
         
     | 
| 
      
 40 
     | 
    
         
            +
            }
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            #error_explanation h2 {
         
     | 
| 
      
 43 
     | 
    
         
            +
              text-align: left;
         
     | 
| 
      
 44 
     | 
    
         
            +
              font-weight: bold;
         
     | 
| 
      
 45 
     | 
    
         
            +
              padding: 5px 5px 5px 15px;
         
     | 
| 
      
 46 
     | 
    
         
            +
              font-size: 12px;
         
     | 
| 
      
 47 
     | 
    
         
            +
              margin: -7px;
         
     | 
| 
      
 48 
     | 
    
         
            +
              margin-bottom: 0px;
         
     | 
| 
      
 49 
     | 
    
         
            +
              background-color: #c00;
         
     | 
| 
      
 50 
     | 
    
         
            +
              color: #fff;
         
     | 
| 
      
 51 
     | 
    
         
            +
            }
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
            #error_explanation ul li {
         
     | 
| 
      
 54 
     | 
    
         
            +
              font-size: 12px;
         
     | 
| 
      
 55 
     | 
    
         
            +
              list-style: square;
         
     | 
| 
      
 56 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -0,0 +1,58 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class ProductsController < ApplicationController
         
     | 
| 
      
 2 
     | 
    
         
            +
              before_action :set_product, only: [:show, :edit, :update, :destroy]
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              # GET /products
         
     | 
| 
      
 5 
     | 
    
         
            +
              def index
         
     | 
| 
      
 6 
     | 
    
         
            +
                @products = Product.all
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              # GET /products/1
         
     | 
| 
      
 10 
     | 
    
         
            +
              def show
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              # GET /products/new
         
     | 
| 
      
 14 
     | 
    
         
            +
              def new
         
     | 
| 
      
 15 
     | 
    
         
            +
                @product = Product.new
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              # GET /products/1/edit
         
     | 
| 
      
 19 
     | 
    
         
            +
              def edit
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              # POST /products
         
     | 
| 
      
 23 
     | 
    
         
            +
              def create
         
     | 
| 
      
 24 
     | 
    
         
            +
                @product = Product.new(product_params)
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                if @product.save
         
     | 
| 
      
 27 
     | 
    
         
            +
                  redirect_to @product, notice: 'Product was successfully created.'
         
     | 
| 
      
 28 
     | 
    
         
            +
                else
         
     | 
| 
      
 29 
     | 
    
         
            +
                  render action: 'new'
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              # PATCH/PUT /products/1
         
     | 
| 
      
 34 
     | 
    
         
            +
              def update
         
     | 
| 
      
 35 
     | 
    
         
            +
                if @product.update(product_params)
         
     | 
| 
      
 36 
     | 
    
         
            +
                  redirect_to @product, notice: 'Product was successfully updated.'
         
     | 
| 
      
 37 
     | 
    
         
            +
                else
         
     | 
| 
      
 38 
     | 
    
         
            +
                  render action: 'edit'
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              # DELETE /products/1
         
     | 
| 
      
 43 
     | 
    
         
            +
              def destroy
         
     | 
| 
      
 44 
     | 
    
         
            +
                @product.destroy
         
     | 
| 
      
 45 
     | 
    
         
            +
                redirect_to products_url, notice: 'Product was successfully destroyed.'
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
              private
         
     | 
| 
      
 49 
     | 
    
         
            +
                # Use callbacks to share common setup or constraints between actions.
         
     | 
| 
      
 50 
     | 
    
         
            +
                def set_product
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @product = Product.find(params[:id])
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                # Only allow a trusted parameter "white list" through.
         
     | 
| 
      
 55 
     | 
    
         
            +
                def product_params
         
     | 
| 
      
 56 
     | 
    
         
            +
                  params.require(:product).permit(:name)
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            <!DOCTYPE html>
         
     | 
| 
       2 
2 
     | 
    
         
             
            <html>
         
     | 
| 
       3 
3 
     | 
    
         
             
            <head>
         
     | 
| 
       4 
     | 
    
         
            -
               
     | 
| 
      
 4 
     | 
    
         
            +
              <%= seo_page %>
         
     | 
| 
       5 
5 
     | 
    
         
             
              <%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %>
         
     | 
| 
       6 
6 
     | 
    
         
             
              <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
         
     | 
| 
       7 
7 
     | 
    
         
             
              <%= csrf_meta_tags %>
         
     | 
| 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <%= form_for(@product) do |f| %>
         
     | 
| 
      
 2 
     | 
    
         
            +
              <% if @product.errors.any? %>
         
     | 
| 
      
 3 
     | 
    
         
            +
                <div id="error_explanation">
         
     | 
| 
      
 4 
     | 
    
         
            +
                  <h2><%= pluralize(@product.errors.count, "error") %> prohibited this product from being saved:</h2>
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                  <ul>
         
     | 
| 
      
 7 
     | 
    
         
            +
                  <% @product.errors.full_messages.each do |msg| %>
         
     | 
| 
      
 8 
     | 
    
         
            +
                    <li><%= msg %></li>
         
     | 
| 
      
 9 
     | 
    
         
            +
                  <% end %>
         
     | 
| 
      
 10 
     | 
    
         
            +
                  </ul>
         
     | 
| 
      
 11 
     | 
    
         
            +
                </div>
         
     | 
| 
      
 12 
     | 
    
         
            +
              <% end %>
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              <div class="field">
         
     | 
| 
      
 15 
     | 
    
         
            +
                <%= f.label :name %><br>
         
     | 
| 
      
 16 
     | 
    
         
            +
                <%= f.text_field :name %>
         
     | 
| 
      
 17 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 18 
     | 
    
         
            +
              <div class="actions">
         
     | 
| 
      
 19 
     | 
    
         
            +
                <%= f.submit %>
         
     | 
| 
      
 20 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 21 
     | 
    
         
            +
            <% end %>
         
     | 
| 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <h1>Listing products</h1>
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            <table>
         
     | 
| 
      
 4 
     | 
    
         
            +
              <thead>
         
     | 
| 
      
 5 
     | 
    
         
            +
                <tr>
         
     | 
| 
      
 6 
     | 
    
         
            +
                  <th>Name</th>
         
     | 
| 
      
 7 
     | 
    
         
            +
                  <th></th>
         
     | 
| 
      
 8 
     | 
    
         
            +
                  <th></th>
         
     | 
| 
      
 9 
     | 
    
         
            +
                  <th></th>
         
     | 
| 
      
 10 
     | 
    
         
            +
                </tr>
         
     | 
| 
      
 11 
     | 
    
         
            +
              </thead>
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              <tbody>
         
     | 
| 
      
 14 
     | 
    
         
            +
                <% @products.each do |product| %>
         
     | 
| 
      
 15 
     | 
    
         
            +
                  <tr>
         
     | 
| 
      
 16 
     | 
    
         
            +
                    <td><%= product.name %></td>
         
     | 
| 
      
 17 
     | 
    
         
            +
                    <td><%= link_to 'Show', product %></td>
         
     | 
| 
      
 18 
     | 
    
         
            +
                    <td><%= link_to 'Edit', edit_product_path(product) %></td>
         
     | 
| 
      
 19 
     | 
    
         
            +
                    <td><%= link_to 'Destroy', product, method: :delete, data: { confirm: 'Are you sure?' } %></td>
         
     | 
| 
      
 20 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 21 
     | 
    
         
            +
                <% end %>
         
     | 
| 
      
 22 
     | 
    
         
            +
              </tbody>
         
     | 
| 
      
 23 
     | 
    
         
            +
            </table>
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            <br>
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            <%= link_to 'New Product', new_product_path %>
         
     | 
    
        data/test/dummy/config/routes.rb
    CHANGED
    
    
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
    
        data/test/dummy/db/schema.rb
    CHANGED
    
    | 
         @@ -11,7 +11,13 @@ 
     | 
|
| 
       11 
11 
     | 
    
         
             
            #
         
     | 
| 
       12 
12 
     | 
    
         
             
            # It's strongly recommended that you check this file into your version control system.
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
            ActiveRecord::Schema.define(version:  
     | 
| 
      
 14 
     | 
    
         
            +
            ActiveRecord::Schema.define(version: 20130927173450) do
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              create_table "products", force: true do |t|
         
     | 
| 
      
 17 
     | 
    
         
            +
                t.string   "name"
         
     | 
| 
      
 18 
     | 
    
         
            +
                t.datetime "created_at"
         
     | 
| 
      
 19 
     | 
    
         
            +
                t.datetime "updated_at"
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
       15 
21 
     | 
    
         | 
| 
       16 
22 
     | 
    
         
             
              create_table "seo_pages_seo_page_defaults", force: true do |t|
         
     | 
| 
       17 
23 
     | 
    
         
             
                t.string   "page_title"
         
     | 
| 
         @@ -28,6 +34,7 @@ ActiveRecord::Schema.define(version: 20130909135322) do 
     | 
|
| 
       28 
34 
     | 
    
         
             
                t.string   "meta_description"
         
     | 
| 
       29 
35 
     | 
    
         
             
                t.datetime "created_at"
         
     | 
| 
       30 
36 
     | 
    
         
             
                t.datetime "updated_at"
         
     | 
| 
      
 37 
     | 
    
         
            +
                t.boolean  "is_regex"
         
     | 
| 
       31 
38 
     | 
    
         
             
              end
         
     | 
| 
       32 
39 
     | 
    
         | 
| 
       33 
40 
     | 
    
         
             
            end
         
     | 
| 
         
            File without changes
         
     | 
| 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class ProductsControllerTest < ActionController::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
              setup do
         
     | 
| 
      
 5 
     | 
    
         
            +
                @product = products(:one)
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              test "should get index" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                get :index
         
     | 
| 
      
 10 
     | 
    
         
            +
                assert_response :success
         
     | 
| 
      
 11 
     | 
    
         
            +
                assert_not_nil assigns(:products)
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              test "should get new" do
         
     | 
| 
      
 15 
     | 
    
         
            +
                get :new
         
     | 
| 
      
 16 
     | 
    
         
            +
                assert_response :success
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              test "should create product" do
         
     | 
| 
      
 20 
     | 
    
         
            +
                assert_difference('Product.count') do
         
     | 
| 
      
 21 
     | 
    
         
            +
                  post :create, product: { name: @product.name }
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                assert_redirected_to product_path(assigns(:product))
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              test "should show product" do
         
     | 
| 
      
 28 
     | 
    
         
            +
                get :show, id: @product
         
     | 
| 
      
 29 
     | 
    
         
            +
                assert_response :success
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              test "should get edit" do
         
     | 
| 
      
 33 
     | 
    
         
            +
                get :edit, id: @product
         
     | 
| 
      
 34 
     | 
    
         
            +
                assert_response :success
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              test "should update product" do
         
     | 
| 
      
 38 
     | 
    
         
            +
                patch :update, id: @product, product: { name: @product.name }
         
     | 
| 
      
 39 
     | 
    
         
            +
                assert_redirected_to product_path(assigns(:product))
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              test "should destroy product" do
         
     | 
| 
      
 43 
     | 
    
         
            +
                assert_difference('Product.count', -1) do
         
     | 
| 
      
 44 
     | 
    
         
            +
                  delete :destroy, id: @product
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                assert_redirected_to products_path
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     |