Auto-merge from CI [skip ci]

This commit is contained in:
Continuous Integration
2015-05-29 14:29:23 +10:00
15 changed files with 142 additions and 16 deletions

View File

@@ -1,9 +1,10 @@
Darkswarm.controller "GroupEnterprisesCtrl", ($scope, Search, FilterSelectorsService) ->
Darkswarm.controller "GroupEnterprisesCtrl", ($scope, Search, FilterSelectorsService, EnterpriseModal) ->
$scope.totalActive = FilterSelectorsService.totalActive
$scope.clearAll = FilterSelectorsService.clearAll
$scope.filterText = FilterSelectorsService.filterText
$scope.FilterSelectorsService = FilterSelectorsService
$scope.query = Search.search()
$scope.openModal = EnterpriseModal.open
$scope.activeTaxons = []
$scope.show_profiles = false
$scope.filtersActive = false

View File

@@ -1,8 +1,3 @@
Darkswarm.controller "GroupsCtrl", ($scope, Groups, $anchorScroll, $rootScope) ->
$scope.Groups = Groups
$scope.order = 'position'
#$rootScope.$on "$locationChangeSuccess", (newRoute, oldRoute) ->
#$anchorScroll()
#
#

View File

@@ -9,7 +9,7 @@ module Admin
def move_up
EnterpriseGroup.with_isolation_level_serializable do
@enterprise_group = EnterpriseGroup.find params[:enterprise_group_id]
@enterprise_group = EnterpriseGroup.find_by_permalink params[:enterprise_group_id]
@enterprise_group.move_higher
end
redirect_to main_app.admin_enterprise_groups_path
@@ -17,7 +17,7 @@ module Admin
def move_down
EnterpriseGroup.with_isolation_level_serializable do
@enterprise_group = EnterpriseGroup.find params[:enterprise_group_id]
@enterprise_group = EnterpriseGroup.find_by_permalink params[:enterprise_group_id]
@enterprise_group.move_lower
end
redirect_to main_app.admin_enterprise_groups_path
@@ -33,6 +33,12 @@ module Admin
end
alias_method_chain :build_resource, :address
# Overriding method on Spree's resource controller,
# so that resources are found using permalink
def find_resource
EnterpriseGroup.find_by_permalink(params[:id])
end
private
def load_data

View File

@@ -7,6 +7,6 @@ class GroupsController < BaseController
end
def show
@group = EnterpriseGroup.find params[:id]
@group = EnterpriseGroup.find_by_permalink(params[:id]) || EnterpriseGroup.find(params[:id])
end
end

View File

@@ -299,7 +299,7 @@ class Enterprise < ActiveRecord::Base
test_permalink = test_permalink.parameterize
test_permalink = "my-enterprise" if test_permalink.blank?
existing = Enterprise.select(:permalink).order(:permalink).where("permalink LIKE ?", "#{test_permalink}%").map(&:permalink)
if existing.empty?
unless existing.include?(test_permalink)
test_permalink
else
used_indices = existing.map do |p|

View File

@@ -16,8 +16,12 @@ class EnterpriseGroup < ActiveRecord::Base
validates :name, presence: true
validates :description, presence: true
before_validation :sanitize_permalink
validates :permalink, uniqueness: true, presence: true
attr_accessible :name, :description, :long_description, :on_front_page, :enterprise_ids
attr_accessible :owner_id
attr_accessible :permalink
attr_accessible :logo, :promo_image
attr_accessible :address_attributes
attr_accessible :email, :website, :facebook, :instagram, :linkedin, :twitter
@@ -71,4 +75,31 @@ class EnterpriseGroup < ActiveRecord::Base
address.zipcode.sub!(/^undefined$/, '')
end
def to_param
permalink
end
private
def self.find_available_value(existing, requested)
return requested unless existing.include?(requested)
used_indices = existing.map do |p|
p.slice!(/^#{requested}/)
p.match(/^\d+$/).to_s.to_i
end
options = (1..used_indices.length + 1).to_a - used_indices
requested + options.first.to_s
end
def find_available_permalink(requested)
existing = self.class.where(id: !id).where("permalink LIKE ?", "#{requested}%").pluck(:permalink)
self.class.find_available_value(existing, requested)
end
def sanitize_permalink
if permalink.blank? || permalink_changed?
requested = permalink.presence || permalink_was.presence || name.presence || 'group'
self.permalink = find_available_permalink(requested.parameterize)
end
end
end

View File

@@ -19,3 +19,8 @@
= f.label :enterprise_ids, 'Enterprises'
%br/
= f.collection_select :enterprise_ids, @enterprises, :id, :name, {}, {class: "select2 fullwidth", multiple: true}
= f.field_container :permalink do
= f.label :permalink, "Permalink (unique, no spaces)"
%br/
= f.text_field :permalink

View File

@@ -20,7 +20,7 @@
.row.pad-top{bindonce: true}
.small-12.medium-6.columns
.groups-header
%a{"bo-href-i" => "/groups/{{group.id}}"}
%a{"bo-href-i" => "/groups/{{group.permalink}}"}
%i.ofn-i_035-groups
%span.group-name{"bo-text" => "group.name"}
.small-3.medium-2.columns

View File

@@ -1,5 +1,5 @@
collection @groups
attributes :id, :name, :position, :description, :long_description, :email, :website, :facebook, :instagram, :linkedin, :twitter
attributes :id, :permalink, :name, :position, :description, :long_description, :email, :website, :facebook, :instagram, :linkedin, :twitter
child enterprises: :enterprises do
attributes :id

View File

@@ -9,5 +9,5 @@
%ul.bullet-list
- for group in current_distributor.groups
%li
%a{href: main_app.groups_path + "/#/#group#{group.id}"}
%a{href: main_app.groups_path + "/#{group.permalink}"}
= group.name

View File

@@ -0,0 +1,26 @@
class AddPermalinkToGroups < ActiveRecord::Migration
def up
add_column :enterprise_groups, :permalink, :string
EnterpriseGroup.reset_column_information
EnterpriseGroup.all.each do |group|
counter = 1
permalink = group.name.parameterize
permalink = "my-group-name" if permalink == ""
while EnterpriseGroup.find_by_permalink(permalink) do
permalink = group.name.parameterize + counter.to_s
counter += 1
end
group.update_column :permalink, permalink
end
change_column :enterprise_groups, :permalink, :string, null: false
add_index :enterprise_groups, :permalink, :unique => true
end
def down
remove_column :enterprise_groups, :permalink
end
end

View File

@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20150424151117) do
ActiveRecord::Schema.define(:version => 20150527004427) do
create_table "adjustment_metadata", :force => true do |t|
t.integer "adjustment_id"
@@ -236,10 +236,12 @@ ActiveRecord::Schema.define(:version => 20150424151117) do
t.string "linkedin", :default => "", :null => false
t.string "twitter", :default => "", :null => false
t.integer "owner_id"
t.string "permalink", :null => false
end
add_index "enterprise_groups", ["address_id"], :name => "index_enterprise_groups_on_address_id"
add_index "enterprise_groups", ["owner_id"], :name => "index_enterprise_groups_on_owner_id"
add_index "enterprise_groups", ["permalink"], :name => "index_enterprise_groups_on_permalink", :unique => true
create_table "enterprise_groups_enterprises", :id => false, :force => true do |t|
t.integer "enterprise_group_id"
@@ -619,9 +621,9 @@ ActiveRecord::Schema.define(:version => 20150424151117) do
t.string "email"
t.text "special_instructions"
t.integer "distributor_id"
t.integer "order_cycle_id"
t.string "currency"
t.string "last_ip_address"
t.integer "order_cycle_id"
t.integer "cart_id"
end

View File

@@ -97,7 +97,6 @@ FactoryGirl.define do
factory :enterprise, :class => Enterprise do
owner { FactoryGirl.create :user }
sequence(:name) { |n| "Enterprise #{n}" }
sequence(:permalink) { |n| "enterprise#{n}" }
sells 'any'
description 'enterprise'
long_description '<p>Hello, world!</p><p>This is a paragraph.</p>'
@@ -135,6 +134,7 @@ FactoryGirl.define do
factory :enterprise_group, :class => EnterpriseGroup do
name 'Enterprise group'
sequence(:permalink) { |n| "group#{n}" }
description 'this is a group'
on_front_page false
address { FactoryGirl.build(:address) }

View File

@@ -2,11 +2,32 @@ require 'spec_helper'
describe EnterpriseGroup do
describe "validations" do
it "pass with name, description and address" do
e = EnterpriseGroup.new
e.name = 'Test Group'
e.description = 'A valid test group.'
e.address = build(:address)
e.should be_valid
end
it "is valid when built from factory" do
e = build(:enterprise_group)
e.should be_valid
end
it "replace empty permalink and pass" do
e = build(:enterprise_group, permalink: '')
e.should be_valid
e.permalink.should == e.name.parameterize
end
it "restores permalink and pass" do
e = create(:enterprise_group, permalink: 'p')
e.permalink = ''
e.should be_valid
e.permalink.should == 'p'
end
it "requires a name" do
e = build(:enterprise_group, name: '')
e.should_not be_valid
@@ -60,5 +81,39 @@ describe EnterpriseGroup do
EnterpriseGroup.managed_by(user).should == [eg1]
end
describe "finding a permalink" do
it "finds available permalink" do
existing = []
expect(EnterpriseGroup.find_available_value(existing, "permalink")).to eq "permalink"
end
it "finds available permalink similar to existing" do
existing = ["permalink1"]
expect(EnterpriseGroup.find_available_value(existing, "permalink")).to eq "permalink"
end
it "adds unique number to existing permalinks" do
existing = ["permalink"]
expect(EnterpriseGroup.find_available_value(existing, "permalink")).to eq "permalink1"
existing = ["permalink", "permalink1"]
expect(EnterpriseGroup.find_available_value(existing, "permalink")).to eq "permalink2"
end
it "ignores permalinks with characters after the index value" do
existing = ["permalink", "permalink1", "permalink2xxx"]
expect(EnterpriseGroup.find_available_value(existing, "permalink")).to eq "permalink2"
end
it "finds gaps in the indices of existing permalinks" do
existing = ["permalink", "permalink1", "permalink3"]
expect(EnterpriseGroup.find_available_value(existing, "permalink")).to eq "permalink2"
end
it "finds available indexed permalink" do
existing = ["permalink", "permalink1"]
expect(EnterpriseGroup.find_available_value(existing, "permalink1")).to eq "permalink11"
end
end
end
end

View File

@@ -838,6 +838,11 @@ describe Enterprise do
expect(Enterprise.find_available_permalink("permalink")).to eq "permalink2"
end
it "finds available permalink similar to existing" do
create(:enterprise, permalink: "permalink2xxx")
expect(Enterprise.find_available_permalink("permalink2")).to eq "permalink2"
end
it "finds gaps in the indices of existing permalinks" do
create(:enterprise, permalink: "permalink3")
expect(Enterprise.find_available_permalink("permalink")).to eq "permalink2"