diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 084e16672e..09ada24319 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2026-03-01 05:17:50 UTC using RuboCop version 1.85.0. +# on 2026-03-01 05:32:16 UTC using RuboCop version 1.85.0. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -13,14 +13,6 @@ Bundler/OrderedGems: Exclude: - 'Gemfile' -# Offense count: 1 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: have_no, not_to -Capybara/NegationMatcher: - Exclude: - - 'spec/features/admin/reverting_crops_spec.rb' - # Offense count: 19 Capybara/NegationMatcherAfterVisit: Exclude: @@ -33,22 +25,6 @@ Capybara/NegationMatcherAfterVisit: - 'spec/features/members/profile_spec.rb' - 'spec/features/plantings/planting_a_crop_spec.rb' -# Offense count: 34 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: DefaultSelector. -Capybara/RSpec/HaveSelector: - Exclude: - - 'spec/features/conversations/index_spec.rb' - - 'spec/features/footer_spec.rb' - - 'spec/features/gardens/adding_gardens_spec.rb' - - 'spec/features/harvests/harvesting_a_crop_spec.rb' - - 'spec/features/members/list_spec.rb' - - 'spec/features/plantings/planting_a_crop_spec.rb' - - 'spec/features/seeds/adding_seeds_spec.rb' - - 'spec/features/shared_examples/crop_suggest.rb' - - 'spec/support/feature_helpers.rb' - - 'spec/views/posts/show.html.haml_spec.rb' - # Offense count: 14 Capybara/SpecificMatcher: Exclude: @@ -101,48 +77,13 @@ FactoryBot/SyntaxMethods: # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines, beginning_only, ending_only -Layout/EmptyLinesAroundClassBody: - Exclude: - - 'db/migrate/20251130035700_create_versions.rb' - -# Offense count: 312 -# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle. # SupportedHashRocketStyles: key, separator, table # SupportedColonStyles: key, separator, table # SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit Layout/HashAlignment: Exclude: - - 'app/helpers/application_helper.rb' - - 'app/helpers/crops_helper.rb' - - 'app/models/concerns/search_harvests.rb' - - 'app/models/concerns/search_plantings.rb' - 'app/models/crop.rb' - - 'config/sitemap.rb' - - 'lib/tasks/import.rake' - - 'spec/requests/api/v1/activities_request_spec.rb' - - 'spec/requests/api/v1/members_request_spec.rb' - -# Offense count: 7 -# This cop supports safe autocorrection (--autocorrect). -Layout/HeredocIndentation: - Exclude: - - 'db/migrate/20190712003735_add_like_counter_caches.rb' - - 'db/migrate/20191226024813_crop_harvest_counter_cache.rb' - - 'db/migrate/20191226024957_crop_photo_counter_cache.rb' - - 'db/migrate/20191226025124_plant_part_harvest_counter_cache.rb' - - 'db/migrate/20191226025225_post_comment_counter_cache.rb' - - 'db/migrate/20250824085224_add_photos_comment_count.rb' - -# Offense count: 1 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: Width, EnforcedStyleAlignWith, AllowedPatterns. -# SupportedStylesAlignWith: start_of_line, relative_to_receiver -Layout/IndentationWidth: - Exclude: - - 'spec/requests/api/v1/activities_request_spec.rb' # Offense count: 6 # This cop supports safe autocorrection (--autocorrect). @@ -157,20 +98,6 @@ Layout/LineLength: - 'db/seeds.rb' - 'spec/requests/api/v1/activities_request_spec.rb' -# Offense count: 2 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AllowInHeredoc. -Layout/TrailingWhitespace: - Exclude: - - 'Gemfile' - - 'app/helpers/crops_helper.rb' - -# Offense count: 1 -# This cop supports safe autocorrection (--autocorrect). -Lint/AmbiguousOperatorPrecedence: - Exclude: - - 'app/controllers/activities_controller.rb' - # Offense count: 4 # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: RequireParenthesesForMethodChains. @@ -337,12 +264,6 @@ RSpec/ContextMethod: RSpec/ContextWording: Enabled: false -# Offense count: 1 -# Configuration parameters: IgnoredMetadata. -RSpec/DescribeClass: - Exclude: - - 'spec/tasks/import_spec.rb' - # Offense count: 36 # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: SkipBlocks, EnforcedStyle, OnlyStaticConstants. @@ -370,13 +291,6 @@ RSpec/EmptyExampleGroup: - 'spec/views/photos/edit.html.haml_spec.rb' - 'spec/views/posts/_single.html.haml_spec.rb' -# Offense count: 1 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AllowConsecutiveOneLiners. -RSpec/EmptyLineAfterExample: - Exclude: - - 'spec/models/ability_spec.rb' - # Offense count: 146 # Configuration parameters: CountAsOne. RSpec/ExampleLength: @@ -403,20 +317,6 @@ RSpec/ExpectInHook: - 'spec/features/plantings/planting_a_crop_spec.rb' - 'spec/features/shared_examples/append_date.rb' -# Offense count: 1 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: implicit, each, example -RSpec/HookArgument: - Exclude: - - 'spec/requests/api/v1/plantings_request_spec.rb' - -# Offense count: 2 -# This cop supports safe autocorrection (--autocorrect). -RSpec/HooksBeforeExamples: - Exclude: - - 'spec/features/crops/creating_a_crop_spec.rb' - # Offense count: 53 # This cop supports unsafe autocorrection (--autocorrect-all). RSpec/IncludeExamples: @@ -462,12 +362,6 @@ RSpec/InstanceVariable: RSpec/LetSetup: Enabled: false -# Offense count: 1 -# This cop supports safe autocorrection (--autocorrect). -RSpec/MatchArray: - Exclude: - - 'spec/models/post_spec.rb' - # Offense count: 2 RSpec/MessageChain: Exclude: @@ -753,15 +647,6 @@ Rails/RootPathnameMethods: - 'lib/tasks/import.rake' - 'spec/rails_helper.rb' -# Offense count: 4 -# Configuration parameters: ForbiddenMethods, AllowedMethods. -# ForbiddenMethods: decrement!, decrement_counter, increment!, increment_counter, insert, insert!, insert_all, insert_all!, toggle!, touch, touch_all, update_all, update_attribute, update_column, update_columns, update_counters, upsert, upsert_all -Rails/SkipsModelValidations: - Exclude: - - 'db/migrate/20240101010102_populate_crop_fields_from_openfarm_data.rb' - - 'db/migrate/20240810160538_set_default_language_for_existing_alternate_names.rb' - - 'db/migrate/20251128200506_add_description_to_crops.rb' - # Offense count: 21 Rails/ThreeStateBooleanColumn: Enabled: false diff --git a/Gemfile b/Gemfile index bc8d7debeb..ad79186548 100644 --- a/Gemfile +++ b/Gemfile @@ -139,7 +139,7 @@ gem "msgpack" # Pinned due to RAILS_ENV=production bundle exec rake assets:precompile failing with ArgumentError: wrong number of arguments (given 1, expected 0) (ArgumentError) # /tmp/build_8301a541/vendor/bundle/ruby/3.3.0/gems/connection_pool-3.0.2/lib/connection_pool.rb:48:in `initialize' # /tmp/build_8301a541/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.3/lib/active_support/cache/mem_cache_store.rb:63:in `new' -gem "connection_pool", "< 3" +gem "connection_pool", "< 3" group :production do gem 'bonsai-elasticsearch-rails' # Integration with Bonsa-Elasticsearch on heroku diff --git a/app/controllers/activities_controller.rb b/app/controllers/activities_controller.rb index ae489df985..9f1c976d6b 100644 --- a/app/controllers/activities_controller.rb +++ b/app/controllers/activities_controller.rb @@ -82,7 +82,7 @@ def create repeat_times.times do |i| new_activity = @activity.dup - new_activity.due_date = @activity.due_date + (i + 1) * repeat_weeks.weeks + new_activity.due_date = @activity.due_date + ((i + 1) * repeat_weeks.weeks) new_activity.save end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 1922d321f0..360d8a6833 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -130,9 +130,9 @@ def github_releases doc = Nokogiri::XML(response.body) doc.xpath('//xmlns:entry').first(2).map do |entry| { - title: entry.xpath('xmlns:title').text, + title: entry.xpath('xmlns:title').text, content: entry.xpath('xmlns:content').text, - link: entry.xpath('xmlns:link/@href').text, + link: entry.xpath('xmlns:link/@href').text, updated: entry.xpath('xmlns:updated').text } end diff --git a/app/helpers/crops_helper.rb b/app/helpers/crops_helper.rb index 85cdc11fd5..e54eb36206 100644 --- a/app/helpers/crops_helper.rb +++ b/app/helpers/crops_helper.rb @@ -56,13 +56,13 @@ def crop_jsonld_data(crop, full_attributes: true) crop.posts.each do |post| subject_of_entities << { - '@type': "SocialMediaPosting", - url: post_url(post), - author: { + '@type': "SocialMediaPosting", + url: post_url(post), + author: { '@type': 'Person', - name: post.author.login_name + name: post.author.login_name }, - 'datePublished': post.created_at + 'datePublished': post.created_at } end diff --git a/app/models/concerns/search_harvests.rb b/app/models/concerns/search_harvests.rb index f1d18cbcf5..0100475be2 100644 --- a/app/models/concerns/search_harvests.rb +++ b/app/models/concerns/search_harvests.rb @@ -56,7 +56,7 @@ def self.homepage_records(limit) # Disabled for now so that more relevant harvests are # surfaced; even if we're falling back to crop photos. # photos_count: { gt: 0 }, - owner_id: { not: owners } + owner_id: { not: owners } } one_record = search('*', limit: 1, diff --git a/app/models/concerns/search_plantings.rb b/app/models/concerns/search_plantings.rb index b44bb6ee3f..af73a017d3 100644 --- a/app/models/concerns/search_plantings.rb +++ b/app/models/concerns/search_plantings.rb @@ -69,7 +69,7 @@ def self.homepage_records(limit) # Disabled for now so that more relevant plantings are # surfaced; even if we're falling back to crop photos. # photos_count: { gt: 0 }, - owner_id: { not: owners } + owner_id: { not: owners } } one_record = search('*', limit: 1, diff --git a/config/sitemap.rb b/config/sitemap.rb index d30f02c5ac..4ef943858b 100644 --- a/config/sitemap.rb +++ b/config/sitemap.rb @@ -7,9 +7,9 @@ SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new( ENV['S3_SITEMAP_BUCKET'], - access_key_id: ENV['S3_ACCESS_KEY'], + access_key_id: ENV['S3_ACCESS_KEY'], secret_access_key: ENV['S3_SECRET_KEY'], - region: ENV.fetch('S3_AWS_REGION', 'us-east-1') + region: ENV.fetch('S3_AWS_REGION', 'us-east-1') ) SitemapGenerator::Sitemap.create do diff --git a/db/migrate/20190712003735_add_like_counter_caches.rb b/db/migrate/20190712003735_add_like_counter_caches.rb index c956d6f836..51041b7e96 100644 --- a/db/migrate/20190712003735_add_like_counter_caches.rb +++ b/db/migrate/20190712003735_add_like_counter_caches.rb @@ -14,23 +14,23 @@ def change end def data - execute <<-SQL.squish - UPDATE photos - SET likes_count = ( - SELECT count(1) - FROM likes - WHERE likes.likeable_id = photos.id - AND likeable_type = 'Photo' - ) + execute <<~SQL.squish + UPDATE photos + SET likes_count = ( + SELECT count(1) + FROM likes + WHERE likes.likeable_id = photos.id + AND likeable_type = 'Photo' + ) SQL - execute <<-SQL.squish - UPDATE posts - SET likes_count = ( - SELECT count(1) - FROM likes - WHERE likes.likeable_id = posts.id - AND likeable_type = 'Post' - ) + execute <<~SQL.squish + UPDATE posts + SET likes_count = ( + SELECT count(1) + FROM likes + WHERE likes.likeable_id = posts.id + AND likeable_type = 'Post' + ) SQL end end diff --git a/db/migrate/20191226024813_crop_harvest_counter_cache.rb b/db/migrate/20191226024813_crop_harvest_counter_cache.rb index b942bfde3f..7ac6d781b2 100644 --- a/db/migrate/20191226024813_crop_harvest_counter_cache.rb +++ b/db/migrate/20191226024813_crop_harvest_counter_cache.rb @@ -11,13 +11,13 @@ def change end def set_counter_value - execute <<-SQL.squish - UPDATE crops - SET harvests_count = ( - SELECT count(1) - FROM harvests - WHERE harvests.crop_id = crops.id - ) + execute <<~SQL.squish + UPDATE crops + SET harvests_count = ( + SELECT count(1) + FROM harvests + WHERE harvests.crop_id = crops.id + ) SQL end end diff --git a/db/migrate/20191226024957_crop_photo_counter_cache.rb b/db/migrate/20191226024957_crop_photo_counter_cache.rb index d4a085e245..833734c32c 100644 --- a/db/migrate/20191226024957_crop_photo_counter_cache.rb +++ b/db/migrate/20191226024957_crop_photo_counter_cache.rb @@ -11,13 +11,13 @@ def change end def set_counter_value - execute <<-SQL.squish - UPDATE crops - SET photo_associations_count = ( - SELECT count(1) - FROM photo_associations - WHERE photo_associations.crop_id = crops.id - ) + execute <<~SQL.squish + UPDATE crops + SET photo_associations_count = ( + SELECT count(1) + FROM photo_associations + WHERE photo_associations.crop_id = crops.id + ) SQL end end diff --git a/db/migrate/20191226025124_plant_part_harvest_counter_cache.rb b/db/migrate/20191226025124_plant_part_harvest_counter_cache.rb index e16deaced5..519cc59c7c 100644 --- a/db/migrate/20191226025124_plant_part_harvest_counter_cache.rb +++ b/db/migrate/20191226025124_plant_part_harvest_counter_cache.rb @@ -11,13 +11,13 @@ def change end def set_counter_value - execute <<-SQL.squish - UPDATE plant_parts - SET harvests_count = ( - SELECT count(1) - FROM harvests - WHERE harvests.plant_part_id = plant_parts.id - ) + execute <<~SQL.squish + UPDATE plant_parts + SET harvests_count = ( + SELECT count(1) + FROM harvests + WHERE harvests.plant_part_id = plant_parts.id + ) SQL end end diff --git a/db/migrate/20191226025225_post_comment_counter_cache.rb b/db/migrate/20191226025225_post_comment_counter_cache.rb index df930fe0d9..c63159f7a4 100644 --- a/db/migrate/20191226025225_post_comment_counter_cache.rb +++ b/db/migrate/20191226025225_post_comment_counter_cache.rb @@ -11,7 +11,7 @@ def change end def set_counter_value - execute <<-SQL.squish + execute <<~SQL.squish UPDATE posts SET comments_count = ( SELECT count(1) diff --git a/db/migrate/20250824085224_add_photos_comment_count.rb b/db/migrate/20250824085224_add_photos_comment_count.rb index 30353788d0..02cd7f5bcd 100644 --- a/db/migrate/20250824085224_add_photos_comment_count.rb +++ b/db/migrate/20250824085224_add_photos_comment_count.rb @@ -11,7 +11,7 @@ def change end def set_counter_value - execute <<-SQL.squish + execute <<~SQL.squish UPDATE photos SET comments_count = ( SELECT count(1) diff --git a/db/migrate/20251130035700_create_versions.rb b/db/migrate/20251130035700_create_versions.rb index 2662f847eb..e5489214fa 100644 --- a/db/migrate/20251130035700_create_versions.rb +++ b/db/migrate/20251130035700_create_versions.rb @@ -1,7 +1,6 @@ # This migration creates the `versions` table for the Version class. # All other migrations PT provides are optional. class CreateVersions < ActiveRecord::Migration[7.2] - # The largest text column available in all supported RDBMS is # 1024^3 - 1 bytes, roughly one gibibyte. We specify a size # so that MySQL will use `longtext` instead of `text`. Otherwise, diff --git a/lib/tasks/import.rake b/lib/tasks/import.rake index 57ead374ce..e7f483d6a2 100644 --- a/lib/tasks/import.rake +++ b/lib/tasks/import.rake @@ -4,299 +4,299 @@ namespace :import do desc "Import Australian Food Classification Data from a CSV file" task australian_food_classification_data: :environment do HEADER_MAP = { - "Public Food Key" => :public_food_key, - "Classification" => :classification, - "Food Name" => :food_name, - "Energy with dietary fibre, equated \n(kJ)" => :energy_with_dietary_fibre_equated_kj, - "Energy, without dietary fibre, equated \n(kJ)" => :energy_without_dietary_fibre_equated_kj, - "Moisture (water) \n(g)" => :moisture_water_g, - "Protein \n(g)" => :protein_g, - "Nitrogen \n(g)" => :nitrogen_g, - "Fat, total \n(g)" => :fat_total_g, - "Ash \n(g)" => :ash_g, - "Total dietary fibre \n(g)" => :total_dietary_fibre_g, - "Alcohol \n(g)" => :alcohol_g, - "Fructose \n(g)" => :fructose_g, - "Glucose \n(g)" => :glucose_g, - "Sucrose\n(g)" => :sucrose_g, - "Maltose \n(g)" => :maltose_g, - "Lactose \n(g)" => :lactose_g, - "Galactose \n(g)" => :galactose_g, - "Maltotrios \n(g)" => :maltotrios_g, - "Total sugars (g)" => :total_sugars_g, - "Added sugars (g)" => :added_sugars_g, - "Free sugars \n(g)" => :free_sugars_g, - "Starch \n(g)" => :starch_g, - "Dextrin \n(g)" => :dextrin_g, - "Glycerol \n(g)" => :glycerol_g, - "Glycogen \n(g)" => :glycogen_g, - "Inulin \n(g)" => :inulin_g, - "Erythritol \n(g)" => :erythritol_g, - "Maltitol \n(g)" => :maltitol_g, - "Mannitol \n(g)" => :mannitol_g, - "Xylitol \n(g)" => :xylitol_g, - "Maltodextrin (g)" => :maltodextrin_g, - "Oligosaccharides \n(g)" => :oligosaccharides_g, - "Polydextrose \n(g)" => :polydextrose_g, - "Raffinose \n(g)" => :raffinose_g, - "Stachyose \n(g)" => :stachyose_g, - "Sorbitol \n(g)" => :sorbitol_g, - "Resistant starch \n(g)" => :resistant_starch_g, - "Available carbohydrate, without sugar alcohols \n(g)" => :available_carbohydrate_without_sugar_alcohols_g, - "Available carbohydrate, with sugar alcohols \n(g)" => :available_carbohydrate_with_sugar_alcohols_g, - "Acetic acid \n(g)" => :acetic_acid_g, - "Citric acid \n(g)" => :citric_acid_g, - "Fumaric acid \n(g)" => :fumaric_acid_g, - "Lactic acid \n(g)" => :lactic_acid_g, - "Malic acid\n (g)" => :malic_acid_g, - "Oxalic acid \n(g)" => :oxalic_acid_g, - "Propionic acid \n(g)" => :propionic_acid_g, - "Quinic acid \n(g)" => :quinic_acid_g, - "Shikimic acid \n(g)" => :shikimic_acid_g, - "Succinic acid \n(g)" => :succinic_acid_g, - "Tartaric acid \n(g)" => :tartaric_acid_g, - "Aluminium (Al) \n(ug)" => :aluminium_al_ug, - "Antimony (Sb) \n(ug)" => :antimony_sb_ug, - "Arsenic (As) \n(ug)" => :arsenic_as_ug, - "Cadmium (Cd) \n(ug)" => :cadmium_cd_ug, - "Calcium (Ca) \n(mg)" => :calcium_ca_mg, - "Chromium (Cr) \n(ug)" => :chromium_cr_ug, - "Chloride (Cl) \n(mg)" => :chloride_cl_mg, - "Cobalt (Co) \n(ug)" => :cobalt_co_ug, - "Copper (Cu) \n(mg)" => :copper_cu_mg, - "Fluoride (F) \n(ug)" => :fluoride_f_ug, - "Iodine (I) \n(ug)" => :iodine_i_ug, - "Iron (Fe) \n(mg)" => :iron_fe_mg, - "Lead (Pb) \n(ug)" => :lead_pb_ug, - "Magnesium (Mg) \n(mg)" => :magnesium_mg_mg, - "Manganese (Mn) \n(mg)" => :manganese_mn_mg, - "Mercury (Hg) \n(ug)" => :mercury_hg_ug, - "Molybdenum (Mo) \n(ug)" => :molybdenum_mo_ug, - "Nickel (Ni) \n(ug)" => :nickel_ni_ug, - "Phosphorus (P) \n(mg)" => :phosphorus_p_mg, - "Potassium (K) \n(mg)" => :potassium_k_mg, - "Selenium (Se) \n(ug)" => :selenium_se_ug, - "Sodium (Na) \n(mg)" => :sodium_na_mg, - "Sulphur (S) \n(mg)" => :sulphur_s_mg, - "Tin (Sn) \n(ug)" => :tin_sn_ug, - "Zinc (Zn) \n(mg)" => :zinc_zn_mg, - "Retinol (preformed vitamin A) \n(ug)" => :retinol_preformed_vitamin_a_ug, - "Alpha-carotene \n(ug)" => :alpha_carotene_ug, - "Beta-carotene \n(ug)" => :beta_carotene_ug, - "Cryptoxanthin \n(ug)" => :cryptoxanthin_ug, - "Beta-carotene equivalents (provitamin A) \n(ug)" => :beta_carotene_equivalents_provitamin_a_ug, - "Vitamin A retinol equivalents \n(ug)" => :vitamin_a_retinol_equivalents_ug, - "Lutein \n(ug)" => :lutein_ug, - "Lycopene \n(ug)" => :lycopene_ug, - "Xanthophyl \n(ug)" => :xanthophyl_ug, - "Thiamin (B1) \n(mg)" => :thiamin_b1_mg, - "Riboflavin (B2) \n(mg)" => :riboflavin_b2_mg, - "Niacin (B3) \n(mg)" => :niacin_b3_mg, - "Niacin derived from tryptophan \n(mg)" => :niacin_derived_from_tryptophan_mg, - "Niacin derived equivalents \n(mg)" => :niacin_derived_equivalents_mg, - "Pantothenic acid (B5) \n(mg)" => :pantothenic_acid_b5_mg, - "Pyridoxine (B6) \n(mg)" => :pyridoxine_b6_mg, - "Biotin (B7) \n(ug)" => :biotin_b7_ug, - "Cobalamin (B12) \n(ug)" => :cobalamin_b12_ug, - "Folate, natural \n(ug)" => :folate_natural_ug, - "Folic acid \n(ug)" => :folic_acid_ug, - "Total folates \n(ug)" => :total_folates_ug, - "Dietary folate equivalents \n(ug)" => :dietary_folate_equivalents_ug, - "Vitamin C \n(mg)" => :vitamin_c_mg, - "Cholecalciferol (D3) \n(ug)" => :cholecalciferol_d3_ug, - "Ergocalciferol (D2) \n(ug)" => :ergocalciferol_d2_ug, - "25-hydroxy cholecalciferol (25-OH D3) \n(ug)" => :c25_hydroxy_cholecalciferol_25_oh_d3_ug, - "25-hydroxy ergocalciferol (25-OH D2) \n(ug)" => :c25_hydroxy_ergocalciferol_25_oh_d2_ug, - "Vitamin D3 equivalents \n(ug)" => :vitamin_d3_equivalents_ug, - "Alpha tocopherol \n(mg)" => :alpha_tocopherol_mg, - "Alpha tocotrienol \n(mg)" => :alpha_tocotrienol_mg, - "Beta tocopherol \n(mg)" => :beta_tocopherol_mg, - "Beta tocotrienol \n(mg)" => :beta_tocotrienol_mg, - "Delta tocopherol \n(mg)" => :delta_tocopherol_mg, - "Delta tocotrienol \n(mg)" => :delta_tocotrienol_mg, - "Gamma tocopherol \n(mg)" => :gamma_tocopherol_mg, - "Gamma tocotrienol \n(mg)" => :gamma_tocotrienol_mg, - "Vitamin E \n(mg)" => :vitamin_e_mg, - "C4 (%T)" => :c4_t, - "C6 (%T)" => :c6_t, - "C8 (%T)" => :c8_t, - "C10 (%T)" => :c10_t, - "C11 (%T)" => :c11_t, - "C12 (%T)" => :c12_t, - "C13 (%T)" => :c13_t, - "C14 (%T)" => :c14_t, - "C15 (%T)" => :c15_t, - "C16 (%T)" => :c16_t, - "C17 (%T)" => :c17_t, - "C18 (%T)" => :c18_t, - "C19 (%T)" => :c19_t, - "C20 (%T)" => :c20_t, - "C21 (%T)" => :c21_t, - "C22 (%T)" => :c22_t, - "C23 (%T)" => :c23_t, - "C24 (%T)" => :c24_t, - "Total saturated fatty acids, equated (%T)" => :total_saturated_fatty_acids_equated_t, - "C10:1 (%T)" => :c10_1_t, - "C12:1 (%T)" => :c12_1_t, - "C14:1 (%T)" => :c14_1_t, - "C15:1 (%T)" => :c15_1_t, - "C16:1 (%T)" => :c16_1_t, - "C17:1 (%T)" => :c17_1_t, - "C18:1 (%T)" => :c18_1_t, - "C18:1w5 (%T)" => :c18_1w5_t, - "C18:1w6 (%T)" => :c18_1w6_t, - "C18:1w7 (%T)" => :c18_1w7_t, - "C18:1w9 (%T)" => :c18_1w9_t, - "C20:1 (%T)" => :c20_1_t, - "C20:1w9 (%T)" => :c20_1w9_t, - "C20:1w13 (%T)" => :c20_1w13_t, - "C20:1w11 (%T)" => :c20_1w11_t, - "C22:1 (%T)" => :c22_1_t, - "C22:1w9 (%T)" => :c22_1w9_t, - "C22:1w11 (%T)" => :c22_1w11_t, - "C24:1 (%T)" => :c24_1_t, - "C24:1w9 (%T)" => :c24_1w9_t, - "C24:1w11 (%T)" => :c24_1w11_t, - "C24:1w13 (%T)" => :c24_1w13_t, - "Total monounsaturated fatty acids, equated (%T)" => :total_monounsaturated_fatty_acids_equated_t, - "C12:2 (%T)" => :c12_2_t, - "C16:2w4 (%T)" => :c16_2w4_t, - "C16:3 (%T)" => :c16_3_t, - "C18:2w6 (%T)" => :c18_2w6_t, - "C18:3w3 (%T)" => :c18_3w3_t, - "C18:3w4 (%T)" => :c18_3w4_t, - "C18:3w6 (%T)" => :c18_3w6_t, - "C18:4w1 (%T)" => :c18_4w1_t, - "C18:4w3 (%T)" => :c18_4w3_t, - "C20:2 (%T)" => :c20_2_t, - "C20:2w6 (%T)" => :c20_2w6_t, - "C20:3 (%T)" => :c20_3_t, - "C20:4 (%T)" => :c20_4_t, - "C20:3w3 (%T)" => :c20_3w3_t, - "C20:3w6 (%T)" => :c20_3w6_t, - "C20:4w3 (%T)" => :c20_4w3_t, - "C20:4w6 (%T)" => :c20_4w6_t, - "C20:5w3 (%T)" => :c20_5w3_t, - "C21:5w3 (%T)" => :c21_5w3_t, - "C22:2 (%T)" => :c22_2_t, - "C22:2w6 (%T)" => :c22_2w6_t, - "C22:4w6 (%T)" => :c22_4w6_t, - "C22:5w3 (%T)" => :c22_5w3_t, - "C22:5w6 (%T)" => :c22_5w6_t, - "C22:6w3 (%T)" => :c22_6w3_t, - "Total polyunsaturated fatty acids, equated (%T)" => :total_polyunsaturated_fatty_acids_equated_t, - "Total long chain omega 3 fatty acids, equated \n(%T)" => :total_long_chain_omega_3_fatty_acids_equated_t, - "Total undifferentiated fatty acids \n(%T)" => :total_undifferentiated_fatty_acids_t, - "Total trans fatty acids, imputed \n(%T)" => :total_trans_fatty_acids_imputed_t, - "C4 (g)" => :c4_g, - "C6 (g)" => :c6_g, - "C8 (g)" => :c8_g, - "C10 (g)" => :c10_g, - "C11 (g)" => :c11_g, - "C12 (g)" => :c12_g, - "C13 (g)" => :c13_g, - "C14 (g)" => :c14_g, - "C15 (g)" => :c15_g, - "C16 (g)" => :c16_g, - "C17 (g)" => :c17_g, - "C18 (g)" => :c18_g, - "C19 (g)" => :c19_g, - "C20 (g)" => :c20_g, - "C21 (g)" => :c21_g, - "C22 (g)" => :c22_g, - "C23 (g)" => :c23_g, - "C24 (g)" => :c24_g, - "Total saturated fatty acids, equated \n(g)" => :total_saturated_fatty_acids_equated_g, - "C10:1 (g)" => :c10_1_g, - "C12:1 (g)" => :c12_1_g, - "C14:1 (g)" => :c14_1_g, - "C15:1 (g)" => :c15_1_g, - "C16:1 (g)" => :c16_1_g, - "C17:1 (g)" => :c17_1_g, - "C18:1 (g)" => :c18_1_g, - "C18:1w5 (mg)" => :c18_1w5_mg, - "C18:1w6 (mg)" => :c18_1w6_mg, - "C18:1w7 (g)" => :c18_1w7_g, - "C18:1w9 (mg)" => :c18_1w9_mg, - "C20:1 (g)" => :c20_1_g, - "C20:1w9 (mg)" => :c20_1w9_mg, - "C20:1w13 (mg)" => :c20_1w13_mg, - "C20:1w11 (mg)" => :c20_1w11_mg, - "C22:1 (g)" => :c22_1_g, - "C22:1w9 (mg)" => :c22_1w9_mg, - "C22:1w11 (mg)" => :c22_1w11_mg, - "C24:1 (g)" => :c24_1_g, - "C24:1w9 (mg)" => :c24_1w9_mg, - "C24:1w11 (mg)" => :c24_1w11_mg, - "C24:1w13 (mg)" => :c24_1w13_mg, - "Total monounsaturated fatty acids, equated \n(g)" => :total_monounsaturated_fatty_acids_equated_g, - "C12:2 (g)" => :c12_2_g, - "C16:2w4 (mg)" => :c16_2w4_mg, - "C16:3 (g)" => :c16_3_g, - "C18:2w6 (g)" => :c18_2w6_g, - "C18:3w3 (g)" => :c18_3w3_g, - "C18:3w4 (g)" => :c18_3w4_g, - "C18:3w6 (mg)" => :c18_3w6_mg, - "C18:4w1 (g)" => :c18_4w1_g, - "C18:4w3 (mg)" => :c18_4w3_mg, - "C20:2 (mg)" => :c20_2_mg, - "C20:2w6 (mg)" => :c20_2w6_mg, - "C20:3 (mg)" => :c20_3_mg, - "C20:3w3 (mg)" => :c20_3w3_mg, - "C20:3w6 (mg)" => :c20_3w6_mg, - "C20:4 (g)" => :c20_4_g, - "C20:4w3 (mg)" => :c20_4w3_mg, - "C20:4w6 (mg)" => :c20_4w6_mg, - "C20:5w3 (mg)" => :c20_5w3_mg, - "C21:5w3 (g)" => :c21_5w3_g, - "C22:5w3 (mg)" => :c22_5w3_mg, - "C22:4w6 (mg)" => :c22_4w6_mg, - "C22:2 (g)" => :c22_2_g, - "C22:2w6 (mg)" => :c22_2w6_mg, - "C22:5w6 (g)" => :c22_5w6_g, - "C22:6w3 (mg)" => :c22_6w3_mg, - "Total polyunsaturated fatty acids, equated \n(g)" => :total_polyunsaturated_fatty_acids_equated_g, - "Total long chain omega 3 fatty acids, equated \n(mg)" => :total_long_chain_omega_3_fatty_acids_equated_mg, + "Public Food Key" => :public_food_key, + "Classification" => :classification, + "Food Name" => :food_name, + "Energy with dietary fibre, equated \n(kJ)" => :energy_with_dietary_fibre_equated_kj, + "Energy, without dietary fibre, equated \n(kJ)" => :energy_without_dietary_fibre_equated_kj, + "Moisture (water) \n(g)" => :moisture_water_g, + "Protein \n(g)" => :protein_g, + "Nitrogen \n(g)" => :nitrogen_g, + "Fat, total \n(g)" => :fat_total_g, + "Ash \n(g)" => :ash_g, + "Total dietary fibre \n(g)" => :total_dietary_fibre_g, + "Alcohol \n(g)" => :alcohol_g, + "Fructose \n(g)" => :fructose_g, + "Glucose \n(g)" => :glucose_g, + "Sucrose\n(g)" => :sucrose_g, + "Maltose \n(g)" => :maltose_g, + "Lactose \n(g)" => :lactose_g, + "Galactose \n(g)" => :galactose_g, + "Maltotrios \n(g)" => :maltotrios_g, + "Total sugars (g)" => :total_sugars_g, + "Added sugars (g)" => :added_sugars_g, + "Free sugars \n(g)" => :free_sugars_g, + "Starch \n(g)" => :starch_g, + "Dextrin \n(g)" => :dextrin_g, + "Glycerol \n(g)" => :glycerol_g, + "Glycogen \n(g)" => :glycogen_g, + "Inulin \n(g)" => :inulin_g, + "Erythritol \n(g)" => :erythritol_g, + "Maltitol \n(g)" => :maltitol_g, + "Mannitol \n(g)" => :mannitol_g, + "Xylitol \n(g)" => :xylitol_g, + "Maltodextrin (g)" => :maltodextrin_g, + "Oligosaccharides \n(g)" => :oligosaccharides_g, + "Polydextrose \n(g)" => :polydextrose_g, + "Raffinose \n(g)" => :raffinose_g, + "Stachyose \n(g)" => :stachyose_g, + "Sorbitol \n(g)" => :sorbitol_g, + "Resistant starch \n(g)" => :resistant_starch_g, + "Available carbohydrate, without sugar alcohols \n(g)" => :available_carbohydrate_without_sugar_alcohols_g, + "Available carbohydrate, with sugar alcohols \n(g)" => :available_carbohydrate_with_sugar_alcohols_g, + "Acetic acid \n(g)" => :acetic_acid_g, + "Citric acid \n(g)" => :citric_acid_g, + "Fumaric acid \n(g)" => :fumaric_acid_g, + "Lactic acid \n(g)" => :lactic_acid_g, + "Malic acid\n (g)" => :malic_acid_g, + "Oxalic acid \n(g)" => :oxalic_acid_g, + "Propionic acid \n(g)" => :propionic_acid_g, + "Quinic acid \n(g)" => :quinic_acid_g, + "Shikimic acid \n(g)" => :shikimic_acid_g, + "Succinic acid \n(g)" => :succinic_acid_g, + "Tartaric acid \n(g)" => :tartaric_acid_g, + "Aluminium (Al) \n(ug)" => :aluminium_al_ug, + "Antimony (Sb) \n(ug)" => :antimony_sb_ug, + "Arsenic (As) \n(ug)" => :arsenic_as_ug, + "Cadmium (Cd) \n(ug)" => :cadmium_cd_ug, + "Calcium (Ca) \n(mg)" => :calcium_ca_mg, + "Chromium (Cr) \n(ug)" => :chromium_cr_ug, + "Chloride (Cl) \n(mg)" => :chloride_cl_mg, + "Cobalt (Co) \n(ug)" => :cobalt_co_ug, + "Copper (Cu) \n(mg)" => :copper_cu_mg, + "Fluoride (F) \n(ug)" => :fluoride_f_ug, + "Iodine (I) \n(ug)" => :iodine_i_ug, + "Iron (Fe) \n(mg)" => :iron_fe_mg, + "Lead (Pb) \n(ug)" => :lead_pb_ug, + "Magnesium (Mg) \n(mg)" => :magnesium_mg_mg, + "Manganese (Mn) \n(mg)" => :manganese_mn_mg, + "Mercury (Hg) \n(ug)" => :mercury_hg_ug, + "Molybdenum (Mo) \n(ug)" => :molybdenum_mo_ug, + "Nickel (Ni) \n(ug)" => :nickel_ni_ug, + "Phosphorus (P) \n(mg)" => :phosphorus_p_mg, + "Potassium (K) \n(mg)" => :potassium_k_mg, + "Selenium (Se) \n(ug)" => :selenium_se_ug, + "Sodium (Na) \n(mg)" => :sodium_na_mg, + "Sulphur (S) \n(mg)" => :sulphur_s_mg, + "Tin (Sn) \n(ug)" => :tin_sn_ug, + "Zinc (Zn) \n(mg)" => :zinc_zn_mg, + "Retinol (preformed vitamin A) \n(ug)" => :retinol_preformed_vitamin_a_ug, + "Alpha-carotene \n(ug)" => :alpha_carotene_ug, + "Beta-carotene \n(ug)" => :beta_carotene_ug, + "Cryptoxanthin \n(ug)" => :cryptoxanthin_ug, + "Beta-carotene equivalents (provitamin A) \n(ug)" => :beta_carotene_equivalents_provitamin_a_ug, + "Vitamin A retinol equivalents \n(ug)" => :vitamin_a_retinol_equivalents_ug, + "Lutein \n(ug)" => :lutein_ug, + "Lycopene \n(ug)" => :lycopene_ug, + "Xanthophyl \n(ug)" => :xanthophyl_ug, + "Thiamin (B1) \n(mg)" => :thiamin_b1_mg, + "Riboflavin (B2) \n(mg)" => :riboflavin_b2_mg, + "Niacin (B3) \n(mg)" => :niacin_b3_mg, + "Niacin derived from tryptophan \n(mg)" => :niacin_derived_from_tryptophan_mg, + "Niacin derived equivalents \n(mg)" => :niacin_derived_equivalents_mg, + "Pantothenic acid (B5) \n(mg)" => :pantothenic_acid_b5_mg, + "Pyridoxine (B6) \n(mg)" => :pyridoxine_b6_mg, + "Biotin (B7) \n(ug)" => :biotin_b7_ug, + "Cobalamin (B12) \n(ug)" => :cobalamin_b12_ug, + "Folate, natural \n(ug)" => :folate_natural_ug, + "Folic acid \n(ug)" => :folic_acid_ug, + "Total folates \n(ug)" => :total_folates_ug, + "Dietary folate equivalents \n(ug)" => :dietary_folate_equivalents_ug, + "Vitamin C \n(mg)" => :vitamin_c_mg, + "Cholecalciferol (D3) \n(ug)" => :cholecalciferol_d3_ug, + "Ergocalciferol (D2) \n(ug)" => :ergocalciferol_d2_ug, + "25-hydroxy cholecalciferol (25-OH D3) \n(ug)" => :c25_hydroxy_cholecalciferol_25_oh_d3_ug, + "25-hydroxy ergocalciferol (25-OH D2) \n(ug)" => :c25_hydroxy_ergocalciferol_25_oh_d2_ug, + "Vitamin D3 equivalents \n(ug)" => :vitamin_d3_equivalents_ug, + "Alpha tocopherol \n(mg)" => :alpha_tocopherol_mg, + "Alpha tocotrienol \n(mg)" => :alpha_tocotrienol_mg, + "Beta tocopherol \n(mg)" => :beta_tocopherol_mg, + "Beta tocotrienol \n(mg)" => :beta_tocotrienol_mg, + "Delta tocopherol \n(mg)" => :delta_tocopherol_mg, + "Delta tocotrienol \n(mg)" => :delta_tocotrienol_mg, + "Gamma tocopherol \n(mg)" => :gamma_tocopherol_mg, + "Gamma tocotrienol \n(mg)" => :gamma_tocotrienol_mg, + "Vitamin E \n(mg)" => :vitamin_e_mg, + "C4 (%T)" => :c4_t, + "C6 (%T)" => :c6_t, + "C8 (%T)" => :c8_t, + "C10 (%T)" => :c10_t, + "C11 (%T)" => :c11_t, + "C12 (%T)" => :c12_t, + "C13 (%T)" => :c13_t, + "C14 (%T)" => :c14_t, + "C15 (%T)" => :c15_t, + "C16 (%T)" => :c16_t, + "C17 (%T)" => :c17_t, + "C18 (%T)" => :c18_t, + "C19 (%T)" => :c19_t, + "C20 (%T)" => :c20_t, + "C21 (%T)" => :c21_t, + "C22 (%T)" => :c22_t, + "C23 (%T)" => :c23_t, + "C24 (%T)" => :c24_t, + "Total saturated fatty acids, equated (%T)" => :total_saturated_fatty_acids_equated_t, + "C10:1 (%T)" => :c10_1_t, + "C12:1 (%T)" => :c12_1_t, + "C14:1 (%T)" => :c14_1_t, + "C15:1 (%T)" => :c15_1_t, + "C16:1 (%T)" => :c16_1_t, + "C17:1 (%T)" => :c17_1_t, + "C18:1 (%T)" => :c18_1_t, + "C18:1w5 (%T)" => :c18_1w5_t, + "C18:1w6 (%T)" => :c18_1w6_t, + "C18:1w7 (%T)" => :c18_1w7_t, + "C18:1w9 (%T)" => :c18_1w9_t, + "C20:1 (%T)" => :c20_1_t, + "C20:1w9 (%T)" => :c20_1w9_t, + "C20:1w13 (%T)" => :c20_1w13_t, + "C20:1w11 (%T)" => :c20_1w11_t, + "C22:1 (%T)" => :c22_1_t, + "C22:1w9 (%T)" => :c22_1w9_t, + "C22:1w11 (%T)" => :c22_1w11_t, + "C24:1 (%T)" => :c24_1_t, + "C24:1w9 (%T)" => :c24_1w9_t, + "C24:1w11 (%T)" => :c24_1w11_t, + "C24:1w13 (%T)" => :c24_1w13_t, + "Total monounsaturated fatty acids, equated (%T)" => :total_monounsaturated_fatty_acids_equated_t, + "C12:2 (%T)" => :c12_2_t, + "C16:2w4 (%T)" => :c16_2w4_t, + "C16:3 (%T)" => :c16_3_t, + "C18:2w6 (%T)" => :c18_2w6_t, + "C18:3w3 (%T)" => :c18_3w3_t, + "C18:3w4 (%T)" => :c18_3w4_t, + "C18:3w6 (%T)" => :c18_3w6_t, + "C18:4w1 (%T)" => :c18_4w1_t, + "C18:4w3 (%T)" => :c18_4w3_t, + "C20:2 (%T)" => :c20_2_t, + "C20:2w6 (%T)" => :c20_2w6_t, + "C20:3 (%T)" => :c20_3_t, + "C20:4 (%T)" => :c20_4_t, + "C20:3w3 (%T)" => :c20_3w3_t, + "C20:3w6 (%T)" => :c20_3w6_t, + "C20:4w3 (%T)" => :c20_4w3_t, + "C20:4w6 (%T)" => :c20_4w6_t, + "C20:5w3 (%T)" => :c20_5w3_t, + "C21:5w3 (%T)" => :c21_5w3_t, + "C22:2 (%T)" => :c22_2_t, + "C22:2w6 (%T)" => :c22_2w6_t, + "C22:4w6 (%T)" => :c22_4w6_t, + "C22:5w3 (%T)" => :c22_5w3_t, + "C22:5w6 (%T)" => :c22_5w6_t, + "C22:6w3 (%T)" => :c22_6w3_t, + "Total polyunsaturated fatty acids, equated (%T)" => :total_polyunsaturated_fatty_acids_equated_t, + "Total long chain omega 3 fatty acids, equated \n(%T)" => :total_long_chain_omega_3_fatty_acids_equated_t, + "Total undifferentiated fatty acids \n(%T)" => :total_undifferentiated_fatty_acids_t, + "Total trans fatty acids, imputed \n(%T)" => :total_trans_fatty_acids_imputed_t, + "C4 (g)" => :c4_g, + "C6 (g)" => :c6_g, + "C8 (g)" => :c8_g, + "C10 (g)" => :c10_g, + "C11 (g)" => :c11_g, + "C12 (g)" => :c12_g, + "C13 (g)" => :c13_g, + "C14 (g)" => :c14_g, + "C15 (g)" => :c15_g, + "C16 (g)" => :c16_g, + "C17 (g)" => :c17_g, + "C18 (g)" => :c18_g, + "C19 (g)" => :c19_g, + "C20 (g)" => :c20_g, + "C21 (g)" => :c21_g, + "C22 (g)" => :c22_g, + "C23 (g)" => :c23_g, + "C24 (g)" => :c24_g, + "Total saturated fatty acids, equated \n(g)" => :total_saturated_fatty_acids_equated_g, + "C10:1 (g)" => :c10_1_g, + "C12:1 (g)" => :c12_1_g, + "C14:1 (g)" => :c14_1_g, + "C15:1 (g)" => :c15_1_g, + "C16:1 (g)" => :c16_1_g, + "C17:1 (g)" => :c17_1_g, + "C18:1 (g)" => :c18_1_g, + "C18:1w5 (mg)" => :c18_1w5_mg, + "C18:1w6 (mg)" => :c18_1w6_mg, + "C18:1w7 (g)" => :c18_1w7_g, + "C18:1w9 (mg)" => :c18_1w9_mg, + "C20:1 (g)" => :c20_1_g, + "C20:1w9 (mg)" => :c20_1w9_mg, + "C20:1w13 (mg)" => :c20_1w13_mg, + "C20:1w11 (mg)" => :c20_1w11_mg, + "C22:1 (g)" => :c22_1_g, + "C22:1w9 (mg)" => :c22_1w9_mg, + "C22:1w11 (mg)" => :c22_1w11_mg, + "C24:1 (g)" => :c24_1_g, + "C24:1w9 (mg)" => :c24_1w9_mg, + "C24:1w11 (mg)" => :c24_1w11_mg, + "C24:1w13 (mg)" => :c24_1w13_mg, + "Total monounsaturated fatty acids, equated \n(g)" => :total_monounsaturated_fatty_acids_equated_g, + "C12:2 (g)" => :c12_2_g, + "C16:2w4 (mg)" => :c16_2w4_mg, + "C16:3 (g)" => :c16_3_g, + "C18:2w6 (g)" => :c18_2w6_g, + "C18:3w3 (g)" => :c18_3w3_g, + "C18:3w4 (g)" => :c18_3w4_g, + "C18:3w6 (mg)" => :c18_3w6_mg, + "C18:4w1 (g)" => :c18_4w1_g, + "C18:4w3 (mg)" => :c18_4w3_mg, + "C20:2 (mg)" => :c20_2_mg, + "C20:2w6 (mg)" => :c20_2w6_mg, + "C20:3 (mg)" => :c20_3_mg, + "C20:3w3 (mg)" => :c20_3w3_mg, + "C20:3w6 (mg)" => :c20_3w6_mg, + "C20:4 (g)" => :c20_4_g, + "C20:4w3 (mg)" => :c20_4w3_mg, + "C20:4w6 (mg)" => :c20_4w6_mg, + "C20:5w3 (mg)" => :c20_5w3_mg, + "C21:5w3 (g)" => :c21_5w3_g, + "C22:5w3 (mg)" => :c22_5w3_mg, + "C22:4w6 (mg)" => :c22_4w6_mg, + "C22:2 (g)" => :c22_2_g, + "C22:2w6 (mg)" => :c22_2w6_mg, + "C22:5w6 (g)" => :c22_5w6_g, + "C22:6w3 (mg)" => :c22_6w3_mg, + "Total polyunsaturated fatty acids, equated \n(g)" => :total_polyunsaturated_fatty_acids_equated_g, + "Total long chain omega 3 fatty acids, equated \n(mg)" => :total_long_chain_omega_3_fatty_acids_equated_mg, "Total undifferentiated fatty acids, mass basis basis \n(mg)" => :total_undifferentiated_fatty_acids_mass_basis_basis_mg, - "Total trans fatty acids, imputed \n(mg)" => :total_trans_fatty_acids_imputed_mg, - "Caffeine \n(mg)" => :caffeine_mg, - "Cholesterol \n(mg)" => :cholesterol_mg, - "Alanine \n(mg/gN)" => :alanine_mg_gn, - "Arginine \n(mg/gN)" => :arginine_mg_gn, - "Aspartic acid \n(mg/gN)" => :aspartic_acid_mg_gn, - "Cystine plus cysteine \n(mg/gN)" => :cystine_plus_cysteine_mg_gn, - "Glutamic acid \n(mg/gN)" => :glutamic_acid_mg_gn, - "Glycine \n(mg/gN)" => :glycine_mg_gn, - "Histidine \n(mg/gN)" => :histidine_mg_gn, - "Isoleucine \n(mg/gN)" => :isoleucine_mg_gn, - "Leucine \n(mg/gN)" => :leucine_mg_gn, - "Lysine \n(mg/gN)" => :lysine_mg_gn, - "Methionine \n(mg/gN)" => :methionine_mg_gn, - "Phenylalanine \n(mg/gN)" => :phenylalanine_mg_gn, - "Proline \n(mg/gN)" => :proline_mg_gn, - "Serine \n(mg/gN)" => :serine_mg_gn, - "Threonine \n(mg/gN)" => :threonine_mg_gn, - "Tyrosine \n(mg/gN)" => :tyrosine_mg_gn, - "Tryptophan \n(mg/gN)" => :tryptophan_mg_gn, - "Valine \n(mg/gN)" => :valine_mg_gn, - "Alanine \n(mg)" => :alanine_mg, - "Arginine \n(mg)" => :arginine_mg, - "Aspartic acid \n(mg)" => :aspartic_acid_mg, - "Cystine plus cysteine \n(mg)" => :cystine_plus_cysteine_mg, - "Glutamic acid \n(mg)" => :glutamic_acid_mg, - "Glycine \n(mg)" => :glycine_mg, - "Histidine \n(mg)" => :histidine_mg, - "Isoleucine \n(mg)" => :isoleucine_mg, - "Leucine \n(mg)" => :leucine_mg, - "Lysine \n(mg)" => :lysine_mg, - "Methionine \n(mg)" => :methionine_mg, - "Phenylalanine \n(mg)" => :phenylalanine_mg, - "Proline \n(mg)" => :proline_mg, - "Serine \n(mg)" => :serine_mg, - "Threonine \n(mg)" => :threonine_mg, - "Tyrosine \n(mg)" => :tyrosine_mg, - "Tryptophan \n(mg)" => :tryptophan_mg, - "Valine \n(mg)" => :valine_mg + "Total trans fatty acids, imputed \n(mg)" => :total_trans_fatty_acids_imputed_mg, + "Caffeine \n(mg)" => :caffeine_mg, + "Cholesterol \n(mg)" => :cholesterol_mg, + "Alanine \n(mg/gN)" => :alanine_mg_gn, + "Arginine \n(mg/gN)" => :arginine_mg_gn, + "Aspartic acid \n(mg/gN)" => :aspartic_acid_mg_gn, + "Cystine plus cysteine \n(mg/gN)" => :cystine_plus_cysteine_mg_gn, + "Glutamic acid \n(mg/gN)" => :glutamic_acid_mg_gn, + "Glycine \n(mg/gN)" => :glycine_mg_gn, + "Histidine \n(mg/gN)" => :histidine_mg_gn, + "Isoleucine \n(mg/gN)" => :isoleucine_mg_gn, + "Leucine \n(mg/gN)" => :leucine_mg_gn, + "Lysine \n(mg/gN)" => :lysine_mg_gn, + "Methionine \n(mg/gN)" => :methionine_mg_gn, + "Phenylalanine \n(mg/gN)" => :phenylalanine_mg_gn, + "Proline \n(mg/gN)" => :proline_mg_gn, + "Serine \n(mg/gN)" => :serine_mg_gn, + "Threonine \n(mg/gN)" => :threonine_mg_gn, + "Tyrosine \n(mg/gN)" => :tyrosine_mg_gn, + "Tryptophan \n(mg/gN)" => :tryptophan_mg_gn, + "Valine \n(mg/gN)" => :valine_mg_gn, + "Alanine \n(mg)" => :alanine_mg, + "Arginine \n(mg)" => :arginine_mg, + "Aspartic acid \n(mg)" => :aspartic_acid_mg, + "Cystine plus cysteine \n(mg)" => :cystine_plus_cysteine_mg, + "Glutamic acid \n(mg)" => :glutamic_acid_mg, + "Glycine \n(mg)" => :glycine_mg, + "Histidine \n(mg)" => :histidine_mg, + "Isoleucine \n(mg)" => :isoleucine_mg, + "Leucine \n(mg)" => :leucine_mg, + "Lysine \n(mg)" => :lysine_mg, + "Methionine \n(mg)" => :methionine_mg, + "Phenylalanine \n(mg)" => :phenylalanine_mg, + "Proline \n(mg)" => :proline_mg, + "Serine \n(mg)" => :serine_mg, + "Threonine \n(mg)" => :threonine_mg, + "Tyrosine \n(mg)" => :tyrosine_mg, + "Tryptophan \n(mg)" => :tryptophan_mg, + "Valine \n(mg)" => :valine_mg }.freeze csv_file = File.read(Rails.root.join('lib', 'tasks', 'australian_food_classification_data.csv')) diff --git a/spec/features/admin/reverting_crops_spec.rb b/spec/features/admin/reverting_crops_spec.rb index f6f436f1b8..2276861e11 100644 --- a/spec/features/admin/reverting_crops_spec.rb +++ b/spec/features/admin/reverting_crops_spec.rb @@ -32,7 +32,7 @@ scenario 'Member cannot revert a crop' do visit admin_crops_path - expect(page).not_to have_link('Revert') + expect(page).to have_no_link('Revert') end end end diff --git a/spec/features/conversations/index_spec.rb b/spec/features/conversations/index_spec.rb index a5225817cf..e10696b54d 100644 --- a/spec/features/conversations/index_spec.rb +++ b/spec/features/conversations/index_spec.rb @@ -73,13 +73,13 @@ click_link recipient.login_name click_link 'Inbox' - expect(page).to have_selector('.sent') + expect(page).to have_css('.sent') find('.sent').click all('input[type=checkbox]').each(&:click) click_button 'Delete' - expect(page).to have_selector('.sent') + expect(page).to have_css('.sent') find('.sent').click expect(page).to have_no_content 'this is a message' expect(page).to have_no_content 'this is another message' diff --git a/spec/features/crops/creating_a_crop_spec.rb b/spec/features/crops/creating_a_crop_spec.rb index f87a44fbbb..ebb4d2231b 100644 --- a/spec/features/crops/creating_a_crop_spec.rb +++ b/spec/features/crops/creating_a_crop_spec.rb @@ -33,7 +33,6 @@ shared_examples 'request crop' do describe "requesting a crop with multiple scientific and alternate name" do - include_examples 'fill in form' before do within "form#new_crop" do fill_in "request_notes", with: "This is the Philippine national flower." @@ -41,6 +40,8 @@ end end + include_examples 'fill in form' + it { expect(page).to have_content 'crop was successfully created.' } it { expect(page).to have_content "This crop is currently pending approval." } it { expect(page).to have_content "Jasminum sambac 2" } @@ -50,11 +51,12 @@ shared_examples 'create crop' do describe "creating a crop with multiple scientific and alternate name" do - include_examples 'fill in form' before do click_button "Save" end + include_examples 'fill in form' + it { expect(page).to have_content 'crop was successfully created.' } it { expect(page).to have_content "Jasminum sambac 2" } it { expect(page).to have_content "Matsurika" } diff --git a/spec/features/footer_spec.rb b/spec/features/footer_spec.rb index 24960f138e..ea8c893295 100644 --- a/spec/features/footer_spec.rb +++ b/spec/features/footer_spec.rb @@ -10,7 +10,7 @@ end it 'has the Open Service link and graphic' do - expect(page).to have_selector 'a[href="https://opendefinition.org/ossd/"]' + expect(page).to have_css 'a[href="https://opendefinition.org/ossd/"]' end # NB: not testing specific content in the footer since I'm going to put them diff --git a/spec/features/gardens/adding_gardens_spec.rb b/spec/features/gardens/adding_gardens_spec.rb index 89e6015794..8a59b41576 100644 --- a/spec/features/gardens/adding_gardens_spec.rb +++ b/spec/features/gardens/adding_gardens_spec.rb @@ -11,10 +11,10 @@ include_examples 'is accessible' it "displays required and optional fields properly" do - expect(page).to have_selector ".required", text: "Name" - expect(page).to have_selector 'textarea#garden_description' - expect(page).to have_selector 'input#garden_location' - expect(page).to have_selector 'input#garden_area' + expect(page).to have_css ".required", text: "Name" + expect(page).to have_css 'textarea#garden_description' + expect(page).to have_css 'input#garden_location' + expect(page).to have_css 'input#garden_area' end it "Create new garden" do diff --git a/spec/features/harvests/harvesting_a_crop_spec.rb b/spec/features/harvests/harvesting_a_crop_spec.rb index 9cfbe787a6..88447105c2 100644 --- a/spec/features/harvests/harvesting_a_crop_spec.rb +++ b/spec/features/harvests/harvesting_a_crop_spec.rb @@ -14,10 +14,10 @@ it_behaves_like "crop suggest", "harvest", "crop" describe "displays required and optional fields properly" do - it { expect(page).to have_selector ".required", text: "What did you harvest?" } - it { expect(page).to have_selector 'input#harvest_quantity' } - it { expect(page).to have_selector 'input#harvest_weight_quantity' } - it { expect(page).to have_selector 'textarea#harvest_description' } + it { expect(page).to have_css ".required", text: "What did you harvest?" } + it { expect(page).to have_css 'input#harvest_quantity' } + it { expect(page).to have_css 'input#harvest_weight_quantity' } + it { expect(page).to have_css 'textarea#harvest_description' } end it "Creating a new harvest", :js do diff --git a/spec/features/members/list_spec.rb b/spec/features/members/list_spec.rb index 3ae3c7429a..6936613bdb 100644 --- a/spec/features/members/list_spec.rb +++ b/spec/features/members/list_spec.rb @@ -13,7 +13,7 @@ before do visit members_path expect(page).to have_css "#sort" - expect(page).to have_selector "form" + expect(page).to have_css "form" end it "default alphabetical sort" do diff --git a/spec/features/plantings/planting_a_crop_spec.rb b/spec/features/plantings/planting_a_crop_spec.rb index 42d5c25a90..80d3196274 100644 --- a/spec/features/plantings/planting_a_crop_spec.rb +++ b/spec/features/plantings/planting_a_crop_spec.rb @@ -19,14 +19,14 @@ it_behaves_like "crop suggest", "planting" describe "displays required and optional fields properly" do - it { expect(page).to have_selector ".required", text: "What did you plant?" } - it { expect(page).to have_selector ".required", text: "Where did you plant it?" } - it { expect(page).to have_selector 'input#planting_planted_at' } - it { expect(page).to have_selector 'input#planting_quantity' } - it { expect(page).to have_selector 'select#planting_planted_from' } - it { expect(page).to have_selector 'select#planting_sunniness' } - it { expect(page).to have_selector 'textarea#planting_description' } - it { expect(page).to have_selector 'input#planting_finished_at' } + it { expect(page).to have_css ".required", text: "What did you plant?" } + it { expect(page).to have_css ".required", text: "Where did you plant it?" } + it { expect(page).to have_css 'input#planting_planted_at' } + it { expect(page).to have_css 'input#planting_quantity' } + it { expect(page).to have_css 'select#planting_planted_from' } + it { expect(page).to have_css 'select#planting_sunniness' } + it { expect(page).to have_css 'textarea#planting_description' } + it { expect(page).to have_css 'input#planting_finished_at' } end describe "Creating a new planting" do diff --git a/spec/features/seeds/adding_seeds_spec.rb b/spec/features/seeds/adding_seeds_spec.rb index 01b42ea570..c9307c62bc 100644 --- a/spec/features/seeds/adding_seeds_spec.rb +++ b/spec/features/seeds/adding_seeds_spec.rb @@ -15,16 +15,16 @@ describe "displays required and optional fields properly" do # NOTE: The required behaviour is pushed down to the control itself, not the form-group as of rails 7.1. # Modern browsers enforce the required behaviour better than us doing it ourselves. - it { expect(page).to have_selector "label", text: "Crop" } - it { expect(page).to have_selector 'input#seed_quantity' } - it { expect(page).to have_selector 'input#seed_plant_before' } - it { expect(page).to have_selector 'input#seed_days_until_maturity_min' } - it { expect(page).to have_selector 'input#seed_days_until_maturity_max' } - it { expect(page).to have_selector 'label', text: 'Organic?' } - it { expect(page).to have_selector 'label', text: 'GMO?' } - it { expect(page).to have_selector 'label', text: 'Heirloom?' } - it { expect(page).to have_selector 'textarea#seed_description' } - it { expect(page).to have_selector 'label', text: 'Will trade' } + it { expect(page).to have_css "label", text: "Crop" } + it { expect(page).to have_css 'input#seed_quantity' } + it { expect(page).to have_css 'input#seed_plant_before' } + it { expect(page).to have_css 'input#seed_days_until_maturity_min' } + it { expect(page).to have_css 'input#seed_days_until_maturity_max' } + it { expect(page).to have_css 'label', text: 'Organic?' } + it { expect(page).to have_css 'label', text: 'GMO?' } + it { expect(page).to have_css 'label', text: 'Heirloom?' } + it { expect(page).to have_css 'textarea#seed_description' } + it { expect(page).to have_css 'label', text: 'Will trade' } end describe "Adding a new seed", :js do diff --git a/spec/features/shared_examples/crop_suggest.rb b/spec/features/shared_examples/crop_suggest.rb index 7abb212020..be91c97973 100644 --- a/spec/features/shared_examples/crop_suggest.rb +++ b/spec/features/shared_examples/crop_suggest.rb @@ -9,7 +9,7 @@ let!(:roma) { create(:roma) } it "placeholder text in crop auto suggest field" do - expect(page).to have_selector("input[placeholder='e.g. lettuce']") + expect(page).to have_css("input[placeholder='e.g. lettuce']") end it "typing in the crop name displays suggestions" do @@ -41,7 +41,7 @@ select_from_autocomplete("pear") - expect(page).to have_selector("input##{resource}_crop_id[value='#{pear.id}']", visible: false) + expect(page).to have_css("input##{resource}_crop_id[value='#{pear.id}']", visible: false) end it "Typing and pausing does not affect input" do diff --git a/spec/models/ability_spec.rb b/spec/models/ability_spec.rb index 7bef2ded83..10f4123221 100644 --- a/spec/models/ability_spec.rb +++ b/spec/models/ability_spec.rb @@ -136,6 +136,7 @@ it "can manage members" do ability.should be_able_to(:destroy, FactoryBot.create(:member)) end + it "cannot delete themselves" do ability.should_not be_able_to(:destroy, member) end diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index 853eae84d6..df167824c7 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -144,7 +144,7 @@ end it "does not duplicate" do - expect(post.crops).to match_array([tomato, maize]) + expect(post.crops).to contain_exactly(tomato, maize) end it "is updated when post was modified" do diff --git a/spec/requests/api/v1/activities_request_spec.rb b/spec/requests/api/v1/activities_request_spec.rb index 3cbf7428a4..81daf18034 100644 --- a/spec/requests/api/v1/activities_request_spec.rb +++ b/spec/requests/api/v1/activities_request_spec.rb @@ -7,8 +7,8 @@ let(:member) { create(:member) } let(:token) do - member.regenerate_api_token - member.api_token.token + member.regenerate_api_token + member.api_token.token end let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } } let(:auth_headers) { headers.merge('Authorization' => "Bearer #{token}") } @@ -64,12 +64,12 @@ let(:params) do { 'data' => { - 'type' => 'activities', - 'id' => activity.id.to_s, + 'type' => 'activities', + 'id' => activity.id.to_s, 'attributes' => { 'description' => 'A new description', - 'finished' => true, - 'due-date' => '2025-10-31' + 'finished' => true, + 'due-date' => '2025-10-31' } } } diff --git a/spec/requests/api/v1/members_request_spec.rb b/spec/requests/api/v1/members_request_spec.rb index aea8c08cd1..759632d5df 100644 --- a/spec/requests/api/v1/members_request_spec.rb +++ b/spec/requests/api/v1/members_request_spec.rb @@ -13,11 +13,11 @@ "links" => { "self" => resource_url }, "attributes" => attributes, "relationships" => { - "gardens" => gardens_as_json_api, - "harvests" => harvests_as_json_api, - "photos" => photos_as_json_api, - "plantings" => plantings_as_json_api, - "seeds" => seeds_as_json_api, + "gardens" => gardens_as_json_api, + "harvests" => harvests_as_json_api, + "photos" => photos_as_json_api, + "plantings" => plantings_as_json_api, + "seeds" => seeds_as_json_api, "activities" => activities_as_json_api } } end diff --git a/spec/requests/api/v1/plantings_request_spec.rb b/spec/requests/api/v1/plantings_request_spec.rb index 4e1812d138..374d37aab2 100644 --- a/spec/requests/api/v1/plantings_request_spec.rb +++ b/spec/requests/api/v1/plantings_request_spec.rb @@ -211,7 +211,7 @@ end describe "by member/owner" do - before :each do + before do @member1 = planting.owner @planting2 = create(:planting, owner: create(:owner)) @member2 = @planting2.owner diff --git a/spec/support/feature_helpers.rb b/spec/support/feature_helpers.rb index 8040cdd3af..f0d1fefe67 100644 --- a/spec/support/feature_helpers.rb +++ b/spec/support/feature_helpers.rb @@ -7,7 +7,7 @@ def fill_autocomplete(field, options = {}) end def select_from_autocomplete(select) - page.should have_selector('ul.ui-autocomplete li.ui-menu-item a') + page.should have_css('ul.ui-autocomplete li.ui-menu-item a') selector = %{ul.ui-autocomplete li.ui-menu-item a:contains("#{select}")} page.execute_script " $('#{selector}').mouseenter().click() " end diff --git a/spec/views/posts/show.html.haml_spec.rb b/spec/views/posts/show.html.haml_spec.rb index 6abd9e9e53..0c9d6d0886 100644 --- a/spec/views/posts/show.html.haml_spec.rb +++ b/spec/views/posts/show.html.haml_spec.rb @@ -55,7 +55,7 @@ describe 'has an anchor to the comments' do let(:post) { FactoryBot.create(:post, author:) } - it { is_expected.to have_selector('a[name=comments]') } + it { is_expected.to have_css('a[name=comments]') } end end