Fix groups index page

This commit is contained in:
Matt-Yorkley
2019-05-09 10:25:26 +01:00
parent aca1f92060
commit 4ec46c2db6
6 changed files with 53 additions and 20 deletions

View File

@@ -1,14 +1,3 @@
Darkswarm.factory 'Groups', (groups, Enterprises, Dereferencer) ->
Darkswarm.factory 'Groups', (groups) ->
new class Groups
groups: groups
groups_by_id: {}
constructor: ->
for group in @groups
@groups_by_id[group.id] = group
@dereference()
dereference: ->
for group in @groups
Dereferencer.dereference group.enterprises, Enterprises.enterprises_by_id
for enterprise in Enterprises.enterprises
Dereferencer.dereference enterprise.groups, @groups_by_id

View File

@@ -1,10 +1,6 @@
class GroupsController < BaseController
layout 'darkswarm'
def index
@groups = EnterpriseGroup.on_front_page.by_position
end
def show
enable_embedded_shopfront
@hide_menu = true if @shopfront_layout == 'embedded'

View File

@@ -12,6 +12,16 @@ module InjectionHelper
)
end
def inject_groups
select_only = required_attributes EnterpriseGroup, Api::GroupListSerializer
inject_json_ams(
'groups',
EnterpriseGroup.on_front_page.by_position.select(select_only).includes(address: :state).all,
Api::GroupListSerializer
)
end
def inject_enterprise_shopfront_list
select_only = required_attributes Enterprise, Api::EnterpriseShopfrontListSerializer

View File

@@ -0,0 +1,16 @@
module Api
class GroupListSerializer < ActiveModel::Serializer
attributes :id, :name, :permalink, :email, :website, :facebook, :instagram,
:linkedin, :twitter, :enterprises, :state, :address_id
def state
object.address.state.abbr
end
def enterprises
ActiveModel::ArraySerializer.new(
object.enterprises, each_serializer: Api::EnterpriseThinSerializer
)
end
end
end

View File

@@ -1,10 +1,7 @@
- content_for(:title) do
= t :groups_title
= inject_enterprises
:javascript
angular.module('Darkswarm').value('groups', #{render partial: "json/groups", object: @groups})
= inject_groups
#groups.pad-top.footer-pad{"ng-controller" => "GroupsCtrl"}
.row

View File

@@ -0,0 +1,25 @@
require 'spec_helper'
describe Api::GroupListSerializer do
let!(:group) { create(:enterprise_group) }
let!(:producer) { create(:supplier_enterprise) }
let(:serializer) { Api::GroupListSerializer.new group }
before do
group.enterprises << producer
end
it "serializes group attributes" do
expect(serializer.serializable_hash[:name]).to match group.name
end
it "serializes abbreviated state" do
expect(serializer.serializable_hash[:state]).to eq group.address.state.abbr
end
it "serialises an array of enterprises" do
expect(serializer.serializable_hash[:enterprises]).to be_a ActiveModel::ArraySerializer
expect(serializer.serializable_hash[:enterprises].to_json).to match producer.name
end
end