Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add table for weather observation (Stacked PR) #3452

Draft
wants to merge 19 commits into
base: dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 17 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions app/controllers/weather_observations_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# frozen_string_literal: true

class WeatherObservationsController < DataController
def index

Check notice on line 4 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L4

Use 2 (not 4) spaces for indentation. (Layout/IndentationWidth)
@owner = Member.find_by(slug: params[:member_slug])
@show_all = params[:all] == '1'
@show_jump_to = params[:member_slug].present? ? true : false

Check notice on line 7 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L7

Remove redundant ternary operator with boolean literal branches. (Style/IfWithBooleanLiteralBranches)

Check notice on line 8 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L8

Trailing whitespace detected. (Layout/TrailingWhitespace)
CloCkWeRX marked this conversation as resolved.
Show resolved Hide resolved
# @weather_observations = @weather_observations.includes(:owner)

Check notice on line 9 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L9

Incorrect indentation detected (column 4 instead of 6). (Layout/CommentIndentation)
# @weather_observations = @weather_observations.active unless @show_all
# @weather_observations = @weather_observations.where(owner: @owner) if @owner.present?
# @weather_observations = @weather_observations.where.not(members: { confirmed_at: nil })

Check notice on line 12 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L12

Incorrect indentation detected (column 6 instead of 8). (Layout/CommentIndentation)
# .order(:name).paginate(page: params[:page])

Check notice on line 13 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L13

Incorrect indentation detected (column 8 instead of 6). (Layout/CommentIndentation)
respond_with(@weather_observations)
end

Check notice on line 16 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L16

Trailing whitespace detected. (Layout/TrailingWhitespace)
CloCkWeRX marked this conversation as resolved.
Show resolved Hide resolved
def show

Check notice on line 17 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L17

Use 2 (not 4) spaces for indentation. (Layout/IndentationWidth)
respond_with(@weather_observation)
end

Check notice on line 20 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L20

Trailing whitespace detected. (Layout/TrailingWhitespace)
CloCkWeRX marked this conversation as resolved.
Show resolved Hide resolved
def new

Check notice on line 21 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L21

Use 2 (not 4) spaces for indentation. (Layout/IndentationWidth)
@weather_observation = WeatherObservation.new
respond_with(@weather_observation)
end

Check notice on line 25 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L25

Trailing whitespace detected. (Layout/TrailingWhitespace)
CloCkWeRX marked this conversation as resolved.
Show resolved Hide resolved
def edit

Check notice on line 26 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L26

Use 2 (not 4) spaces for indentation. (Layout/IndentationWidth)
respond_with(@weather_observation)
end

Check notice on line 29 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L29

Trailing whitespace detected. (Layout/TrailingWhitespace)
CloCkWeRX marked this conversation as resolved.
Show resolved Hide resolved
def create

Check notice on line 30 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L30

Use 2 (not 4) spaces for indentation. (Layout/IndentationWidth)
@weather_observation.owner_id = current_member.id
flash[:notice] = I18n.t('weather_observations.created') if @weather_observation.save
respond_with(@weather_observation)
end

Check notice on line 35 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L35

Trailing whitespace detected. (Layout/TrailingWhitespace)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unexpected trailing spaces found.

def update

Check notice on line 36 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L36

Use 2 (not 4) spaces for indentation. (Layout/IndentationWidth)
flash[:notice] = I18n.t('weather_observations.updated') if @weather_observation.update(weather_observation_params)
respond_with(@weather_observation)
end

Check notice on line 40 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L40

Trailing whitespace detected. (Layout/TrailingWhitespace)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unexpected trailing spaces found.

def destroy

Check notice on line 41 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L41

Use 2 (not 4) spaces for indentation. (Layout/IndentationWidth)
@weather_observation.destroy
flash[:notice] = I18n.t('weather_observations.deleted')
redirect_to(member_weather_observations_path(@weather_observation.owner))
end

Check notice on line 46 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L46

Trailing whitespace detected. (Layout/TrailingWhitespace)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unexpected trailing spaces found.

private

Check notice on line 48 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L48

Trailing whitespace detected. (Layout/TrailingWhitespace)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unexpected trailing spaces found.

def weather_observation_params

Check notice on line 49 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L49

Use 2 (not 4) spaces for indentation. (Layout/IndentationWidth)
params.require(:weather_observation).permit!

Check warning on line 50 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L50

Specify exact keys allowed for mass assignment instead of using `permit!` which allows any keys (CheckMassAssignment)
Dismissed Show dismissed Hide dismissed
end
end

Check notice on line 52 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L52

`end` at 52, 2 is not aligned with `class` at 3, 0. (Layout/EndAlignment)

Check notice on line 53 in app/controllers/weather_observations_controller.rb

View check run for this annotation

codefactor.io / CodeFactor

app/controllers/weather_observations_controller.rb#L53

Trailing whitespace detected. (Layout/TrailingWhitespace)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Expected a newline at the end of the file.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unexpected trailing spaces found.

1 change: 1 addition & 0 deletions app/models/garden.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ class Garden < ApplicationRecord

has_many :plantings, dependent: :destroy
has_many :crops, through: :plantings
has_many :weather_observations, dependent: :destroy

belongs_to :garden_type, optional: true

Expand Down
22 changes: 22 additions & 0 deletions app/models/weather_observation.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# frozen_string_literal: true
Dismissed Show dismissed Hide dismissed

# A weather observation is intended to be a snapshot aligned to
# https://github.com/schemaorg/schemaorg/issues/362
class WeatherObservation < ApplicationRecord
Fixed Show fixed Hide fixed
belongs_to :owner

validates :source, presence: true
validates :observed_at, presence: true

attr_accessible :source, :observation_at, :solvar_uv_index, :dew_point_temperature_centigrade,
:air_temperature_centigrade, :relative_humidity, :wind_speed_kmh, :wind_gust_speed_kmh, :owner_id, :wind_direction, :precipitation_probability, :pressure,

Check notice on line 12 in app/models/weather_observation.rb

View check run for this annotation

codefactor.io / CodeFactor

app/models/weather_observation.rb#L12

Line is too long. [172/140] (Layout/LineLength)
:visibility_distance_metres, :weather_type

# Lowest temp on earth: -89.2°C (-128.6°F)
# Highest: 56.7°C
validates :dew_point_temperature_centigrade, numericality: { min: -90, max: 60 }, allow_nil: true
validates :air_temperature_centigrade, numericality: { min: -90, max: 60 }, allow_nil: true
validates :relative_humidity, numericality: { min: 0, max: 100 }, allow_nil: true
validates :wind_speed_kmh, numericality: { min: 0, max: 450 }, allow_nil: true # Highest 408 km/h
validates :wind_gust_speed_kmh, min: 0, max: 450, allow_nil: true # Highest 408 km/h
end
18 changes: 18 additions & 0 deletions app/views/weather_observations/_actions.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
- if can?(:edit, garden)
.dropdown.garden-actions
%a#garden-actions-button.btn.dropdown-toggle{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", type: "button", href: '#'} Actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line is too long. [167/120]

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hash attribute should start with one space after the opening brace

.dropdown-menu.dropdown-menu-xs{"aria-labelledby" => "garden-actions-button"}
- if can?(:edit, garden)
= garden_plant_something_button(garden, classes: 'dropdown-item') if garden.active
- if garden.active
= garden_mark_inactive_button(garden, classes: 'dropdown-item')
- else
= garden_mark_active_button(garden, classes: 'dropdown-item')

= garden_edit_button(garden, classes: 'dropdown-item')
= add_photo_button(garden, classes: 'dropdown-item')

- if can?(:destroy, garden)
.dropdown-divider
= delete_button(garden, classes: 'dropdown-item text-danger',
message: 'All plantings associated with this garden will also be deleted. Are you sure?')
40 changes: 40 additions & 0 deletions app/views/weather_observations/_form.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
.card.col-md-8.col-lg-7.mx-auto.float-none.white.z-depth-1.py-2.px-2
= bootstrap_form_for(@garden) do |f|
- if content_for? :title
.card-header
%h1.h2-responsive.text-center
%strong=yield :title
.card-body
= required_field_help_text
- if @garden.errors.any?
#error_explanation.alert.alert-warning{:role => "alert"}
%h4.alert-heading
= pluralize(@garden.errors.size, "error")
prohibited this garden from being saved
%ul
- @garden.errors.full_messages.each do |msg|
%li= msg

= f.text_field :name, maxlength: 255, required: true
= f.text_area :description, rows: 6
= f.text_field :location,
value: @garden.location || current_member.location,
class: 'form-control', maxlength: 255
%span.help-block
= t('.location_helper')
- if current_member.location.blank?
= link_to "Set your location now.", edit_member_registration_path
- else
= link_to "Change your location.", edit_member_registration_path
.row
.col-md-5.col-12= f.number_field :area, class: 'input-small', step: "any"
.col-md-7.col-12= f.select(:area_unit, Garden::AREA_UNITS_VALUES, { include_blank: false })
.col-12= f.select(:garden_type_id, GardenType.all.order(:name).pluck(:name, :id),
selected: @garden.garden_type_id, include_blank: true)
.col-12
= f.check_box :active, label: 'Active?'
%p
You can mark a garden as inactive if you no longer use it.
Note: this will mark all plantings in the garden as "finished".
.card-footer
.text-right= f.submit 'Save Garden'
20 changes: 20 additions & 0 deletions app/views/weather_observations/_overview.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
.panel.panel-success
.panel-heading
%h3.panel-title
= link_to garden.name, garden_path(garden)
.panel-body
.row
.col-md-2.col-xs-12.garden-info
%p= render 'gardens/photo', garden: garden
%p= display_garden_description(garden)
- if can?(:edit, garden)
= render 'gardens/actions', garden: garden

.col-md-10
- if garden.plantings.current.size.positive?
.row
- garden.plantings.current.order(created_at: :desc).includes(:crop, :photos).each do |planting|
.col-lg-2.col-sm-4.col-xs-6
= render "plantings/thumbnail", planting: planting
- else
no plantings
3 changes: 3 additions & 0 deletions app/views/weather_observations/_photo.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
= link_to image_tag(garden_image_path(garden),
alt: garden.name, class: 'img-responsive'),
garden_path(garden)
18 changes: 18 additions & 0 deletions app/views/weather_observations/_previously.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
%h2 Previously planted in this garden

- if @finished_plantings.any?
- year = nil
- @finished_plantings.where.not(planted_at: nil).order(planted_at: :desc).each do |planting|
- if year != planting.planted_at.year
- year = planting.planted_at.year
%h4= year
= render "plantings/tiny", planting: planting

- if @finished_plantings.where(planted_at: nil).any?
%h4 Unknown year
- @finished_plantings.where(planted_at: nil).each do |planting|
= render "plantings/tiny", planting: planting
- else
.col-md-12
%p Nothing has been planted here.

3 changes: 3 additions & 0 deletions app/views/weather_observations/edit.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
= content_for :title, "Edit garden"

= render "form"
65 changes: 65 additions & 0 deletions app/views/weather_observations/index.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
- content_for :title, @owner ? "#{@owner}'s weather_observations" : "Everyone's weather_observations"

%h1= @owner ? "#{@owner}'s weather_observations" : "Everyone's weather_observations"

- content_for :breadcrumbs do
- if @owner
%li.breadcrumb-item= link_to 'weather_observations', weather_observations_path
%li.breadcrumb-item.active= link_to "#{@owner}'s weather_observations", member_weather_observations_path(@owner)
- else
%li.breadcrumb-item.active= link_to 'weather_observations', weather_observations_path

.row
.col-md-2
= render 'layouts/nav', model: weather_observation
= link_to show_inactive_tickbox_path('weather_observations', owner: @owner, show_all: @show_all) do
= check_box_tag 'active', 'all', @show_all
include in-active
- if @owner.present?
%hr/
= render @owner
Dismissed Show dismissed Hide dismissed

.col-md-10
- if @weather_observations.empty?
%p There are no weather_observations to display.
- if can?(:create, weather_observation) && @owner == current_member
= link_to 'Add a weather_observation', new_weather_observation_path, class: 'btn btn-primary'

- else
%section
%h2= page_entries_info @weather_observations
= will_paginate @weather_observations

- if @show_jump_to == true
%section
.jump
jump to:
- @weather_observations.each do |weather_observation|
.badge.badge-primary
- if @owner.present?
= link_to weather_observation.weather_type, member_weather_observations_path(@owner, anchor: "weather_observation-#{weather_observation.id}")
- else
= link_to weather_observation.weather_type, weather_observations_path(anchor: "weather_observation-#{weather_observation.id}")
- @weather_observations.each do |weather_observation|
.card
.card-header
.row
.col-12.col-md-3
%h2= link_to weather_observation.weather_type, weather_observation, name: "weather_observation-#{weather_observation.id}"
.row
.col-md-3
- if @owner.blank?
owner:
= render 'members/tiny', member: weather_observation.owner

.col-md-9
%section
= render 'weather_observations/actions', weather_observation: weather_observation



Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unexpected trailing spaces found.



.row
.col-12= page_entries_info @weather_observations
.col-12= will_paginate @weather_observations
3 changes: 3 additions & 0 deletions app/views/weather_observations/new.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- content_for :title, "New weather observation"

= render 'form'
117 changes: 117 additions & 0 deletions app/views/weather_observations/show.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
= content_for :title, "#{@weather_observation.owner}'s #{@weather_observation}"

- content_for :opengraph do
- if @weather_observation.weather_type
= tag("meta", property: "og:description", content: og_description(@weather_observation. - if @weather_observation.weather_type))
= tag("meta", property: "og:title", content: "#{@weather_observation.owner}'s #{@weather_observation}")
= tag("meta", property: "og:type", content: "website")
= tag("meta", property: "og:url", content: request.original_url)
= tag("meta", property: "og:site_name", content: ENV['GROWSTUFF_SITE_NAME'])

- content_for :breadcrumbs do
%li.breadcrumb-item= link_to 'weather_observations', weather_observations_path
%li.breadcrumb-item.active= link_to @weather_observation.weather_type, weather_observations_path(@weather_observation)

.row
.col-md-9.col-12
%h2.h1
%strong= @weather_observation
.col-md-3.col-12
= render 'weather_observations/actions', weather_observation: @weather_observation
.row
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The line was indented 2 levels deeper than the previous line.

%div
%p
:growstuff_markdown
#{strip_tags @weather_observation.weather_type}
- unless @weather_observation.description
.row-fluid
%p No description available yet.

- if can? :edit, @weather_observation
%p
Why not
= link_to 'tell us more.', edit_weather_observation_path(@weather_observation)

- if @weather_observation.plantings.where.not(planted_at: nil).any?
%section.card
%h2 weather_observation progress
.card-body
= render 'plantings/progress_list', plantings: @weather_observation.plantings.active

%section
%h2 Current plantings in weather_observation
.index-cards
- if @current_plantings.size.positive?
- @current_plantings.each do |planting|
= render "plantings/card", planting: planting
- else
.col-md-12
%p Nothing is currently planted here.

%section.companions
%h2 Suggestioned companions
- @suggested_companions.each do |companion|
= render 'crops/tiny', crop: companion

%section= render 'previously'

.col-md-3
.card
.card-image
= image_tag weather_observation_image_path(@weather_observation), class: 'img-card', alt: 'photo of this weather_observation'
.card-body
%h4 About this weather_observation
%p
%strong Owner:
= link_to @weather_observation.owner, @weather_observation.owner
- if @weather_observation.location.present?
%p
%strong Location:
= @weather_observation.location
- if @weather_observation.area.present?
%p
%strong Area:
= pluralize(@weather_observation.area, @weather_observation.area_unit)
- if @weather_observation.weather_observation_type.present?
%p
%strong weather_observation type:
= @weather_observation.weather_observation_type.name

.card
.card-header
%h4 #{@weather_observation.owner}'s weather_observations
.card-body
%ul.list-group.list-group-flush
- @weather_observation.owner.weather_observations.active.order_by_name.each do |weather_observation|
%li.list-group-item.list-group-flush
= weather_observation_icon
- if @weather_observation == weather_observation
= @weather_observation
- else
= link_to weather_observation, weather_observation_path(weather_observation)

- unless @weather_observation.owner.weather_observations.inactive.empty?
%h4 Inactive weather_observations
%ul
- @weather_observation.owner.weather_observations.inactive.order_by_name.each do |otherweather_observation|
%li
- if @weather_observation == otherweather_observation
= @weather_observation.name
- else
= link_to otherweather_observation, weather_observation_path(otherweather_observation)

- if @weather_observation.owner == current_member
%p
= link_to new_weather_observation_path, class: 'btn btn-default btn-xs' do
Add New weather_observation

- if can?(:edit, @weather_observation) && can?(:create, Photo)
%%p
= add_photo_button(@weather_observation)

- if @weather_observation.photos.size.positive?
%section.photos
%h2= localize_plural(@weather_observation.photos, Photo)
.index-cards
- @weather_observation.photos.includes(:owner).each do |photo|
= render 'photos/thumbnail', photo: photo
1 change: 1 addition & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@
resources :plantings
resources :harvests
resources :posts
resources :weather_observations

resources :follows
get 'followers' => 'follows#followers'
Expand Down
Loading
Loading