ruby-skynet 1.1.15

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f2b19582a200c85d2d1813aa2321e7727c0fdf5360e0d0a09bd300797d5cdb84
4
+ data.tar.gz: 399126445145634df99dc83db1448948701ed562f52759639828fbd421146849
5
+ SHA512:
6
+ metadata.gz: fd7750bcc625d36ac9a17c5b4e668f3e5c148430e90dd3cfb25eadf605f2a3e8fc8413dfc48ddae661456ab3940510904a97f47d90f5bd017314d7b522f78ae8
7
+ data.tar.gz: 37a1d003f6776d2778881bc715c9632d07f6d0d8c99eba707d9a25b6e199b0e3a001aa79fbaf21cd3ca675f5c608e9e53ad246bfd13f0310729111195b630100
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'httparty'
4
+ require_relative 'skynet/download.rb'
5
+ require_relative 'skynet/upload.rb'
6
+
7
+ # The entrypoint for the SDK
8
+ class Skynet
9
+
10
+ # Prefix for the protocol
11
+ URI_SKYNET_PREFIX = 'sia://'
12
+
13
+ extend Download
14
+ extend Upload
15
+
16
+ # Removes the Skynet::URI_SKYNET_PREFIX constant from string
17
+ def self.strip_prefix(str)
18
+ if str.index(URI_SKYNET_PREFIX).nil?
19
+ str.delete_prefix(URI_SKYNET_PREFIX)
20
+ else
21
+ str
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper.rb'
4
+
5
+ # Module for handling inbound requests
6
+ module Download
7
+
8
+ # Array with http redirect & http permanent code
9
+ # Used to determine if the GET request should start downloading or follow redirect
10
+ HTTP_REDIRECT_PERMANENT = [301, 302].freeze
11
+ extend Helper::Download
12
+
13
+ # Download file from the skynet portal
14
+ # file_name & skylink is required, the rest is optional since they come with default values
15
+ def download_file(file_name, skylink, options = {}, stream = true)
16
+ options = Helper::Download.default_options
17
+ options = Helper::Download.default_options.merge(options) unless options.empty?
18
+
19
+ portal = options[:portal_url]
20
+ skylink = Skynet.strip_prefix(skylink)
21
+ url = "#{portal}#{skylink}?attachment=#{options[:download]}"
22
+
23
+ File.open(file_name, 'w') do |file|
24
+ HTTParty.get(url, follow_redirects: true, stream_body: stream) do |chunk|
25
+ file << chunk unless HTTP_REDIRECT_PERMANENT.include? chunk.code
26
+ end
27
+ end
28
+
29
+ 'Download successful!'
30
+ end
31
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Class with general settings
4
+ module Helper
5
+
6
+ # The default skynet portal
7
+ PORTAL_URL = 'https://siasky.net/'
8
+
9
+ # Module for keeping download settings
10
+ module Download
11
+
12
+ # Default options for the download module
13
+ def self.default_options
14
+ {
15
+ portal_url: Helper::PORTAL_URL,
16
+ download: true
17
+ }
18
+ end
19
+ end
20
+
21
+ # Module for keeping upload settings
22
+ module Upload
23
+
24
+ # Default options for the upload module
25
+ def self.default_options
26
+ {
27
+ portal_url: Helper::PORTAL_URL,
28
+ portal_upload_path: 'skynet/skyfile',
29
+ portal_file_fieldname: 'file',
30
+ portal_directory_fieldname: 'files[]',
31
+ custom_filename: nil,
32
+ }
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper.rb'
4
+
5
+ # Module for handling outbound requests
6
+ module Upload
7
+ extend Helper::Upload
8
+
9
+ # Default headers provided for uploading files,
10
+ # any argument provided is merged with the default values
11
+ def http_post_header(data = {})
12
+ default_data = {
13
+ headers: {
14
+ 'Accept' => 'application/octet-stream',
15
+ 'Content-Type' => 'application/octet-stream',
16
+ 'Transfer-Encoding' => 'gzip, chunked'
17
+ }
18
+ }
19
+
20
+ default_data.merge(data) unless data.empty?
21
+ end
22
+
23
+ # Uploads file to the skynet, file_path is required but options are optional since default values are provided
24
+ def upload_file(file_path, options = {})
25
+ options = Helper::Upload.default_options
26
+ options = Helper::Upload.default_options.merge(options) unless options.empty?
27
+ return "File #{file_path} does not exist!" unless File.exist?(file_path)
28
+
29
+ host = options[:portal_url]
30
+ path = options[:portal_upload_path]
31
+ filename = options[:custom_filename] || file_path
32
+
33
+ url = "#{host}#{path}?filename=#{filename}"
34
+ binary_content = IO.read(file_path, mode: 'rb')
35
+
36
+ header_data = http_post_header({
37
+ headers: {
38
+ 'Content-Disposition' => 'attachment; filename="#{filename}"'
39
+ },
40
+ body: binary_content,
41
+ options[:portal_file_fieldname] => filename
42
+ })
43
+
44
+ upload_request = HTTParty.post(url, header_data)
45
+ parsed_request = upload_request.to_hash
46
+ "Upload successful, skylink: " + parsed_request['skylink']
47
+ end
48
+
49
+ # Still work in progress
50
+ # Uploads a whole directory to the skynet
51
+ # def upload_directory(directory_path, options = {})
52
+ # options = Helper::Upload.default_options
53
+ # options = Helper::Upload.default_options.merge(options) unless options.empty?
54
+ # return "Given path is not a directory!" unless Dir.exist?(directory_path)
55
+
56
+ # directory_entries = Dir.glob("#{directory_path}/*")
57
+
58
+ # binary_content = IO.read(filename, mode: 'rb')
59
+
60
+ # header_data = http_post_header({
61
+ # headers: {
62
+ # 'Content-Disposition' => 'attachment; ' + filename
63
+ # },
64
+ # body: binary_content,
65
+ # options[:portal_directory_fieldname] => filename
66
+ # })
67
+
68
+ # host = options[:portal_url]
69
+ # path = options[:portal_upload_path]
70
+ # dir_name = options[:custom_filename] || directory_path
71
+ # url = "#{host}#{path}?filename=#{dir_name}"
72
+
73
+ # upload_request = HTTParty.post(url, header_data)
74
+ # parsed_request = upload_request.to_hash
75
+ # "Upload successful, skylink: " + parsed_request['skylink']
76
+ # end
77
+ end
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-skynet
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.15
5
+ platform: ruby
6
+ authors:
7
+ - beyarz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-03-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.18.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.18.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '13.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '13.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rdoc
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '6.2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '6.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubygems-tasks
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.2.5
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.2.5
83
+ description: Ruby gem for integrating Sias Skynet into Ruby apps
84
+ email: ''
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - lib/skynet.rb
90
+ - lib/skynet/download.rb
91
+ - lib/skynet/helper.rb
92
+ - lib/skynet/upload.rb
93
+ homepage: https://rubygems.org/gems/sia-skynet
94
+ licenses:
95
+ - MIT
96
+ metadata:
97
+ source_code_uri: https://github.com/beyarz/sia-skynet
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ requirements: []
113
+ rubygems_version: 3.1.2
114
+ signing_key:
115
+ specification_version: 4
116
+ summary: Sia skynet gem
117
+ test_files: []