diff --git a/app/controllers/api/v1/points_controller.rb b/app/controllers/api/v1/points_controller.rb index e80d769a..a70dabdc 100644 --- a/app/controllers/api/v1/points_controller.rb +++ b/app/controllers/api/v1/points_controller.rb @@ -31,6 +31,6 @@ class Api::V1::PointsController < ApiController private def point_serializer - params[:slim] == 'true' ? SlimPointSerializer : PointSerializer + params[:slim] == 'true' ? Api::SlimPointSerializer : Api::PointSerializer end end diff --git a/app/serializers/api/point_serializer.rb b/app/serializers/api/point_serializer.rb new file mode 100644 index 00000000..0f875575 --- /dev/null +++ b/app/serializers/api/point_serializer.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class Api::PointSerializer < PointSerializer + EXCLUDED_ATTRIBUTES = %w[created_at updated_at visit_id import_id user_id raw_data].freeze + + def call + point.attributes.except(*EXCLUDED_ATTRIBUTES) + end +end diff --git a/app/serializers/slim_point_serializer.rb b/app/serializers/api/slim_point_serializer.rb similarity index 89% rename from app/serializers/slim_point_serializer.rb rename to app/serializers/api/slim_point_serializer.rb index 9d6a0450..76436116 100644 --- a/app/serializers/slim_point_serializer.rb +++ b/app/serializers/api/slim_point_serializer.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class SlimPointSerializer +class Api::SlimPointSerializer def initialize(point) @point = point end diff --git a/app/serializers/point_serializer.rb b/app/serializers/point_serializer.rb index 3bab9501..270e3e25 100644 --- a/app/serializers/point_serializer.rb +++ b/app/serializers/point_serializer.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class PointSerializer - EXCLUDED_ATTRIBUTES = %w[created_at updated_at visit_id import_id user_id raw_data].freeze + EXCLUDED_ATTRIBUTES = %w[created_at updated_at visit_id id import_id user_id raw_data].freeze def initialize(point) @point = point diff --git a/app/services/exports/create.rb b/app/services/exports/create.rb index 5fabaf87..36d2cca2 100644 --- a/app/services/exports/create.rb +++ b/app/services/exports/create.rb @@ -72,8 +72,9 @@ class Exports::Create end def create_export_file(data) - dir_path = Rails.root.join('public', 'exports') + dir_path = Rails.root.join('public/exports') Dir.mkdir(dir_path) unless Dir.exist?(dir_path) + file_path = dir_path.join("#{export.name}.#{file_format}") File.open(file_path, 'w') { |file| file.write(data) } diff --git a/spec/serializers/api/point_serializer_spec.rb b/spec/serializers/api/point_serializer_spec.rb new file mode 100644 index 00000000..8e7b51e5 --- /dev/null +++ b/spec/serializers/api/point_serializer_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Api::PointSerializer do + describe '#call' do + subject(:serializer) { described_class.new(point).call } + + let(:point) { create(:point) } + let(:expected_json) { point.attributes.except(*Api::PointSerializer::EXCLUDED_ATTRIBUTES) } + + it 'returns JSON with correct attributes' do + expect(serializer.to_json).to eq(expected_json.to_json) + end + + it 'does not include excluded attributes' do + expect(serializer).not_to include(*Api::PointSerializer::EXCLUDED_ATTRIBUTES) + end + end +end diff --git a/spec/serializers/api/slim_point_serializer_spec.rb b/spec/serializers/api/slim_point_serializer_spec.rb new file mode 100644 index 00000000..759713b3 --- /dev/null +++ b/spec/serializers/api/slim_point_serializer_spec.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Api::SlimPointSerializer do + describe '#call' do + subject(:serializer) { described_class.new(point).call } + + let(:point) { create(:point) } + let(:expected_json) { point.attributes.slice('id', 'latitude', 'longitude', 'timestamp') } + + it 'returns JSON with correct attributes' do + expect(serializer.to_json).to eq(expected_json.to_json) + end + end +end