From f0c6f64223d0a24ffd8976707e2259a56cc1ec11 Mon Sep 17 00:00:00 2001 From: Steve Kenworthy Date: Wed, 27 Nov 2019 11:36:35 +0800 Subject: [PATCH] Playing with fast_jsonapi --- Gemfile | 1 + Gemfile.lock | 3 + .../api/v1/fast_serializers/image.rb | 40 ++++++++++++++ .../api/v1/fast_serializers/package.rb | 55 +++++++++++++++++++ 4 files changed, 99 insertions(+) create mode 100644 app/serializers/api/v1/fast_serializers/image.rb create mode 100644 app/serializers/api/v1/fast_serializers/package.rb diff --git a/Gemfile b/Gemfile index 9ef47d14d..6c300b6fd 100755 --- a/Gemfile +++ b/Gemfile @@ -61,6 +61,7 @@ gem 'slack-ruby-client' gem 'whenever', '~> 0.9.5', require: false gem 'sendgrid-ruby' gem 'fake_email_validator' +gem 'fast_jsonapi' group :development do gem 'spring' diff --git a/Gemfile.lock b/Gemfile.lock index 250f8d292..744d909f3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -185,6 +185,8 @@ GEM multipart-post (>= 1.2, < 3) faraday_middleware (0.12.2) faraday (>= 0.7.4, < 1.0) + fast_jsonapi (1.5) + activesupport (>= 4.2) ffaker (2.10.0) ffi (1.9.25) foreman (0.85.0) @@ -484,6 +486,7 @@ DEPENDENCIES execjs factory_bot_rails fake_email_validator + fast_jsonapi ffaker foreman go_go_van_api! diff --git a/app/serializers/api/v1/fast_serializers/image.rb b/app/serializers/api/v1/fast_serializers/image.rb new file mode 100644 index 000000000..8fd237dcd --- /dev/null +++ b/app/serializers/api/v1/fast_serializers/image.rb @@ -0,0 +1,40 @@ +module Api::V1::FastSerializers + class Image + + include FastJsonapi::ObjectSerializer + + set_type :image + + attributes :id, :favourite, :cloudinary_id, :item_id, :angle, :package_id + + # module Api::V1 + # class ImageSerializer < ApplicationSerializer + # embed :ids, include: true + + # attributes :id, :favourite, :cloudinary_id, :item_id, :angle, :package_id + + # def item_id + # object.imageable_id if object.imageable_type == "Item" + # end + + # def item_id__sql + # "case when imageable_type = 'Item' then imageable_id end" + # end + + # def package_id + # object.imageable_id if object.imageable_type == "Package" + # end + + # def package_id__sql + # "case when imageable_type = 'Package' then imageable_id end" + # end + + # def include_package_id? + # !@options[:is_browse_app] + # end + # end + # end + + + end +end \ No newline at end of file diff --git a/app/serializers/api/v1/fast_serializers/package.rb b/app/serializers/api/v1/fast_serializers/package.rb new file mode 100644 index 000000000..7b62b8c35 --- /dev/null +++ b/app/serializers/api/v1/fast_serializers/package.rb @@ -0,0 +1,55 @@ +# TODO +# turn fields on and off via runtime state (e.g. security permissions) +# nested + +module Api::V1::FastSerializers + class Package + + include FastJsonapi::ObjectSerializer + + set_type :package + + attributes :id, :quantity, :length, :width, :height, :weight, :pieces, :notes, + :item_id, :state, :received_at, :rejected_at, :inventory_number, + :created_at, :updated_at, :package_type_id, :sent_on, + :offer_id, :designation_name, :grade, :donor_condition_id, :received_quantity, + :allow_web_publish, :detail_type, :detail_id, :images + attribute :sent_on, &:stockit_sent_on + attribute :designation_id, &:order_id + + has_many :images, serializer: :image + + # has_one :package_type #, serializer: PackageTypeSerializer + # has_one :item #, serializer: BrowseItemSerializer + # has_many :packages_locations #, serializer: PackagesLocationSerializer + # has_many :orders_packages #, serializer: OrdersPackageSerializer + + end +end + + # def is_browse_app? + # @options[:is_browse_app] || @options[:browse_order] + # end + + # def not_browse_app? + # !is_browse_app? + # end + + # def include_orders_packages? + # @options[:include_orders_packages] + # end + + # alias_method :include_packages_locations?, :include_orders_packages? + + # %w[include_item? include_stockit_sent_on? + # include_order_id?].each do |method| + # alias_method method.to_sym, :is_browse_app? + # end + + # %w[include_state? include_received_at? include_rejected_at? + # include_designation_id? include_sent_on? + # include_offer_id? include_designation_name? + # include_received_quantity?].each do |method| + # alias_method method.to_sym, :not_browse_app? + # end + # end