From 04f26371e23a116cc7be22bd694010820d469e0c Mon Sep 17 00:00:00 2001 From: cedricnjanga Date: Tue, 20 Feb 2018 15:09:20 -0800 Subject: Refs #5609 Change slug format --- app/models/referential.rb | 8 ++++++-- spec/factories/referentials.rb | 2 +- spec/models/referential_spec.rb | 19 ++++++++++++++++++- spec/support/referential.rb | 4 ++-- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/app/models/referential.rb b/app/models/referential.rb index 09c2e7d34..54497d3cf 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -13,7 +13,7 @@ class Referential < ActiveRecord::Base validates_uniqueness_of :slug - validates_format_of :slug, with: %r{\A[a-z][0-9a-z_]+\Z} + validates_format_of :slug, with: %r{([a-z][a-z-]+_\d{10}|\d{10})} validates_format_of :prefix, with: %r{\A[0-9a-zA-Z_]+\Z} validates_format_of :upper_corner, with: %r{\A-?[0-9]+\.?[0-9]*\,-?[0-9]+\.?[0-9]*\Z} validates_format_of :lower_corner, with: %r{\A-?[0-9]+\.?[0-9]*\,-?[0-9]+\.?[0-9]*\Z} @@ -423,7 +423,11 @@ class Referential < ActiveRecord::Base end def assign_slug - self.slug ||= "#{name.parameterize.gsub('-', '_')}_#{Time.now.to_i}" if name + self.slug ||= begin + prefix = "#{name.parameterize}".scan(/[a-zA-Z-]/) + prefix.delete_at 0 if prefix[0] == '-' + prefix.empty? ? "#{Time.now.to_i}" : "#{prefix.join}_#{Time.now.to_i}" + end if name end def assign_prefix diff --git a/spec/factories/referentials.rb b/spec/factories/referentials.rb index 0276a47be..a9f1f972a 100644 --- a/spec/factories/referentials.rb +++ b/spec/factories/referentials.rb @@ -1,7 +1,7 @@ FactoryGirl.define do factory :referential do sequence(:name) { |n| "Test #{n}" } - sequence(:slug) { |n| "test_#{n}" } + sequence(:slug) { |n| "test-#{n}_#{Time.now.to_i}" } sequence(:prefix) { |n| "test_#{n}" } association :line_referential association :stop_area_referential diff --git a/spec/models/referential_spec.rb b/spec/models/referential_spec.rb index 6d699f759..d07b57f13 100644 --- a/spec/models/referential_spec.rb +++ b/spec/models/referential_spec.rb @@ -9,6 +9,23 @@ describe Referential, :type => :model do subject { build_stubbed(:referential) } it { should validate_presence_of(:objectid_format) } + + it "shoul assign slug with a good format" do + + names = %w( + 2018-Hiver-Jezequel-MM-Lyon-Nice + 2018-Hiver-Jezequel-23293MM-Lyon-Nice + -Hiver-Jezequel-MM-Lyon-Nice + Hiver-Jezequel-MM-Lyon-Nice + 20179282 + ) + + names.each do |name| + ref = Referential.new name: name + ref.assign_slug + expect(ref.slug).to match(/([a-z][a-z-]+_\d{10}|\d{10})/) + end + end end context ".referential_ids_in_periode" do @@ -60,7 +77,7 @@ describe Referential, :type => :model do { "organisation_id" => first_organisation.id, "name"=>"Test", - "slug"=>"test", + "slug"=>"test_#{Time.now.to_i}", "prefix"=>"test", "time_zone"=>"American Samoa", "upper_corner"=>"51.1,8.23", diff --git a/spec/support/referential.rb b/spec/support/referential.rb index 9acdce73a..19590191a 100644 --- a/spec/support/referential.rb +++ b/spec/support/referential.rb @@ -1,7 +1,7 @@ module ReferentialHelper def first_referential - Referential.find_by!(:slug => "first") + Referential.find_by!(:name => "first") end def first_organisation @@ -64,7 +64,7 @@ RSpec.configure do |config| :referential, prefix: "first", name: "first", - slug: "first", + slug: "first_#{Time.now.to_i}", organisation: organisation, workbench: workbench, objectid_format: "stif_netex" -- cgit v1.2.3 From 8aab474b8ad555b4d5f8e28c0af2f6c72741e317 Mon Sep 17 00:00:00 2001 From: Alban Peignier Date: Thu, 22 Feb 2018 10:56:39 +0100 Subject: Keep original slug format (with _). Avoid full numeric slug. Refs #5609 --- app/models/referential.rb | 10 +++++----- db/schema.rb | 1 - spec/factories/referentials.rb | 2 +- spec/models/referential_spec.rb | 29 +++++++++++++++-------------- spec/support/referential.rb | 4 ++-- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/app/models/referential.rb b/app/models/referential.rb index 54497d3cf..3b770603a 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -13,7 +13,7 @@ class Referential < ActiveRecord::Base validates_uniqueness_of :slug - validates_format_of :slug, with: %r{([a-z][a-z-]+_\d{10}|\d{10})} + validates_format_of :slug, with: %r{\A[a-z][0-9a-z_]+\Z} validates_format_of :prefix, with: %r{\A[0-9a-zA-Z_]+\Z} validates_format_of :upper_corner, with: %r{\A-?[0-9]+\.?[0-9]*\,-?[0-9]+\.?[0-9]*\Z} validates_format_of :lower_corner, with: %r{\A-?[0-9]+\.?[0-9]*\,-?[0-9]+\.?[0-9]*\Z} @@ -422,11 +422,11 @@ class Referential < ActiveRecord::Base end end - def assign_slug + def assign_slug(time_reference = Time) self.slug ||= begin - prefix = "#{name.parameterize}".scan(/[a-zA-Z-]/) - prefix.delete_at 0 if prefix[0] == '-' - prefix.empty? ? "#{Time.now.to_i}" : "#{prefix.join}_#{Time.now.to_i}" + prefix = name.parameterize.gsub('-','_').gsub(/[^a-zA-Z_]/,'').gsub(/^_/,'') + prefix = "referential" if prefix.blank? + "#{prefix}_#{time_reference.now.to_i}" end if name end diff --git a/db/schema.rb b/db/schema.rb index f77961f8d..c709290f5 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -18,7 +18,6 @@ ActiveRecord::Schema.define(version: 20180202170009) do enable_extension "hstore" enable_extension "postgis" enable_extension "unaccent" - enable_extension "objectid" create_table "access_links", id: :bigserial, force: :cascade do |t| t.integer "access_point_id", limit: 8 diff --git a/spec/factories/referentials.rb b/spec/factories/referentials.rb index a9f1f972a..0276a47be 100644 --- a/spec/factories/referentials.rb +++ b/spec/factories/referentials.rb @@ -1,7 +1,7 @@ FactoryGirl.define do factory :referential do sequence(:name) { |n| "Test #{n}" } - sequence(:slug) { |n| "test-#{n}_#{Time.now.to_i}" } + sequence(:slug) { |n| "test_#{n}" } sequence(:prefix) { |n| "test_#{n}" } association :line_referential association :stop_area_referential diff --git a/spec/models/referential_spec.rb b/spec/models/referential_spec.rb index d07b57f13..2d4649b87 100644 --- a/spec/models/referential_spec.rb +++ b/spec/models/referential_spec.rb @@ -10,20 +10,21 @@ describe Referential, :type => :model do it { should validate_presence_of(:objectid_format) } - it "shoul assign slug with a good format" do - - names = %w( - 2018-Hiver-Jezequel-MM-Lyon-Nice - 2018-Hiver-Jezequel-23293MM-Lyon-Nice - -Hiver-Jezequel-MM-Lyon-Nice - Hiver-Jezequel-MM-Lyon-Nice - 20179282 - ) - - names.each do |name| + it "assign slug with a good format" do + time_reference = double(now: 1234567890) + + conditions = { + "2018-Hiver-Jezequel-MM-Lyon-Nice": "hiver_jezequel_mm_lyon_nice_1234567890", + "2018-Hiver-Jezequel-23293MM-Lyon-Nice": "hiver_jezequel_mm_lyon_nice_1234567890", + "-Hiver-Jezequel-MM-Lyon-Nice": "hiver_jezequel_mm_lyon_nice_1234567890", + "Hiver-Jezequel-MM-Lyon-Nice": "hiver_jezequel_mm_lyon_nice_1234567890", + "20179282": "referential_1234567890" + } + + conditions.each do |name, expected_slug| ref = Referential.new name: name - ref.assign_slug - expect(ref.slug).to match(/([a-z][a-z-]+_\d{10}|\d{10})/) + ref.assign_slug time_reference + expect(ref.slug).to eq(expected_slug) end end end @@ -77,7 +78,7 @@ describe Referential, :type => :model do { "organisation_id" => first_organisation.id, "name"=>"Test", - "slug"=>"test_#{Time.now.to_i}", + "slug"=>"test", "prefix"=>"test", "time_zone"=>"American Samoa", "upper_corner"=>"51.1,8.23", diff --git a/spec/support/referential.rb b/spec/support/referential.rb index 19590191a..9acdce73a 100644 --- a/spec/support/referential.rb +++ b/spec/support/referential.rb @@ -1,7 +1,7 @@ module ReferentialHelper def first_referential - Referential.find_by!(:name => "first") + Referential.find_by!(:slug => "first") end def first_organisation @@ -64,7 +64,7 @@ RSpec.configure do |config| :referential, prefix: "first", name: "first", - slug: "first_#{Time.now.to_i}", + slug: "first", organisation: organisation, workbench: workbench, objectid_format: "stif_netex" -- cgit v1.2.3