├── log └── .keep ├── mysql └── .keep ├── app ├── mailers │ ├── .keep │ ├── application_mailer.rb │ └── project_mailer.rb ├── models │ ├── .keep │ ├── concerns │ │ └── .keep │ ├── stage.rb │ ├── app_information.rb │ ├── project_update_history.rb │ ├── skill.rb │ ├── project_update.rb │ ├── user.rb │ └── project.rb ├── assets │ ├── images │ │ ├── .keep │ │ ├── matsu │ │ │ ├── .keep │ │ │ ├── nav.gif │ │ │ ├── logo.png │ │ │ ├── member.png │ │ │ ├── num_back.png │ │ │ ├── header_item1.png │ │ │ ├── header_item2.png │ │ │ ├── header_item3.png │ │ │ ├── menu_item01.png │ │ │ └── sample_thum.jpg │ │ ├── logo_cfk.png │ │ ├── logotype.png │ │ ├── ha4go_icon.png │ │ ├── img_kanazawa.jpg │ │ └── Feed-icon.svg │ ├── stylesheets │ │ ├── matsu │ │ │ ├── _font.scss │ │ │ ├── _color.scss │ │ │ ├── jquery.mobile.menu.css │ │ │ └── reset.scss │ │ ├── top.scss │ │ ├── sessions.scss │ │ ├── project_updates.scss │ │ ├── projects.scss │ │ ├── bootstrap_override.scss │ │ ├── users.scss │ │ ├── application.scss │ │ ├── dashboard.scss │ │ └── common.scss │ └── javascripts │ │ ├── top.coffee │ │ ├── users.coffee │ │ ├── dashboard.coffee │ │ ├── sessions.coffee │ │ ├── project_updates.coffee │ │ ├── facebook.js.coffee.erb │ │ ├── projects.coffee │ │ ├── application.js │ │ ├── matsu │ │ ├── html5shiv.js │ │ ├── jquery.sidr.min.js │ │ └── jquery.mobile-menu.js │ │ └── skill_quick_add.js ├── controllers │ ├── concerns │ │ ├── .keep │ │ └── sns_publisher.rb │ ├── dashboard_controller.rb │ ├── top_controller.rb │ ├── sessions_controller.rb │ ├── application_controller.rb │ ├── users_controller.rb │ ├── project_updates_controller.rb │ └── projects_controller.rb ├── views │ ├── layouts │ │ ├── mailer.text.erb │ │ └── mailer.html.erb │ ├── users │ │ ├── new.html.erb │ │ ├── edit.html.erb │ │ ├── index.html.erb │ │ ├── _form.html.erb │ │ └── show.html.erb │ ├── project_updates │ │ ├── edit.html.erb │ │ ├── new.html.erb │ │ ├── show.html.erb │ │ ├── _form.html.erb │ │ └── index.html.erb │ ├── top │ │ ├── index.html.erb │ │ ├── help.html.erb │ │ └── feed.rss.builder │ ├── shared │ │ ├── _twitter.html │ │ ├── _facebook.html │ │ ├── _ogp_project.html.erb │ │ ├── _ogp_common.html.erb │ │ └── _project.html.erb │ ├── project_mailer │ │ ├── sendmail_confirm.html.erb │ │ ├── tell_skill_match.html.erb │ │ ├── tell_create.html.erb │ │ └── tell_update.html.erb │ └── projects │ │ ├── edit.html.erb │ │ ├── index.html.erb │ │ ├── new.html.erb │ │ ├── show.rss.builder │ │ └── _form.html.erb ├── helpers │ ├── top_helper.rb │ ├── dashboard_helper.rb │ ├── projects_helper.rb │ ├── sessions_helper.rb │ ├── project_updates_helper.rb │ ├── users_helper.rb │ ├── sns_helper.rb │ ├── seo_helper.rb │ └── application_helper.rb ├── field_types │ └── array_type.rb ├── jobs │ └── post_to_sns_job.rb └── uploaders │ ├── image_uploader.rb │ └── comment_image_uploader.rb ├── lib ├── assets │ └── .keep └── tasks │ ├── .keep │ └── unlock_yml.rake ├── public ├── favicon.ico ├── uploads │ └── .keep ├── robots.txt ├── 500.html ├── 422.html └── 404.html ├── test ├── helpers │ └── .keep ├── mailers │ ├── .keep │ ├── project_mailer_test.rb │ └── previews │ │ └── project_mailer_preview.rb ├── models │ ├── .keep │ ├── skill_test.rb │ ├── stage_test.rb │ ├── user_test.rb │ ├── project_test.rb │ ├── app_information_test.rb │ ├── project_update_test.rb │ └── project_update_history_test.rb ├── controllers │ ├── .keep │ ├── dashboard_controller_test.rb │ ├── top_controller_test.rb │ ├── sessions_controller_test.rb │ ├── users_controller_test.rb │ ├── project_updates_controller_test.rb │ └── projects_controller_test.rb ├── fixtures │ ├── .keep │ ├── skills.yml │ ├── stages.yml │ ├── project_update_histories.yml │ ├── app_informations.yml │ ├── project_updates.yml │ ├── users.yml │ └── projects.yml ├── integration │ └── .keep ├── jobs │ └── post_to_sns_job_test.rb └── test_helper.rb ├── vendor └── assets │ ├── javascripts │ └── .keep │ └── stylesheets │ └── .keep ├── misc └── docker │ └── heroku-deploy │ ├── .gitignore │ └── Dockerfile ├── erd.pdf ├── bin ├── rake ├── bundle ├── rails ├── delayed_job ├── spring ├── update └── setup ├── Procfile ├── config ├── database.travis.yml ├── spring.rb ├── boot.rb ├── locales │ ├── views │ │ ├── project_updates │ │ │ └── ja.yml │ │ ├── top │ │ │ └── ja.yml │ │ ├── users │ │ │ └── ja.yml │ │ ├── project_mailer │ │ │ └── ja.yml │ │ ├── dashboard │ │ │ └── ja.yml │ │ ├── projects │ │ │ └── ja.yml │ │ └── ja.yml │ ├── ja.yml │ └── defaults │ │ ├── ja.yml │ │ └── en.yml ├── environment.rb ├── cable.yml ├── initializers │ ├── session_store.rb │ ├── mime_types.rb │ ├── application_controller_renderer.rb │ ├── filter_parameter_logging.rb │ ├── cookies_serializer.rb │ ├── kaminari_config.rb │ ├── backtrace_silencers.rb │ ├── omniauth.rb │ ├── wrap_parameters.rb │ ├── assets.rb │ ├── inflections.rb │ ├── carrierwave.rb │ └── new_framework_defaults.rb ├── database.yml ├── application.rb ├── secrets.yml ├── environments │ ├── test.rb │ ├── development.rb │ └── production.rb ├── puma.rb └── routes.rb ├── config.ru ├── db ├── migrate │ ├── 20150607001212_delete_index_user.rb │ ├── 20150606234247_drop_table_user_session.rb │ ├── 20150607035210_add_column_user.rb │ ├── 20170205014850_add_images_to_project.rb │ ├── 20160605184821_change_column_to_user.rb │ ├── 20161106085544_add_receive_all_to_user.rb │ ├── 20150426132854_add_index_email_to_users.rb │ ├── 20150429131447_add_index_name_to_skills.rb │ ├── 20160605183055_change_column2_to_project.rb │ ├── 20150426045247_remove_delete_flag_from_users.rb │ ├── 20150505071406_add_column_to_project_update.rb │ ├── 20161008063758_add_column_to_project_update2.rb │ ├── 20170205093033_add_image_to_project_update.rb │ ├── 20150426045307_remove_delete_flag_from_projects.rb │ ├── 20150429142635_rename_users_skills_to_skills_users.rb │ ├── 20161002065824_add_project_to_projects.rb │ ├── 20160605184658_change_column_to_project_update.rb │ ├── 20161203220548_add_last_commented_at_to_project.rb │ ├── 20150606234005_remove_column_user.rb │ ├── 20150614110547_change_column_to_project.rb │ ├── 20150426045313_remove_delete_flag_from_project_updates.rb │ ├── 20150607104348_add_index_user_id_to_project_users.rb │ ├── 20150429124203_create_skills.rb │ ├── 20150614102950_create_stages.rb │ ├── 20150429130453_create_users_skills.rb │ ├── 20150429143753_create_projects_users.rb │ ├── 20150505025435_create_projects_skills.rb │ ├── 20161106071526_create_app_informations.rb │ ├── 20150606131655_add_column_to_users.rb │ ├── 20160905094440_change_column_to_project2.rb │ ├── 20150426043346_create_project_updates.rb │ ├── 20150426023450_create_users.rb │ ├── 20161008044105_create_project_update_histories.rb │ ├── 20150426023934_create_projects.rb │ └── 20170507011046_create_delayed_jobs.rb ├── seeds │ ├── projects.yml.sample │ ├── development.rb │ └── users.yml.sample ├── seeds.rb └── schema.rb ├── Dockerfile.db ├── init.sql ├── .dockerignore ├── Dockerfile.dev ├── Rakefile ├── Dockerfile.front ├── .travis.yml ├── docker-compose.yml ├── .rubocop_todo.yml ├── .gitignore ├── .env.sample ├── .rubocop.yml ├── Dockerfile.base ├── app.json ├── Rakefile.deploy └── Gemfile /log/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /mysql/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/mailers/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/models/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lib/assets/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lib/tasks/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/helpers/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/mailers/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/models/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/assets/images/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/uploads/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/controllers/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/fixtures/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/integration/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/models/concerns/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/assets/images/matsu/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/controllers/concerns/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vendor/assets/javascripts/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/layouts/mailer.text.erb: -------------------------------------------------------------------------------- 1 | <%= yield %> 2 | -------------------------------------------------------------------------------- /misc/docker/heroku-deploy/.gitignore: -------------------------------------------------------------------------------- 1 | heroku_login 2 | -------------------------------------------------------------------------------- /app/helpers/top_helper.rb: -------------------------------------------------------------------------------- 1 | module TopHelper 2 | end 3 | -------------------------------------------------------------------------------- /app/helpers/dashboard_helper.rb: -------------------------------------------------------------------------------- 1 | module DashboardHelper 2 | end 3 | -------------------------------------------------------------------------------- /app/helpers/projects_helper.rb: -------------------------------------------------------------------------------- 1 | module ProjectsHelper 2 | end 3 | -------------------------------------------------------------------------------- /app/helpers/sessions_helper.rb: -------------------------------------------------------------------------------- 1 | module SessionsHelper 2 | end 3 | -------------------------------------------------------------------------------- /app/models/stage.rb: -------------------------------------------------------------------------------- 1 | class Stage < ActiveRecord::Base 2 | end 3 | -------------------------------------------------------------------------------- /app/helpers/project_updates_helper.rb: -------------------------------------------------------------------------------- 1 | module ProjectUpdatesHelper 2 | end 3 | -------------------------------------------------------------------------------- /erd.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforkanazawa-org/ha4go/HEAD/erd.pdf -------------------------------------------------------------------------------- /app/models/app_information.rb: -------------------------------------------------------------------------------- 1 | class AppInformation < ActiveRecord::Base 2 | end 3 | -------------------------------------------------------------------------------- /app/views/layouts/mailer.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
3 | <%= yield %> 4 | 5 | 6 | -------------------------------------------------------------------------------- /bin/rake: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require_relative '../config/boot' 3 | require 'rake' 4 | Rake.application.run 5 | -------------------------------------------------------------------------------- /app/assets/images/logo_cfk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforkanazawa-org/ha4go/HEAD/app/assets/images/logo_cfk.png -------------------------------------------------------------------------------- /app/assets/images/logotype.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforkanazawa-org/ha4go/HEAD/app/assets/images/logotype.png -------------------------------------------------------------------------------- /app/assets/images/matsu/nav.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforkanazawa-org/ha4go/HEAD/app/assets/images/matsu/nav.gif -------------------------------------------------------------------------------- /app/views/users/new.html.erb: -------------------------------------------------------------------------------- 1 |あいうえおかきくけこさしすせそたちつてとなにぬねのあいうえおかきくけこさしすせそたちつてとなにぬねのあいうえおかきくけこさしすせそたちつてとなにぬねのあいうえおかきくけこさしすせそたちつてとなにぬねのあいうえおかきくけこさしすせそたちつてとなにぬねのあいうえおかきくけこさしすせそたちつてとなにぬねの
9 | -------------------------------------------------------------------------------- /app/views/shared/_facebook.html: -------------------------------------------------------------------------------- 1 | 2 | 9 | -------------------------------------------------------------------------------- /app/views/project_updates/show.html.erb: -------------------------------------------------------------------------------- 1 |<%= notice %>
2 | 3 |4 | Project: 5 | <%= @project_update.project_id %> 6 |
7 | 8 |9 | Description: 10 | <%= @project_update.description %> 11 |
12 | 13 | <%= link_to 'Edit', edit_project_update_path(@project_update) %> | 14 | <%= link_to 'Back', project_updates_path %> 15 | -------------------------------------------------------------------------------- /db/seeds/projects.yml.sample: -------------------------------------------------------------------------------- 1 | - subject: 議論と調査している課題 2 | description: 議論と調査している課題の説明 3 | stage_id: 10 4 | user_id: 1 5 | - subject: 企画と試作中の課題 6 | description: 企画と試作中の課題の説明 7 | stage_id: 11 8 | user_id: 1 9 | - subject: 運用中の課題 10 | description: 運用中の課題の説明 11 | stage_id: 12 12 | user_id: 1 13 | - subject: 休止・終了の課題 14 | description: 休止・終了の課題の説明 15 | stage_id: 13 16 | user_id: 1 17 | -------------------------------------------------------------------------------- /app/helpers/sns_helper.rb: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | module SnsHelper 3 | def facebook_share_btn(url) 4 | %().html_safe 5 | end 6 | 7 | def twitter_share_btn(url) 8 | %(Tweet).html_safe 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /db/migrate/20150426023450_create_users.rb: -------------------------------------------------------------------------------- 1 | class CreateUsers < ActiveRecord::Migration[4.2] 2 | def change 3 | create_table :users do |t| 4 | t.string :name 5 | t.string :email 6 | t.string :password 7 | t.string :description 8 | t.integer :facebook_user_id 9 | t.integer :delete_flag 10 | 11 | t.timestamps null: false 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /db/migrate/20161008044105_create_project_update_histories.rb: -------------------------------------------------------------------------------- 1 | class CreateProjectUpdateHistories < ActiveRecord::Migration[4.2] 2 | def change 3 | create_table :project_update_histories do |t| 4 | t.references :project_update, index: true, foreign_key: true 5 | t.references :user, index: true, foreign_key: true 6 | 7 | t.timestamps null: false 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /app/assets/stylesheets/projects.scss: -------------------------------------------------------------------------------- 1 | // Place all the styles related to the project controller here. 2 | // They will automatically be included in application.css. 3 | // You can use Sass (SCSS) here: http://sass-lang.com/ 4 | 5 | .project-detail__define { 6 | .row { 7 | margin-bottom: 20px; 8 | &>div:first-child { 9 | font-weight: bold; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /config/initializers/kaminari_config.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | Kaminari.configure do |config| 3 | config.default_per_page = 10 4 | # config.max_per_page = nil 5 | # config.window = 4 6 | # config.outer_window = 0 7 | # config.left = 0 8 | # config.right = 0 9 | # config.page_method_name = :page 10 | # config.param_name = :page 11 | # config.params_on_first_page = false 12 | end 13 | -------------------------------------------------------------------------------- /test/fixtures/users.yml: -------------------------------------------------------------------------------- 1 | # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html 2 | 3 | user_one: 4 | name: ユーザ名1 5 | email: sample@sample.com 6 | description: 説明文です 7 | provider: facebook 8 | uid: 1 9 | image: '' 10 | 11 | user_two: 12 | name: ユーザ名2 13 | email: sample@sample.com 14 | description: 説明文です 15 | provider: facebook 16 | uid: 2 17 | image: '' 18 | -------------------------------------------------------------------------------- /config/locales/views/project_mailer/ja.yml: -------------------------------------------------------------------------------- 1 | ja: 2 | project_mailer: 3 | tell_create: 4 | create: 新しい課題「%{project}」ができました。 5 | created_by: '%{name}さんによる作成です。' 6 | tell_update: 7 | update: 課題「%{project}」に更新がありました。 8 | update_by: '%{name}さんによる更新です。' 9 | sendmail_confirm: 10 | here: こちら 11 | tell_skill_match: 12 | need: 課題「%{project}」があなたのスキルとマッチしました。 13 | -------------------------------------------------------------------------------- /db/migrate/20150426023934_create_projects.rb: -------------------------------------------------------------------------------- 1 | class CreateProjects < ActiveRecord::Migration[4.2] 2 | def change 3 | create_table :projects do |t| 4 | t.integer :user_id 5 | t.integer :stage_id 6 | t.string :subject 7 | t.string :description 8 | t.string :user_url 9 | t.string :development_url 10 | t.integer :delete_flag 11 | 12 | t.timestamps null: false 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /app/assets/stylesheets/matsu/_color.scss: -------------------------------------------------------------------------------- 1 | $main_theme_color: #F7931E; 2 | $main_bg_color: #f3f3f3; 3 | $title_bg_color: #333; 4 | $title_font_color: #fff; 5 | $contents_bg_color: #fff; 6 | $button_color: $main_theme_color; 7 | $button_color2: #218BBF; 8 | $font_color_on_button: #fff; 9 | $font_color_link: #218BBF; 10 | $font_color_content_title: $font_color_link; 11 | $title_contents_separator_color: #e6e6e6; 12 | $button_disabled_color: #e6e6e6; 13 | -------------------------------------------------------------------------------- /app/controllers/top_controller.rb: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | # Page Top 4 | class TopController < ApplicationController 5 | LIMIT_ROWS = 10 # プロジェクト表示件数 6 | 7 | def index 8 | @projects = Project.last(LIMIT_ROWS).reverse 9 | end 10 | 11 | def help 12 | end 13 | 14 | def feed 15 | @projects = Project.last(LIMIT_ROWS).reverse 16 | respond_to do |format| 17 | format.rss { render layout: false } 18 | end 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /config/initializers/backtrace_silencers.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. 4 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } 5 | 6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. 7 | # Rails.backtrace_cleaner.remove_silencers! 8 | -------------------------------------------------------------------------------- /Dockerfile.front: -------------------------------------------------------------------------------- 1 | FROM ha4go-base:1.0 2 | 3 | RUN mkdir /myapp 4 | WORKDIR /myapp 5 | 6 | RUN apt-get install -y libmagickwand-dev tzdata 7 | 8 | ADD Gemfile Gemfile 9 | ADD Gemfile.lock Gemfile.lock 10 | RUN bundle config without test development doc 11 | RUN bundle install 12 | ADD . /myapp/ 13 | 14 | # ADD .env /myapp/.env 15 | ENV RAILS_ENV production 16 | 17 | EXPOSE 3000 18 | 19 | CMD bash -l -c 'bundle exec rake assets:precompile && bundle exec rails s' 20 | -------------------------------------------------------------------------------- /test/fixtures/projects.yml: -------------------------------------------------------------------------------- 1 | # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html 2 | 3 | project_one: 4 | user: user_one 5 | stage: stage_one 6 | subject: MyString 7 | description: MyString 8 | user_url: MyString 9 | development_url: MyString 10 | 11 | project_two: 12 | user: user_two 13 | stage: stage_two 14 | subject: MyString 15 | description: MyString 16 | user_url: MyString 17 | development_url: MyString 18 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | rvm: 3 | - 2.3.3 4 | services: 5 | - mysql 6 | 7 | bundler_args: "--without development --deployment" 8 | 9 | cache: bundler 10 | 11 | before_script: 12 | - mysql -e 'create database myapp_test character set utf8;' 13 | - cp config/database.travis.yml config/database.yml 14 | - bundle exec rails db:create 15 | - bundle exec rails db:migrate 16 | script: 17 | - bundle exec rubocop --fail-level=W 18 | - bundle exec rails test 19 | -------------------------------------------------------------------------------- /lib/tasks/unlock_yml.rake: -------------------------------------------------------------------------------- 1 | namespace :db do 2 | namespace :seed do 3 | desc 'Rename db/seeds/*.yml.sample to db/seeds/*.yml' 4 | task unlock_yml: :environment do 5 | samples = Rails.root.join('db', 'seeds', '*.yml.sample') 6 | Dir.glob(samples).each do |sample| 7 | file_name = File.basename(sample, File.extname(sample)) 8 | FileUtils.cp(sample, Rails.root.join('db', 'seeds', file_name), verbose: true) 9 | end 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /app/views/projects/edit.html.erb: -------------------------------------------------------------------------------- 1 | <%= provide(:title, t('title.projects.edit', name: @project.subject)) %> 2 | 3 |<%= notice %>
2 | 3 || Project | 9 |Description | 10 |Delete flag | 11 |12 | | ||
|---|---|---|---|---|---|
| <%= project_update.project_id %> | 19 |<%= project_update.description %> | 20 |<%= link_to 'Show', project_update %> | 21 |<%= link_to 'Edit', edit_project_update_path(project_update) %> | 22 |<%= link_to 'Destroy', project_update, method: :delete, data: { confirm: 'Are you sure?' } %> | 23 ||
・地域課題の可視化により、市民の地域課題に対する理解と関心を広げる
13 |・地域課題をオンラインで議論できる場所の提供
14 |・課題解決に必要なヒト(市民やエンジニア・デザイナーなど)同士を繋ぐ
15 | など、地域とシビックテックを繋ぎ、地域課題を解決に導くひとつの仕組みになることを目指しています。' + text + '
' 35 | end 36 | end 37 | end 38 | end 39 | -------------------------------------------------------------------------------- /app/models/user.rb: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | class User < ActiveRecord::Base 3 | # has_many :projects 4 | has_many :project_updates 5 | # belongs_to :project 6 | has_and_belongs_to_many :skills 7 | has_and_belongs_to_many :projects 8 | 9 | # OAuth 新規ユーザー作成 10 | # @param omniauthコールバックパラメータ 11 | def self.from_omniauth(auth) 12 | where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 13 | user.provider = auth.provider 14 | user.uid = auth.uid 15 | user.name = auth.info.name 16 | user.image = auth.info.image 17 | user.save 18 | end 19 | end 20 | 21 | # 必要なスキルを更新 22 | # @param [Array] skill_names スキル名の配列 23 | # @return 増えたSKILLのID一覧 24 | def update_skill_ids_by_skill_names(skill_names) 25 | @before_skill_ids = skills.map(&:id) 26 | @after_skill_ids = [] 27 | 28 | if skill_names.present? 29 | skill_names.compact.uniq.reject(&:empty?).each do |skill_name| 30 | skill = Skill.find_by(name: skill_name) 31 | if skill.nil? 32 | skill = Skill.create(name: skill_name) 33 | end 34 | @after_skill_ids.push(skill.id) 35 | end 36 | end 37 | 38 | # 追加 39 | out = @after_skill_ids - @before_skill_ids 40 | out.each do |skill_id| 41 | skills << Skill.find(skill_id) 42 | end 43 | 44 | # 削除 45 | (@before_skill_ids - @after_skill_ids).each do |skill_id| 46 | skills.delete(skill_id) 47 | end 48 | 49 | return out 50 | end 51 | end 52 | -------------------------------------------------------------------------------- /app/views/projects/show.rss.builder: -------------------------------------------------------------------------------- 1 | #encoding: UTF-8 2 | 3 | xml.instruct! :xml, version: '1.0' 4 | xml.rss version: '2.0' do 5 | xml.channel do 6 | xml.title @project.subject 7 | xml.description @project.description 8 | protocol = 'http' 9 | protocol + 's' if ENV['USE_HTTPS'].to_i > 0 10 | url = "#{protocol}://#{ENV['APP_HOST']}/projects/#{@project.id}" 11 | xml.link url 12 | xml.language 'ja' 13 | 14 | @project.project_updates.each do |article| 15 | xml.item do 16 | xml.title article.created_at.to_s 17 | xml.author article.user.name 18 | xml.pubDate article.created_at.to_s(:rfc822) 19 | xml.link "#{url}#comment-" + article.id.to_s 20 | xml.guid(article.id, isPermaLink: 'false') 21 | 22 | text = article.description 23 | # if you like, do something with your content text here e.g. insert image tags. 24 | # Optional. I'm doing this on my website. 25 | # if article.image.exists? 26 | # image_url = article.image.url(:large) 27 | # image_caption = article.image_caption 28 | # image_align = '' 29 | # image_tag = " 30 | #' + text + '
' 35 | end 36 | end 37 | end 38 | end 39 | -------------------------------------------------------------------------------- /test/controllers/project_updates_controller_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class ProjectUpdatesControllerTest < ActionController::TestCase 4 | setup do 5 | @project_update = project_updates(:project_update_one) 6 | @controller.session[:user_id] = @project_update.user.id 7 | end 8 | 9 | test "should get new" do 10 | get :new 11 | assert_response :success 12 | end 13 | 14 | test "should create project_update" do 15 | assert_difference('ProjectUpdate.count') do 16 | post :create, params: { project_update: { description: @project_update.description, project_id: @project_update.project_id } } 17 | end 18 | 19 | assert_redirected_to project_path(@project_update.project) 20 | end 21 | 22 | test "should show project_update" do 23 | get :show, params: { id: @project_update } 24 | assert_response :success 25 | end 26 | 27 | test "should get edit" do 28 | get :edit, params: { id: @project_update } 29 | assert_response :success 30 | end 31 | 32 | test "should update project_update" do 33 | patch :update, params: { id: @project_update, project_update: { description: @project_update.description, project_id: @project_update.project_id } } 34 | assert_redirected_to project_path(@project_update.project) 35 | end 36 | 37 | test "should destroy project_update" do 38 | assert_no_difference('ProjectUpdate.count') do 39 | delete :destroy, params: { id: @project_update } 40 | end 41 | 42 | assert_redirected_to project_path(@project_update.project) 43 | end 44 | end 45 | -------------------------------------------------------------------------------- /config/secrets.yml: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Your secret key is used for verifying the integrity of signed cookies. 4 | # If you change this key, all old signed cookies will become invalid! 5 | 6 | # Make sure the secret is at least 30 characters and all random, 7 | # no regular words or you'll be exposed to dictionary attacks. 8 | # You can use `rails secret` to generate a secure secret key. 9 | 10 | # Make sure the secrets in this file are kept private 11 | # if you're sharing your code publicly. 12 | 13 | development: 14 | smtp_address: <%= ENV['SMTP_SERVER'] %> 15 | smtp_port: <%= ENV['SMTP_PORT'].to_i %> 16 | smtp_domain: <%= ENV['SMTP_DOMAIN'] %> 17 | smtp_user_name: <%= ENV['SMTP_USER'] %> 18 | smtp_password: <%= ENV['SMTP_PASSWORD'] %> 19 | secret_key_base: 302119ab88dd2e699bab093d48ebfe4fcae911d1ad7655ce025923453d4cd1dd2b548c31124e7e4f37a324074981d95e432fee2287856a0c4d1cbe406594c159 20 | 21 | test: 22 | secret_key_base: a7e322dbf527fb8f4a123f4a690edc50bad2f5ffaabce18aff4425ecdac61e30427df7ef792e7f3faa41a2593b622e8468893ebb094fbd54910e1d1936f47765 23 | 24 | # Do not keep production secrets in the repository, 25 | # instead read values from the environment. 26 | production: 27 | secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 28 | smtp_address: <%= ENV['SMTP_SERVER'] %> 29 | smtp_port: <%= ENV['SMTP_PORT'].to_i %> 30 | smtp_domain: <%= ENV['SMTP_DOMAIN'] %> 31 | smtp_user_name: <%= ENV['SMTP_USER'] %> 32 | smtp_password: <%= ENV['SMTP_PASSWORD'] %> 33 | ga_track_id: <%= ENV['GA_TRACK_ID'] %> 34 | -------------------------------------------------------------------------------- /app/assets/stylesheets/common.scss: -------------------------------------------------------------------------------- 1 | @for $i from 5 through 100 { 2 | .mt#{$i} { 3 | margin-top:#{$i}px; 4 | } 5 | 6 | .mb#{$i} { 7 | margin-bottom:#{$i}px; 8 | } 9 | 10 | .ml#{$i} { 11 | margin-left:#{$i}px; 12 | } 13 | 14 | .mr#{$i} { 15 | margin-right:#{$i}px; 16 | } 17 | } 18 | 19 | .navbar__custom { 20 | .navbar__menu-button { 21 | float: right; 22 | } 23 | } 24 | 25 | .menu__right { 26 | display: none; 27 | background-color: #333; 28 | list-style: none; 29 | position: fixed; 30 | top: 0px; 31 | } 32 | 33 | .spacer-navbar { 34 | height: 50px; 35 | } 36 | 37 | .column__top { 38 | .jumbotron { 39 | background-image: image-url("img_kanazawa.jpg"); 40 | background-repeat: no-repeat; 41 | background-size: cover; 42 | .container { 43 | height: 200px; 44 | } 45 | } 46 | 47 | .caption { 48 | padding: 20px; 49 | background-color: rgba(0,0,0,0.6); 50 | border-radius: 5px; 51 | display: box; 52 | display: -webkit-box; 53 | display: -moz-box; 54 | color: #fff; 55 | word-wrap: keep-all; 56 | } 57 | 58 | .caption__text { 59 | } 60 | } 61 | 62 | .panel-group { 63 | margin-top: 20px; 64 | 65 | .panel { 66 | margin-bottom: 20px; 67 | } 68 | 69 | .panel-heading { 70 | padding: 10px; 71 | font-size: 26px; 72 | } 73 | } 74 | 75 | .input_text { 76 | input { 77 | width: 100%; 78 | } 79 | 80 | textarea { 81 | width: 100%; 82 | } 83 | } -------------------------------------------------------------------------------- /app/controllers/application_controller.rb: -------------------------------------------------------------------------------- 1 | class ApplicationController < ActionController::Base 2 | # Prevent CSRF attacks by raising an exception. 3 | # For APIs, you may want to use :null_session instead. 4 | protect_from_forgery with: :exception 5 | 6 | before_action :authorized?, :check_use_https, :set_quick_link_counts, :save_current_url, :set_rss_url, :set_app_information 7 | 8 | helper_method :authorized? 9 | 10 | private 11 | 12 | def default_duration 13 | Time.now - 30.days 14 | end 15 | 16 | def authorized? 17 | @my_user = User.find_by(id: session[:user_id]) if session[:user_id] 18 | @my_user.present? 19 | end 20 | 21 | def check_use_https 22 | request.env['HTTP_X_FORWARDED_SSL'] = 'on' if ENV['USE_HTTPS'].to_i >= 1 23 | end 24 | 25 | def set_quick_link_counts 26 | @projects_recent_count = Project.recent.length 27 | @projects_hot_rank_count = Project.comment_ranking(default_duration).length 28 | @projects_all_count = Project.all.count 29 | if authorized? 30 | @projects_match = Project.match_skills(@my_user.skill_ids).length 31 | else 32 | @projects_match = @projects_all_count 33 | end 34 | end 35 | 36 | def save_current_url 37 | session[:current_url] = request.fullpath 38 | end 39 | 40 | def add_rss_urls(name, url) 41 | @rss_urls = Array(@rss_urls) << { name: name, url: url } 42 | @rss_urls.uniq! 43 | end 44 | 45 | def set_rss_url 46 | @rss_urls = [{ name: 'Ha4go Project List', url: '/feed.rss' }] 47 | end 48 | 49 | def set_app_information 50 | @app_infors = AppInformation.order(release: :desc).limit(10) 51 | end 52 | end 53 | -------------------------------------------------------------------------------- /test/controllers/projects_controller_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class ProjectsControllerTest < ActionController::TestCase 4 | setup do 5 | @project = projects(:project_one) 6 | @controller.session[:user_id] = @project.user.id 7 | end 8 | 9 | test "should get index" do 10 | get :index 11 | assert_response :success 12 | assert_not_nil assigns(:projects) 13 | end 14 | 15 | test "should get new" do 16 | get :new 17 | assert_response :success 18 | end 19 | 20 | test "should create project" do 21 | assert_difference('Project.count') do 22 | post :create, params: { project: { description: @project.description, development_url: @project.development_url, stage_id: @project.stage_id, subject: @project.subject, user_id: @project.user_id, user_url: @project.user_url }, skill_names: { skill_ids: [] }, new_skills: { new_skills: '' } } 23 | end 24 | 25 | assert_redirected_to project_path(assigns(:project)) 26 | end 27 | 28 | test "should show project" do 29 | get :show, params: { id: @project } 30 | assert_response :success 31 | end 32 | 33 | test "should get edit" do 34 | get :edit, params: { id: @project } 35 | assert_response :success 36 | end 37 | 38 | test "should update project" do 39 | patch :update, params: { id: @project, project: { description: @project.description, development_url: @project.development_url, stage_id: @project.stage_id, subject: @project.subject, user_id: @project.user_id, user_url: @project.user_url }, skill_names: { skill_ids: [] }, new_skills: { new_skills: '' } } 40 | assert_redirected_to project_path(assigns(:project)) 41 | end 42 | end 43 | -------------------------------------------------------------------------------- /app/uploaders/image_uploader.rb: -------------------------------------------------------------------------------- 1 | class ImageUploader < CarrierWave::Uploader::Base 2 | 3 | # Include RMagick or MiniMagick support: 4 | # include CarrierWave::RMagick 5 | # include CarrierWave::MiniMagick 6 | 7 | # Choose what kind of storage to use for this uploader: 8 | # storage :file 9 | 10 | # Override the directory where uploaded files will be stored. 11 | # This is a sensible default for uploaders that are meant to be mounted: 12 | def store_dir 13 | "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 14 | end 15 | 16 | # Provide a default URL as a default if there hasn't been a file uploaded: 17 | # def default_url 18 | # # For Rails 3.1+ asset pipeline compatibility: 19 | # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) 20 | # 21 | # "/images/fallback/" + [version_name, "default.png"].compact.join('_') 22 | # end 23 | 24 | # Process files as they are uploaded: 25 | # process scale: [200, 300] 26 | # 27 | # def scale(width, height) 28 | # # do something 29 | # end 30 | 31 | # Create different versions of your uploaded files: 32 | # version :thumb do 33 | # process resize_to_fit: [50, 50] 34 | # end 35 | 36 | # Add a white list of extensions which are allowed to be uploaded. 37 | # For images you might use something like this: 38 | def extension_whitelist 39 | %w(jpg jpeg gif png) 40 | end 41 | 42 | # Override the filename of the uploaded files: 43 | # Avoid using model.id or version_name here, see uploader/store.rb for details. 44 | # def filename 45 | # "something.jpg" if original_filename 46 | # end 47 | 48 | end 49 | -------------------------------------------------------------------------------- /app/uploaders/comment_image_uploader.rb: -------------------------------------------------------------------------------- 1 | class CommentImageUploader < CarrierWave::Uploader::Base 2 | 3 | # Include RMagick or MiniMagick support: 4 | # include CarrierWave::RMagick 5 | # include CarrierWave::MiniMagick 6 | 7 | # Choose what kind of storage to use for this uploader: 8 | # storage :fog 9 | 10 | # Override the directory where uploaded files will be stored. 11 | # This is a sensible default for uploaders that are meant to be mounted: 12 | def store_dir 13 | "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 14 | end 15 | 16 | # Provide a default URL as a default if there hasn't been a file uploaded: 17 | # def default_url 18 | # # For Rails 3.1+ asset pipeline compatibility: 19 | # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) 20 | # 21 | # "/images/fallback/" + [version_name, "default.png"].compact.join('_') 22 | # end 23 | 24 | # Process files as they are uploaded: 25 | # process scale: [200, 300] 26 | # 27 | # def scale(width, height) 28 | # # do something 29 | # end 30 | 31 | # Create different versions of your uploaded files: 32 | # version :thumb do 33 | # process resize_to_fit: [50, 50] 34 | # end 35 | 36 | # Add a white list of extensions which are allowed to be uploaded. 37 | # For images you might use something like this: 38 | def extension_whitelist 39 | %w(jpg jpeg gif png) 40 | end 41 | 42 | # Override the filename of the uploaded files: 43 | # Avoid using model.id or version_name here, see uploader/store.rb for details. 44 | # def filename 45 | # "something.jpg" if original_filename 46 | # end 47 | 48 | end 49 | -------------------------------------------------------------------------------- /public/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |If you are the application owner check the logs for more information.
64 |Maybe you tried to change something you didn't have access to.
63 |If you are the application owner check the logs for more information.
65 |You may have mistyped the address or the page may have moved.
63 |If you are the application owner check the logs for more information.
65 |16 | <%= description_text(@user.description) %> 17 |
18 |102 | <%= link_to comment.project.subject, project_path(comment.project.id, anchor: "comment-#{comment.id}") %> ( <%= time_ago_in_words comment.created_at %> ) 103 |
104 | <% end %> 105 |46 | <%= f.url_field :development_url, class: 'form-control', placeholder: t('dic.ex_devurl') %> 47 |
48 |49 | <%= t('.recommend_dev_url')%> 50 |
51 |80 | <%= image_tag(img.url) %> 81 |
82 |107 | <%= collection_check_boxes(:skill_names, :skill_ids, Skill.all, :name, :name) do |b| %> 108 | <%= b.label { b.check_box(checked: @my_skills.include?(b.text)) + b.text } %> 109 | <% end %> 110 |
111 |112 | <%= t('.recommend_skill')%> 113 |
114 |