UrlCategorise 0.0.3 → 0.1.1

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.
@@ -14,25 +14,25 @@ module UrlCategorise
14
14
  drugs: ["https://github.com/blocklistproject/Lists/raw/master/drugs.txt"],
15
15
  facebook: ["https://github.com/blocklistproject/Lists/raw/master/facebook.txt", "https://www.github.developerdan.com/hosts/lists/facebook-extended.txt", "https://raw.githubusercontent.com/blocklistproject/Lists/master/facebook.txt", "https://raw.githubusercontent.com/jmdugan/blocklists/master/corporations/facebook/all", "https://raw.githubusercontent.com/jmdugan/blocklists/master/corporations/facebook/facebook.com"],
16
16
  fraud: ["https://blocklistproject.github.io/Lists/fraud.txt"],
17
- gambling: ["https://blocklistproject.github.io/Lists/gambling.txt"],
17
+ gambling: ["https://blocklistproject.github.io/Lists/gambling.txt", "https://raw.githubusercontent.com/hagezi/dns-blocklists/main/adblock/gambling.txt"],
18
18
  gaming: ["https://raw.githubusercontent.com/nickoppen/pihole-blocklists/master/blocklist-ubisoft.txt", "https://raw.githubusercontent.com/nickoppen/pihole-blocklists/master/blocklist-steam.txt", "https://raw.githubusercontent.com/nickoppen/pihole-blocklists/master/blocklist-activision.txt", "https://raw.githubusercontent.com/nickoppen/pihole-blocklists/master/blocklist-blizzard.txt", "https://raw.githubusercontent.com/nickoppen/pihole-blocklists/master/blocklist-ea.txt", "https://raw.githubusercontent.com/nickoppen/pihole-blocklists/master/blocklist-epicgames.txt", "https://raw.githubusercontent.com/nickoppen/pihole-blocklists/master/blocklist-nintendo.txt", "https://raw.githubusercontent.com/nickoppen/pihole-blocklists/master/blocklist-rockstargames.txt", "https://raw.githubusercontent.com/nickoppen/pihole-blocklists/master/blocklist-roblox.txt"],
19
19
  google: ["https://raw.githubusercontent.com/jmdugan/blocklists/master/corporations/google/all"],
20
20
  hate_and_junk: ["https://www.github.developerdan.com/hosts/lists/hate-and-junk-extended.txt"],
21
21
  instagram: ["https://github.com/jmdugan/blocklists/raw/master/corporations/facebook/instagram"],
22
22
  linkedin: ["https://raw.githubusercontent.com/jmdugan/blocklists/master/corporations/microsoft/linkedin"],
23
- malware: ["https://blocklistproject.github.io/Lists/malware.txt", "http://www.malwaredomainlist.com/hostslist/hosts.txt"],
23
+ malware: ["https://blocklistproject.github.io/Lists/malware.txt", "https://feodotracker.abuse.ch/downloads/ipblocklist.txt", "https://sslbl.abuse.ch/blacklist/sslipblacklist.txt"],
24
24
  microsoft: ["https://raw.githubusercontent.com/jmdugan/blocklists/master/corporations/microsoft/all"],
25
25
  mozilla: ["https://github.com/jmdugan/blocklists/raw/master/corporations/mozilla/all"],
26
26
  nsa: ["https://raw.githubusercontent.com/tigthor/NSA-CIA-Blocklist/main/HOSTS/HOSTS"],
27
27
  phishing: ["https://blocklistproject.github.io/Lists/phishing.txt"],
28
28
  pinterest: ["https://raw.githubusercontent.com/jmdugan/blocklists/master/corporations/pinterest/all"],
29
- piracy: ["https://github.com/blocklistproject/Lists/raw/master/piracy.txt"],
29
+ piracy: ["https://github.com/blocklistproject/Lists/raw/master/piracy.txt", "https://github.com/hagezi/dns-blocklists/raw/refs/heads/main/adblock/anti.piracy.txt"],
30
30
  pornography: ["https://blocklistproject.github.io/Lists/porn.txt"],
31
31
  reddit: ["https://raw.githubusercontent.com/nickoppen/pihole-blocklists/master/blocklist-reddit.txt"],
32
32
  redirect: ["https://github.com/blocklistproject/Lists/raw/master/redirect.txt"],
33
33
  scam: ["https://blocklistproject.github.io/Lists/scam.txt"],
34
34
  smart_tv: ["https://github.com/blocklistproject/Lists/raw/master/smart-tv.txt"],
35
- social_media: [:facebook, :instagram, :linkedin, :pinterest, :reddit,:tiktok, :twitter, :whatsapp, :youtube],
35
+ social_media: [:facebook, :instagram, :linkedin, :pinterest, :reddit, :tiktok, :twitter, :whatsapp, :youtube],
36
36
  tiktok: ["https://blocklistproject.github.io/Lists/tiktok.txt"],
37
37
  torrent: ["https://github.com/blocklistproject/Lists/raw/master/torrent.txt"],
38
38
  tracking: ["https://blocklistproject.github.io/Lists/tracking.txt"],
@@ -40,6 +40,54 @@ module UrlCategorise
40
40
  vaping: ["https://github.com/blocklistproject/Lists/raw/master/vaping.txt"],
41
41
  whatsapp: ["https://github.com/blocklistproject/Lists/raw/master/whatsapp.txt", "https://raw.githubusercontent.com/jmdugan/blocklists/master/corporations/facebook/whatsapp"],
42
42
  youtube: ["https://github.com/blocklistproject/Lists/raw/master/youtube.txt", "https://raw.githubusercontent.com/jmdugan/blocklists/master/corporations/google/youtube"],
43
+
44
+ # Hagezi DNS Blocklists - specialized categories only
45
+ threat_intelligence: ["https://github.com/hagezi/dns-blocklists/raw/refs/heads/main/ips/tif.txt"],
46
+ dyndns: ["https://github.com/hagezi/dns-blocklists/raw/refs/heads/main/adblock/dyndns.txt"],
47
+ badware_hoster: ["https://github.com/hagezi/dns-blocklists/raw/refs/heads/main/adblock/hoster.txt"],
48
+ most_abused_tlds: ["https://github.com/hagezi/dns-blocklists/raw/refs/heads/main/adblock/spam-tlds.txt"],
49
+ newly_registered_domains: ["https://github.com/xRuffKez/NRD/raw/refs/heads/main/lists/14-day/adblock/nrd-14day_adblock.txt"],
50
+ dns_over_https_bypass: ["https://github.com/hagezi/dns-blocklists/raw/refs/heads/main/adblock/doh-vpn-proxy-bypass.txt"],
51
+
52
+ # StevenBlack hosts lists - specific categories only
53
+ fakenews: ["https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews/hosts"],
54
+
55
+ # Security threat lists
56
+ threat_indicators: ["https://threatfox.abuse.ch/downloads/hostfile.txt"],
57
+
58
+ # Additional IP-based sanctions and abuse lists
59
+ sanctions_ips: ["https://lists.blocklist.de/lists/all.txt"],
60
+ compromised_ips: ["https://rules.emergingthreats.net/fwrules/emerging-Block-IPs.txt"],
61
+ tor_exit_nodes: ["https://www.dan.me.uk/torlist/"],
62
+ open_proxy_ips: ["https://raw.githubusercontent.com/stamparm/ipsum/master/ipsum.txt"],
63
+
64
+ # Network security feeds
65
+ top_attack_sources: ["https://www.dshield.org/feeds/suspiciousdomains_High.txt"],
66
+ suspicious_domains: ["https://www.dshield.org/feeds/suspiciousdomains_Medium.txt"],
67
+
68
+ # Extended categories for better organization
69
+ cryptojacking: ["https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/hosts.txt"],
70
+ # ransomware: ["https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt"],
71
+ # botnet_command_control: ["https://osint.bambenekconsulting.com/feeds/c2-dommasterlist.txt"], # URL returns 403 Forbidden
72
+ phishing_extended: ["https://openphish.com/feed.txt"],
73
+
74
+ # Regional and specialized lists
75
+ chinese_ad_hosts: ["https://raw.githubusercontent.com/jdlingyu/ad-wars/master/hosts"],
76
+ korean_ad_hosts: ["https://raw.githubusercontent.com/yous/YousList/master/hosts.txt"],
77
+
78
+ # Mobile and app-specific
79
+ mobile_ads: ["https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/MobileFilter/sections/adservers.txt"],
80
+ smart_tv_ads: ["https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/SmartTV-AGH.txt"],
81
+
82
+ # Content and informational categories
83
+ news: ["https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-only/hosts"],
84
+ # Note: The following categories had broken URLs and have been commented out:
85
+ # legitimate_news: URLs from mitchellkrogza repository return 404
86
+ # blogs, forums, health, finance, streaming, shopping: blocklistproject alt-version URLs return 404
87
+ # educational: StevenBlack educational hosts URL returns 404
88
+ # government: mitchellkrogza government domains URL returns 404
89
+ # business, technology: blocklistproject alt-version URLs return 404
90
+ # local_news, international_news: blocklistproject alt-version URLs return 404
43
91
  }
44
92
  end
45
93
  end
@@ -0,0 +1,105 @@
1
+ begin
2
+ require 'active_record'
3
+ rescue LoadError
4
+ # ActiveRecord not available, skip model definitions
5
+ module UrlCategorise
6
+ module Models
7
+ def self.available?
8
+ false
9
+ end
10
+ end
11
+ end
12
+ else
13
+ module UrlCategorise
14
+ module Models
15
+ def self.available?
16
+ true
17
+ end
18
+
19
+ class ListMetadata < ActiveRecord::Base
20
+ self.table_name = 'url_categorise_list_metadata'
21
+
22
+ validates :name, presence: true, uniqueness: true
23
+ validates :url, presence: true
24
+ validates :categories, presence: true
25
+
26
+ serialize :categories, coder: JSON
27
+
28
+ scope :by_category, ->(category) { where('categories LIKE ?', "%#{category}%") }
29
+ scope :updated_since, ->(time) { where('updated_at > ?', time) }
30
+ end
31
+
32
+ class Domain < ActiveRecord::Base
33
+ self.table_name = 'url_categorise_domains'
34
+
35
+ validates :domain, presence: true, uniqueness: true
36
+ validates :categories, presence: true
37
+
38
+ serialize :categories, coder: JSON
39
+
40
+ scope :by_category, ->(category) { where('categories LIKE ?', "%#{category}%") }
41
+ scope :search, ->(term) { where('domain LIKE ?', "%#{term}%") }
42
+
43
+ def self.categorise(domain_name)
44
+ record = find_by(domain: domain_name.downcase.gsub('www.', ''))
45
+ record ? record.categories : []
46
+ end
47
+ end
48
+
49
+ class IpAddress < ActiveRecord::Base
50
+ self.table_name = 'url_categorise_ip_addresses'
51
+
52
+ validates :ip_address, presence: true, uniqueness: true
53
+ validates :categories, presence: true
54
+
55
+ serialize :categories, coder: JSON
56
+
57
+ scope :by_category, ->(category) { where('categories LIKE ?', "%#{category}%") }
58
+ scope :in_subnet, ->(subnet) { where('ip_address LIKE ?', "#{subnet}%") }
59
+
60
+ def self.categorise(ip)
61
+ record = find_by(ip_address: ip)
62
+ record ? record.categories : []
63
+ end
64
+ end
65
+
66
+ # Generator for Rails integration
67
+ def self.generate_migration
68
+ <<~MIGRATION
69
+ class CreateUrlCategoriseTables < ActiveRecord::Migration[8.0]
70
+ def change
71
+ create_table :url_categorise_list_metadata do |t|
72
+ t.string :name, null: false, index: { unique: true }
73
+ t.string :url, null: false
74
+ t.text :categories, null: false
75
+ t.string :file_path
76
+ t.datetime :fetched_at
77
+ t.string :file_hash
78
+ t.datetime :file_updated_at
79
+ t.timestamps
80
+ end
81
+
82
+ create_table :url_categorise_domains do |t|
83
+ t.string :domain, null: false, index: { unique: true }
84
+ t.text :categories, null: false
85
+ t.timestamps
86
+ end
87
+
88
+ add_index :url_categorise_domains, :domain
89
+ add_index :url_categorise_domains, :categories
90
+
91
+ create_table :url_categorise_ip_addresses do |t|
92
+ t.string :ip_address, null: false, index: { unique: true }
93
+ t.text :categories, null: false
94
+ t.timestamps
95
+ end
96
+
97
+ add_index :url_categorise_ip_addresses, :ip_address
98
+ add_index :url_categorise_ip_addresses, :categories
99
+ end
100
+ end
101
+ MIGRATION
102
+ end
103
+ end
104
+ end
105
+ end
@@ -1,3 +1,3 @@
1
1
  module UrlCategorise
2
- VERSION = "0.0.3"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -1,5 +1,8 @@
1
1
  require 'httparty'
2
2
  require 'nokogiri'
3
+ require 'digest'
4
+ require 'fileutils'
5
+ require 'resolv'
3
6
 
4
7
  require 'api-pattern'
5
8
 
@@ -8,6 +11,14 @@ require 'url_categorise/constants'
8
11
 
9
12
  require 'url_categorise/client'
10
13
 
14
+ # Optional ActiveRecord integration
15
+ begin
16
+ require 'url_categorise/models'
17
+ require 'url_categorise/active_record_client'
18
+ rescue LoadError
19
+ # ActiveRecord not available, skip
20
+ end
21
+
11
22
  module UrlCategorise
12
23
  class Error < StandardError; end
13
24
  end
@@ -21,16 +21,29 @@ Gem::Specification.new do |spec|
21
21
  spec.bindir = "exe"
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ["lib"]
24
+ spec.required_ruby_version = ">= 3.0.0"
24
25
 
25
- spec.add_dependency "api_pattern", "~> 0.0.4"
26
+ spec.add_dependency "api_pattern", ">= 0.0.6", "< 1.0"
27
+ spec.add_dependency "httparty", ">= 0.22.0", "< 1.0"
28
+ spec.add_dependency "nokogiri", ">= 1.16.0", "< 2.0"
29
+ spec.add_dependency "csv", ">= 3.3.0", "< 4.0"
30
+ spec.add_dependency "digest", ">= 3.1.0", "< 4.0"
31
+ spec.add_dependency "fileutils", ">= 1.7.0", "< 2.0"
32
+ spec.add_dependency "resolv", ">= 0.4.0", "< 1.0"
26
33
 
27
34
  # Development dependancies
28
- spec.add_development_dependency "rake", "~> 13.0.6"
29
- spec.add_development_dependency "minitest", "~> 5.18.0"
30
- spec.add_development_dependency "minitest-focus", "~> 1.3.1"
31
- spec.add_development_dependency "minitest-reporters", "~> 1.6.0"
32
- spec.add_development_dependency "timecop", "~> 0.9.6"
33
- spec.add_development_dependency "mocha", "~> 2.0.2"
34
- spec.add_development_dependency "pry", "~> 0.14.2"
35
- spec.add_development_dependency "webmock", "~> 3.18.1"
35
+ spec.add_development_dependency "rake", "~> 13.3.0"
36
+ spec.add_development_dependency "minitest", "~> 5.25.5"
37
+ spec.add_development_dependency "minitest-focus", "~> 1.4.0"
38
+ spec.add_development_dependency "minitest-reporters", "~> 1.7.1"
39
+ spec.add_development_dependency "timecop", "~> 0.9.10"
40
+ spec.add_development_dependency "mocha", "~> 2.4.5"
41
+ spec.add_development_dependency "pry", "~> 0.15.2"
42
+ spec.add_development_dependency "webmock", "~> 3.24.0"
43
+ spec.add_development_dependency "simplecov", "~> 0.22.0"
44
+
45
+ # Test dependancies
46
+ spec.add_development_dependency "activerecord", ">= 8.0"
47
+ spec.add_development_dependency "sqlite3", ">= 2.7"
48
+ spec.add_development_dependency "logger"
36
49
  end
metadata CHANGED
@@ -1,141 +1,322 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: UrlCategorise
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - trex22
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2023-05-20 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: api_pattern
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - "~>"
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 0.0.6
19
+ - - "<"
18
20
  - !ruby/object:Gem::Version
19
- version: 0.0.4
21
+ version: '1.0'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
23
25
  requirements:
24
- - - "~>"
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: 0.0.6
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '1.0'
32
+ - !ruby/object:Gem::Dependency
33
+ name: httparty
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: 0.22.0
39
+ - - "<"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.0'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
25
47
  - !ruby/object:Gem::Version
26
- version: 0.0.4
48
+ version: 0.22.0
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '1.0'
52
+ - !ruby/object:Gem::Dependency
53
+ name: nokogiri
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: 1.16.0
59
+ - - "<"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 1.16.0
69
+ - - "<"
70
+ - !ruby/object:Gem::Version
71
+ version: '2.0'
72
+ - !ruby/object:Gem::Dependency
73
+ name: csv
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 3.3.0
79
+ - - "<"
80
+ - !ruby/object:Gem::Version
81
+ version: '4.0'
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 3.3.0
89
+ - - "<"
90
+ - !ruby/object:Gem::Version
91
+ version: '4.0'
92
+ - !ruby/object:Gem::Dependency
93
+ name: digest
94
+ requirement: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: 3.1.0
99
+ - - "<"
100
+ - !ruby/object:Gem::Version
101
+ version: '4.0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: 3.1.0
109
+ - - "<"
110
+ - !ruby/object:Gem::Version
111
+ version: '4.0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: fileutils
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: 1.7.0
119
+ - - "<"
120
+ - !ruby/object:Gem::Version
121
+ version: '2.0'
122
+ type: :runtime
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: 1.7.0
129
+ - - "<"
130
+ - !ruby/object:Gem::Version
131
+ version: '2.0'
132
+ - !ruby/object:Gem::Dependency
133
+ name: resolv
134
+ requirement: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 0.4.0
139
+ - - "<"
140
+ - !ruby/object:Gem::Version
141
+ version: '1.0'
142
+ type: :runtime
143
+ prerelease: false
144
+ version_requirements: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: 0.4.0
149
+ - - "<"
150
+ - !ruby/object:Gem::Version
151
+ version: '1.0'
27
152
  - !ruby/object:Gem::Dependency
28
153
  name: rake
29
154
  requirement: !ruby/object:Gem::Requirement
30
155
  requirements:
31
156
  - - "~>"
32
157
  - !ruby/object:Gem::Version
33
- version: 13.0.6
158
+ version: 13.3.0
34
159
  type: :development
35
160
  prerelease: false
36
161
  version_requirements: !ruby/object:Gem::Requirement
37
162
  requirements:
38
163
  - - "~>"
39
164
  - !ruby/object:Gem::Version
40
- version: 13.0.6
165
+ version: 13.3.0
41
166
  - !ruby/object:Gem::Dependency
42
167
  name: minitest
43
168
  requirement: !ruby/object:Gem::Requirement
44
169
  requirements:
45
170
  - - "~>"
46
171
  - !ruby/object:Gem::Version
47
- version: 5.18.0
172
+ version: 5.25.5
48
173
  type: :development
49
174
  prerelease: false
50
175
  version_requirements: !ruby/object:Gem::Requirement
51
176
  requirements:
52
177
  - - "~>"
53
178
  - !ruby/object:Gem::Version
54
- version: 5.18.0
179
+ version: 5.25.5
55
180
  - !ruby/object:Gem::Dependency
56
181
  name: minitest-focus
57
182
  requirement: !ruby/object:Gem::Requirement
58
183
  requirements:
59
184
  - - "~>"
60
185
  - !ruby/object:Gem::Version
61
- version: 1.3.1
186
+ version: 1.4.0
62
187
  type: :development
63
188
  prerelease: false
64
189
  version_requirements: !ruby/object:Gem::Requirement
65
190
  requirements:
66
191
  - - "~>"
67
192
  - !ruby/object:Gem::Version
68
- version: 1.3.1
193
+ version: 1.4.0
69
194
  - !ruby/object:Gem::Dependency
70
195
  name: minitest-reporters
71
196
  requirement: !ruby/object:Gem::Requirement
72
197
  requirements:
73
198
  - - "~>"
74
199
  - !ruby/object:Gem::Version
75
- version: 1.6.0
200
+ version: 1.7.1
76
201
  type: :development
77
202
  prerelease: false
78
203
  version_requirements: !ruby/object:Gem::Requirement
79
204
  requirements:
80
205
  - - "~>"
81
206
  - !ruby/object:Gem::Version
82
- version: 1.6.0
207
+ version: 1.7.1
83
208
  - !ruby/object:Gem::Dependency
84
209
  name: timecop
85
210
  requirement: !ruby/object:Gem::Requirement
86
211
  requirements:
87
212
  - - "~>"
88
213
  - !ruby/object:Gem::Version
89
- version: 0.9.6
214
+ version: 0.9.10
90
215
  type: :development
91
216
  prerelease: false
92
217
  version_requirements: !ruby/object:Gem::Requirement
93
218
  requirements:
94
219
  - - "~>"
95
220
  - !ruby/object:Gem::Version
96
- version: 0.9.6
221
+ version: 0.9.10
97
222
  - !ruby/object:Gem::Dependency
98
223
  name: mocha
99
224
  requirement: !ruby/object:Gem::Requirement
100
225
  requirements:
101
226
  - - "~>"
102
227
  - !ruby/object:Gem::Version
103
- version: 2.0.2
228
+ version: 2.4.5
104
229
  type: :development
105
230
  prerelease: false
106
231
  version_requirements: !ruby/object:Gem::Requirement
107
232
  requirements:
108
233
  - - "~>"
109
234
  - !ruby/object:Gem::Version
110
- version: 2.0.2
235
+ version: 2.4.5
111
236
  - !ruby/object:Gem::Dependency
112
237
  name: pry
113
238
  requirement: !ruby/object:Gem::Requirement
114
239
  requirements:
115
240
  - - "~>"
116
241
  - !ruby/object:Gem::Version
117
- version: 0.14.2
242
+ version: 0.15.2
118
243
  type: :development
119
244
  prerelease: false
120
245
  version_requirements: !ruby/object:Gem::Requirement
121
246
  requirements:
122
247
  - - "~>"
123
248
  - !ruby/object:Gem::Version
124
- version: 0.14.2
249
+ version: 0.15.2
125
250
  - !ruby/object:Gem::Dependency
126
251
  name: webmock
127
252
  requirement: !ruby/object:Gem::Requirement
128
253
  requirements:
129
254
  - - "~>"
130
255
  - !ruby/object:Gem::Version
131
- version: 3.18.1
256
+ version: 3.24.0
132
257
  type: :development
133
258
  prerelease: false
134
259
  version_requirements: !ruby/object:Gem::Requirement
135
260
  requirements:
136
261
  - - "~>"
137
262
  - !ruby/object:Gem::Version
138
- version: 3.18.1
263
+ version: 3.24.0
264
+ - !ruby/object:Gem::Dependency
265
+ name: simplecov
266
+ requirement: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - "~>"
269
+ - !ruby/object:Gem::Version
270
+ version: 0.22.0
271
+ type: :development
272
+ prerelease: false
273
+ version_requirements: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - "~>"
276
+ - !ruby/object:Gem::Version
277
+ version: 0.22.0
278
+ - !ruby/object:Gem::Dependency
279
+ name: activerecord
280
+ requirement: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - ">="
283
+ - !ruby/object:Gem::Version
284
+ version: '8.0'
285
+ type: :development
286
+ prerelease: false
287
+ version_requirements: !ruby/object:Gem::Requirement
288
+ requirements:
289
+ - - ">="
290
+ - !ruby/object:Gem::Version
291
+ version: '8.0'
292
+ - !ruby/object:Gem::Dependency
293
+ name: sqlite3
294
+ requirement: !ruby/object:Gem::Requirement
295
+ requirements:
296
+ - - ">="
297
+ - !ruby/object:Gem::Version
298
+ version: '2.7'
299
+ type: :development
300
+ prerelease: false
301
+ version_requirements: !ruby/object:Gem::Requirement
302
+ requirements:
303
+ - - ">="
304
+ - !ruby/object:Gem::Version
305
+ version: '2.7'
306
+ - !ruby/object:Gem::Dependency
307
+ name: logger
308
+ requirement: !ruby/object:Gem::Requirement
309
+ requirements:
310
+ - - ">="
311
+ - !ruby/object:Gem::Version
312
+ version: '0'
313
+ type: :development
314
+ prerelease: false
315
+ version_requirements: !ruby/object:Gem::Requirement
316
+ requirements:
317
+ - - ">="
318
+ - !ruby/object:Gem::Version
319
+ version: '0'
139
320
  description: A client for using the UrlCategorise API in Ruby. Built from their api
140
321
  documentation. This is an unofficial project.
141
322
  email:
@@ -144,25 +325,33 @@ executables: []
144
325
  extensions: []
145
326
  extra_rdoc_files: []
146
327
  files:
328
+ - ".claude/settings.local.json"
329
+ - ".github/workflows/ci.yml"
147
330
  - ".gitignore"
331
+ - ".ruby-version"
332
+ - CLAUDE.md
148
333
  - CODE_OF_CONDUCT.md
149
334
  - Gemfile
150
335
  - Gemfile.lock
151
336
  - LICENSE
152
337
  - README.md
153
338
  - Rakefile
339
+ - bin/check_lists
154
340
  - bin/console
155
341
  - bin/setup
342
+ - docs/.keep
343
+ - docs/v0.1-context.md
156
344
  - lib/url_categorise.rb
345
+ - lib/url_categorise/active_record_client.rb
157
346
  - lib/url_categorise/client.rb
158
347
  - lib/url_categorise/constants.rb
348
+ - lib/url_categorise/models.rb
159
349
  - lib/url_categorise/version.rb
160
350
  - url_categorise.gemspec
161
351
  homepage: https://github.com/TRex22/UrlCategorise
162
352
  licenses:
163
353
  - MIT
164
354
  metadata: {}
165
- post_install_message:
166
355
  rdoc_options: []
167
356
  require_paths:
168
357
  - lib
@@ -170,15 +359,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
170
359
  requirements:
171
360
  - - ">="
172
361
  - !ruby/object:Gem::Version
173
- version: '0'
362
+ version: 3.0.0
174
363
  required_rubygems_version: !ruby/object:Gem::Requirement
175
364
  requirements:
176
365
  - - ">="
177
366
  - !ruby/object:Gem::Version
178
367
  version: '0'
179
368
  requirements: []
180
- rubygems_version: 3.3.4
181
- signing_key:
369
+ rubygems_version: 3.6.9
182
370
  specification_version: 4
183
371
  summary: A client for using the UrlCategorise API in Ruby.
184
372
  test_files: []