fcc 1.0.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.
@@ -1,180 +0,0 @@
1
- require 'zip'
2
-
3
- module FCC
4
- module Station
5
- class Result
6
- EXTENDED_ATTRIBUTES = %i[band signal_strength latitude longitude station_class file_number effective_radiated_power haat_horizontal haat_vertical antenna_type operating_hours licensed_to city state country] # these take a long time to query
7
- BASIC_ATTRIBUTES = %i[id call_sign status rf_channel license_expiration_date facility_type frequency band]
8
-
9
- def initialize(service, call_sign, options = {})
10
- @call_sign = call_sign.upcase
11
- @service = service
12
- @options = options
13
-
14
- data
15
-
16
- self
17
- end
18
-
19
- def details_available?
20
- exists? && data.latitude.present?
21
- end
22
-
23
- def licensed?
24
- exists? && data.status == 'LICENSED' && data.license_expiration_date && Time.parse(data.license_expiration_date) > Time.now
25
- end
26
-
27
- def exists?
28
- grouped_records.any?
29
- end
30
-
31
- def to_json(*_args)
32
- [].tap do |records|
33
- grouped_records.each do |rg|
34
- records << rg.to_json
35
- end
36
- end.flatten.compact.uniq
37
- end
38
-
39
- def coordinates_url
40
- "https://www.google.com/maps/search/#{latitude},#{longitude}" if latitude.present? && longitude.present?
41
- end
42
-
43
- def extended_data_url
44
- "https://transition.fcc.gov/fcc-bin/#{@service.to_s.downcase}q?list=4&facid=#{id}"
45
- end
46
-
47
- def enterprise_data_url
48
- "https://enterpriseefiling.fcc.gov/dataentry/public/tv/publicFacilityDetails.html?facilityId=#{id}"
49
- end
50
-
51
- def data
52
- @data ||= RecordDelegate.new(Info.new(@service).find(@call_sign))
53
- end
54
- alias public_data data
55
-
56
- def grouped_records
57
- grouped = all_records.group_by do |record|
58
- [record.id, record.call_sign, record.band, record.frequency].compact.join('/')
59
- end
60
-
61
- [].tap do |res|
62
- grouped.each do |_key, values|
63
- res << RecordGroup.new(values)
64
- end
65
- end
66
- end
67
- alias records grouped_records
68
-
69
- def all_records
70
- [public_records, transition_records, related_translators].flatten.compact.filter { |f| f.has_data? }
71
- end
72
-
73
- def related_translators
74
- @related_translators ||= begin
75
- records = lms_data.find_translators_for(call_sign: @call_sign)
76
- records.keys.map do |call|
77
- RecordDelegate.new(ExtendedInfo.new(@service).find(call))
78
- end.select { |f| f.status.upcase == "LIC" }
79
- rescue
80
- []
81
- end
82
- end
83
-
84
- def related_stations
85
- @related_stations ||= begin
86
- records = lms_data.find_related_stations(call_sign: @call_sign)
87
- records.keys.map do |call|
88
- RecordDelegate.new(ExtendedInfo.new(@service).find(call))
89
- end.select { |f| f.status.upcase == "LIC" }
90
- end
91
- end
92
-
93
- def related
94
- @related ||= begin
95
- records = lms_data.find_all_related(call_sign: @call_sign)
96
- records.keys.map do |call|
97
- ExtendedInfo.new(@service).find(call).collect do |info|
98
- RecordDelegate.new(info)
99
- end
100
- end.flatten.select { |f| f.status.upcase == "LIC" }
101
- end
102
- end
103
-
104
- def print_broadcast_summary
105
- FCC.log "[primary]"
106
- transition_records.each do |record|
107
- FCC.log "[#{record.band}] #{record.frequency} #{record.call_sign} — #{record.community.city} #{record.community.state}"
108
- end
109
-
110
- FCC.log "[translators]"
111
- related_translators.each do |record|
112
- FCC.log "[#{record.band}] #{record.frequency} #{record.call_sign} — #{record.community.city} #{record.community.state}"
113
- end
114
-
115
- FCC.log "[related stations]"
116
- related_stations.each do |record|
117
- FCC.log "[#{record.band}] #{record.frequency} #{record.call_sign} — #{record.community.city} #{record.community.state}"
118
- end
119
-
120
- FCC.log "[all related]"
121
- related.each do |record|
122
- FCC.log "[#{record.band}] #{record.frequency} #{record.call_sign} — #{record.community.city} #{record.community.state}"
123
- end
124
-
125
- nil
126
- end
127
-
128
- def lms_data
129
- @lms_data ||= LmsData.new
130
- end
131
-
132
- def call_signs_match?(ours, theirs)
133
- theirs.to_s.upcase.to_s == ours.to_s.upcase.to_s || theirs.to_s.upcase =~ Regexp.new("^#{ours.to_s.upcase}[-—–][A-Z0-9]+$")
134
- end
135
-
136
- private
137
-
138
- def public_records
139
- public_data_info.map { |r| RecordDelegate.new(r) }
140
- end
141
-
142
- def transition_records
143
- transition_data_info.map { |r| RecordDelegate.new(r) }
144
- end
145
-
146
- def related_records
147
- results = related.keys.collect do |call_sign|
148
- RecordDelegate.new(ExtendedInfo.new(@service).find(call_sign))
149
- end
150
- end
151
-
152
- def public_data_info
153
- @public_data_info ||= [Info.new(@service).find(@call_sign)]
154
- end
155
-
156
- def transition_data_info
157
- @transition_data_info ||= ExtendedInfo.new(@service).find(@call_sign)
158
- end
159
-
160
- def method_missing(m, *_args)
161
- service = if @service == :fm
162
- fm_record = grouped_records.find { |gr| FCC::FM_FULL_SERVICE == gr.band.upcase }
163
- fm_low_power = grouped_records.find { |gr| FCC::FM_LOW_POWER == gr.band.upcase }
164
- fm_booster = grouped_records.find { |gr| FCC::FM_BOOSTER == gr.band.upcase }
165
- fm_translator = grouped_records.find { |gr| FCC::FM_TRANSLATOR == gr.band.upcase }
166
-
167
- [fm_record, fm_low_power, fm_booster, fm_translator].compact.find { |r| r.send(m.to_sym) }
168
- else
169
- grouped_records.find { |r| r.send(m.to_sym) }
170
- end
171
-
172
- result = service.send(m.to_sym) if service
173
-
174
- result = result.first if result.is_a?(Array) && result.size == 1
175
-
176
- result
177
- end
178
- end
179
- end
180
- end
data/package.json DELETED
@@ -1,92 +0,0 @@
1
- {
2
- "name": "fcc",
3
- "version": "1.x.x-semantic-release",
4
- "repository": {
5
- "type": "git",
6
- "url": "git+https://github.com/jkeen/fcc.git"
7
- },
8
- "author": "jkeen",
9
- "license": "MIT",
10
- "bugs": {
11
- "url": "https://github.com/jkeen/fcc/issues"
12
- },
13
- "homepage": "https://github.com/jkeen/fcc#readme",
14
- "scripts": {
15
- "semantic-release": "semantic-release"
16
- },
17
- "devDependencies": {
18
- "semantic-release-rubygem": "^1.2.0",
19
- "semantic-release": "^19.0.3",
20
- "@semantic-release/changelog": "^6.0.1",
21
- "@semantic-release/git": "^10.0.1"
22
- },
23
- "release": {
24
- "branches": ["main"],
25
- "plugins": [
26
- [
27
- "@semantic-release/commit-analyzer",
28
- {
29
- "releaseRules": [
30
- {
31
- "type": "*!",
32
- "release": "major"
33
- },
34
- {
35
- "type": "feat",
36
- "release": "minor"
37
- },
38
- {
39
- "type": "build",
40
- "release": "patch"
41
- },
42
- {
43
- "type": "ci",
44
- "release": "patch"
45
- },
46
- {
47
- "type": "chore",
48
- "release": "patch"
49
- },
50
- {
51
- "type": "docs",
52
- "release": "patch"
53
- },
54
- {
55
- "type": "refactor",
56
- "release": "patch"
57
- },
58
- {
59
- "type": "style",
60
- "release": "patch"
61
- },
62
- {
63
- "type": "test",
64
- "release": "patch"
65
- }
66
- ],
67
- "parserOpts": {
68
- "noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES", "BREAKING"]
69
- }
70
- }
71
- ],
72
- "@semantic-release/release-notes-generator",
73
- [
74
- "@semantic-release/changelog",
75
- {
76
- "changelogTitle": "fcc changelog",
77
- "changelogFile": "CHANGELOG.md"
78
- }
79
- ],
80
- "semantic-release-rubygem",
81
- "@semantic-release/github",
82
- [
83
- "@semantic-release/git",
84
- {
85
- "assets": ["CHANGELOG.md"],
86
- "message": "${nextRelease.version} CHANGELOG [skip ci]\n\n${nextRelease.notes}"
87
- }
88
- ]
89
- ],
90
- "debug": false,
91
- "dryRun": false
92
- }}