platformx 0.0.7 → 0.0.8
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 +4 -4
- data/.gitignore +3 -0
- data/Gemfile +4 -0
- data/README.md +20 -1
- data/lib/platformx/auth.rb +68 -61
- data/lib/platformx/aws.rb +63 -63
- data/lib/platformx/date.rb +73 -70
- data/lib/platformx/faker.rb +115 -97
- data/lib/platformx/form.rb +234 -152
- data/lib/platformx/layout.rb +29 -35
- data/lib/platformx/mail.rb +8 -11
- data/lib/platformx/notify.rb +11 -12
- data/lib/platformx/omniauth_helpers.rb +3 -1
- data/lib/platformx/omniauth_routes.rb +7 -11
- data/lib/platformx/pdf.rb +11 -19
- data/lib/platformx/stripe.rb +25 -17
- data/lib/platformx/text.rb +14 -13
- data/lib/platformx/version.rb +1 -1
- data/lib/platformx.rb +94 -49
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 571b39d3d6f2ebe74e27e2ac3254f32e62ac6beb
|
4
|
+
data.tar.gz: b834abaae3f5d33e7fcea76ca31bc5b5ba914023
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d25f9bbcfd02967b288729cac8db60e17ecdf348fa81eec54bdfb7924ab646daf64df6afeab4b3e534cdf3985b828f12b0e027537c499de5a2c8704f73e65320
|
7
|
+
data.tar.gz: af66a07ab362239195187cc6d174c71df9606059f4a717e5b8a6cc4781ad8b3e9ef94bef73a9fff17375488728a077cdfa242b8cea9391a488e757650337e414
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -28,4 +28,23 @@ To use in Sinatra add
|
|
28
28
|
config.bugsnag_api_key = "string"
|
29
29
|
end
|
30
30
|
|
31
|
-
##
|
31
|
+
## Documentation
|
32
|
+
|
33
|
+
The gem is documented with YARD. You can run yard documentation using its inbuilt
|
34
|
+
server. Following git clone...
|
35
|
+
|
36
|
+
~# cd platformx-gem
|
37
|
+
~# bundle install
|
38
|
+
~# yard server --reload
|
39
|
+
|
40
|
+
and visit localhost:8808.
|
41
|
+
|
42
|
+
If you prefer to compile it to html (ex: to host)..
|
43
|
+
|
44
|
+
~# yard
|
45
|
+
|
46
|
+
For more information visit [yardoc website](http://yardoc.org/) or use...
|
47
|
+
|
48
|
+
~# yard --help
|
49
|
+
|
50
|
+
## Contributing
|
data/lib/platformx/auth.rb
CHANGED
@@ -1,74 +1,81 @@
|
|
1
1
|
module Platformx
|
2
|
-
|
3
|
-
########################################################
|
4
|
-
#
|
5
|
-
# Start Helpers
|
6
|
-
#
|
7
|
-
########################################################
|
2
|
+
module AuthHelpers
|
8
3
|
|
9
|
-
|
10
|
-
#
|
11
|
-
# Admin Login
|
12
|
-
#
|
13
|
-
########################################################
|
4
|
+
# Admin session helpers
|
14
5
|
|
15
|
-
|
16
|
-
|
17
|
-
|
6
|
+
# Checks if the current user authorizes as an admin
|
7
|
+
#
|
8
|
+
# @return [Boolean] if current user authorizes as an admin
|
9
|
+
def x_admin_authorized?
|
10
|
+
session[:admin_authorized]
|
11
|
+
end
|
18
12
|
|
19
|
-
|
20
|
-
|
21
|
-
|
13
|
+
# Authorizes the current user as an admin or redirects the user to the admin login page.
|
14
|
+
def x_admin_authorize!
|
15
|
+
redirect '/admin/login' unless x_admin_authorized? || request.url.include?("/admin/login")
|
16
|
+
end
|
22
17
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
18
|
+
# Logs out the amdin
|
19
|
+
def x_admin_logout!
|
20
|
+
session[:admin_authorized] = false
|
21
|
+
session.clear
|
22
|
+
end
|
27
23
|
|
28
|
-
|
29
|
-
#
|
30
|
-
# Login
|
31
|
-
#
|
32
|
-
########################################################
|
24
|
+
# User session helpers
|
33
25
|
|
34
|
-
|
35
|
-
|
36
|
-
|
26
|
+
# Checks if the user is logged in
|
27
|
+
#
|
28
|
+
# @return [Boolean] if uesr logged in
|
29
|
+
def x_authorized?
|
30
|
+
session[:authorized]
|
31
|
+
end
|
37
32
|
|
38
|
-
|
39
|
-
|
40
|
-
|
33
|
+
# Authorizes the user and redirects the user to the registration page.
|
34
|
+
def x_authorize!
|
35
|
+
redirect '/login' unless x_authorized? || request.url.include?("/login") || request.url.include?("/auth")
|
36
|
+
end
|
41
37
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
38
|
+
# Logs out the currenly logged in user
|
39
|
+
def x_logout!
|
40
|
+
session[:authorized] = false
|
41
|
+
session.clear
|
42
|
+
end
|
46
43
|
|
47
|
-
|
48
|
-
|
49
|
-
#
|
50
|
-
#
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
#
|
55
|
-
return
|
56
|
-
|
44
|
+
# Encyrption helprs
|
45
|
+
|
46
|
+
# Encodes a value to a base 64 string.
|
47
|
+
#
|
48
|
+
# @note The provided object should respond to `#to_s` to obtain a string representation of the object.
|
49
|
+
#
|
50
|
+
# @param int [Object] the value required to be encrypted
|
51
|
+
#
|
52
|
+
# @return [String] encoded string
|
53
|
+
def x_encrypt(int = "")
|
54
|
+
str = int.to_s
|
55
|
+
#encrypted_value = Encryptor.encrypt(:value => str, :key => "=PeuMX7B4LQ#@jG*s;tYGdF")
|
56
|
+
return Base64.urlsafe_encode64(str)
|
57
|
+
end
|
57
58
|
|
58
|
-
|
59
|
-
|
60
|
-
#
|
61
|
-
|
62
|
-
|
59
|
+
# Decodes an encoded string
|
60
|
+
#
|
61
|
+
# @param str [String] the encoded string
|
62
|
+
#
|
63
|
+
# @return [String] decoded string
|
64
|
+
def x_decrypt(str = "")
|
65
|
+
str = Base64.urlsafe_decode64(str)
|
66
|
+
#decrypted_value = Encryptor.decrypt(:value => str, :key => '=PeuMX7B4LQ#@jG*s;tYGdF')
|
67
|
+
return str.to_i
|
68
|
+
end
|
69
|
+
|
70
|
+
# Generate a random password
|
71
|
+
#
|
72
|
+
# @param len [Integer] the length of the password
|
73
|
+
#
|
74
|
+
# @return [String] random generated password
|
75
|
+
def x_generate_password(len = "10")
|
76
|
+
random_password = Array.new(len).map { (65 + rand(58)).chr }.join
|
77
|
+
return random_password
|
78
|
+
end
|
63
79
|
|
64
|
-
def x_generate_password(len = "10")
|
65
|
-
random_password = Array.new(len).map { (65 + rand(58)).chr }.join
|
66
|
-
return random_password
|
67
|
-
end
|
68
|
-
########################################################
|
69
|
-
#
|
70
|
-
# End
|
71
|
-
#
|
72
|
-
########################################################
|
73
80
|
end
|
74
|
-
end
|
81
|
+
end
|
data/lib/platformx/aws.rb
CHANGED
@@ -1,71 +1,71 @@
|
|
1
1
|
module Platformx
|
2
|
-
module S3Helpers
|
3
|
-
########################################################
|
4
|
-
#
|
5
|
-
# Set Up Connection
|
6
|
-
#
|
7
|
-
########################################################
|
8
|
-
def x_s3_init()
|
9
|
-
|
10
|
-
connection = Fog::Storage.new({
|
11
|
-
:provider => 'AWS',
|
12
|
-
:region => Platformx.configuration.aws_region,
|
13
|
-
:aws_access_key_id => Platformx.configuration.aws_access_key_id,
|
14
|
-
:aws_secret_access_key => Platformx.configuration.aws_secret_access_key
|
15
|
-
})
|
16
|
-
return connection
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
########################################################
|
21
|
-
#
|
22
|
-
# Upload to S3
|
23
|
-
#
|
24
|
-
########################################################
|
25
|
-
def x_s3_upload(new_filename: "", file: "", bucket: "#{Platformx.configuration.aws_bucket}", path: "")
|
26
|
-
|
27
|
-
|
28
|
-
################# Init S3 #################
|
29
|
-
connection = x_s3_init
|
30
2
|
|
3
|
+
#
|
4
|
+
# Amazon S3 helpers
|
5
|
+
#
|
6
|
+
# @author Tim Mushen
|
7
|
+
#
|
8
|
+
module S3Helpers
|
9
|
+
|
10
|
+
# Set up Amazon S3 connection
|
11
|
+
#
|
12
|
+
# @return [Fog::Storage] S3 storage connection
|
13
|
+
def x_s3_init()
|
14
|
+
connection = Fog::Storage.new({
|
15
|
+
:provider => 'AWS',
|
16
|
+
:region => Platformx.configuration.aws_region,
|
17
|
+
:aws_access_key_id => Platformx.configuration.aws_access_key_id,
|
18
|
+
:aws_secret_access_key => Platformx.configuration.aws_secret_access_key
|
19
|
+
})
|
20
|
+
return connection
|
21
|
+
end
|
31
22
|
|
32
|
-
|
33
|
-
|
23
|
+
# Upload file to S3 with the given parameters
|
24
|
+
#
|
25
|
+
# @param new_filename [String] new name of the file
|
26
|
+
# @param file [String] file to be uploaded
|
27
|
+
# @param bucket [String] bucket to upload the file to
|
28
|
+
# @param path [String] path of the final file
|
29
|
+
#
|
30
|
+
# @return S3 bucket file
|
31
|
+
def x_s3_upload(new_filename: "", file: "", bucket: "#{Platformx.configuration.aws_bucket}", path: "")
|
32
|
+
# Obtaining an S3 connection
|
33
|
+
connection = x_s3_init
|
34
34
|
|
35
|
-
# upload
|
36
|
-
|
37
|
-
:key => "#{new_filename}",
|
38
|
-
:body => open(file),
|
39
|
-
:public => false
|
40
|
-
)
|
35
|
+
# Creating the directory to upload the file to
|
36
|
+
bucket = connection.directories.create(key: "#{bucket}/#{path}", public: false)
|
41
37
|
|
42
|
-
|
38
|
+
# upload that resume
|
39
|
+
file = bucket.files.create(
|
40
|
+
:key => "#{new_filename}",
|
41
|
+
:body => open(file),
|
42
|
+
:public => false
|
43
|
+
)
|
44
|
+
end
|
43
45
|
|
46
|
+
# Download link from S3 asset
|
47
|
+
#
|
48
|
+
# @param key [String] key or the file name
|
49
|
+
# @param bucket [String] the bucket name
|
50
|
+
# @param bucket_path [String] the bucket path
|
51
|
+
# @param verbose [Boolean] make operation verborse
|
52
|
+
#
|
53
|
+
# @return [String] a public URL for the file
|
54
|
+
#
|
55
|
+
# @note The returned public URL will expire in 7 days
|
56
|
+
def x_s3_get_link(key: "", bucket: "", bucket_path: "", verbose: false)
|
57
|
+
|
58
|
+
connection = x_s3_init
|
59
|
+
expiry = Time.now.to_i + 604800
|
60
|
+
connection.directories.new(:key => "#{bucket}").files.new(:key => "#{bucket_path}/#{key}").url(expiry)
|
61
|
+
|
62
|
+
if verbose == true
|
63
|
+
# returns more information about file from s3
|
64
|
+
# directory = connection.directories.get("files.myclocktower.com")
|
65
|
+
# file = directory.files.get("support/#{support_id}/#{key}")
|
66
|
+
#return file.url(expiry)
|
67
|
+
end
|
68
|
+
end
|
44
69
|
|
45
|
-
|
46
|
-
#
|
47
|
-
# Download from S3
|
48
|
-
#
|
49
|
-
########################################################
|
50
|
-
def x_s3_get_link(key: "", bucket:"", bucket_path:"", verbose: false)
|
51
|
-
|
52
|
-
connection = x_s3_init
|
53
|
-
expiry = Time.now.to_i + 604800
|
54
|
-
connection.directories.new(:key => "#{bucket}").files.new(:key => "#{bucket_path}/#{key}").url(expiry)
|
55
|
-
|
56
|
-
if verbose == true
|
57
|
-
# returns more information about file from s3
|
58
|
-
# directory = connection.directories.get("files.myclocktower.com")
|
59
|
-
# file = directory.files.get("support/#{support_id}/#{key}")
|
60
|
-
#return file.url(expiry)
|
61
|
-
end
|
62
|
-
|
70
|
+
end
|
63
71
|
end
|
64
|
-
|
65
|
-
########################################################
|
66
|
-
#
|
67
|
-
# End
|
68
|
-
#
|
69
|
-
########################################################
|
70
|
-
end
|
71
|
-
end
|
data/lib/platformx/date.rb
CHANGED
@@ -1,96 +1,99 @@
|
|
1
1
|
module Platformx
|
2
|
-
module DateHelpers
|
3
|
-
########################################################
|
4
|
-
#
|
5
|
-
# Start Helpers
|
6
|
-
#
|
7
|
-
########################################################
|
8
2
|
|
9
|
-
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
|
14
|
-
def x_time_in_words(date: "")
|
15
|
-
date = date.to_date
|
16
|
-
date = Date.parse(date, true) unless /Date.*/ =~ date.class.to_s
|
17
|
-
days = (date - Date.today).to_i
|
18
|
-
return 'Today' if days >= 0 and days < 1
|
19
|
-
return 'Tomorrow' if days >= 1 and days < 2
|
20
|
-
return 'Yesterday' if days >= -1 and days < 0
|
21
|
-
return "In #{days} days" if days.abs < 60 and days > 0
|
22
|
-
return "#{days.abs} days ago" if days.abs < 60 and days < 0
|
23
|
-
return date.strftime('%A, %B %e, %Y') if days.abs < 182
|
24
|
-
return date.strftime('%A, %B %e, %Y')
|
25
|
-
end
|
3
|
+
#
|
4
|
+
# Date helpers module
|
5
|
+
# @author Tim Mushen
|
6
|
+
#
|
7
|
+
module DateHelpers
|
26
8
|
|
27
|
-
|
28
|
-
#
|
29
|
-
#
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
when 2440..2879 then '2 days ago'
|
42
|
-
when 2880..43199 then "#{(distance_in_minutes / 1440).round} days ago"
|
43
|
-
when 43200..86399 then 'About 1 month ago'
|
44
|
-
when 86400..525599 then "#{(distance_in_minutes / 43200).round} months ago"
|
45
|
-
when 525600..1051199 then 'About 1 year ago'
|
46
|
-
else "Over #{(distance_in_minutes / 525600).round} years ago"
|
9
|
+
# Get the time in words
|
10
|
+
# @param date [String] a string representation of the date
|
11
|
+
# @return [String] time in words
|
12
|
+
def x_time_in_words(date: "")
|
13
|
+
date = date.to_date
|
14
|
+
date = Date.parse(date, true) unless /Date.*/ =~ date.class.to_s
|
15
|
+
days = (date - Date.today).to_i
|
16
|
+
return 'Today' if days >= 0 and days < 1
|
17
|
+
return 'Tomorrow' if days >= 1 and days < 2
|
18
|
+
return 'Yesterday' if days >= -1 and days < 0
|
19
|
+
return "In #{days} days" if days.abs < 60 and days > 0
|
20
|
+
return "#{days.abs} days ago" if days.abs < 60 and days < 0
|
21
|
+
return date.strftime('%A, %B %e, %Y') if days.abs < 182
|
22
|
+
return date.strftime('%A, %B %e, %Y')
|
47
23
|
end
|
48
|
-
end
|
49
24
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
25
|
+
# Returns relative time in words referencing the given date
|
26
|
+
# @param from_time [Time] the from time
|
27
|
+
# @return [String] a 'time ago' representation for the given time
|
28
|
+
# @example
|
29
|
+
# relative_time_ago(Time.now) # => 'about a minute ago'
|
30
|
+
def x_relative_time_ago(from_time: "")
|
31
|
+
distance_in_minutes = (((Time.now - from_time.to_time).abs)/60).round
|
32
|
+
|
33
|
+
case distance_in_minutes
|
34
|
+
when 0..1 then 'A minute ago'
|
35
|
+
when 2..44 then "#{distance_in_minutes} minutes ago"
|
36
|
+
when 45..89 then '1 hour ago'
|
37
|
+
when 90..1439 then "#{(distance_in_minutes.to_f / 60.0).round} hours ago"
|
38
|
+
when 1440..2439 then '1 day ago'
|
39
|
+
when 2440..2879 then '2 days ago'
|
40
|
+
when 2880..43199 then "#{(distance_in_minutes / 1440).round} days ago"
|
41
|
+
when 43200..86399 then 'About 1 month ago'
|
42
|
+
when 86400..525599 then "#{(distance_in_minutes / 43200).round} months ago"
|
43
|
+
when 525600..1051199 then 'About 1 year ago'
|
44
|
+
else "Over #{(distance_in_minutes / 525600).round} years ago"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Formats the date
|
49
|
+
# @param date [Time] date representation in the format %A, %B %d, %Y
|
50
|
+
# @param show_time [Boolean] if the timme should be incldued
|
51
|
+
# @param show_month [Boolean] if teh month should be included
|
52
|
+
# @return [String] formated representation of the given date
|
53
|
+
def x_format_date(date: "", show_time: false, show_month: true)
|
54
|
+
if date.nil?
|
54
55
|
return ""
|
55
|
-
|
56
|
+
else
|
56
57
|
time = date.strftime("%A, %B %d, %Y")
|
57
58
|
|
58
59
|
if show_time == true
|
59
|
-
|
60
|
+
time = time + date.strftime(" %l:%M %p")
|
60
61
|
end
|
61
62
|
|
62
63
|
return time
|
64
|
+
end
|
63
65
|
end
|
64
|
-
end
|
65
66
|
|
66
|
-
|
67
|
-
|
68
|
-
|
67
|
+
# Format date time
|
68
|
+
# @param date [Time] the date-time to be formatted
|
69
|
+
# @return [String] the formatted date
|
70
|
+
def x_format_datetime(date: "")
|
71
|
+
if date.nil?
|
69
72
|
return ""
|
70
|
-
|
73
|
+
else
|
71
74
|
time = date.strftime("%A, %B %d, %Y %l:%M %p")
|
72
75
|
return time
|
76
|
+
end
|
73
77
|
end
|
74
|
-
end
|
75
78
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
+
# Format time
|
80
|
+
# @param time [Time] the time to be formatted
|
81
|
+
# @return [String] formatted time
|
82
|
+
def x_format_time(time: "")
|
83
|
+
if time.nil?
|
79
84
|
return ""
|
80
|
-
|
85
|
+
else
|
81
86
|
time = time.strftime("%l:%M %p")
|
82
87
|
return time
|
88
|
+
end
|
83
89
|
end
|
84
|
-
end
|
85
90
|
|
86
|
-
|
87
|
-
|
88
|
-
|
91
|
+
# Short date with format %A, %-m-%d-%y
|
92
|
+
# @param datevar [Time | Date] date or time to be formatted
|
93
|
+
# @return [String] formatted date/time
|
94
|
+
def x_short_date(datevar: "")
|
95
|
+
return datevar.strftime("%A, %-m-%d-%y") unless datevar.nil?
|
96
|
+
end
|
89
97
|
|
90
|
-
########################################################
|
91
|
-
#
|
92
|
-
# End
|
93
|
-
#
|
94
|
-
########################################################
|
95
98
|
end
|
96
|
-
end
|
99
|
+
end
|