diff --git a/Gemfile b/Gemfile index e958a9389e..cb6f7a8f96 100644 --- a/Gemfile +++ b/Gemfile @@ -28,6 +28,7 @@ gem 'andand' gem 'truncate_html' gem 'representative_view' gem 'rabl' +gem "active_model_serializers" gem 'oj' gem 'deface', :github => 'spree/deface', :ref => '1110a13' gem 'paperclip' diff --git a/Gemfile.lock b/Gemfile.lock index dd09513503..995cc63fbf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -118,6 +118,8 @@ GEM rack-test (~> 0.6.1) sprockets (~> 2.2.1) active_link_to (1.0.0) + active_model_serializers (0.8.1) + activemodel (>= 3.0) active_utils (2.0.2) activesupport (>= 2.3.11) i18n @@ -492,6 +494,7 @@ PLATFORMS ruby DEPENDENCIES + active_model_serializers andand angular-rails-templates angularjs-rails diff --git a/app/helpers/shared_helper.rb b/app/helpers/shared_helper.rb index b552ccd554..1dbf4cf1c7 100644 --- a/app/helpers/shared_helper.rb +++ b/app/helpers/shared_helper.rb @@ -1,12 +1,16 @@ module SharedHelper def inject_enterprises - inject_json "enterprises" , "enterprises" + inject_json_ams "enterprises", Enterprise.visible end def inject_json(name, partial, opts = {}) render partial: "json/injection", locals: {name: name, partial: partial}.merge(opts) end + def inject_json_ams(name, data) + render partial: "json/injection_ams", locals: {name: name, data: data} + end + def distributor_link_class(distributor) cart = current_order(true) @active_distributors ||= Enterprise.distributors_with_active_order_cycles diff --git a/app/serializers/enterprise_serializer.rb b/app/serializers/enterprise_serializer.rb new file mode 100644 index 0000000000..945a6c992d --- /dev/null +++ b/app/serializers/enterprise_serializer.rb @@ -0,0 +1,7 @@ +class EnterpriseSerializer < ActiveModel::Serializer + #attributes :name, :id, :description, :latitude, :longitude, + #:long_description, :website, :instagram, :linkedin, :twitter, + #:facebook, :is_primary_producer, :is_distributor, :phone + + has_many :distributed_taxons, root: :taxons, serializer: Spree::DistributedTaxonSerializer +end diff --git a/app/serializers/spree/address_serializer.rb b/app/serializers/spree/address_serializer.rb new file mode 100644 index 0000000000..b7932a181d --- /dev/null +++ b/app/serializers/spree/address_serializer.rb @@ -0,0 +1,3 @@ +class Spree::AddressSerializer < ActiveModel::Serializer + attributes :id +end diff --git a/app/serializers/spree/distributed_taxon_serializer.rb b/app/serializers/spree/distributed_taxon_serializer.rb new file mode 100644 index 0000000000..aee6bb3a87 --- /dev/null +++ b/app/serializers/spree/distributed_taxon_serializer.rb @@ -0,0 +1,3 @@ +class Spree::DistributedTaxonSerializer < ActiveModel::Serializer + attributes :id, :name, :permalink +end diff --git a/app/views/json/_injection_ams.html.haml b/app/views/json/_injection_ams.html.haml new file mode 100644 index 0000000000..7aa7377a10 --- /dev/null +++ b/app/views/json/_injection_ams.html.haml @@ -0,0 +1,2 @@ +:javascript + angular.module('Darkswarm').value("#{name.to_s}", #{ActiveModel::ArraySerializer.new(data, each_serializer: EnterpriseSerializer).to_json}"}) diff --git a/config/initializers/serializers.rb b/config/initializers/serializers.rb new file mode 100644 index 0000000000..50f03c6591 --- /dev/null +++ b/config/initializers/serializers.rb @@ -0,0 +1,2 @@ +ActiveModel::ArraySerializer.root = false +ActiveModel::Serializer.root = false