diff --git a/README.md b/README.md index 683a277d71..06baa544b6 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,7 @@ gem 'faker', :git => 'https://github.com/faker-ruby/faker.git', :branch => 'mast - [Faker::Dessert](doc/default/dessert.md) - [Faker::Device](doc/default/device.md) - [Faker::DrivingLicence](doc/default/driving_licence.md) + - [Faker::Drone](doc/drone/drone.md) - [Faker::Educator](doc/default/educator.md) - [Faker::ElectricalComponents](doc/default/electrical_components.md) - [Faker::Esport](doc/default/esport.md) diff --git a/doc/drone/drone.md b/doc/drone/drone.md new file mode 100644 index 0000000000..4550c91530 --- /dev/null +++ b/doc/drone/drone.md @@ -0,0 +1,34 @@ +# `Faker::Drone` + +```ruby +# Aircraft Properties +Faker::Drone.name #=> "DJI Mavic Air 2" +Faker::Drone.weight #=> "570g" +Faker::Drone.max_ascent_speed #=> "4m/s" +Faker::Drone.max_descent_speed #=> "3m/s" +Faker::Drone.flight_time #=> "34Mins" +Faker::Drone.max_altitude #=> "5000m" +Faker::Drone.max_flight_distance #=> "18500m" +Faker::Drone.max_speed #=> "19m/s" +Faker::Drone.max_wind_resistance #=> "10.5m/s" +Faker::Drone.max_angular_velocity #=> "250º/s" +Faker::Drone.max_tilt_angle #=> "35º" +Faker::Drone.operating_temprature #=> "14º-104ºF" + +# Battery Properties +Faker::Drone.battery_capacity #=> "3500 mAh" +Faker::Drone.battery_voltage #=> "13.2V" +Faker::Drone.battery_type #=> "LiPo 4S" +Faker::Drone.battery_weight #=> "198g" +Faker::Drone.charging_temprature #=> "41º-104ºF" +Faker::Drone.max_charging_power #=> "38W" + +# Camera Properties +Faker::Drone.iso #=> "100-3200" +Faker::Drone.max_resolution #=> "48MP +Faker::Drone.photo_format #=> "JPEG" +Faker::Drone.video_format #=> "MP4" +Faker::Drone.shutter_speed_range #=> "8-1/8000s" +Faker::Drone.max_shutter_speed #=> "60" +Faker::Drone.min_shutter_speed #=> "1/8000" +``` diff --git a/lib/faker/drone/drone.rb b/lib/faker/drone/drone.rb new file mode 100644 index 0000000000..d1750ae9bc --- /dev/null +++ b/lib/faker/drone/drone.rb @@ -0,0 +1,332 @@ +# frozen_string_literal: true + +module Faker + class Drone < Base + class << self + ## + # Returns random drone name with company + # + # @return [string] + # + # @example + # Faker::Drone.name #=> "DJI Mavic Air 2" + # + # @faker.version 2.13.0 + def name + fetch('drone.name') + end + + ## + # Returns total drone weight in grams + # + # @return [String] + # + # @example + # Faker::Drone.weight #=> "570g" + # + # @faker.version 2.13.0 + def weight + parse('drone.weight') + end + + ## + # Returns maximum ascent speed for drone in m/s + # + # @return [String] + # + # @example + # Faker::Drone.max_ascent_speed #=> "4m/s" + # + # @faker.version 2.13.0 + def max_ascent_speed + parse('drone.max_ascent_speed') + end + + ## + # Returns maximum descent speed for drone in m/s + # + # @return [String] + # + # @example + # Faker::Drone.max_descent_speed #=> "4m/s" + # + # @faker.version 2.13.0 + def max_descent_speed + parse('drone.max_descent_speed') + end + + ## + # Returns max flight time for drone in optimal conditions + # + # @return [String] + # + # @example + # Faker::Drone.flight_time #=> "34Mins" + # + # @faker.version 2.13.0 + def flight_time + parse('drone.flight_time') + end + + ## + # Returns max altitude drone can go above sea level in meters + # + # @return [String] + # + # @example + # Faker::Drone.max_altitude #=> "5000m" + # + # @faker.version 2.13.0 + def max_altitude + parse('drone.max_altitude') + end + + ## + # Returns how far drone can go in optimal condition when full charged in meters + # + # @return [String] + # + # @example + # Faker::Drone.max_flight_distance #=> "18500m" + # + # @faker.version 2.13.0 + def max_flight_distance + parse('drone.max_flight_distance') + end + + ## + # Returns max horizontal speed by drone in m/s + # + # @return [String] + # + # @example + # Faker::Drone.max_speed #=> "19m/s" + # + # @faker.version 2.13.0 + def max_speed + parse('drone.max_speed') + end + + ## + # Returns max wind resistance by drone in m/s + # + # @return [String] + # + # @example + # Faker::Drone.max_wind_resistance #=> "10.5m/s" + # + # @faker.version 2.13.0 + def max_wind_resistance + parse('drone.max_wind_resistance') + end + + ## + # Returns max angular velocity of drone in °/s + # + # @return [String] + # + # @example + # Faker::Drone.max_angular_velocity #=> "250°/s" + # + # @faker.version 2.13.0 + def max_angular_velocity + parse('drone.max_angular_velocity') + end + + ## + # Returns max tilt angle drone can go in ° + # + # @return [String] + # + # @example + # Faker::Drone.max_tilt_angle #=> "35°" + # + # @faker.version 2.13.0 + def max_tilt_angle + parse('drone.max_tilt_angle') + end + + ## + # Returns operating temprature for drone in Fahrenheit + # + # @return [String] + # + # @example + # Faker::Drone.operating_temperature #=> "14°-104°F" + # + # @faker.version 2.13.0 + def operating_temperature + parse('drone.operating_temperature') + end + + ## + # Returns the drone battery capacity + # + # @return [String] + # + # @example + # Faker::Drone.battery_capacity #=> "3500mAh" + # + # @faker.version 2.13.0 + def battery_capacity + parse('drone.battery_capacity') + end + + ## + # Returns battery voltage + # + # @return [String] + # + # @example + # Faker::Drone.battery_voltage #=> "13.2V" + # + # @faker.version 2.13.0 + def battery_voltage + parse('drone.battery_voltage') + end + + ## + # Returns the battery type + # + # @return [String] + # + # @example + # Faker::Drone.battery_type #=> "LiPo 4S" + # + # @faker.version 2.13.0 + def battery_type + parse('drone.battery_type') + end + + ## + # Returns total battery weight in grams + # + # @return [String] + # + # @example + # Faker::Drone.battery_weight #=> "198g" + # + # @faker.version 2.13.0 + def battery_weight + parse('drone.battery_weight') + end + + ## + # Returns charging temperature for battery in Fahrenheit + # + # @return [String] + # + # @example + # Faker::Drone.charging_temperature #=> "41°-104°F" + # + # @faker.version 2.13.0 + def charging_temperature + parse('drone.charging_temperature') + end + + ## + # Returns max chargin power required for battery + # + # @return [String] + # + # @example + # Faker::Drone.max_charging_power #=> "38W" + # + # @faker.version 2.13.0 + def max_charging_power + parse('drone.max_charging_power') + end + + ## + # Returns camera ISO range for drone + # + # @return [String] + # + # @example + # Faker::Drone.iso #=> "100-3200" + # + # @faker.version 2.13.0 + def iso + parse('drone.iso') + end + + ## + # Returns max camera resolution in MP" + # + # @return [String] + # + # @example + # Faker::Drone.max_resolution #=> "48MP" + # + # @faker.version 2.13.0 + def max_resolution + parse('drone.max_resolution') + end + + ## + # Returns photo format for drone + # + # @return [String] + # + # @example + # Faker::Drone.photo_format #=> "JPEG" + # + # @faker.version 2.13.0 + def photo_format + parse('drone.photo_format') + end + + ## + # Returns video format + # + # @return [String] + # + # @example + # Faker::Drone.video_format #=> "MP4" + # + # @faker.version 2.13.0 + def video_format + parse('drone.video_format') + end + + ## + # Returns max and min shutter speed for camera + # + # @return [String] + # + # @example + # Faker::Drone.shutter_speed_range #=> "8-1/8000s" + # + # @faker.version 2.13.0 + def shutter_speed_range + "#{fetch('drone.max_shutter_speed')}-#{fetch('drone.min_shutter_speed')}s" + end + + ## + # Returns max shutter speed for camera + # + # @return [String] + # + # @example + # Faker::Drone.max_shutter_speed #=> "60s" + # + # @faker.version 2.13.0 + def max_shutter_speed + "#{fetch('drone.max_shutter_speed')}s" + end + + ## + # Returns min shutter speed for camera + # + # @return [String] + # + # @example + # Faker::Drone.min_shutter_speed #=> "1/8000s" + # + # @faker.version 2.13.0 + def min_shutter_speed + "#{fetch('drone.min_shutter_speed')}s" + end + end + end +end diff --git a/lib/locales/en/drone.yml b/lib/locales/en/drone.yml new file mode 100644 index 0000000000..4012a55bea --- /dev/null +++ b/lib/locales/en/drone.yml @@ -0,0 +1,93 @@ +en: + faker: + drone: + name: + - 'DJI Mavic Air 2' + - 'DJI Mavic Air' + - 'DJI Mavic 2 Pro' + - 'DJI Mavic Mini' + - 'DJI Mavic Pro' + - 'DJI Phantom 4 RTK' + - 'DJI Phantom 4 Pro' + - 'DJI Inspire 2' + - 'DJI Matrice 300 RTK' + - 'DJI Matrice 600 Pro' + - 'DJI Agras T16' + - 'Parrot ANAFI Thermal' + - 'Yuneec H520 RTK' + - 'Yuneec H520' + - 'Yuneec Typhoon H3' + - 'Yuneec Typhoon H Plus' + - 'SenseFly eBee X' + - 'SenseFly eBee SQ' + - 'SenseFly eBee Plus' + - 'SenseFly eBee Classic' + - 'FreeFly Alta X' + - 'FreeFly Alta Pro' + - 'FreeFly Alta 8' + - 'FlyAbility Elios 2' + - 'FlyAbility Elios' + - 'Autel Evo II Pro 6K' + - 'Autel Evo II 8K' + - 'Delair UX 11' + - 'Delair UX AG' + - 'Delair DT26E LiDAR' + - 'Delair DT26E Surveillance' + - 'Delair DT26E Tactical' + - 'Delair DT26E Open Payload' + weight: '###g' + max_ascent_speed: '#m/s' + max_descent_speed: '#m/s' + flight_time: '##Mins' + max_altitude: '####m' + max_flight_distance: '####m' + max_speed: '##m/s' + max_wind_resistance: '##.#m/s' + max_angular_velocity: '##°/s' + max_tilt_angle: '##°' + operating_temperature: '##°-###°F' + battery_capacity: + - '3### mAh' + - '2### mAh' + battery_voltage: '##.#V' + battery_type: + - 'LiPo 4S' + - 'LiPo 3S' + - 'Li-Polymer' + battery_weight: '###g' + charging_temperature: '##°-###°F' + max_charging_power: '##W' + iso: + - '100-3200' + - '100-6400' + max_resolution: '##MP' + photo_format: + - 'JPEG' + - 'PNG' + - 'TIF' + video_format: + - 'MP4' + - 'FLV' + - 'MOV' + max_shutter_speed: + - '1' + - '2' + - '4' + - '8' + - '15' + - '30' + - '60' + min_shutter_speed: + - '1/8000' + - '1/4000' + - '1/2000' + - '1/1000' + - '1/500' + - '1/250' + - '1/125' + - '1/60' + - '1/30' + - '1/15' + - '1/8' + - '1/4' + - '1/2' diff --git a/test/faker/drone/test_faker_drone.rb b/test/faker/drone/test_faker_drone.rb new file mode 100644 index 0000000000..23d3b61230 --- /dev/null +++ b/test/faker/drone/test_faker_drone.rb @@ -0,0 +1,109 @@ +# frozen_string_literal: true + +require_relative '../../test_helper' + +class TestFakerDrone < Test::Unit::TestCase + def setup + @tester = Faker::Drone + end + + def test_name + assert @tester.name.match(/[A-Za-z0-9]+/) + end + + def test_weight + assert @tester.weight.match(/[0-9]{3}g/) + end + + def test_max_ascent_speed + assert @tester.max_ascent_speed.match(/[0-9]m\/s/) + end + + def test_max_descent_speed + assert @tester.max_descent_speed.match(/[0-9]m\/s/) + end + + def test_max_flight_time + assert @tester.flight_time.match(/[0-9]{2}Mins/) + end + + def test_max_altitude + assert @tester.max_altitude.match(/[0-9]{4}m/) + end + + def test_max_flight_distance + assert @tester.max_flight_distance.match(/[0-9]{4}m/) + end + + def test_max_speed + assert @tester.max_speed.match(/[0-9]{2}m\/s/) + end + + def test_max_wind_resistance + assert @tester.max_wind_resistance.match(/[0-9]{2}\.[0-9]m\/s/) + end + + def test_max_anngular_velocity + assert @tester.max_angular_velocity.match(/[0-9]{2}\W\/s/) + end + + def test_max_tilt_angle + assert @tester.max_tilt_angle.match(/[0-9]{2}\W/) + end + + def test_operating_temperature + assert @tester.operating_temperature.match(/[0-9]{2}\W\-[0-9]{3}\WF/) + end + + def test_battery_capacity + assert @tester.battery_capacity.match(/[2-3][0-9]{3}\smAh/) + end + + def test_battery_type + assert @tester.battery_type.match(/Li(Po\s|-)[3-4]*[A-Za-z]+/) + end + + def test_battery_weight + assert @tester.battery_weight.match(/[0-9]{3}g/) + end + + def test_battery_voltage + assert @tester.battery_voltage.match(/[0-9]{2}\.[0-9]V/) + end + + def test_charging_temperature + assert @tester.charging_temperature.match(/[0-9]{2}\W\-[0-9]{3}\WF/) + end + + def test_max_charging_power + assert @tester.max_charging_power.match(/[0-9]{2}W/) + end + + def test_camera_iso + assert @tester.iso.match(/(100-3200|100-6400)/) + end + + def test_max_resolution + assert @tester.max_resolution.match(/[0-9]{2}MP/) + end + + def test_photo_format + assert @tester.photo_format.match(/(JPEG|PNG|TIF)/) + end + + def video_format + assert @tester.video_format.match(/MP4|FLV|MOV/) + end + + def test_max_shutter_speed_range + assert @tester.shutter_speed_range.match(/[0-9]{1,2}\-1\/[0-9]{1,4}s/) + end + + def test_max_shutter_speed + assert @tester.max_shutter_speed.match(/[0-9]{1,2}s/) + end + + def test_min_shutter_speed + assert @tester.min_shutter_speed.match(/1\/[0-9]{1,4}s/) + end +end