orb_def 0.0.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.
Files changed (113) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +79 -0
  3. data/.gitignore +14 -0
  4. data/.rakeTasks +7 -0
  5. data/.rspec +1 -0
  6. data/Gemfile +15 -0
  7. data/Gemfile.lock +207 -0
  8. data/MIT-LICENSE +20 -0
  9. data/README.md +30 -0
  10. data/Rakefile +23 -0
  11. data/app/assets/config/orb_def_manifest.js +2 -0
  12. data/app/assets/javascripts/orb_def/application.js +15 -0
  13. data/app/assets/stylesheets/orb_def/application.css +15 -0
  14. data/app/controllers/orb_def/api/v1/fires_controller.rb +64 -0
  15. data/app/controllers/orb_def/api/v1/weather_readings_controller.rb +16 -0
  16. data/app/controllers/orb_def/application_controller.rb +5 -0
  17. data/app/helpers/orb_def/application_helper.rb +4 -0
  18. data/app/jobs/orb_def/application_job.rb +4 -0
  19. data/app/mailers/orb_def/application_mailer.rb +6 -0
  20. data/app/models/orb_def/application_record.rb +5 -0
  21. data/app/models/orb_def/detection_type.rb +7 -0
  22. data/app/models/orb_def/fire.rb +60 -0
  23. data/app/models/orb_def/weather_reading.rb +41 -0
  24. data/app/models/orb_def/weather_station.rb +33 -0
  25. data/app/serializers/orb_def/api/v1/fire_serializer.rb +17 -0
  26. data/app/services/orb_def/fire_weather_data.rb +36 -0
  27. data/app/services/orb_def/nasa/firms_client.rb +38 -0
  28. data/app/services/orb_def/nasa/firms_import.rb +44 -0
  29. data/app/services/orb_def/open_weather_api/weather_by_coordinates.rb +31 -0
  30. data/app/views/layouts/orb_def/application.html.erb +16 -0
  31. data/bin/rails +25 -0
  32. data/config/routes.rb +13 -0
  33. data/db/migrate/20200422073925_create_orb_def_weather_stations.rb +12 -0
  34. data/db/migrate/20200422073938_create_orb_def_weather_readings.rb +20 -0
  35. data/db/migrate/20200423064313_create_orb_def_detection_types.rb +9 -0
  36. data/db/migrate/20200428063630_create_orb_def_fires.rb +28 -0
  37. data/db/seeds.rb +8 -0
  38. data/lib/orb_def/engine.rb +16 -0
  39. data/lib/orb_def/version.rb +3 -0
  40. data/lib/orb_def.rb +16 -0
  41. data/lib/tasks/orb_def_tasks.rake +4 -0
  42. data/orb_def.gemspec +38 -0
  43. data/spec/controllers/orb_def/api/v1/fires_controller_spec.rb +16 -0
  44. data/spec/dummy/Rakefile +6 -0
  45. data/spec/dummy/app/assets/config/manifest.js +4 -0
  46. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  47. data/spec/dummy/app/assets/javascripts/cable.js +13 -0
  48. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  49. data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
  50. data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
  51. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  52. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  53. data/spec/dummy/app/jobs/application_job.rb +2 -0
  54. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  55. data/spec/dummy/app/models/application_record.rb +3 -0
  56. data/spec/dummy/app/views/layouts/application.html.erb +15 -0
  57. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  58. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  59. data/spec/dummy/bin/bundle +3 -0
  60. data/spec/dummy/bin/rails +4 -0
  61. data/spec/dummy/bin/rake +4 -0
  62. data/spec/dummy/bin/setup +36 -0
  63. data/spec/dummy/bin/update +31 -0
  64. data/spec/dummy/bin/yarn +11 -0
  65. data/spec/dummy/config/application.rb +30 -0
  66. data/spec/dummy/config/boot.rb +5 -0
  67. data/spec/dummy/config/cable.yml +10 -0
  68. data/spec/dummy/config/database.yml +21 -0
  69. data/spec/dummy/config/environment.rb +5 -0
  70. data/spec/dummy/config/environments/development.rb +61 -0
  71. data/spec/dummy/config/environments/production.rb +94 -0
  72. data/spec/dummy/config/environments/test.rb +46 -0
  73. data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
  74. data/spec/dummy/config/initializers/assets.rb +14 -0
  75. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  76. data/spec/dummy/config/initializers/content_security_policy.rb +25 -0
  77. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
  78. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  79. data/spec/dummy/config/initializers/inflections.rb +16 -0
  80. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  81. data/spec/dummy/config/initializers/orb_def.rb +4 -0
  82. data/spec/dummy/config/initializers/pagy.rb +170 -0
  83. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  84. data/spec/dummy/config/locales/en.yml +33 -0
  85. data/spec/dummy/config/orb_def/spring.rb +1 -0
  86. data/spec/dummy/config/puma.rb +37 -0
  87. data/spec/dummy/config/routes.rb +3 -0
  88. data/spec/dummy/config/spring.rb +6 -0
  89. data/spec/dummy/config/storage.yml +34 -0
  90. data/spec/dummy/config.ru +5 -0
  91. data/spec/dummy/db/schema.rb +87 -0
  92. data/spec/dummy/package.json +5 -0
  93. data/spec/dummy/public/404.html +67 -0
  94. data/spec/dummy/public/422.html +67 -0
  95. data/spec/dummy/public/500.html +66 -0
  96. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  97. data/spec/dummy/public/apple-touch-icon.png +0 -0
  98. data/spec/dummy/public/favicon.ico +0 -0
  99. data/spec/factories/detection_type.rb +5 -0
  100. data/spec/fixtures/files/modis_c6.txt +3 -0
  101. data/spec/fixtures/nasa/firms/viirs.txt +3 -0
  102. data/spec/rails_helper.rb +72 -0
  103. data/spec/services/orbital_defence_engine/nasa/firms_import_spec.rb +27 -0
  104. data/spec/services/orbital_defence_engine/open_weather_api/weather_by_coordinates_spec.rb +16 -0
  105. data/spec/spec/vcr/cassettes/OrbitalDefenceEngine_Nasa_FirmsImport/_all/when_request_successful/creates_fires.yml +77 -0
  106. data/spec/spec/vcr/cassettes/OrbitalDefenceEngine_OpenWeatherApi_WeatherByCoordinates/_fetch_weather_by_coordinates/returns_json_data_as_a_hash.yml +41 -0
  107. data/spec/spec_helper.rb +96 -0
  108. data/spec/support/factory_bot.rb +3 -0
  109. data/spec/support/vcr.rb +9 -0
  110. data/spec/vcr/cassettes/OpenWeatherApi_WeatherByCoordinates/_fetch_weather_by_coordinates/returns_json_data_as_a_hash.yml +41 -0
  111. data/spec/vcr/cassettes/OrbDef_Nasa_FirmsImport/_all/when_request_successful/creates_fires.yml +4766 -0
  112. data/spec/vcr/cassettes/OrbDef_OpenWeatherApi_WeatherByCoordinates/_fetch_weather_by_coordinates/returns_json_data_as_a_hash.yml +41 -0
  113. metadata +438 -0
@@ -0,0 +1,33 @@
1
+ module OrbDef
2
+ class WeatherStation < ApplicationRecord
3
+ acts_as_mappable :default_units => :kms,
4
+ :default_formula => :sphere,
5
+ :lat_column_name => :latitude,
6
+ :lng_column_name => :longitude
7
+
8
+ has_many :weather_readings, dependent: :destroy
9
+ has_many :fires
10
+
11
+ validates :identifier, uniqueness: true
12
+
13
+ class << self
14
+ def find_or_create(reading_json)
15
+ identifier = "#{reading_json['name']}:AUS"
16
+ weather_station = WeatherStation.find_by(identifier: identifier)
17
+
18
+ return weather_station if weather_station.present?
19
+
20
+ WeatherStation.create(
21
+ identifier: identifier,
22
+ name: reading_json['name'],
23
+ latitude: reading_json['coord']['lat'],
24
+ longitude: reading_json['coord']['lon']
25
+ )
26
+ end
27
+ end
28
+
29
+ def latest_weather_reading
30
+ self.weather_readings.last
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,17 @@
1
+ module OrbDef
2
+ class Api::V1::FireSerializer < ActiveModel::Serializer
3
+ attributes :id, :scan_type, :detected_at, :confidence, :latitude, :longitude, :weather_reading_id, :weather_station_id
4
+
5
+ def id
6
+ object.id.to_s
7
+ end
8
+
9
+ def weather_reading_id
10
+ object.weather_reading_id.to_s
11
+ end
12
+
13
+ def weather_station_id
14
+ object.weather_station_id.to_s
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OrbDef
4
+ class FireWeatherData
5
+ attr_reader :fire
6
+
7
+ def initialize(fire)
8
+ @fire = fire
9
+ end
10
+
11
+ def find_or_create_weather
12
+ weather_station = WeatherStation.within(10, origin: [fire.latitude, fire.longitude]).first
13
+
14
+ if weather_station.present? && weather_reading_within_limits?(weather_station)
15
+ return weather_station, weather_station.weather_readings.last
16
+ else
17
+ create_station_and_reading
18
+ end
19
+ end
20
+
21
+ def create_station_and_reading
22
+ reading_json = OpenWeatherApi::WeatherByCoordinates.fetch(latitude: fire.latitude, longitude: fire.longitude)
23
+
24
+ return unless reading_json
25
+
26
+ weather_station = WeatherStation.find_or_create(reading_json)
27
+ weather_reading = WeatherReading.find_or_create_by_reading(reading_json, weather_station.id)
28
+
29
+ return weather_station, weather_reading
30
+ end
31
+
32
+ def weather_reading_within_limits?(weather_station)
33
+ weather_station.weather_readings&.last.reading_at.between?(fire.detected_at - 30.minutes, fire.detected_at + 30.minutes)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+ module OrbDef
3
+ module Nasa
4
+ class RemoteServerError < StandardError; end
5
+
6
+ class FirmsClient
7
+ class << self
8
+ def fetch(url, date: julian_date)
9
+ Rails.logger.info('Nasa::FirmsClient#fetch - Started')
10
+
11
+ response = client.get do |req|
12
+ req.url "#{url}#{date}.txt"
13
+ req.headers['Authorization'] = "Bearer #{OrbDef.nasa_api_key}"
14
+ end
15
+
16
+ if response.success?
17
+ Rails.logger.info('Nasa::FirmsClient#fetch - Completed')
18
+ response.body
19
+ else
20
+ Rails.logger.error("Nasa::FirmsClient#fetch - Failed: #{response.status} #{response.body} - #{url}#{julian_date}")
21
+ raise RemoteServerError
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def julian_date
28
+ @julian_date ||= "#{Date.today.year}#{"%.3d" % Date.today.yday}".to_i
29
+ end
30
+
31
+ def client
32
+ @client ||= Faraday.new(url: 'https://nrt4.modaps.eosdis.nasa.gov')
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+ module OrbDef
3
+ module Nasa
4
+ class FirmsImport
5
+ require 'csv'
6
+
7
+ FIRMS_DATA_URLS = {
8
+ # modis: '/api/v2/content/archives/FIRMS/c6/Australia_NewZealand/MODIS_C6_Australia_NewZealand_MCD14DL_NRT_',
9
+ # virrs: '/api/v2/content/archives/FIRMS/viirs/Australia_NewZealand/VIIRS_I_Australia_NewZealand_VNP14IMGTDL_NRT_'
10
+ modis: '/api/v2/content/archives/FIRMS/c6/Global/MODIS_C6_Global_MCD14DL_NRT_',
11
+ virrs: '/api/v2/content/archives/FIRMS/viirs/Global/VIIRS_I_Global_VNP14IMGTDL_NRT_'
12
+ #modis: '/api/v2/content/archives/FIRMS/c6/Southern_Africa/MODIS_C6_Southern_Africa_MCD14DL_NRT_',
13
+ #viirs: '/api/v2/content/archives/FIRMS/viirs/Southern_Africa/VIIRS_I_Southern_Africa_VNP14IMGTDL_NRT_'
14
+ }
15
+
16
+ class << self
17
+ def all
18
+ FIRMS_DATA_URLS.each do |key, url|
19
+ csv_text = Nasa::FirmsClient.fetch(url)
20
+ parse_and_create_fire(csv_text: csv_text, scan_type: key)
21
+
22
+ rescue Nasa::RemoteServerError
23
+ Rails.logger.error("Nasa::FirmsImport#all - Failed to fetch #{key}")
24
+ end
25
+ end
26
+
27
+ def file(file:, scan_type:)
28
+ parse_and_create(
29
+ csv_text: File.read(Rails.root.join('external_data', file)),
30
+ scan_type: scan_type
31
+ )
32
+ end
33
+
34
+ private
35
+
36
+ def parse_and_create_fire(csv_text:, scan_type:)
37
+ CSV.parse(csv_text, :headers => true, :encoding => 'ISO-8859-1').each do |row|
38
+ Fire.create_from_csv_row(row, scan_type)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+ module OrbDef
3
+ module OpenWeatherApi
4
+ class WeatherByCoordinates
5
+ API_THROTTLE_TIME = (ENV['API_THROTTLE_TIME'] || 0.02).freeze
6
+
7
+ class << self
8
+ def fetch(latitude:, longitude:)
9
+ response = open_weather_client.get do |req|
10
+ req.url "/data/2.5/weather?lat=#{latitude}&lon=#{longitude}&appid=#{open_weather_key}"
11
+ end
12
+
13
+ sleep API_THROTTLE_TIME
14
+
15
+ JSON.parse(response.body) if response.success?
16
+ end
17
+
18
+ private
19
+
20
+ def open_weather_client
21
+ @open_weather_client ||= Faraday.new(url: 'http://api.openweathermap.org')
22
+ end
23
+
24
+ def open_weather_key
25
+ @open_weather_key ||= OrbDef.open_weather_api_key
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Orbital defence engine</title>
5
+ <%= csrf_meta_tags %>
6
+ <%= csp_meta_tag %>
7
+
8
+ <%= stylesheet_link_tag "orb_def/application", media: "all" %>
9
+ <%= javascript_include_tag "orb_def/application" %>
10
+ </head>
11
+ <body>
12
+
13
+ <%= yield %>
14
+
15
+ </body>
16
+ </html>
data/bin/rails ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails gems
3
+ # installed from the root of your application.
4
+
5
+ ENGINE_ROOT = File.expand_path('..', __dir__)
6
+ ENGINE_PATH = File.expand_path('../lib/orb_def/engine', __dir__)
7
+ APP_PATH = File.expand_path('../spec/dummy/config/application', __dir__)
8
+
9
+ # Set up gems listed in the Gemfile.
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
11
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
12
+
13
+ require "rails"
14
+ # Pick the frameworks you want:
15
+ require "active_model/railtie"
16
+ require "active_job/railtie"
17
+ require "active_record/railtie"
18
+ require "active_storage/engine"
19
+ require "action_controller/railtie"
20
+ require "action_mailer/railtie"
21
+ require "action_view/railtie"
22
+ require "action_cable/engine"
23
+ require "sprockets/railtie"
24
+ # require "rails/test_unit/railtie"
25
+ require 'rails/engine/commands'
data/config/routes.rb ADDED
@@ -0,0 +1,13 @@
1
+ OrbDef::Engine.routes.draw do
2
+ namespace :api do
3
+ namespace :v1 do
4
+ resources :fires, only: :index do
5
+ collection do
6
+ get '/windIndicators', to: 'fires#fires_current_wind_direction_indicator'
7
+ get '/search', to: 'fires#search'
8
+ end
9
+ end
10
+ resources :weather_readings, only: :show
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ class CreateOrbDefWeatherStations < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :orb_def_weather_stations do |t|
4
+ t.string :name
5
+ t.float :latitude
6
+ t.float :longitude
7
+ t.string :identifier, index: true, uniqueness: true
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,20 @@
1
+ class CreateOrbDefWeatherReadings < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :orb_def_weather_readings do |t|
4
+ t.belongs_to :weather_station, index: true
5
+ t.string :identifier, index: true, uniqueness: true
6
+ t.float :temperature
7
+ t.float :pressure
8
+ t.float :ground_level
9
+ t.integer :humidity
10
+ t.float :wind_speed
11
+ t.float :wind_direction
12
+ t.float :rain
13
+ t.integer :cloud
14
+ t.string :description
15
+ t.datetime :reading_at
16
+
17
+ t.timestamps
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,9 @@
1
+ class CreateOrbDefDetectionTypes < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :orb_def_detection_types do |t|
4
+ t.string :name
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,28 @@
1
+ class CreateOrbDefFires < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :orb_def_fires do |t|
4
+ t.belongs_to :weather_station, index: true
5
+ t.belongs_to :detected_at_weather_reading, limit: 8, index: true
6
+ t.belongs_to :detection_type
7
+ t.float :latitude, precision: 10, scale: 6, index: true
8
+ t.float :longitude, precision: 10, scale: 6, index: true
9
+ t.float :brightness
10
+ t.float :bright_t31
11
+ t.float :bright_ti5
12
+ t.float :bright_ti4
13
+ t.float :scan
14
+ t.float :track
15
+ t.float :frp
16
+ t.integer :distance
17
+ t.string :scan_type
18
+ t.string :identifier, index: true, uniqueness: true
19
+ t.string :lat_long, index: true, uniqueness: false
20
+ t.string :satellite
21
+ t.string :confidence
22
+ t.string :version
23
+ t.string :day_night
24
+ t.timestamp :detected_at, index: true, uniqueness: false
25
+ t.timestamps
26
+ end
27
+ end
28
+ end
data/db/seeds.rb ADDED
@@ -0,0 +1,8 @@
1
+ [
2
+ { name: "Satellite" },
3
+ { name: "User" },
4
+ ].each do |detection_type_attributes|
5
+ unless OrbDef::DetectionType.exists?(name: detection_type_attributes[:name])
6
+ OrbDef::DetectionType.create!(detection_type_attributes)
7
+ end
8
+ end
@@ -0,0 +1,16 @@
1
+ module OrbDef
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace OrbDef
4
+
5
+ require 'pagy'
6
+ require 'active_model_serializers'
7
+ require 'geokit-rails'
8
+ require 'faraday'
9
+
10
+ config.generators do |g|
11
+ g.test_framework :rspec
12
+ g.fixture_replacement :factory_bot #newly added code
13
+ g.factory_bot dir: 'spec/factories' #newly added code
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ module OrbDef
2
+ VERSION = '0.0.1'
3
+ end
data/lib/orb_def.rb ADDED
@@ -0,0 +1,16 @@
1
+ require "orb_def/engine"
2
+
3
+ module OrbDef
4
+ class << self
5
+ mattr_accessor :nasa_api_key, :open_weather_api_key
6
+ self.nasa_api_key = "NASA API KEY"
7
+ self.open_weather_api_key = "OPEN WEATHER API API KEY"
8
+
9
+ # add default values of more config vars here
10
+ end
11
+
12
+ # this function maps the vars from your app into your engine
13
+ def self.setup(&block)
14
+ yield self
15
+ end
16
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :orb_def do
3
+ # # Task goes here
4
+ # end
data/orb_def.gemspec ADDED
@@ -0,0 +1,38 @@
1
+ $:.push File.expand_path("lib", __dir__)
2
+
3
+ # Maintain your gem's version:
4
+ require "orb_def/version"
5
+
6
+ # Describe your gem and declare its dependencies:
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "orb_def"
9
+ spec.version = OrbDef::VERSION
10
+ spec.authors = ["James Gascoigne-Taylor"]
11
+ spec.email = ["james@flippakitten.com"]
12
+ spec.homepage = "https://github.com/flippakitten/orbital_defence_engine"
13
+ spec.summary = "Fire and weather data you can query by geolocation"
14
+ spec.description = "Uses Nasa FIRMS data and OpenWeatherApi data"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+ spec.test_files = Dir["spec/**/*"]
22
+
23
+ spec.add_dependency 'rails', '~> 5.2.4', '>= 5.2.4.2'
24
+ spec.add_dependency 'pagy', '~> 3.7', '>= 3.7.5'
25
+ spec.add_dependency 'geokit-rails', '~> 2.3', '>= 2.3.1'
26
+ spec.add_dependency 'faraday', '~> 0.15.3'
27
+ spec.add_dependency 'active_model_serializers'
28
+
29
+ spec.add_development_dependency 'pg'
30
+ spec.add_development_dependency 'rspec-rails', '~> 3.9.0'
31
+ spec.add_development_dependency 'rspec_junit_formatter'
32
+ spec.add_development_dependency 'factory_bot_rails', '>= 5.1.1'
33
+ spec.add_development_dependency 'shoulda-matchers', '~> 3.1'
34
+ spec.add_development_dependency 'vcr'
35
+ spec.add_development_dependency 'webmock'
36
+ spec.add_development_dependency 'rspec-sidekiq'
37
+ spec.add_development_dependency 'timecop', '~> 0.9.1'
38
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ RSpec.describe OrbDef::Api::V1::FiresController, type: :controller do
6
+ #before(:all) do
7
+ #end
8
+
9
+ describe 'GET index' do
10
+ # let(:csv_text) {File.read(Rails.root.join('spec/fixtures/nasa/firms', 'virrs.txt')) }
11
+
12
+ it 'does something' do
13
+ expect(true).to be_truthy
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require_relative 'config/application'
5
+
6
+ Rails.application.load_tasks
@@ -0,0 +1,4 @@
1
+ //= link_tree ../images
2
+ //= link_directory ../javascripts .js
3
+ //= link_directory ../stylesheets .css
4
+ //= link orb_def_manifest.js
@@ -0,0 +1,15 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file. JavaScript code in this file should be added after the last require_* statement.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require rails-ujs
14
+ //= require activestorage
15
+ //= require_tree .
@@ -0,0 +1,13 @@
1
+ // Action Cable provides the framework to deal with WebSockets in Rails.
2
+ // You can generate new channels where WebSocket features live using the `rails generate channel` command.
3
+ //
4
+ //= require action_cable
5
+ //= require_self
6
+ //= require_tree ./channels
7
+
8
+ (function() {
9
+ this.App || (this.App = {});
10
+
11
+ App.cable = ActionCable.createConsumer();
12
+
13
+ }).call(this);
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. Styles in this file should be added after the last require_* statement.
11
+ * It is generally better to create a new file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,4 @@
1
+ module ApplicationCable
2
+ class Channel < ActionCable::Channel::Base
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ApplicationCable
2
+ class Connection < ActionCable::Connection::Base
3
+ end
4
+ end
@@ -0,0 +1,2 @@
1
+ class ApplicationController < ActionController::Base
2
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ class ApplicationJob < ActiveJob::Base
2
+ end
@@ -0,0 +1,4 @@
1
+ class ApplicationMailer < ActionMailer::Base
2
+ default from: 'from@example.com'
3
+ layout 'mailer'
4
+ end
@@ -0,0 +1,3 @@
1
+ class ApplicationRecord < ActiveRecord::Base
2
+ self.abstract_class = true
3
+ end
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Dummy</title>
5
+ <%= csrf_meta_tags %>
6
+ <%= csp_meta_tag %>
7
+
8
+ <%= stylesheet_link_tag 'application', media: 'all' %>
9
+ <%= javascript_include_tag 'application' %>
10
+ </head>
11
+
12
+ <body>
13
+ <%= yield %>
14
+ </body>
15
+ </html>
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <style>
6
+ /* Email styles need to be inline */
7
+ </style>
8
+ </head>
9
+
10
+ <body>
11
+ <%= yield %>
12
+ </body>
13
+ </html>
@@ -0,0 +1 @@
1
+ <%= yield %>
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
3
+ load Gem.bin_path('bundler', 'bundle')
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ APP_PATH = File.expand_path('../config/application', __dir__)
3
+ require_relative '../config/boot'
4
+ require 'rails/commands'
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative '../config/boot'
3
+ require 'rake'
4
+ Rake.application.run
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env ruby
2
+ require 'fileutils'
3
+ include FileUtils
4
+
5
+ # path to your application root.
6
+ APP_ROOT = File.expand_path('..', __dir__)
7
+
8
+ def system!(*args)
9
+ system(*args) || abort("\n== Command #{args} failed ==")
10
+ end
11
+
12
+ chdir APP_ROOT do
13
+ # This script is a starting point to setup your application.
14
+ # Add necessary setup steps to this file.
15
+
16
+ puts '== Installing dependencies =='
17
+ system! 'gem install bundler --conservative'
18
+ system('bundle check') || system!('bundle install')
19
+
20
+ # Install JavaScript dependencies if using Yarn
21
+ # system('bin/yarn')
22
+
23
+ # puts "\n== Copying sample files =="
24
+ # unless File.exist?('config/database.yml')
25
+ # cp 'config/database.yml.sample', 'config/database.yml'
26
+ # end
27
+
28
+ puts "\n== Preparing database =="
29
+ system! 'bin/rails db:setup'
30
+
31
+ puts "\n== Removing old logs and tempfiles =="
32
+ system! 'bin/rails log:clear tmp:clear'
33
+
34
+ puts "\n== Restarting application server =="
35
+ system! 'bin/rails restart'
36
+ end