mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-05-25 09:19:15 -04:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fea2f6ff61 |
@@ -183,7 +183,7 @@ GEM
|
||||
image_processing (~> 1.1)
|
||||
marcel (~> 1.0.0)
|
||||
ssrf_filter (~> 1.0)
|
||||
chartkick (5.2.0)
|
||||
chartkick (5.1.5)
|
||||
childprocess (5.0.0)
|
||||
coderay (1.1.3)
|
||||
coercible (1.0.0)
|
||||
@@ -607,7 +607,7 @@ GEM
|
||||
rswag-ui (2.16.0)
|
||||
actionpack (>= 5.2, < 8.1)
|
||||
railties (>= 5.2, < 8.1)
|
||||
rubocop (1.80.1)
|
||||
rubocop (1.80.0)
|
||||
json (~> 2.3)
|
||||
language_server-protocol (~> 3.17.0.2)
|
||||
lint_roller (~> 1.1.0)
|
||||
|
||||
@@ -39,6 +39,12 @@ class CropsController < ApplicationController
|
||||
respond_with @crops
|
||||
end
|
||||
|
||||
def openfarm
|
||||
@crop = Crop.find(params[:crop_slug])
|
||||
@crop.update_openfarm_data!
|
||||
respond_with @crop, location: @crop
|
||||
end
|
||||
|
||||
def gbif
|
||||
@crop = Crop.find(params[:crop_slug])
|
||||
@crop.update_gbif_data!
|
||||
@@ -131,6 +137,7 @@ class CropsController < ApplicationController
|
||||
|
||||
if @crop.approval_status_changed?(from: "pending", to: "approved")
|
||||
notifier.deliver_now!
|
||||
@crop.update_openfarm_data!
|
||||
@crop.update_gbif_data!
|
||||
end
|
||||
else
|
||||
|
||||
@@ -4,6 +4,10 @@ module OpenFarmData
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
def update_openfarm_data!
|
||||
OpenfarmService.new.update_crop(self)
|
||||
end
|
||||
|
||||
def of_photo
|
||||
fetch_attr('main_image_path')
|
||||
end
|
||||
|
||||
@@ -59,7 +59,6 @@ class Seed < ApplicationRecord
|
||||
scope :has_location, -> { joins(:owner).where.not('members.location': nil) }
|
||||
scope :recent, -> { order(created_at: :desc) }
|
||||
scope :active, -> { where('finished <> true').where('finished_at IS NULL OR finished_at < ?', Time.zone.now) }
|
||||
scope :expired, -> { active.where('plant_before < ?', Time.zone.today) }
|
||||
|
||||
def tradable
|
||||
tradable_to != 'nowhere'
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
= edit_icon
|
||||
= t('.edit')
|
||||
|
||||
= link_to crop_openfarm_path(crop), method: :post, class: 'dropdown-item' do
|
||||
= icon 'far', 'update'
|
||||
Fetch data from OpenFarm
|
||||
|
||||
= link_to crop_gbif_path(crop), method: :post, class: 'dropdown-item' do
|
||||
= icon 'far', 'update'
|
||||
Fetch data from GBIF
|
||||
|
||||
@@ -147,14 +147,6 @@
|
||||
= icon 'fas', 'external-link-alt'
|
||||
Google
|
||||
|
||||
%li.list-group-item
|
||||
= link_to 'https://chat.openai.com/?model=gpt-4o&prompt=' + CGI.escape(['How do I grow', @crop.name, "and what grows well with it? What should I plant the next season if practicing crop rotation? Explain why and add links to your sources"].join(' ')),
|
||||
target: "_blank",
|
||||
class: 'card-link',
|
||||
rel: "noopener noreferrer" do
|
||||
= icon 'fas', 'external-link-alt'
|
||||
ChatGPT
|
||||
|
||||
%li.list-group-item
|
||||
= link_to "https://wikihow.com/wikiHowTo?search=#{CGI.escape "grow #{@crop.name}" }",
|
||||
target: "_blank",
|
||||
|
||||
@@ -81,6 +81,7 @@ Rails.application.routes.draw do
|
||||
get 'sunniness' => 'charts/crops#sunniness', constraints: { format: 'json' }
|
||||
get 'planted_from' => 'charts/crops#planted_from', constraints: { format: 'json' }
|
||||
get 'harvested_for' => 'charts/crops#harvested_for', constraints: { format: 'json' }
|
||||
post :openfarm
|
||||
post :gbif
|
||||
|
||||
collection do
|
||||
|
||||
@@ -53,12 +53,4 @@ namespace :growstuff do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
desc "Mark seeds as finished when plant-before date expires"
|
||||
# usage: rake growstuff:finish_expired_seeds
|
||||
task finish_expired_seeds: :environment do
|
||||
Seed.expired.find_each do |seed|
|
||||
seed.update(finished: true, finished_at: Time.zone.now)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -132,20 +132,6 @@ describe Seed do
|
||||
end
|
||||
end
|
||||
|
||||
context 'expired' do
|
||||
it 'returns seeds with a plant_before date in the past' do
|
||||
expired_seed = FactoryBot.create(:seed, plant_before: 1.day.ago)
|
||||
not_expired_seed = FactoryBot.create(:seed, plant_before: 1.day.from_now)
|
||||
described_class.expired.should include expired_seed
|
||||
described_class.expired.should_not include not_expired_seed
|
||||
end
|
||||
|
||||
it 'does not return finished seeds' do
|
||||
expired_seed = FactoryBot.create(:seed, plant_before: 1.day.ago, finished: true)
|
||||
described_class.expired.should_not include expired_seed
|
||||
end
|
||||
end
|
||||
|
||||
context 'interesting' do
|
||||
it 'lists interesting seeds' do
|
||||
# to be interesting a seed must:
|
||||
|
||||
@@ -14,7 +14,7 @@ RSpec.configure do |config|
|
||||
# By default, the operations defined in spec files are added to the first
|
||||
# document below. You can override this behavior by adding a swagger_doc tag to the
|
||||
# the root example_group in your specs, e.g. describe '...', swagger_doc: 'v2/swagger.json'
|
||||
config.swagger_docs = {
|
||||
config.openapi_specs = {
|
||||
'v1/swagger.yaml' => {
|
||||
openapi: '3.0.1',
|
||||
info: {
|
||||
@@ -29,5 +29,5 @@ RSpec.configure do |config|
|
||||
# The swagger_docs configuration option has the filename including format in
|
||||
# the key, this may want to be changed to avoid putting yaml in json files.
|
||||
# Defaults to json. Accepts ':json' and ':yaml'.
|
||||
config.swagger_format = :yaml
|
||||
config.openapi_format = :yaml
|
||||
end
|
||||
|
||||
6
swagger/v1/swagger.yaml
Normal file
6
swagger/v1/swagger.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
openapi: 3.0.1
|
||||
info:
|
||||
title: API V1
|
||||
version: v1
|
||||
paths: {}
|
||||
Reference in New Issue
Block a user