tp_common 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 13d2cbc9467bcaee1a9a7af73e0bfb00bf2e9894566bba54e3d16dbdf0f82d16
4
- data.tar.gz: 696b538814ac4e9310620d4765707a7375af377906a780e33c86d267168b260a
3
+ metadata.gz: 6ffe086d077ec950e5eb7cab45373b4ad12efc85a827016a53356aab033e3182
4
+ data.tar.gz: be6fffbe4ae86f5162c7e77ec893c9d68ec71d0d17b172d7061a9dace8d09763
5
5
  SHA512:
6
- metadata.gz: 8391124ec637bc99aecb83b052d0b5bdf03bf5a5ac467a513ca98f41e638d3746888af7eb9276d8535853a34d7fe1c4d4512d19b499cf5d09a0ad94cbee2fa53
7
- data.tar.gz: aa537440ba5a50225284356c93a22612c96e33543b5e2ca62a1a0b5577e7c273500cb860c1a6d31701927c27de424a40d4e671106b1cbc56228603dd5618c061
6
+ metadata.gz: 97786a1e6a6ea34a257d966dbaee0b51c4fb2f96b7afdfdcc064abeb0f62bbd8453dbfaeb0cb4b051b477ed35f3ec743b7474feb038d87d06b454464b5389e36
7
+ data.tar.gz: 2bd58921e8e8cc436d3434367ec7b73743d40640a2bd8e6fb585419ecbdc3714db152a20a8a94a999ed4762e4a8232d56bb11f3ac2f65270f57df45721ddf370
data/README.md CHANGED
@@ -5,6 +5,12 @@
5
5
 
6
6
  This gem contains common libraries which shared between projects used in TINYpulse.
7
7
 
8
+ Currently, we have:
9
+
10
+ 1. Timezone helpers
11
+ 2. Asset loader
12
+ 3. File storage
13
+
8
14
  ## Rails versions
9
15
 
10
16
  From v0.2.0 `tp_common` support only rails > 4. Mostly on ActiveSupport DateTime functions and `Rails.config_for` method.
@@ -1,8 +1,11 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- tp_common (0.3.0)
4
+ tp_common (0.4.0)
5
5
  activesupport (>= 4.2.0, <= 5.2)
6
+ aws-sdk-s3 (~> 1.19)
7
+ fog-aws (~> 2.0)
8
+ mime-types (~> 3.2)
6
9
  tzinfo (~> 1.2, >= 1.2.0)
7
10
 
8
11
  GEM
@@ -47,6 +50,21 @@ GEM
47
50
  rake
48
51
  thor (>= 0.14.0)
49
52
  arel (6.0.4)
53
+ aws-eventstream (1.0.1)
54
+ aws-partitions (1.111.0)
55
+ aws-sdk-core (3.38.0)
56
+ aws-eventstream (~> 1.0)
57
+ aws-partitions (~> 1.0)
58
+ aws-sigv4 (~> 1.0)
59
+ jmespath (~> 1.0)
60
+ aws-sdk-kms (1.11.0)
61
+ aws-sdk-core (~> 3, >= 3.26.0)
62
+ aws-sigv4 (~> 1.0)
63
+ aws-sdk-s3 (1.23.1)
64
+ aws-sdk-core (~> 3, >= 3.26.0)
65
+ aws-sdk-kms (~> 1)
66
+ aws-sigv4 (~> 1.0)
67
+ aws-sigv4 (1.0.3)
50
68
  builder (3.2.3)
51
69
  byebug (9.1.0)
52
70
  coderay (1.1.2)
@@ -54,19 +72,42 @@ GEM
54
72
  crass (1.0.3)
55
73
  diff-lcs (1.3)
56
74
  erubis (2.7.0)
75
+ excon (0.62.0)
76
+ fog-aws (2.0.1)
77
+ fog-core (~> 1.38)
78
+ fog-json (~> 1.0)
79
+ fog-xml (~> 0.1)
80
+ ipaddress (~> 0.8)
81
+ fog-core (1.45.0)
82
+ builder
83
+ excon (~> 0.58)
84
+ formatador (~> 0.2)
85
+ fog-json (1.2.0)
86
+ fog-core
87
+ multi_json (~> 1.10)
88
+ fog-xml (0.1.3)
89
+ fog-core
90
+ nokogiri (>= 1.5.11, < 2.0.0)
91
+ formatador (0.2.5)
57
92
  globalid (0.4.1)
58
93
  activesupport (>= 4.2.0)
59
94
  i18n (0.9.1)
60
95
  concurrent-ruby (~> 1.0)
96
+ ipaddress (0.8.3)
97
+ jmespath (1.4.0)
61
98
  loofah (2.1.1)
62
99
  crass (~> 1.0.2)
63
100
  nokogiri (>= 1.5.9)
64
101
  mail (2.7.0)
65
102
  mini_mime (>= 0.1.1)
66
103
  method_source (0.9.0)
104
+ mime-types (3.2.2)
105
+ mime-types-data (~> 3.2015)
106
+ mime-types-data (3.2018.0812)
67
107
  mini_mime (1.0.0)
68
108
  mini_portile2 (2.3.0)
69
109
  minitest (5.11.1)
110
+ multi_json (1.13.1)
70
111
  nokogiri (1.8.1)
71
112
  mini_portile2 (~> 2.3.0)
72
113
  pry (0.11.3)
@@ -1,8 +1,11 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- tp_common (0.3.0)
4
+ tp_common (0.4.0)
5
5
  activesupport (>= 4.2.0, <= 5.2)
6
+ aws-sdk-s3 (~> 1.19)
7
+ fog-aws (~> 2.0)
8
+ mime-types (~> 3.2)
6
9
  tzinfo (~> 1.2, >= 1.2.0)
7
10
 
8
11
  GEM
@@ -50,6 +53,21 @@ GEM
50
53
  rake
51
54
  thor (>= 0.14.0)
52
55
  arel (7.1.4)
56
+ aws-eventstream (1.0.1)
57
+ aws-partitions (1.111.0)
58
+ aws-sdk-core (3.38.0)
59
+ aws-eventstream (~> 1.0)
60
+ aws-partitions (~> 1.0)
61
+ aws-sigv4 (~> 1.0)
62
+ jmespath (~> 1.0)
63
+ aws-sdk-kms (1.11.0)
64
+ aws-sdk-core (~> 3, >= 3.26.0)
65
+ aws-sigv4 (~> 1.0)
66
+ aws-sdk-s3 (1.23.1)
67
+ aws-sdk-core (~> 3, >= 3.26.0)
68
+ aws-sdk-kms (~> 1)
69
+ aws-sigv4 (~> 1.0)
70
+ aws-sigv4 (1.0.3)
53
71
  builder (3.2.3)
54
72
  byebug (9.1.0)
55
73
  coderay (1.1.2)
@@ -57,19 +75,42 @@ GEM
57
75
  crass (1.0.3)
58
76
  diff-lcs (1.3)
59
77
  erubis (2.7.0)
78
+ excon (0.62.0)
79
+ fog-aws (2.0.1)
80
+ fog-core (~> 1.38)
81
+ fog-json (~> 1.0)
82
+ fog-xml (~> 0.1)
83
+ ipaddress (~> 0.8)
84
+ fog-core (1.45.0)
85
+ builder
86
+ excon (~> 0.58)
87
+ formatador (~> 0.2)
88
+ fog-json (1.2.0)
89
+ fog-core
90
+ multi_json (~> 1.10)
91
+ fog-xml (0.1.3)
92
+ fog-core
93
+ nokogiri (>= 1.5.11, < 2.0.0)
94
+ formatador (0.2.5)
60
95
  globalid (0.4.1)
61
96
  activesupport (>= 4.2.0)
62
97
  i18n (0.9.1)
63
98
  concurrent-ruby (~> 1.0)
99
+ ipaddress (0.8.3)
100
+ jmespath (1.4.0)
64
101
  loofah (2.1.1)
65
102
  crass (~> 1.0.2)
66
103
  nokogiri (>= 1.5.9)
67
104
  mail (2.7.0)
68
105
  mini_mime (>= 0.1.1)
69
106
  method_source (0.9.0)
107
+ mime-types (3.2.2)
108
+ mime-types-data (~> 3.2015)
109
+ mime-types-data (3.2018.0812)
70
110
  mini_mime (1.0.0)
71
111
  mini_portile2 (2.3.0)
72
112
  minitest (5.11.1)
113
+ multi_json (1.13.1)
73
114
  nio4r (2.2.0)
74
115
  nokogiri (1.8.1)
75
116
  mini_portile2 (~> 2.3.0)
data/lib/tp_common.rb CHANGED
@@ -17,3 +17,4 @@ end
17
17
  require "tp_common/timezones"
18
18
  require "tp_common/timezones/zone"
19
19
  require "tp_common/assets_loader"
20
+ require "tp_common/file_storage"
@@ -0,0 +1,38 @@
1
+ require 'aws-sdk-s3'
2
+
3
+ module TpCommon
4
+ module FileStorage
5
+ Configuration = Struct.new(:aws_region,
6
+ :aws_key_id,
7
+ :aws_secret_key,
8
+ :key_prefix,
9
+ :default_bucket)
10
+
11
+ def self.configure
12
+ @configuration = Configuration.new('us-east-1', nil, nil, nil, nil)
13
+
14
+ yield(@configuration)
15
+
16
+ Aws.config.update({
17
+ region: @configuration.aws_region,
18
+ credentials: Aws::Credentials.new(
19
+ @configuration.aws_key_id,
20
+ @configuration.aws_secret_key)
21
+ })
22
+ end
23
+
24
+ def self.key_prefix
25
+ raise ::StandardError.new('FileStorage is not config yet.') unless defined?(@configuration)
26
+
27
+ @configuration.key_prefix
28
+ end
29
+
30
+ def self.configuration
31
+ raise ::StandardError.new('FileStorage is not config yet.') unless defined?(@configuration)
32
+
33
+ @configuration
34
+ end
35
+ end
36
+ end
37
+
38
+ require 'tp_common/file_storage/base'
@@ -0,0 +1,40 @@
1
+ require 'fog/aws'
2
+ require 'tp_common/file_storage/fog_connection'
3
+ require 'tp_common/file_storage/key_protector'
4
+
5
+ module TpCommon
6
+ module FileStorage
7
+ # Prepare connection, key protector, consts for working wilt s3 files
8
+ class Base
9
+ MAX_RETRIES = 3
10
+
11
+ include TpCommon::FileStorage::FogConnection
12
+ include TpCommon::FileStorage::KeyProtector
13
+
14
+ def initialize(directory_path = nil)
15
+ @directory_path = directory_path || TpCommon::FileStorage.configuration.default_bucket
16
+ end
17
+
18
+ private
19
+
20
+ # Connection to S3, config in initializer
21
+ def connection
22
+ @connection ||= create_connection
23
+ end
24
+
25
+ # Fog directory to bucket config in constructor
26
+ def directory
27
+ @directory ||= connection.directories.get(@directory_path)
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ require 'tp_common/file_storage/errors/failed_to_download'
34
+ require 'tp_common/file_storage/errors/file_not_found'
35
+
36
+ require 'tp_common/file_storage/cleaners/cleaner'
37
+ require 'tp_common/file_storage/direct_uploaders/public'
38
+ require 'tp_common/file_storage/downloaders/private'
39
+ require 'tp_common/file_storage/uploaders/private'
40
+ require 'tp_common/file_storage/uploaders/public'
@@ -0,0 +1,16 @@
1
+ module TpCommon
2
+ module FileStorage
3
+ module Cleaners
4
+ # Delete files on file storage service.
5
+ # Please handle with care
6
+ #
7
+ class Cleaner < FileStorage::Base
8
+ # Expect an array of file key to delete.
9
+ #
10
+ def clean(files)
11
+ connection.delete_multiple_objects(@directory_path, files.map{|file_key| mask_key(file_key) })
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,49 @@
1
+ module TpCommon
2
+ module FileStorage
3
+ module DirectUploaders
4
+ # Prepare a presigned url to upload diectly to storage service
5
+ # Use in case content to upload is outside of system/server,
6
+ # we shoud use this to avoid delay because of content stream over our server
7
+ #
8
+ class Public < FileStorage::Base
9
+ def initialize(bucket_name = nil)
10
+ @bucket_name = bucket_name || TpCommon::FileStorage.configuration.default_bucket
11
+ @bucket = Aws::S3::Bucket.new(name: @bucket_name)
12
+ end
13
+
14
+ # Presigned POST url, use for form POST with data. Use when file name isn't decided yet
15
+ # Request body is form data
16
+ # Return a hash
17
+ #
18
+ def presigned_post(file_key)
19
+ s3_direct_post = @bucket.presigned_post(key: mask_key(file_key),
20
+ success_action_status: '201',
21
+ acl: 'public-read')
22
+ {
23
+ host: URI(s3_direct_post.url).host,
24
+ bucket: @bucket_name,
25
+ url: "#{s3_direct_post.url}/",
26
+ form_data: s3_direct_post.fields
27
+ }
28
+ end
29
+
30
+ # Presigned PUT url, use for PUT file to storage service.
31
+ # File name must be matched, and request body is file content
32
+ # Return a hash
33
+ #
34
+ def presigned_put(file_key, mime_type, expires_in = 900)
35
+ @bucket.object(mask_key(file_key)).presigned_url(:put,
36
+ content_type: mime_type,
37
+ acl: 'public-read',
38
+ expires_in: expires_in)
39
+ end
40
+
41
+ # Public URL from key for uploaded file
42
+ #
43
+ def url(file_key)
44
+ @bucket.object(mask_key(file_key))&.public_url(path_style: true)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,31 @@
1
+ module TpCommon
2
+ module FileStorage
3
+ module Downloaders
4
+ # Pull and read a files from storage service.
5
+ # Included retry mechanism.
6
+ #
7
+ class Private < FileStorage::Base
8
+ # Pull a file with provided key.
9
+ # Return a Fog file object https://www.rubydoc.info/github/fog/fog-aws/Fog/Storage/AWS/File
10
+ #
11
+ def download(file_key)
12
+ retried_count = 0
13
+ begin
14
+ directory.files.get(mask_key(file_key)).tap do |file|
15
+ raise FileStorage::Errors::FileNotFound.new("Could not find file: #{file_key}") unless file
16
+ end
17
+ rescue ::Fog::Errors::Error => error
18
+ retried_count += 1
19
+ retry if retried_count < MAX_RETRIES
20
+ raise FileStorage::Errors::FailedToDownload.new("Failed to download file via fog: #{error.message}")
21
+ end
22
+ end
23
+
24
+ # Same as #download but return file content
25
+ def read(file_key)
26
+ download(mask_key(file_key)).body
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,8 @@
1
+ module TpCommon
2
+ module FileStorage
3
+ module Errors
4
+ class FailedToDownload < ::StandardError
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module TpCommon
2
+ module FileStorage
3
+ module Errors
4
+ class FileNotFound < ::StandardError
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,18 @@
1
+ require 'fog/aws'
2
+
3
+ module TpCommon
4
+ module FileStorage
5
+ # Provide default connection to file storage service
6
+ #
7
+ module FogConnection
8
+
9
+ private
10
+
11
+ def create_connection
12
+ Fog::Storage.new(provider: 'AWS',
13
+ aws_access_key_id: FileStorage.configuration.aws_key_id,
14
+ aws_secret_access_key: FileStorage.configuration.aws_secret_key)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,25 @@
1
+ module TpCommon
2
+ module FileStorage
3
+ # Provide mechanism to protect keys conflict using prefix
4
+ # This module supports using 1 bucket for multiple environment, just have different prefix key
5
+ # Although it's recommended in real usage, using in development env is recommended.
6
+ # To avoid issue local uploading works but trouble when work with S3
7
+ module KeyProtector
8
+
9
+ private
10
+
11
+ # Mask key with s3 dev prefix. !!! Make sure it's idempotent
12
+ #
13
+ def mask_key(key)
14
+ return key if !FileStorage.key_prefix
15
+
16
+ # Trim and remove redundant slash
17
+ key = key.gsub(/^\/*/, '').gsub(/\/*$/, '').gsub(/\/+/, '/')
18
+ regex = Regexp.new("^#{FileStorage.key_prefix}/")
19
+ return key if regex.match(key)
20
+
21
+ "#{FileStorage.key_prefix}/#{key}"
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,39 @@
1
+ module TpCommon
2
+ module FileStorage
3
+ module Uploaders
4
+ # Upload a content to file storage used for private purpose like user import. export files
5
+ # Use in case content to upload is inside of system/server
6
+ #
7
+ class Private < FileStorage::Base
8
+ # Upload content to file_key
9
+ #
10
+ def upload(file_key, content, content_type)
11
+ retry_count = 0
12
+
13
+ begin
14
+ directory.files.create(
15
+ 'key' => mask_key(file_key),
16
+ "body" => content,
17
+ 'public' => false,
18
+ 'Content-Type' => content_type,
19
+ "Content-Disposition" => "attachment;filename=\"#{mask_key(file_key)}\""
20
+ )
21
+ rescue StandardError => e
22
+ retry_count += 1
23
+ retry if retry_count < MAX_RETRIES
24
+ raise e
25
+ end
26
+
27
+ mask_key(file_key)
28
+ end
29
+ # Get url from key of file #upload above to provide to outside.
30
+ # To get file content to use inside system, please use Downloaders::Private instead
31
+ # As private file, link has a ttl, default 1 week.
32
+ #
33
+ def url(file_key, link_ttl = 1.week.from_now)
34
+ directory.files.get_https_url(mask_key(file_key), link_ttl)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,36 @@
1
+ module TpCommon
2
+ module FileStorage
3
+ module Uploaders
4
+ # Upload a content to file storage used to public like avatar, logo
5
+ # Use in case content to upload is inside of system/server
6
+ #
7
+ class Public < FileStorage::Base
8
+ # Upload content to file_key
9
+ # Currently, _content_type is ignore but kept for compatible. Will be removed in next release
10
+ #
11
+ def upload(file_key, content, _content_type = nil)
12
+ retry_count = 0
13
+
14
+ begin
15
+ directory.files.create(
16
+ key: mask_key(file_key),
17
+ body: content,
18
+ public: true)
19
+ rescue StandardError => e
20
+ retry_count += 1
21
+ retry if retry_count < MAX_RETRIES
22
+ raise e
23
+ end
24
+
25
+ mask_key(file_key)
26
+ end
27
+
28
+ # Get public url from key of file #upload above
29
+ #
30
+ def url(file_key)
31
+ directory.files.get(mask_key(file_key))&.public_url
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -8,11 +8,12 @@ module TpCommon
8
8
  if defined?(::Rails::Railtie)
9
9
  begin
10
10
  TpCommon::Timezones.const_set("LIST_ZONES", Rails.application.config_for(:timezones))
11
+ puts "[TpCommon::Timezones::Config] Message-3: Use custom timezones in project config/timezones.yml"
11
12
  return
12
13
  rescue NameError, NoMethodError
13
- puts "Couldn't load Rails or config methods. Use default."
14
+ puts "[TpCommon::Timezones::Config] Message-1: Use default timezones in tp_common/timezones/config/timezones.yml"
14
15
  rescue StandardError
15
- puts "Couldn't load file config/timezones.yml. Use default."
16
+ puts "[TpCommon::Timezones::Config] Message-2: Use default timezones in tp_common/timezones/config/timezones.yml"
16
17
  end
17
18
  end
18
19
 
@@ -1,3 +1,3 @@
1
1
  module TpCommon
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/tp_common.gemspec CHANGED
@@ -37,4 +37,9 @@ Gem::Specification.new do |spec|
37
37
 
38
38
  spec.add_runtime_dependency "tzinfo", '~> 1.2', '>= 1.2.0'
39
39
  spec.add_runtime_dependency "activesupport", '<= 5.2', '>= 4.2.0'
40
+ spec.add_runtime_dependency 'fog-aws', '~> 2.0'
41
+ # fog-aws need a mime-type tool
42
+ spec.add_runtime_dependency 'mime-types', '~> 3.2'
43
+
44
+ spec.add_runtime_dependency 'aws-sdk-s3', '~> 1.19'
40
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tp_common
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - TINYpulse Devops
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-31 00:00:00.000000000 Z
11
+ date: 2018-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -84,62 +84,104 @@ dependencies:
84
84
  name: appraisal
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '2.2'
90
87
  - - ">="
91
88
  - !ruby/object:Gem::Version
92
89
  version: 2.2.0
90
+ - - "~>"
91
+ - !ruby/object:Gem::Version
92
+ version: '2.2'
93
93
  type: :development
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - "~>"
98
- - !ruby/object:Gem::Version
99
- version: '2.2'
100
97
  - - ">="
101
98
  - !ruby/object:Gem::Version
102
99
  version: 2.2.0
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '2.2'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: tzinfo
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '1.2'
110
107
  - - ">="
111
108
  - !ruby/object:Gem::Version
112
109
  version: 1.2.0
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: '1.2'
113
113
  type: :runtime
114
114
  prerelease: false
115
115
  version_requirements: !ruby/object:Gem::Requirement
116
116
  requirements:
117
- - - "~>"
118
- - !ruby/object:Gem::Version
119
- version: '1.2'
120
117
  - - ">="
121
118
  - !ruby/object:Gem::Version
122
119
  version: 1.2.0
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: '1.2'
123
123
  - !ruby/object:Gem::Dependency
124
124
  name: activesupport
125
125
  requirement: !ruby/object:Gem::Requirement
126
126
  requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: 4.2.0
127
130
  - - "<="
128
131
  - !ruby/object:Gem::Version
129
132
  version: '5.2'
133
+ type: :runtime
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
130
137
  - - ">="
131
138
  - !ruby/object:Gem::Version
132
139
  version: 4.2.0
140
+ - - "<="
141
+ - !ruby/object:Gem::Version
142
+ version: '5.2'
143
+ - !ruby/object:Gem::Dependency
144
+ name: fog-aws
145
+ requirement: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '2.0'
133
150
  type: :runtime
134
151
  prerelease: false
135
152
  version_requirements: !ruby/object:Gem::Requirement
136
153
  requirements:
137
- - - "<="
154
+ - - "~>"
138
155
  - !ruby/object:Gem::Version
139
- version: '5.2'
140
- - - ">="
156
+ version: '2.0'
157
+ - !ruby/object:Gem::Dependency
158
+ name: mime-types
159
+ requirement: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - "~>"
141
162
  - !ruby/object:Gem::Version
142
- version: 4.2.0
163
+ version: '3.2'
164
+ type: :runtime
165
+ prerelease: false
166
+ version_requirements: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - "~>"
169
+ - !ruby/object:Gem::Version
170
+ version: '3.2'
171
+ - !ruby/object:Gem::Dependency
172
+ name: aws-sdk-s3
173
+ requirement: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - "~>"
176
+ - !ruby/object:Gem::Version
177
+ version: '1.19'
178
+ type: :runtime
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - "~>"
183
+ - !ruby/object:Gem::Version
184
+ version: '1.19'
143
185
  description: Common libraries used for TINYpulse apps. i.e. Timezone, ...
144
186
  email:
145
187
  - devops@tinypulse.com
@@ -167,6 +209,17 @@ files:
167
209
  - gemfiles/rails_5.gemfile.lock
168
210
  - lib/tp_common.rb
169
211
  - lib/tp_common/assets_loader.rb
212
+ - lib/tp_common/file_storage.rb
213
+ - lib/tp_common/file_storage/base.rb
214
+ - lib/tp_common/file_storage/cleaners/cleaner.rb
215
+ - lib/tp_common/file_storage/direct_uploaders/public.rb
216
+ - lib/tp_common/file_storage/downloaders/private.rb
217
+ - lib/tp_common/file_storage/errors/failed_to_download.rb
218
+ - lib/tp_common/file_storage/errors/file_not_found.rb
219
+ - lib/tp_common/file_storage/fog_connection.rb
220
+ - lib/tp_common/file_storage/key_protector.rb
221
+ - lib/tp_common/file_storage/uploaders/private.rb
222
+ - lib/tp_common/file_storage/uploaders/public.rb
170
223
  - lib/tp_common/railtie.rb
171
224
  - lib/tp_common/timezones.rb
172
225
  - lib/tp_common/timezones/config.rb
@@ -195,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
195
248
  version: '0'
196
249
  requirements: []
197
250
  rubyforge_project:
198
- rubygems_version: 2.7.7
251
+ rubygems_version: 2.7.8
199
252
  signing_key:
200
253
  specification_version: 4
201
254
  summary: Common libraries used for TINYpulse apps