plagiarism-checker 2.1.1 → 3.0.3

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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +8 -12
  3. data/Gemfile +6 -4
  4. data/LICENSE.txt +21 -21
  5. data/README.md +39 -0
  6. data/Rakefile +4 -2
  7. data/bin/console +10 -2
  8. data/lib/copyleaks.rb +35 -0
  9. data/lib/copyleaks/api.rb +493 -0
  10. data/lib/copyleaks/app.config.rb +47 -0
  11. data/lib/copyleaks/models/auth_token.rb +54 -0
  12. data/lib/copyleaks/models/delete_request_model.rb +64 -0
  13. data/lib/copyleaks/models/exceptions/auth_exipred_exception.rb +32 -0
  14. data/lib/copyleaks/models/exceptions/command_exception.rb +32 -0
  15. data/lib/copyleaks/models/exceptions/index.rb +32 -0
  16. data/lib/copyleaks/models/exceptions/rate_limit_exception.rb +32 -0
  17. data/lib/copyleaks/models/exceptions/under_maintenance_exception.rb +32 -0
  18. data/lib/copyleaks/models/exports/export_crawled_version.rb +54 -0
  19. data/lib/copyleaks/models/exports/export_model.rb +84 -0
  20. data/lib/copyleaks/models/exports/export_pdf_report.rb +54 -0
  21. data/lib/copyleaks/models/exports/export_results.rb +56 -0
  22. data/lib/copyleaks/models/exports/index.rb +32 -0
  23. data/lib/copyleaks/models/id_object.rb +44 -0
  24. data/lib/copyleaks/models/index.rb +35 -0
  25. data/lib/copyleaks/models/start_request_model.rb +63 -0
  26. data/lib/copyleaks/models/submissions/file_ocr_submission_model.rb +61 -0
  27. data/lib/copyleaks/models/submissions/file_submission_model.rb +57 -0
  28. data/lib/copyleaks/models/submissions/index.rb +33 -0
  29. data/lib/copyleaks/models/submissions/properties/actions.rb +33 -0
  30. data/lib/copyleaks/models/submissions/properties/author.rb +41 -0
  31. data/lib/copyleaks/models/submissions/properties/copyleaks_db.rb +44 -0
  32. data/lib/copyleaks/models/submissions/properties/domains_mode.rb +31 -0
  33. data/lib/copyleaks/models/submissions/properties/exclude.rb +59 -0
  34. data/lib/copyleaks/models/submissions/properties/filter.rb +67 -0
  35. data/lib/copyleaks/models/submissions/properties/index.rb +45 -0
  36. data/lib/copyleaks/models/submissions/properties/indexing.rb +41 -0
  37. data/lib/copyleaks/models/submissions/properties/pdf_properties.rb +55 -0
  38. data/lib/copyleaks/models/submissions/properties/repository.rb +41 -0
  39. data/lib/copyleaks/models/submissions/properties/scanning.rb +55 -0
  40. data/lib/copyleaks/models/submissions/properties/scanning_exclude.rb +44 -0
  41. data/lib/copyleaks/models/submissions/properties/scanning_repository.rb +46 -0
  42. data/lib/copyleaks/models/submissions/properties/sensitive_data_protection.rb +71 -0
  43. data/lib/copyleaks/models/submissions/properties/submission_properties.rb +136 -0
  44. data/lib/copyleaks/models/submissions/properties/webhooks.rb +44 -0
  45. data/lib/copyleaks/models/submissions/submission_model.rb +47 -0
  46. data/lib/copyleaks/models/submissions/url_submission_model.rb +51 -0
  47. data/lib/copyleaks/utils/status-code.utils.rb +38 -0
  48. data/lib/copyleaks/version.rb +3 -0
  49. data/lib/index.rb +30 -0
  50. data/plagiarism-checker-3.0.2.gem +0 -0
  51. data/plagiarism-checker.gemspec +29 -0
  52. metadata +52 -108
  53. data/.rubocop.yml +0 -2
  54. data/copyleaks_api.gemspec +0 -29
  55. data/example_asynchronous.rb +0 -51
  56. data/example_synchronous.rb +0 -74
  57. data/lib/copyleaks_api.rb +0 -24
  58. data/lib/copyleaks_api/Models/ResultRecord.rb +0 -60
  59. data/lib/copyleaks_api/access_token.rb +0 -36
  60. data/lib/copyleaks_api/api.rb +0 -216
  61. data/lib/copyleaks_api/config.rb +0 -37
  62. data/lib/copyleaks_api/copyleaks_cloud.rb +0 -116
  63. data/lib/copyleaks_api/copyleaks_process.rb +0 -78
  64. data/lib/copyleaks_api/errors.rb +0 -29
  65. data/lib/copyleaks_api/validators/custom_fields_validator.rb +0 -35
  66. data/lib/copyleaks_api/validators/email_validator.rb +0 -13
  67. data/lib/copyleaks_api/validators/file_validator.rb +0 -56
  68. data/lib/copyleaks_api/validators/language_validator.rb +0 -12
  69. data/lib/copyleaks_api/validators/response_validator.rb +0 -27
  70. data/lib/copyleaks_api/validators/url_validator.rb +0 -12
  71. data/lib/copyleaks_api/version.rb +0 -3
@@ -1,78 +0,0 @@
1
- require 'time'
2
- require 'copyleaks_api/Models/ResultRecord'
3
-
4
-
5
- module CopyleaksApi
6
- class CopyleaksProcess
7
- attr_accessor :process_id, :progress, :custom_fields, :created_at
8
-
9
- # constructor
10
- def initialize(options)
11
- @cloud = options[:cloud]
12
- [:cloud, :api, :process_id, :custom_fields, :result, :progress].each do |attr|
13
- instance_variable_set("@#{attr}", options[attr]) if options[attr]
14
- end
15
- @created_at = DateTime.parse(options[:created_at]) if options[:created_at]
16
- end
17
-
18
- def to_s
19
- return "Created at: #{@created_at}"
20
- end
21
-
22
- # returns true if still processing data on server side
23
- def processing?
24
- if @progress == 100
25
- false
26
- else
27
- true
28
- end
29
- end
30
-
31
- # return result data or retrieves from result endpoint if nothing specified
32
- # retries result information of process with given id
33
- def get_results
34
- response = @api.get(@cloud.url(:result, @process_id), no_callbacks: true, token: @cloud.access_token.token)
35
- @results = []
36
- response.each do |res|
37
- @results.push(CopyleaksApi::ResultRecord.new(res))
38
- end
39
- @results
40
- end
41
-
42
- # retries status information of process with given id
43
- def update_status
44
- response = @api.get(@cloud.url(:status, @process_id), no_callbacks: true, token: @cloud.access_token.token)
45
- @progress = response['ProgressPercents'].to_i
46
- @progress
47
- end
48
-
49
- # Returns the source text of this process
50
- def get_source_text
51
- response = @api.get(@cloud.url_downloads("source-text?pid=#{@process_id}"), parse_json: false, no_callbacks: true, token: @cloud.access_token.token)
52
- response
53
- end
54
-
55
- # deletes process from API
56
- def delete
57
- response = @api.delete(@cloud.url(:delete, @process_id), token: @cloud.access_token.token)
58
- if response['StatusCode'] == 200
59
- true
60
- else
61
- false
62
- end
63
- end
64
-
65
- class << self
66
- # create CopyleaksProcess based on data got from any create endpoint
67
- def create(cloud, api, hash)
68
- new(cloud: cloud, api: api, process_id: hash['ProcessId'], created_at: hash['CreationTimeUTC'])
69
- end
70
-
71
- # creates CopyleaksProcess based on data got from list endpoint
72
- def create_from_list(cloud, api, hash)
73
- new(cloud: cloud, api: api, process_id: hash['ProcessId'], created_at: hash['CreationTimeUTC'],
74
- status_code: hash['Status'].downcase, custom_fields: hash['CustomFields'])
75
- end
76
- end
77
- end
78
- end
@@ -1,29 +0,0 @@
1
- module CopyleaksApi
2
- BasicError = Class.new(StandardError)
3
- BadCustomFieldError = Class.new(BasicError)
4
- BadFileError = Class.new(BasicError)
5
- BadEmailError = Class.new(BasicError)
6
- BadUrlError = Class.new(BasicError)
7
- UnknownLanguageError = Class.new(BasicError)
8
-
9
- class BadResponseError < BasicError
10
- attr_accessor :code
11
-
12
- # constructor
13
- def initialize(code, message)
14
- @code = code.to_i
15
- @message = message
16
- end
17
-
18
- def to_s
19
- "Error code: #{code}. #{@message}"
20
- end
21
- end
22
-
23
- class ManagedError < BadResponseError
24
- # returns true if this error is internal server error
25
- def internal_error?
26
- code == 16
27
- end
28
- end
29
- end
@@ -1,35 +0,0 @@
1
- module CopyleaksApi
2
- module Validators
3
- class CustomFieldsValidator
4
- KEY_MAX_LENGTH = 128
5
- VALUE_MAX_LENGTH = 512
6
- OVERALL_MAX_LENGTH = 8192
7
-
8
- class << self
9
- # raises appropriate error if any length is too large
10
- def validate!(fields)
11
- raise BadCustomFieldError.new('Key is too long') unless keys_valid?(fields)
12
- raise BadCustomFieldError.new('Value is too long') unless values_valid?(fields)
13
- raise BadCustomFieldError.new('Overall size is too large') unless overall_valid?(fields)
14
- end
15
-
16
- private
17
-
18
- # checks custom keys for length
19
- def keys_valid?(hash)
20
- hash.keys.map(&:to_s).all? { |s| s.size <= KEY_MAX_LENGTH }
21
- end
22
-
23
- # checks values for length
24
- def values_valid?(hash)
25
- hash.values.map(&:to_s).all? { |s| s.size <= VALUE_MAX_LENGTH }
26
- end
27
-
28
- # checks overall length
29
- def overall_valid?(hash)
30
- hash.reduce(0) { |a, e| a + e[0].to_s.size + e[1].to_s.size } <= OVERALL_MAX_LENGTH
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,13 +0,0 @@
1
- module CopyleaksApi
2
- module Validators
3
- class EmailValidator
4
- class << self
5
- # raises error if given email is invalid
6
- def validate!(email)
7
- return if email =~ /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
8
- raise BadEmailError.new(email), "Email #{email} is invalid"
9
- end
10
- end
11
- end
12
- end
13
- end
@@ -1,56 +0,0 @@
1
- module CopyleaksApi
2
- module Validators
3
- class FileValidator
4
- SUPPORTED_FILE_TYPES = [:html, :htm, :txt, :pdf, :doc, :docx, :rtf].freeze
5
- SUPPORTED_IMAGE_TYPES = [:gif, :png, :bmp, :jpg, :jpeg].freeze
6
- BYTES_IN_MB = 1_024_000.0
7
-
8
- class << self
9
- # check file for ocr for correctness
10
- def validate_ocr!(path)
11
- validate_file(path, SUPPORTED_IMAGE_TYPES)
12
- end
13
-
14
- # check text file for correctness
15
- def validate_text_file!(path)
16
- validate_file(path, SUPPORTED_FILE_TYPES)
17
- end
18
-
19
- private
20
-
21
- # check given file for correctness to given type
22
- def validate_file(path, types)
23
- ext = file_extension(path)
24
- return if types.include?(ext) && file_size(path) <= allowed_file_size(ext)
25
- raise BadFileError, "#{path} file has unsupported extension or to large"
26
- end
27
-
28
- # returns good file size in MB for given type
29
- def allowed_file_size(type)
30
- case type.to_sym
31
- when :html, :htm
32
- 5
33
- when :txt
34
- 3
35
- when :pdf, :doc, :docx
36
- 25
37
- when *SUPPORTED_IMAGE_TYPES
38
- 25
39
- else
40
- 0
41
- end
42
- end
43
-
44
- # extract file extension
45
- def file_extension(path)
46
- path.split('.').last.downcase.to_sym
47
- end
48
-
49
- # extract file size in MB
50
- def file_size(path)
51
- File.size(path) / BYTES_IN_MB
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,12 +0,0 @@
1
- module CopyleaksApi
2
- module Validators
3
- class LanguageValidator
4
- class << self
5
- # raise error if given language is not allowed
6
- def validate!(language)
7
- raise UnknownLanguageError, "#{language} is unknown" unless Language::ALLOWED.include?(language)
8
- end
9
- end
10
- end
11
- end
12
- end
@@ -1,27 +0,0 @@
1
- require 'json'
2
-
3
- module CopyleaksApi
4
- module Validators
5
- class ResponseValidator
6
- ERROR_HEADER = 'Copyleaks-Error-Code'.freeze
7
- GOOD_STATUS_CODE = 200
8
-
9
- class << self
10
- # raises error if response has APi error code or bad status code
11
- def validate!(response)
12
- raise ManagedError.new(response[ERROR_HEADER], extract_message(response.body)) if response[ERROR_HEADER]
13
- raise BadResponseError.new(response.code, response.body) if response.code.to_i != GOOD_STATUS_CODE
14
- end
15
-
16
- private
17
-
18
- # extract message from body
19
- def extract_message(string)
20
- JSON.parse(string)['Message']
21
- rescue JSON::ParserError
22
- string
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,12 +0,0 @@
1
- module CopyleaksApi
2
- module Validators
3
- class UrlValidator
4
- class << self
5
- # raises error if given url for callback is invalid
6
- def validate!(url)
7
- raise BadUrlError.new(url) unless url =~ %r(^(https?://)?([\da-z\.-]+)\.([a-z\.]{2,6})([/\w \.-]*)*/?$)
8
- end
9
- end
10
- end
11
- end
12
- end
@@ -1,3 +0,0 @@
1
- module CopyleaksApi
2
- VERSION = '2.1.1'.freeze
3
- end