rospatent 1.0.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 +7 -0
- data/CHANGELOG.md +16 -0
- data/LICENSE.txt +21 -0
- data/README.md +1247 -0
- data/lib/generators/rospatent/install/install_generator.rb +21 -0
- data/lib/generators/rospatent/install/templates/README +29 -0
- data/lib/generators/rospatent/install/templates/initializer.rb +24 -0
- data/lib/rospatent/cache.rb +282 -0
- data/lib/rospatent/client.rb +698 -0
- data/lib/rospatent/configuration.rb +136 -0
- data/lib/rospatent/errors.rb +127 -0
- data/lib/rospatent/input_validator.rb +306 -0
- data/lib/rospatent/logger.rb +286 -0
- data/lib/rospatent/patent_parser.rb +141 -0
- data/lib/rospatent/railtie.rb +26 -0
- data/lib/rospatent/search.rb +222 -0
- data/lib/rospatent/version.rb +5 -0
- data/lib/rospatent.rb +117 -0
- metadata +167 -0
data/lib/rospatent.rb
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "rospatent/version"
|
4
|
+
require_relative "rospatent/configuration"
|
5
|
+
require_relative "rospatent/input_validator"
|
6
|
+
require_relative "rospatent/cache"
|
7
|
+
require_relative "rospatent/logger"
|
8
|
+
require_relative "rospatent/patent_parser"
|
9
|
+
require_relative "rospatent/client"
|
10
|
+
require_relative "rospatent/search"
|
11
|
+
require_relative "rospatent/errors"
|
12
|
+
|
13
|
+
# Load Rails integration if Rails is available
|
14
|
+
require_relative "rospatent/railtie" if defined?(Rails)
|
15
|
+
|
16
|
+
# Main module for the Rospatent API client
|
17
|
+
module Rospatent
|
18
|
+
class << self
|
19
|
+
attr_writer :configuration
|
20
|
+
|
21
|
+
# Returns the current configuration
|
22
|
+
# @return [Rospatent::Configuration] Current configuration
|
23
|
+
def configuration
|
24
|
+
@configuration ||= Configuration.new
|
25
|
+
end
|
26
|
+
|
27
|
+
# Configure the gem
|
28
|
+
# @yield [config] Configuration block
|
29
|
+
# @yieldparam [Rospatent::Configuration] config The configuration object
|
30
|
+
def configure
|
31
|
+
yield(configuration)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Creates a new client instance
|
35
|
+
# @param token [String] API token (optional if already set in configuration)
|
36
|
+
# @param logger [Rospatent::Logger] Custom logger instance (optional)
|
37
|
+
# @param cache [Rospatent::Cache] Custom cache instance (optional)
|
38
|
+
# @param options [Hash] Additional client options
|
39
|
+
# @return [Rospatent::Client] A new client instance
|
40
|
+
def client(token = nil, logger: nil, cache: nil, **)
|
41
|
+
Client.new(token: token, logger: logger, cache: cache, **)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Create a shared cache instance
|
45
|
+
# @param ttl [Integer] Time to live in seconds
|
46
|
+
# @param max_size [Integer] Maximum cache size
|
47
|
+
# @return [Rospatent::Cache] Shared cache instance
|
48
|
+
def shared_cache(ttl: nil, max_size: nil)
|
49
|
+
@shared_cache ||= Cache.new(
|
50
|
+
ttl: ttl || configuration.cache_ttl,
|
51
|
+
max_size: max_size || configuration.cache_max_size
|
52
|
+
)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Create a shared logger instance
|
56
|
+
# @param level [Symbol] Log level
|
57
|
+
# @param formatter [Symbol] Log formatter (:json or :text)
|
58
|
+
# @return [Rospatent::Logger] Shared logger instance
|
59
|
+
def shared_logger(level: nil, formatter: nil)
|
60
|
+
@shared_logger ||= Logger.new(
|
61
|
+
level: level || configuration.log_level,
|
62
|
+
formatter: formatter || (configuration.environment == "production" ? :json : :text)
|
63
|
+
)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Reset the configuration to defaults
|
67
|
+
def reset
|
68
|
+
@configuration = Configuration.new
|
69
|
+
@shared_cache = nil
|
70
|
+
@shared_logger = nil
|
71
|
+
end
|
72
|
+
|
73
|
+
# Clear all shared resources
|
74
|
+
def clear_shared_resources
|
75
|
+
@shared_cache&.clear
|
76
|
+
@shared_cache = nil
|
77
|
+
@shared_logger = nil
|
78
|
+
end
|
79
|
+
|
80
|
+
# Get global statistics (if shared cache is being used)
|
81
|
+
# @return [Hash] Global usage statistics
|
82
|
+
def statistics
|
83
|
+
cache_stats = @shared_cache&.statistics || { size: 0, hits: 0, misses: 0 }
|
84
|
+
|
85
|
+
{
|
86
|
+
configuration: {
|
87
|
+
environment: configuration.environment,
|
88
|
+
cache_enabled: configuration.cache_enabled,
|
89
|
+
api_url: configuration.effective_api_url
|
90
|
+
},
|
91
|
+
cache: cache_stats,
|
92
|
+
shared_resources: {
|
93
|
+
cache_initialized: !@shared_cache.nil?,
|
94
|
+
logger_initialized: !@shared_logger.nil?
|
95
|
+
}
|
96
|
+
}
|
97
|
+
end
|
98
|
+
|
99
|
+
# Validate the current configuration
|
100
|
+
# @return [Array<String>] Array of validation errors (empty if valid)
|
101
|
+
def validate_configuration
|
102
|
+
errors = []
|
103
|
+
|
104
|
+
unless configuration.valid_environment?
|
105
|
+
errors << "Invalid environment: #{configuration.environment}"
|
106
|
+
end
|
107
|
+
|
108
|
+
errors << "API token is required" if configuration.token.nil? || configuration.token.empty?
|
109
|
+
|
110
|
+
errors << "Timeout must be positive" if configuration.timeout <= 0
|
111
|
+
|
112
|
+
errors << "Retry count cannot be negative" if configuration.retry_count.negative?
|
113
|
+
|
114
|
+
errors
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
metadata
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rospatent
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Aleksandr Dryzhuk
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-06-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.13'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.13'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday-follow_redirects
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.3'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: faraday-retry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.3'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '5.20'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '5.20'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.59'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.59'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop-minitest
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.34'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.34'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.6'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.6'
|
111
|
+
description: A comprehensive Ruby client for interacting with the Rospatent patent
|
112
|
+
search API. Features include automatic caching, request validation, structured logging,
|
113
|
+
error handling, and batch operations for efficient patent data retrieval.
|
114
|
+
email:
|
115
|
+
- dev@ad-it.pro
|
116
|
+
executables: []
|
117
|
+
extensions: []
|
118
|
+
extra_rdoc_files: []
|
119
|
+
files:
|
120
|
+
- CHANGELOG.md
|
121
|
+
- LICENSE.txt
|
122
|
+
- README.md
|
123
|
+
- lib/generators/rospatent/install/install_generator.rb
|
124
|
+
- lib/generators/rospatent/install/templates/README
|
125
|
+
- lib/generators/rospatent/install/templates/initializer.rb
|
126
|
+
- lib/rospatent.rb
|
127
|
+
- lib/rospatent/cache.rb
|
128
|
+
- lib/rospatent/client.rb
|
129
|
+
- lib/rospatent/configuration.rb
|
130
|
+
- lib/rospatent/errors.rb
|
131
|
+
- lib/rospatent/input_validator.rb
|
132
|
+
- lib/rospatent/logger.rb
|
133
|
+
- lib/rospatent/patent_parser.rb
|
134
|
+
- lib/rospatent/railtie.rb
|
135
|
+
- lib/rospatent/search.rb
|
136
|
+
- lib/rospatent/version.rb
|
137
|
+
homepage: https://hub.mos.ru/ad/rospatent
|
138
|
+
licenses:
|
139
|
+
- MIT
|
140
|
+
metadata:
|
141
|
+
homepage_uri: https://hub.mos.ru/ad/rospatent
|
142
|
+
source_code_uri: https://hub.mos.ru/ad/rospatent
|
143
|
+
changelog_uri: https://hub.mos.ru/ad/rospatent/blob/main/CHANGELOG.md
|
144
|
+
documentation_uri: https://hub.mos.ru/ad/rospatent/blob/main/README.md
|
145
|
+
bug_tracker_uri: https://hub.mos.ru/ad/rospatent/issues
|
146
|
+
wiki_uri: https://hub.mos.ru/ad/rospatent/wiki
|
147
|
+
rubygems_mfa_required: 'true'
|
148
|
+
post_install_message:
|
149
|
+
rdoc_options: []
|
150
|
+
require_paths:
|
151
|
+
- lib
|
152
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: 3.3.0
|
157
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '0'
|
162
|
+
requirements: []
|
163
|
+
rubygems_version: 3.5.22
|
164
|
+
signing_key:
|
165
|
+
specification_version: 4
|
166
|
+
summary: Ruby client for Rospatent API with caching and validation
|
167
|
+
test_files: []
|