From cf8ea04bec9142f096ccf511d8a134e432a6dcc6 Mon Sep 17 00:00:00 2001 From: Denis Korobitcin Date: Tue, 22 Mar 2016 05:48:32 +0000 Subject: [PATCH] feature(api): added file type and size https://jira.railsc.ru/browse/PC4-16800 Conflicts: app/models/apress/amazon_assets/concerns/base_asset.rb app/views/apress/amazon_assets/api/v1/assets/_asset.json.jbuilder --- .../amazon_assets/concerns/base_asset.rb | 22 +++++++ .../api/v1/assets/_asset.json.jbuilder | 2 +- docs/api/v1/README.md | 8 ++- .../concerns/base_asset_shared_examples.rb | 58 +++++++++++++++++++ .../api/v1/assets/show.json.jbuilder_spec.rb | 6 +- 5 files changed, 91 insertions(+), 5 deletions(-) diff --git a/app/models/apress/amazon_assets/concerns/base_asset.rb b/app/models/apress/amazon_assets/concerns/base_asset.rb index 7c52ab0..35c2a29 100644 --- a/app/models/apress/amazon_assets/concerns/base_asset.rb +++ b/app/models/apress/amazon_assets/concerns/base_asset.rb @@ -56,6 +56,28 @@ def copy_to_remote end end + # Public: Возвращает размер файла, либо с амазона, либо локальное. + # + # Returns Integer. + def file_size + if remote? + remote_file_size + else + local_file_size + end + end + + # Public: Возвращает тип файла, либо с амазона, либо локальное. + # + # Returns String. + def file_content_type + if remote? + remote_content_type + else + local_content_type + end + end + # Подготовим имя файла # # Returns nothing diff --git a/app/views/apress/amazon_assets/api/v1/assets/_asset.json.jbuilder b/app/views/apress/amazon_assets/api/v1/assets/_asset.json.jbuilder index b44fc88..be5dfcd 100644 --- a/app/views/apress/amazon_assets/api/v1/assets/_asset.json.jbuilder +++ b/app/views/apress/amazon_assets/api/v1/assets/_asset.json.jbuilder @@ -1,3 +1,3 @@ -json.(asset, :id, :origin_file_name) +json.(asset, :id, :origin_file_name, :file_size, :file_content_type) json.file asset.file.to_s diff --git a/docs/api/v1/README.md b/docs/api/v1/README.md index 44f73dd..359436c 100644 --- a/docs/api/v1/README.md +++ b/docs/api/v1/README.md @@ -18,9 +18,11 @@ Status: 200 { "asset": { - "id": 9999, - "file": "http://s3.amazonaws.com/pulscen_production/public_assets/000/000/185/2fc7__sports-q-c-1920-1895-3.jpg", - "origin_file_name": "sports-q-c-1920-1895-3.jpg" + "id": 185, + "file": "http://s3.amazonaws.com/pulscen_development/public_assets/000/000/185/2fc7__sports-q-c-1920-1895-3.jpg", + "origin_file_name": "sports-q-c-1920-1895-3.jpg", + "file_size": 395316, + "file_content_type": "image/jpeg" } } ``` diff --git a/spec/models/apress/amazon_assets/concerns/base_asset_shared_examples.rb b/spec/models/apress/amazon_assets/concerns/base_asset_shared_examples.rb index 5dd3997..3e7a0e2 100644 --- a/spec/models/apress/amazon_assets/concerns/base_asset_shared_examples.rb +++ b/spec/models/apress/amazon_assets/concerns/base_asset_shared_examples.rb @@ -415,5 +415,63 @@ def self.valid_content_types it { expect(subject.file_name).to eq subject.remote_file_name } end + + describe '#file_content_type' do + let(:file) { File.new('spec/fixtures/assets/test.png') } + + context 'with both files' do + before do + subject.local = file + subject.remote = file + end + + it { expect(subject.file_content_type).to eq 'image/png' } + end + + context 'with local file only' do + before do + subject.local = file + end + + it { expect(subject.file_content_type).to eq 'image/png' } + end + + context 'with remote file only' do + before do + subject.local = file + end + + it { expect(subject.file_content_type).to eq 'image/png' } + end + end + + describe '#file_size' do + let(:file) { File.new('spec/fixtures/assets/test.png') } + + context 'with both files' do + before do + subject.local = file + subject.remote = file + end + + it { expect(subject.file_size).to eq 827 } + end + + context 'with local file only' do + before do + subject.local = file + end + + it { expect(subject.file_size).to eq 827 } + end + + context 'with remote file only' do + before do + subject.local = file + end + + it { expect(subject.file_size).to eq 827 } + end + end end diff --git a/spec/views/apress/amazon_assets/api/v1/assets/show.json.jbuilder_spec.rb b/spec/views/apress/amazon_assets/api/v1/assets/show.json.jbuilder_spec.rb index 1e64dde..e92d621 100644 --- a/spec/views/apress/amazon_assets/api/v1/assets/show.json.jbuilder_spec.rb +++ b/spec/views/apress/amazon_assets/api/v1/assets/show.json.jbuilder_spec.rb @@ -12,10 +12,14 @@ id file origin_file_name + file_size + file_content_type ), id: {type: 'integer'}, file: {type: 'string'}, - origin_file_name: {type: 'string'} + origin_file_name: {type: 'string'}, + file_size: {type: 'integer'}, + file_content_type: {type: 'string'} } } }.with_indifferent_access