├── log └── .keep ├── storage └── .keep ├── tmp ├── .keep ├── pids │ └── .keep └── storage │ └── .keep ├── vendor ├── .keep └── javascript │ └── .keep ├── lib ├── assets │ └── .keep └── tasks │ └── .keep ├── public ├── favicon.ico ├── apple-touch-icon.png ├── apple-touch-icon-precomposed.png ├── robots.txt ├── 500.html ├── 422.html └── 404.html ├── test ├── helpers │ └── .keep ├── mailers │ └── .keep ├── models │ ├── .keep │ ├── trip_test.rb │ ├── user_test.rb │ ├── article_test.rb │ ├── museum_test.rb │ └── trip_museum_test.rb ├── system │ └── .keep ├── controllers │ ├── .keep │ ├── trips_controller_test.rb │ ├── users_controller_test.rb │ ├── articles_controller_test.rb │ └── welcome_controller_test.rb ├── integration │ └── .keep ├── fixtures │ ├── files │ │ └── .keep │ ├── trip_museums.yml │ ├── articles.yml │ ├── users.yml │ ├── trips.yml │ └── museums.yml ├── application_system_test_case.rb ├── channels │ └── application_cable │ │ └── connection_test.rb └── test_helper.rb ├── app ├── assets │ ├── images │ │ └── .keep │ ├── config │ │ └── manifest.js │ └── stylesheets │ │ └── application.css ├── models │ ├── concerns │ │ └── .keep │ ├── user.rb │ ├── museum.rb │ ├── trip.rb │ ├── application_record.rb │ └── trip_museum.rb ├── controllers │ ├── concerns │ │ └── .keep │ ├── application_controller.rb │ ├── users_controller.rb │ └── trips_controller.rb ├── views │ ├── layouts │ │ ├── mailer.text.erb │ │ ├── mailer.html.erb │ │ └── application.html.erb │ ├── users │ │ └── new.html.erb │ └── trips │ │ ├── new.html.erb │ │ ├── museums.html.erb │ │ ├── index.html.erb │ │ └── show.html.erb ├── helpers │ ├── trips_helper.rb │ ├── users_helper.rb │ ├── welcome_helper.rb │ ├── articles_helper.rb │ └── application_helper.rb ├── channels │ └── application_cable │ │ ├── channel.rb │ │ └── connection.rb ├── mailers │ └── application_mailer.rb ├── javascript │ ├── application.js │ └── controllers │ │ ├── hello_controller.js │ │ ├── application.js │ │ └── index.js └── jobs │ └── application_job.rb ├── .ruby-version ├── entrypoint.sh ├── bin ├── rake ├── importmap ├── rails ├── setup ├── crawl └── bundle ├── docker-compose.yml ├── config ├── environment.rb ├── boot.rb ├── cable.yml ├── importmap.rb ├── initializers │ ├── filter_parameter_logging.rb │ ├── permissions_policy.rb │ ├── assets.rb │ ├── inflections.rb │ └── content_security_policy.rb ├── credentials.yml.enc ├── routes.rb ├── database.yml ├── application.rb ├── locales │ └── en.yml ├── storage.yml ├── puma.rb └── environments │ ├── test.rb │ ├── development.rb │ └── production.rb ├── config.ru ├── Rakefile ├── db ├── migrate │ ├── 20220915085356_create_articles.rb │ ├── 20220916015713_create_users.rb │ ├── 20220916022020_create_museums.rb │ ├── 20220916022050_create_trip_museums.rb │ └── 20220916133622_create_trips.rb ├── schema.rb └── seeds.rb ├── .gitattributes ├── Dockerfile ├── .vscode └── launch.json ├── .gitignore ├── README.md ├── Gemfile └── Gemfile.lock /log/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /storage/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tmp/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vendor/.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 | -------------------------------------------------------------------------------- /test/system/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tmp/pids/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tmp/storage/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/assets/images/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/controllers/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/integration/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vendor/javascript/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.ruby-version: -------------------------------------------------------------------------------- 1 | ruby-2.7.2 2 | -------------------------------------------------------------------------------- /app/models/concerns/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/fixtures/files/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/controllers/concerns/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/layouts/mailer.text.erb: -------------------------------------------------------------------------------- 1 | <%= yield %> 2 | -------------------------------------------------------------------------------- /app/helpers/trips_helper.rb: -------------------------------------------------------------------------------- 1 | module TripsHelper 2 | end 3 | -------------------------------------------------------------------------------- /app/helpers/users_helper.rb: -------------------------------------------------------------------------------- 1 | module UsersHelper 2 | end 3 | -------------------------------------------------------------------------------- /app/helpers/welcome_helper.rb: -------------------------------------------------------------------------------- 1 | module WelcomeHelper 2 | end 3 | -------------------------------------------------------------------------------- /app/models/user.rb: -------------------------------------------------------------------------------- 1 | class User < ApplicationRecord 2 | end 3 | -------------------------------------------------------------------------------- /entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | bin/rails server -b 0.0.0.0 -------------------------------------------------------------------------------- /app/helpers/articles_helper.rb: -------------------------------------------------------------------------------- 1 | module ArticlesHelper 2 | end 3 | -------------------------------------------------------------------------------- /app/models/museum.rb: -------------------------------------------------------------------------------- 1 | class Museum < ApplicationRecord 2 | end 3 | -------------------------------------------------------------------------------- /app/helpers/application_helper.rb: -------------------------------------------------------------------------------- 1 | module ApplicationHelper 2 | end 3 | -------------------------------------------------------------------------------- /app/models/trip.rb: -------------------------------------------------------------------------------- 1 | class Trip < ApplicationRecord 2 | belongs_to :user 3 | end 4 | -------------------------------------------------------------------------------- /app/controllers/application_controller.rb: -------------------------------------------------------------------------------- 1 | class ApplicationController < ActionController::Base 2 | end 3 | -------------------------------------------------------------------------------- /app/models/application_record.rb: -------------------------------------------------------------------------------- 1 | class ApplicationRecord < ActiveRecord::Base 2 | primary_abstract_class 3 | end 4 | -------------------------------------------------------------------------------- /bin/rake: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require_relative "../config/boot" 3 | require "rake" 4 | Rake.application.run 5 | -------------------------------------------------------------------------------- /app/models/trip_museum.rb: -------------------------------------------------------------------------------- 1 | class TripMuseum < ApplicationRecord 2 | belongs_to :trip 3 | belongs_to :museum 4 | end 5 | -------------------------------------------------------------------------------- /bin/importmap: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require_relative "../config/application" 4 | require "importmap/commands" 5 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # See https://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file 2 | -------------------------------------------------------------------------------- /app/channels/application_cable/channel.rb: -------------------------------------------------------------------------------- 1 | module ApplicationCable 2 | class Channel < ActionCable::Channel::Base 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | services: 3 | blog: 4 | image: 'yedf/rubyblog' 5 | ports: 6 | - '3000:3000' 7 | 8 | -------------------------------------------------------------------------------- /app/channels/application_cable/connection.rb: -------------------------------------------------------------------------------- 1 | module ApplicationCable 2 | class Connection < ActionCable::Connection::Base 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/mailers/application_mailer.rb: -------------------------------------------------------------------------------- 1 | class ApplicationMailer < ActionMailer::Base 2 | default from: "from@example.com" 3 | layout "mailer" 4 | end 5 | -------------------------------------------------------------------------------- /bin/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | APP_PATH = File.expand_path("../config/application", __dir__) 3 | require_relative "../config/boot" 4 | require "rails/commands" 5 | -------------------------------------------------------------------------------- /config/environment.rb: -------------------------------------------------------------------------------- 1 | # Load the Rails application. 2 | require_relative "application" 3 | 4 | # Initialize the Rails application. 5 | Rails.application.initialize! 6 | -------------------------------------------------------------------------------- /test/models/trip_test.rb: -------------------------------------------------------------------------------- 1 | require "test_helper" 2 | 3 | class TripTest < ActiveSupport::TestCase 4 | # test "the truth" do 5 | # assert true 6 | # end 7 | end 8 | -------------------------------------------------------------------------------- /test/models/user_test.rb: -------------------------------------------------------------------------------- 1 | require "test_helper" 2 | 3 | class UserTest < ActiveSupport::TestCase 4 | # test "the truth" do 5 | # assert true 6 | # end 7 | end 8 | -------------------------------------------------------------------------------- /test/models/article_test.rb: -------------------------------------------------------------------------------- 1 | require "test_helper" 2 | 3 | class ArticleTest < ActiveSupport::TestCase 4 | # test "the truth" do 5 | # assert true 6 | # end 7 | end 8 | -------------------------------------------------------------------------------- /test/models/museum_test.rb: -------------------------------------------------------------------------------- 1 | require "test_helper" 2 | 3 | class MuseumTest < ActiveSupport::TestCase 4 | # test "the truth" do 5 | # assert true 6 | # end 7 | end 8 | -------------------------------------------------------------------------------- /test/models/trip_museum_test.rb: -------------------------------------------------------------------------------- 1 | require "test_helper" 2 | 3 | class TripMuseumTest < ActiveSupport::TestCase 4 | # test "the truth" do 5 | # assert true 6 | # end 7 | end 8 | -------------------------------------------------------------------------------- /app/assets/config/manifest.js: -------------------------------------------------------------------------------- 1 | //= link_tree ../images 2 | //= link_directory ../stylesheets .css 3 | //= link_tree ../../javascript .js 4 | //= link_tree ../../../vendor/javascript .js 5 | -------------------------------------------------------------------------------- /config.ru: -------------------------------------------------------------------------------- 1 | # This file is used by Rack-based servers to start the application. 2 | 3 | require_relative "config/environment" 4 | 5 | run Rails.application 6 | Rails.application.load_server 7 | -------------------------------------------------------------------------------- /app/javascript/application.js: -------------------------------------------------------------------------------- 1 | // Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails 2 | import "@hotwired/turbo-rails" 3 | import "controllers" 4 | -------------------------------------------------------------------------------- /test/controllers/trips_controller_test.rb: -------------------------------------------------------------------------------- 1 | require "test_helper" 2 | 3 | class TripsControllerTest < ActionDispatch::IntegrationTest 4 | # test "the truth" do 5 | # assert true 6 | # end 7 | end 8 | -------------------------------------------------------------------------------- /test/controllers/users_controller_test.rb: -------------------------------------------------------------------------------- 1 | require "test_helper" 2 | 3 | class UsersControllerTest < ActionDispatch::IntegrationTest 4 | # test "the truth" do 5 | # assert true 6 | # end 7 | end 8 | -------------------------------------------------------------------------------- /test/application_system_test_case.rb: -------------------------------------------------------------------------------- 1 | require "test_helper" 2 | 3 | class ApplicationSystemTestCase < ActionDispatch::SystemTestCase 4 | driven_by :selenium, using: :chrome, screen_size: [1400, 1400] 5 | end 6 | -------------------------------------------------------------------------------- /test/controllers/articles_controller_test.rb: -------------------------------------------------------------------------------- 1 | require "test_helper" 2 | 3 | class ArticlesControllerTest < ActionDispatch::IntegrationTest 4 | # test "the truth" do 5 | # assert true 6 | # end 7 | end 8 | -------------------------------------------------------------------------------- /app/javascript/controllers/hello_controller.js: -------------------------------------------------------------------------------- 1 | import { Controller } from "@hotwired/stimulus" 2 | 3 | export default class extends Controller { 4 | connect() { 5 | this.element.textContent = "Hello World!" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /test/fixtures/trip_museums.yml: -------------------------------------------------------------------------------- 1 | # Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html 2 | 3 | one: 4 | trip: one 5 | museum: one 6 | 7 | two: 8 | trip: two 9 | museum: two 10 | -------------------------------------------------------------------------------- /config/boot.rb: -------------------------------------------------------------------------------- 1 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 2 | 3 | require "bundler/setup" # Set up gems listed in the Gemfile. 4 | require "bootsnap/setup" # Speed up boot time by caching expensive operations. 5 | -------------------------------------------------------------------------------- /test/fixtures/articles.yml: -------------------------------------------------------------------------------- 1 | # Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html 2 | 3 | one: 4 | title: MyString 5 | text: MyText 6 | 7 | two: 8 | title: MyString 9 | text: MyText 10 | -------------------------------------------------------------------------------- /test/fixtures/users.yml: -------------------------------------------------------------------------------- 1 | # Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html 2 | 3 | one: 4 | email: MyString 5 | password: MyString 6 | 7 | two: 8 | email: MyString 9 | password: MyString 10 | -------------------------------------------------------------------------------- /test/controllers/welcome_controller_test.rb: -------------------------------------------------------------------------------- 1 | require "test_helper" 2 | 3 | class WelcomeControllerTest < ActionDispatch::IntegrationTest 4 | test "should get index" do 5 | get welcome_index_url 6 | assert_response :success 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | # Add your own tasks in files placed in lib/tasks ending in .rake, 2 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. 3 | 4 | require_relative "config/application" 5 | 6 | Rails.application.load_tasks 7 | -------------------------------------------------------------------------------- /db/migrate/20220915085356_create_articles.rb: -------------------------------------------------------------------------------- 1 | class CreateArticles < ActiveRecord::Migration[7.0] 2 | def change 3 | create_table :articles do |t| 4 | t.string :title 5 | t.text :text 6 | 7 | t.timestamps 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /db/migrate/20220916015713_create_users.rb: -------------------------------------------------------------------------------- 1 | class CreateUsers < ActiveRecord::Migration[7.0] 2 | def change 3 | create_table :users do |t| 4 | t.string :email 5 | t.string :password 6 | 7 | t.timestamps 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # See https://git-scm.com/docs/gitattributes for more about git attribute files. 2 | 3 | # Mark the database schema as having been generated. 4 | db/schema.rb linguist-generated 5 | 6 | # Mark any vendored files as having been vendored. 7 | vendor/* linguist-vendored 8 | -------------------------------------------------------------------------------- /config/cable.yml: -------------------------------------------------------------------------------- 1 | development: 2 | adapter: redis 3 | url: redis://localhost:6379/1 4 | 5 | test: 6 | adapter: test 7 | 8 | production: 9 | adapter: redis 10 | url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %> 11 | channel_prefix: blog_production 12 | -------------------------------------------------------------------------------- /app/javascript/controllers/application.js: -------------------------------------------------------------------------------- 1 | import { Application } from "@hotwired/stimulus" 2 | 3 | const application = Application.start() 4 | 5 | // Configure Stimulus development experience 6 | application.debug = false 7 | window.Stimulus = application 8 | 9 | export { application } 10 | -------------------------------------------------------------------------------- /test/fixtures/trips.yml: -------------------------------------------------------------------------------- 1 | # Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html 2 | 3 | one: 4 | user: one 5 | name: MyString 6 | date: MyString 7 | multi_city: 1 8 | 9 | two: 10 | user: two 11 | name: MyString 12 | date: MyString 13 | multi_city: 1 14 | -------------------------------------------------------------------------------- /app/jobs/application_job.rb: -------------------------------------------------------------------------------- 1 | class ApplicationJob < ActiveJob::Base 2 | # Automatically retry jobs that encountered a deadlock 3 | # retry_on ActiveRecord::Deadlocked 4 | 5 | # Most jobs are safe to ignore if the underlying records are no longer available 6 | # discard_on ActiveJob::DeserializationError 7 | end 8 | -------------------------------------------------------------------------------- /app/views/layouts/mailer.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | <%= yield %> 12 | 13 | 14 | -------------------------------------------------------------------------------- /db/migrate/20220916022020_create_museums.rb: -------------------------------------------------------------------------------- 1 | class CreateMuseums < ActiveRecord::Migration[7.0] 2 | def change 3 | create_table :museums do |t| 4 | t.string :name 5 | t.string :city 6 | t.string :state 7 | t.text :description 8 | 9 | t.timestamps 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /test/fixtures/museums.yml: -------------------------------------------------------------------------------- 1 | # Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html 2 | 3 | one: 4 | name: MyString 5 | city: MyString 6 | state: MyString 7 | description: MyText 8 | 9 | two: 10 | name: MyString 11 | city: MyString 12 | state: MyString 13 | description: MyText 14 | -------------------------------------------------------------------------------- /test/channels/application_cable/connection_test.rb: -------------------------------------------------------------------------------- 1 | require "test_helper" 2 | 3 | class ApplicationCable::ConnectionTest < ActionCable::Connection::TestCase 4 | # test "connects with cookies" do 5 | # cookies.signed[:user_id] = 42 6 | # 7 | # connect 8 | # 9 | # assert_equal connection.user_id, "42" 10 | # end 11 | end 12 | -------------------------------------------------------------------------------- /db/migrate/20220916022050_create_trip_museums.rb: -------------------------------------------------------------------------------- 1 | class CreateTripMuseums < ActiveRecord::Migration[7.0] 2 | def change 3 | create_table :trip_museums do |t| 4 | t.references :trip, null: false, foreign_key: true 5 | t.references :museum, null: false, foreign_key: true 6 | 7 | t.timestamps 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /db/migrate/20220916133622_create_trips.rb: -------------------------------------------------------------------------------- 1 | class CreateTrips < ActiveRecord::Migration[7.0] 2 | def change 3 | create_table :trips do |t| 4 | t.references :user, null: false, foreign_key: true 5 | t.string :name 6 | t.string :date 7 | t.integer :multi_city 8 | 9 | t.timestamps 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /app/controllers/users_controller.rb: -------------------------------------------------------------------------------- 1 | class UsersController < ApplicationController 2 | def new 3 | end 4 | def create 5 | @user = User.new(user_params) 6 | 7 | @user.save 8 | redirect_to '/trips' 9 | end 10 | 11 | private 12 | def user_params 13 | params.require(:user).permit(:email, :password) 14 | end 15 | 16 | end 17 | -------------------------------------------------------------------------------- /config/importmap.rb: -------------------------------------------------------------------------------- 1 | # Pin npm packages by running ./bin/importmap 2 | 3 | pin "application", preload: true 4 | pin "@hotwired/turbo-rails", to: "turbo.min.js", preload: true 5 | pin "@hotwired/stimulus", to: "stimulus.min.js", preload: true 6 | pin "@hotwired/stimulus-loading", to: "stimulus-loading.js", preload: true 7 | pin_all_from "app/javascript/controllers", under: "controllers" 8 | -------------------------------------------------------------------------------- /app/views/layouts/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Blog 5 | 6 | <%= csrf_meta_tags %> 7 | <%= csp_meta_tag %> 8 | 9 | <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> 10 | <%= javascript_importmap_tags %> 11 | 12 | 13 | 14 | <%= yield %> 15 | 16 | 17 | -------------------------------------------------------------------------------- /test/test_helper.rb: -------------------------------------------------------------------------------- 1 | ENV["RAILS_ENV"] ||= "test" 2 | require_relative "../config/environment" 3 | require "rails/test_help" 4 | 5 | class ActiveSupport::TestCase 6 | # Run tests in parallel with specified workers 7 | parallelize(workers: :number_of_processors) 8 | 9 | # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. 10 | fixtures :all 11 | 12 | # Add more helper methods to be used by all tests here... 13 | end 14 | -------------------------------------------------------------------------------- /config/initializers/filter_parameter_logging.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Configure parameters to be filtered from the log file. Use this to limit dissemination of 4 | # sensitive information. See the ActiveSupport::ParameterFilter documentation for supported 5 | # notations and behaviors. 6 | Rails.application.config.filter_parameters += [ 7 | :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn 8 | ] 9 | -------------------------------------------------------------------------------- /config/initializers/permissions_policy.rb: -------------------------------------------------------------------------------- 1 | # Define an application-wide HTTP permissions policy. For further 2 | # information see https://developers.google.com/web/updates/2018/06/feature-policy 3 | # 4 | # Rails.application.config.permissions_policy do |f| 5 | # f.camera :none 6 | # f.gyroscope :none 7 | # f.microphone :none 8 | # f.usb :none 9 | # f.fullscreen :self 10 | # f.payment :self, "https://secure.example.com" 11 | # end 12 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # syntax=docker/dockerfile:1 2 | FROM ruby:2.7.2 3 | RUN apt-get update -qq && apt-get install -y sqlite3 4 | WORKDIR /myapp 5 | COPY . . 6 | RUN bundle install 7 | RUN bin/rails db:migrate && bin/rails db:seed 8 | 9 | # Add a script to be executed every time the container starts. 10 | ENTRYPOINT ["/myapp/entrypoint.sh"] 11 | EXPOSE 3000 12 | 13 | # Configure the main process to run when running the image 14 | CMD ["/myapp/bin/rails", "server", "-b", "0.0.0.0"] 15 | -------------------------------------------------------------------------------- /config/credentials.yml.enc: -------------------------------------------------------------------------------- 1 | HdSPSF8RxdptAJyZtb1E5WJen2jOEg0yVved/f+chnI8G/1BW2zM5sOq42YOTmgSZpfJwy6kRNQCvJRMNo/RCTHavOogN9u7sLAi4gN0VglGA2x/d1eNKXlXcTYR+qhCG8pp8cb2ttSn5rPJFGWyPckpDmpZ/t6sYhV4GjEhGHUmK1dFV0Pb/4wfkmwO6u9wPYAgv6JelQm8crMOGGBYhIH50MiGoQf4+y6TesgXanbORDPsytZNu74iZTK4CTx5TU+kPZbEKAlnzNELp1ESiuHGjcp5x7dr2T1KvLnWbKp7bP/1rpC9WILvy59URr/ZsXzjtxYgZyYSO+j/lsQtO0bXFvvSgiekxe0HN9zxse4hoAbvJaXpPcoFAXQXITca2JtHZ/Rc3SUECD3ygSIAQgo/do0Vt6DiUVCr--glltuo75hyrbAL/r--W8RbdDRr+KoRAZN3MdIm3Q== -------------------------------------------------------------------------------- /config/routes.rb: -------------------------------------------------------------------------------- 1 | Rails.application.routes.draw do 2 | get 'welcome/index' 3 | resources :users 4 | # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html 5 | resources :articles 6 | resources :trips do 7 | collection do 8 | get 'trip_museum_delete' 9 | get 'trip_museum_toggle' 10 | get 'trip_delete' 11 | get 'museums' 12 | end 13 | end 14 | 15 | # Defines the root path route ("/") 16 | root 'users#new' 17 | end 18 | -------------------------------------------------------------------------------- /app/views/users/new.html.erb: -------------------------------------------------------------------------------- 1 |

2 | If you don't hava a user, you can register one, and then go to the trips list. 3 |

4 |

5 | Or you can go to the trips page directly 6 |

7 | <%= form_for :user, url: users_path do |f| %> 8 |

9 | <%= f.label 'Email' %>
10 | <%= f.text_field :email %> 11 |

12 | 13 |

14 | <%= f.label 'Password' %>
15 | <%= f.password_field :password %> 16 |

17 | 18 |

19 | <%= f.submit 'Register' %> 20 |

21 | <% end %> -------------------------------------------------------------------------------- /config/initializers/assets.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Version of your assets, change this if you want to expire all your assets. 4 | Rails.application.config.assets.version = "1.0" 5 | 6 | # Add additional assets to the asset load path. 7 | # Rails.application.config.assets.paths << Emoji.images_path 8 | 9 | # Precompile additional assets. 10 | # application.js, application.css, and all non-JS/CSS in the app/assets 11 | # folder are already added. 12 | # Rails.application.config.assets.precompile += %w( admin.js admin.css ) 13 | -------------------------------------------------------------------------------- /app/javascript/controllers/index.js: -------------------------------------------------------------------------------- 1 | // Import and register all your controllers from the importmap under controllers/* 2 | 3 | import { application } from "controllers/application" 4 | 5 | // Eager load all controllers defined in the import map under controllers/**/*_controller 6 | import { eagerLoadControllersFrom } from "@hotwired/stimulus-loading" 7 | eagerLoadControllersFrom("controllers", application) 8 | 9 | // Lazy load controllers as they appear in the DOM (remember not to preload controllers in import map!) 10 | // import { lazyLoadControllersFrom } from "@hotwired/stimulus-loading" 11 | // lazyLoadControllersFrom("controllers", application) 12 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Rails server", 9 | "type": "Ruby", 10 | "request": "launch", 11 | "program": "${workspaceRoot}/bin/rails", 12 | "args": [ 13 | "server" 14 | ] 15 | }, 16 | { 17 | "name": "Rails crawl", 18 | "type": "Ruby", 19 | "request": "launch", 20 | "program": "${workspaceRoot}/bin/crawl.rb" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /app/views/trips/new.html.erb: -------------------------------------------------------------------------------- 1 | <% flash.each do |type, msg| %> 2 |
3 | Error: 4 | <%= msg %> 5 |
6 | <% end %> 7 | 8 |

9 | Current User: <%= @user.email %> 10 |

11 | <%= form_for :trip, url: trips_path do |f| %> 12 |

13 | <%= f.label :name %>
14 | <%= f.text_field :name %> 15 |

16 | 17 |

18 | <%= f.label :date %>
19 | <%= f.text_field :date %> 20 |

21 |

22 | <%= f.submit %> 23 |

24 | <% @museums.each do |museum| %> 25 |

26 | <%= check_box_tag("museum["+museum.id.to_s+"]") %> 27 | <%= museum.name %> 28 |

29 | <% end %> 30 | <% end %> -------------------------------------------------------------------------------- /config/database.yml: -------------------------------------------------------------------------------- 1 | # SQLite. Versions 3.8.0 and up are supported. 2 | # gem install sqlite3 3 | # 4 | # Ensure the SQLite 3 gem is defined in your Gemfile 5 | # gem "sqlite3" 6 | # 7 | default: &default 8 | adapter: sqlite3 9 | pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 10 | timeout: 5000 11 | 12 | development: 13 | <<: *default 14 | database: db/development.sqlite3 15 | 16 | # Warning: The database defined as "test" will be erased and 17 | # re-generated from your development database when you run "rake". 18 | # Do not set this db to the same as development or production. 19 | test: 20 | <<: *default 21 | database: db/test.sqlite3 22 | 23 | production: 24 | <<: *default 25 | database: db/production.sqlite3 26 | -------------------------------------------------------------------------------- /config/initializers/inflections.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new inflection rules using the following format. Inflections 4 | # are locale specific, and you may define rules for as many different 5 | # locales as you wish. All of these examples are active by default: 6 | # ActiveSupport::Inflector.inflections(:en) do |inflect| 7 | # inflect.plural /^(ox)$/i, "\\1en" 8 | # inflect.singular /^(ox)en/i, "\\1" 9 | # inflect.irregular "person", "people" 10 | # inflect.uncountable %w( fish sheep ) 11 | # end 12 | 13 | # These inflection rules are supported but not enabled by default: 14 | # ActiveSupport::Inflector.inflections(:en) do |inflect| 15 | # inflect.acronym "RESTful" 16 | # end 17 | -------------------------------------------------------------------------------- /app/views/trips/museums.html.erb: -------------------------------------------------------------------------------- 1 | <%= link_to 'Back to Trip', trip_path(@trip) %> 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | <% @museums.each do |museum| %> 11 | 12 | 13 | 14 | 15 | 22 | 23 | <% end %> 24 |
NameCityStateOP
<%= museum[:name] %><%= museum[:city] %><%= museum[:state] %> 16 | <% if museum[:selected] %> 17 | <%= link_to 'Delete', '/trips/trip_museum_toggle?op=del&mid='+museum[:id].to_s+'&tid='+@trip.id.to_s %> 18 | <% else %> 19 | <%= link_to 'Add', '/trips/trip_museum_toggle?op=add&mid='+museum[:id].to_s+'&tid='+@trip.id.to_s %> 20 | <% end %> 21 |
25 | -------------------------------------------------------------------------------- /app/views/trips/index.html.erb: -------------------------------------------------------------------------------- 1 | New Trip 2 | 8 | 9 |
<%= link_to 'DayTrip', '/trips' %>   <%= link_to 'MutipleDayTrip', '/trips?multi=1' %>
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | <% @trips.each do |trip| %> 19 | 20 | 21 | 22 | 24 | 25 | <% end %> 26 |
namedatetype
<%= trip.name %><%= trip.date %><%= trip.multi_city == 1 ? 'Multiple Day Trip' : 'Day Trip' %> 23 | <%= link_to 'Show', trip_path(trip) %>
-------------------------------------------------------------------------------- /config/application.rb: -------------------------------------------------------------------------------- 1 | require_relative "boot" 2 | 3 | require "rails/all" 4 | 5 | # Require the gems listed in Gemfile, including any gems 6 | # you've limited to :test, :development, or :production. 7 | Bundler.require(*Rails.groups) 8 | 9 | module Blog 10 | class Application < Rails::Application 11 | # Initialize configuration defaults for originally generated Rails version. 12 | config.load_defaults 7.0 13 | 14 | # Configuration for the application, engines, and railties goes here. 15 | # 16 | # These settings can be overridden in specific environments using the files 17 | # in config/environments, which are processed later. 18 | # 19 | # config.time_zone = "Central Time (US & Canada)" 20 | # config.eager_load_paths << Rails.root.join("extras") 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /app/assets/stylesheets/application.css: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a manifest file that'll be compiled into application.css, which will include all the files 3 | * listed below. 4 | * 5 | * Any CSS (and SCSS, if configured) file within this directory, lib/assets/stylesheets, or any plugin's 6 | * vendor/assets/stylesheets directory can be referenced here using a relative path. 7 | * 8 | * You're free to add application-wide styles to this file and they'll appear at the bottom of the 9 | * compiled file so the styles you add here take precedence over styles defined in any other CSS 10 | * files in this directory. Styles in this file should be added after the last require_* statement. 11 | * It is generally better to create a new file per style scope. 12 | * 13 | *= require_tree . 14 | *= require_self 15 | */ 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files for more about ignoring files. 2 | # 3 | # If you find yourself ignoring temporary files generated by your text editor 4 | # or operating system, you probably want to add a global ignore instead: 5 | # git config --global core.excludesfile '~/.gitignore_global' 6 | 7 | # Ignore bundler config. 8 | /.bundle 9 | 10 | # Ignore the default SQLite database. 11 | /db/*.sqlite3 12 | /db/*.sqlite3-* 13 | 14 | # Ignore all logfiles and tempfiles. 15 | /log/* 16 | /tmp/* 17 | !/log/.keep 18 | !/tmp/.keep 19 | 20 | # Ignore pidfiles, but keep the directory. 21 | /tmp/pids/* 22 | !/tmp/pids/ 23 | !/tmp/pids/.keep 24 | 25 | # Ignore uploaded files in development. 26 | /storage/* 27 | !/storage/.keep 28 | /tmp/storage/* 29 | !/tmp/storage/ 30 | !/tmp/storage/.keep 31 | 32 | /public/assets 33 | 34 | # Ignore master key for decrypting credentials and more. 35 | /config/master.key 36 | -------------------------------------------------------------------------------- /app/views/trips/show.html.erb: -------------------------------------------------------------------------------- 1 |

2 | Name: 3 | <%= @trip.name %> 4 |

5 | 6 |

7 | Date: 8 | <%= @trip.date %> 9 |

10 | 11 |

12 | Type: 13 | <%= @trip.multi_city == 1 ? 'Multiple Day Trip' : 'Day Trip' %> 14 |

15 | 16 |

17 | <%= link_to 'Delete', '/trips/trip_delete?id='+@trip.id.to_s %> 18 |

19 | 20 |

21 | <%= link_to 'Add Museum', '/trips/museums?id='+@trip.id.to_s %> 22 |

23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | <% @museums.each do |museum| %> 33 | 34 | 35 | 36 | 37 | 38 | 39 | <% end %> 40 |
NameCityStateOP
<%= museum.name %><%= museum.city %><%= museum.state %><%= link_to 'Delete', '/trips/trip_museum_delete?mid='+museum.id.to_s+'&tid='+@trip.id.to_s %>
41 | 42 | -------------------------------------------------------------------------------- /config/locales/en.yml: -------------------------------------------------------------------------------- 1 | # Files in the config/locales directory are used for internationalization 2 | # and are automatically loaded by Rails. If you want to use locales other 3 | # than English, add the necessary files in this directory. 4 | # 5 | # To use the locales, use `I18n.t`: 6 | # 7 | # I18n.t "hello" 8 | # 9 | # In views, this is aliased to just `t`: 10 | # 11 | # <%= t("hello") %> 12 | # 13 | # To use a different locale, set it with `I18n.locale`: 14 | # 15 | # I18n.locale = :es 16 | # 17 | # This would use the information in config/locales/es.yml. 18 | # 19 | # The following keys must be escaped otherwise they will not be retrieved by 20 | # the default I18n backend: 21 | # 22 | # true, false, on, off, yes, no 23 | # 24 | # Instead, surround them with single quotes. 25 | # 26 | # en: 27 | # "true": "foo" 28 | # 29 | # To learn more, please read the Rails Internationalization guide 30 | # available at https://guides.rubyonrails.org/i18n.html. 31 | 32 | en: 33 | hello: "Hello world" 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # README 2 | 3 | This blog can be access by this link [https://b.dtm.pub](https://b.dtm.pub) 4 | ## Quick Start 5 | 6 | You can startup this project in two ways: 7 | 8 | ### Using docker-compose 9 | 10 | requirement: docker & docker-compose have been installed 11 | ``` 12 | git clone https://github.com/yedf2/blog && cd blog 13 | docker-compose up -d 14 | ``` 15 | 16 | ### From Source 17 | requirement: ruby(>=2.7) has been installed 18 | ``` 19 | git clone https://github.com/yedf2/blog && cd blog 20 | bundle install 21 | bin/rails db:migrate 22 | bin/rails db:seed 23 | bin/rails server 24 | ``` 25 | 26 | If you want to crawl the newest museums in `https://www.museumsusa.org/`, you can run `bin/crawl` and then run `bin/rails db:seed` to load the downloaded museus to database 27 | 28 | ## Visit 29 | 30 | After the project has been startup, you can now visit by this link [localhost:3000](localhost:3000) 31 | 32 | ## Files 33 | - [./db](./db): schema of database, initial data of database, table creating scripts 34 | - [./bin/crawl](./bin/crawl): Get museums and parse HTML 35 | - [./app](./app): UI&Controller 36 | -------------------------------------------------------------------------------- /bin/setup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require "fileutils" 3 | 4 | # path to your application root. 5 | APP_ROOT = File.expand_path("..", __dir__) 6 | 7 | def system!(*args) 8 | system(*args) || abort("\n== Command #{args} failed ==") 9 | end 10 | 11 | FileUtils.chdir APP_ROOT do 12 | # This script is a way to set up or update your development environment automatically. 13 | # This script is idempotent, so that you can run it at any time and get an expectable outcome. 14 | # Add necessary setup steps to this file. 15 | 16 | puts "== Installing dependencies ==" 17 | system! "gem install bundler --conservative" 18 | system("bundle check") || system!("bundle install") 19 | 20 | # puts "\n== Copying sample files ==" 21 | # unless File.exist?("config/database.yml") 22 | # FileUtils.cp "config/database.yml.sample", "config/database.yml" 23 | # end 24 | 25 | puts "\n== Preparing database ==" 26 | system! "bin/rails db:prepare" 27 | 28 | puts "\n== Removing old logs and tempfiles ==" 29 | system! "bin/rails log:clear tmp:clear" 30 | 31 | puts "\n== Restarting application server ==" 32 | system! "bin/rails restart" 33 | end 34 | -------------------------------------------------------------------------------- /config/initializers/content_security_policy.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Define an application-wide content security policy. 4 | # See the Securing Rails Applications Guide for more information: 5 | # https://guides.rubyonrails.org/security.html#content-security-policy-header 6 | 7 | # Rails.application.configure do 8 | # config.content_security_policy do |policy| 9 | # policy.default_src :self, :https 10 | # policy.font_src :self, :https, :data 11 | # policy.img_src :self, :https, :data 12 | # policy.object_src :none 13 | # policy.script_src :self, :https 14 | # policy.style_src :self, :https 15 | # # Specify URI for violation reports 16 | # # policy.report_uri "/csp-violation-report-endpoint" 17 | # end 18 | # 19 | # # Generate session nonces for permitted importmap and inline scripts 20 | # config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s } 21 | # config.content_security_policy_nonce_directives = %w(script-src) 22 | # 23 | # # Report violations without enforcing the policy. 24 | # # config.content_security_policy_report_only = true 25 | # end 26 | -------------------------------------------------------------------------------- /config/storage.yml: -------------------------------------------------------------------------------- 1 | test: 2 | service: Disk 3 | root: <%= Rails.root.join("tmp/storage") %> 4 | 5 | local: 6 | service: Disk 7 | root: <%= Rails.root.join("storage") %> 8 | 9 | # Use bin/rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key) 10 | # amazon: 11 | # service: S3 12 | # access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %> 13 | # secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %> 14 | # region: us-east-1 15 | # bucket: your_own_bucket-<%= Rails.env %> 16 | 17 | # Remember not to checkin your GCS keyfile to a repository 18 | # google: 19 | # service: GCS 20 | # project: your_project 21 | # credentials: <%= Rails.root.join("path/to/gcs.keyfile") %> 22 | # bucket: your_own_bucket-<%= Rails.env %> 23 | 24 | # Use bin/rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key) 25 | # microsoft: 26 | # service: AzureStorage 27 | # storage_account_name: your_account_name 28 | # storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %> 29 | # container: your_container_name-<%= Rails.env %> 30 | 31 | # mirror: 32 | # service: Mirror 33 | # primary: local 34 | # mirrors: [ amazon, google, microsoft ] 35 | -------------------------------------------------------------------------------- /bin/crawl: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env ruby 2 | 3 | require 'nokogiri' 4 | require 'open-uri' 5 | 6 | class Museum 7 | def initialize(name, city, state, description) 8 | @name = name.gsub(/'/, '"') 9 | @city = city 10 | @state = state 11 | @description = description.gsub(/'/, '"') 12 | end 13 | def to_s() 14 | return "{'name':'#@name','city':'#@city','state':'#@state','description':'#@description'}" 15 | end 16 | end 17 | 18 | 19 | def writeResult(data) 20 | f = File.new('db/seeds.rb', 'w+') 21 | f.puts 'Museum.create([' 22 | data.each do |row| 23 | f.puts "#{row}," 24 | end 25 | f.puts '])' 26 | f.close 27 | end 28 | # Fetch and parse HTML document 29 | first = Nokogiri::HTML(URI.open('https://www.museumsusa.org/museums/?k=1271407%2cCategoryID%3a200050%3bState%3aCA%3bDirectoryID%3a200454')) 30 | 31 | datas = Array.new() 32 | first.search('table#ctl08_ctl00_rptChildNodes_dlItems_1 a / @href').each do |link| 33 | puts 'https://www.museumsusa.org' + link 34 | page = Nokogiri::HTML(URI.open('https://www.museumsusa.org' + link)) 35 | items = page.css('.itemGroup .basic') 36 | if items.size == 0 37 | puts "no item found, maybe error occured" 38 | end 39 | items.each do |museum| 40 | location = museum.css('.location')[0].content.split(',') 41 | name = museum.css('.party')[0].content.strip() 42 | abstract = museum.css('.abstract') 43 | description = '' 44 | if abstract.size() > 0 45 | description = abstract[0].content.strip() 46 | end 47 | museum = Museum.new(name, location[0].strip(), location[1].strip(), description) 48 | datas << museum 49 | end 50 | end 51 | 52 | writeResult(datas) 53 | -------------------------------------------------------------------------------- /public/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | We're sorry, but something went wrong (500) 5 | 6 | 55 | 56 | 57 | 58 | 59 |
60 |
61 |

We're sorry, but something went wrong.

62 |
63 |

If you are the application owner check the logs for more information.

64 |
65 | 66 | 67 | -------------------------------------------------------------------------------- /config/puma.rb: -------------------------------------------------------------------------------- 1 | # Puma can serve each request in a thread from an internal thread pool. 2 | # The `threads` method setting takes two numbers: a minimum and maximum. 3 | # Any libraries that use thread pools should be configured to match 4 | # the maximum value specified for Puma. Default is set to 5 threads for minimum 5 | # and maximum; this matches the default thread size of Active Record. 6 | # 7 | max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } 8 | min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count } 9 | threads min_threads_count, max_threads_count 10 | 11 | # Specifies the `worker_timeout` threshold that Puma will use to wait before 12 | # terminating a worker in development environments. 13 | # 14 | worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development" 15 | 16 | # Specifies the `port` that Puma will listen on to receive requests; default is 3000. 17 | # 18 | port ENV.fetch("PORT") { 3000 } 19 | 20 | # Specifies the `environment` that Puma will run in. 21 | # 22 | environment ENV.fetch("RAILS_ENV") { "development" } 23 | 24 | # Specifies the `pidfile` that Puma will use. 25 | pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } 26 | 27 | # Specifies the number of `workers` to boot in clustered mode. 28 | # Workers are forked web server processes. If using threads and workers together 29 | # the concurrency of the application would be max `threads` * `workers`. 30 | # Workers do not work on JRuby or Windows (both of which do not support 31 | # processes). 32 | # 33 | # workers ENV.fetch("WEB_CONCURRENCY") { 2 } 34 | 35 | # Use the `preload_app!` method when specifying a `workers` number. 36 | # This directive tells Puma to first boot the application and load code 37 | # before forking the application. This takes advantage of Copy On Write 38 | # process behavior so workers use less memory. 39 | # 40 | # preload_app! 41 | 42 | # Allow puma to be restarted by `bin/rails restart` command. 43 | plugin :tmp_restart 44 | -------------------------------------------------------------------------------- /public/422.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The change you wanted was rejected (422) 5 | 6 | 55 | 56 | 57 | 58 | 59 |
60 |
61 |

The change you wanted was rejected.

62 |

Maybe you tried to change something you didn't have access to.

63 |
64 |

If you are the application owner check the logs for more information.

65 |
66 | 67 | 68 | -------------------------------------------------------------------------------- /public/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The page you were looking for doesn't exist (404) 5 | 6 | 55 | 56 | 57 | 58 | 59 |
60 |
61 |

The page you were looking for doesn't exist.

62 |

You may have mistyped the address or the page may have moved.

63 |
64 |

If you are the application owner check the logs for more information.

65 |
66 | 67 | 68 | -------------------------------------------------------------------------------- /db/schema.rb: -------------------------------------------------------------------------------- 1 | # This file is auto-generated from the current state of the database. Instead 2 | # of editing this file, please use the migrations feature of Active Record to 3 | # incrementally modify your database, and then regenerate this schema definition. 4 | # 5 | # This file is the source Rails uses to define your schema when running `bin/rails 6 | # db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to 7 | # be faster and is potentially less error prone than running all of your 8 | # migrations from scratch. Old migrations may fail to apply correctly if those 9 | # migrations use external dependencies or application code. 10 | # 11 | # It's strongly recommended that you check this file into your version control system. 12 | 13 | ActiveRecord::Schema[7.0].define(version: 2022_09_16_133622) do 14 | create_table "articles", force: :cascade do |t| 15 | t.string "title" 16 | t.text "text" 17 | t.datetime "created_at", null: false 18 | t.datetime "updated_at", null: false 19 | end 20 | 21 | create_table "museums", force: :cascade do |t| 22 | t.string "name" 23 | t.string "city" 24 | t.string "state" 25 | t.text "description" 26 | t.datetime "created_at", null: false 27 | t.datetime "updated_at", null: false 28 | end 29 | 30 | create_table "trip_museums", force: :cascade do |t| 31 | t.integer "trip_id", null: false 32 | t.integer "museum_id", null: false 33 | t.datetime "created_at", null: false 34 | t.datetime "updated_at", null: false 35 | t.index ["museum_id"], name: "index_trip_museums_on_museum_id" 36 | t.index ["trip_id"], name: "index_trip_museums_on_trip_id" 37 | end 38 | 39 | create_table "trips", force: :cascade do |t| 40 | t.integer "user_id", null: false 41 | t.string "name" 42 | t.string "date" 43 | t.integer "multi_city" 44 | t.datetime "created_at", null: false 45 | t.datetime "updated_at", null: false 46 | t.index ["user_id"], name: "index_trips_on_user_id" 47 | end 48 | 49 | create_table "users", force: :cascade do |t| 50 | t.string "email" 51 | t.string "password" 52 | t.datetime "created_at", null: false 53 | t.datetime "updated_at", null: false 54 | end 55 | 56 | add_foreign_key "trip_museums", "museums" 57 | add_foreign_key "trip_museums", "trips" 58 | add_foreign_key "trips", "users" 59 | end 60 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | git_source(:github) { |repo| "https://github.com/#{repo}.git" } 3 | 4 | ruby "2.7.2" 5 | 6 | gem "nokogiri" 7 | 8 | # Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main" 9 | gem "rails", "~> 7.0.4" 10 | 11 | # The original asset pipeline for Rails [https://github.com/rails/sprockets-rails] 12 | gem "sprockets-rails" 13 | 14 | # Use sqlite3 as the database for Active Record 15 | gem "sqlite3", "~> 1.4" 16 | 17 | # Use the Puma web server [https://github.com/puma/puma] 18 | gem "puma", "~> 5.0" 19 | 20 | # Use JavaScript with ESM import maps [https://github.com/rails/importmap-rails] 21 | gem "importmap-rails" 22 | 23 | # Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev] 24 | gem "turbo-rails" 25 | 26 | # Hotwire's modest JavaScript framework [https://stimulus.hotwired.dev] 27 | gem "stimulus-rails" 28 | 29 | # Build JSON APIs with ease [https://github.com/rails/jbuilder] 30 | gem "jbuilder" 31 | 32 | # Use Redis adapter to run Action Cable in production 33 | gem "redis", "~> 4.0" 34 | 35 | # Use Kredis to get higher-level data types in Redis [https://github.com/rails/kredis] 36 | # gem "kredis" 37 | 38 | # Use Active Model has_secure_password [https://guides.rubyonrails.org/active_model_basics.html#securepassword] 39 | # gem "bcrypt", "~> 3.1.7" 40 | 41 | # Windows does not include zoneinfo files, so bundle the tzinfo-data gem 42 | gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby ] 43 | 44 | # Reduces boot times through caching; required in config/boot.rb 45 | gem "bootsnap", require: false 46 | 47 | # Use Sass to process CSS 48 | # gem "sassc-rails" 49 | 50 | # Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images] 51 | # gem "image_processing", "~> 1.2" 52 | 53 | group :development, :test do 54 | # See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem 55 | gem "debug", platforms: %i[ mri mingw x64_mingw ] 56 | end 57 | 58 | group :development do 59 | # Use console on exceptions pages [https://github.com/rails/web-console] 60 | gem "web-console" 61 | 62 | # Add speed badges [https://github.com/MiniProfiler/rack-mini-profiler] 63 | # gem "rack-mini-profiler" 64 | 65 | # Speed up commands on slow machines / big apps [https://github.com/rails/spring] 66 | # gem "spring" 67 | end 68 | 69 | group :test do 70 | # Use system testing [https://guides.rubyonrails.org/testing.html#system-testing] 71 | gem "capybara" 72 | gem "selenium-webdriver" 73 | gem "webdrivers" 74 | end 75 | -------------------------------------------------------------------------------- /config/environments/test.rb: -------------------------------------------------------------------------------- 1 | require "active_support/core_ext/integer/time" 2 | 3 | # The test environment is used exclusively to run your application's 4 | # test suite. You never need to work with it otherwise. Remember that 5 | # your test database is "scratch space" for the test suite and is wiped 6 | # and recreated between test runs. Don't rely on the data there! 7 | 8 | Rails.application.configure do 9 | # Settings specified here will take precedence over those in config/application.rb. 10 | 11 | # Turn false under Spring and add config.action_view.cache_template_loading = true. 12 | config.cache_classes = true 13 | 14 | # Eager loading loads your whole application. When running a single test locally, 15 | # this probably isn't necessary. It's a good idea to do in a continuous integration 16 | # system, or in some way before deploying your code. 17 | config.eager_load = ENV["CI"].present? 18 | 19 | # Configure public file server for tests with Cache-Control for performance. 20 | config.public_file_server.enabled = true 21 | config.public_file_server.headers = { 22 | "Cache-Control" => "public, max-age=#{1.hour.to_i}" 23 | } 24 | 25 | # Show full error reports and disable caching. 26 | config.consider_all_requests_local = true 27 | config.action_controller.perform_caching = false 28 | config.cache_store = :null_store 29 | 30 | # Raise exceptions instead of rendering exception templates. 31 | config.action_dispatch.show_exceptions = false 32 | 33 | # Disable request forgery protection in test environment. 34 | config.action_controller.allow_forgery_protection = false 35 | 36 | # Store uploaded files on the local file system in a temporary directory. 37 | config.active_storage.service = :test 38 | 39 | config.action_mailer.perform_caching = false 40 | 41 | # Tell Action Mailer not to deliver emails to the real world. 42 | # The :test delivery method accumulates sent emails in the 43 | # ActionMailer::Base.deliveries array. 44 | config.action_mailer.delivery_method = :test 45 | 46 | # Print deprecation notices to the stderr. 47 | config.active_support.deprecation = :stderr 48 | 49 | # Raise exceptions for disallowed deprecations. 50 | config.active_support.disallowed_deprecation = :raise 51 | 52 | # Tell Active Support which deprecation messages to disallow. 53 | config.active_support.disallowed_deprecation_warnings = [] 54 | 55 | # Raises error for missing translations. 56 | # config.i18n.raise_on_missing_translations = true 57 | 58 | # Annotate rendered view with file names. 59 | # config.action_view.annotate_rendered_view_with_filenames = true 60 | end 61 | -------------------------------------------------------------------------------- /config/environments/development.rb: -------------------------------------------------------------------------------- 1 | require "active_support/core_ext/integer/time" 2 | 3 | Rails.application.configure do 4 | # Settings specified here will take precedence over those in config/application.rb. 5 | 6 | # In the development environment your application's code is reloaded any time 7 | # it changes. This slows down response time but is perfect for development 8 | # since you don't have to restart the web server when you make code changes. 9 | config.cache_classes = false 10 | 11 | # Do not eager load code on boot. 12 | config.eager_load = false 13 | 14 | # Show full error reports. 15 | config.consider_all_requests_local = true 16 | 17 | # Enable server timing 18 | config.server_timing = true 19 | 20 | # Enable/disable caching. By default caching is disabled. 21 | # Run rails dev:cache to toggle caching. 22 | if Rails.root.join("tmp/caching-dev.txt").exist? 23 | config.action_controller.perform_caching = true 24 | config.action_controller.enable_fragment_cache_logging = true 25 | 26 | config.cache_store = :memory_store 27 | config.public_file_server.headers = { 28 | "Cache-Control" => "public, max-age=#{2.days.to_i}" 29 | } 30 | else 31 | config.action_controller.perform_caching = false 32 | 33 | config.cache_store = :null_store 34 | end 35 | 36 | # Store uploaded files on the local file system (see config/storage.yml for options). 37 | config.active_storage.service = :local 38 | 39 | # Don't care if the mailer can't send. 40 | config.action_mailer.raise_delivery_errors = false 41 | 42 | config.action_mailer.perform_caching = false 43 | 44 | # Print deprecation notices to the Rails logger. 45 | config.active_support.deprecation = :log 46 | 47 | # Raise exceptions for disallowed deprecations. 48 | config.active_support.disallowed_deprecation = :raise 49 | 50 | # Tell Active Support which deprecation messages to disallow. 51 | config.active_support.disallowed_deprecation_warnings = [] 52 | 53 | # Raise an error on page load if there are pending migrations. 54 | config.active_record.migration_error = :page_load 55 | 56 | # Highlight code that triggered database queries in logs. 57 | config.active_record.verbose_query_logs = true 58 | 59 | # Suppress logger output for asset requests. 60 | config.assets.quiet = true 61 | 62 | # Raises error for missing translations. 63 | # config.i18n.raise_on_missing_translations = true 64 | 65 | # Annotate rendered view with file names. 66 | # config.action_view.annotate_rendered_view_with_filenames = true 67 | 68 | # Uncomment if you wish to allow Action Cable access from any origin. 69 | # config.action_cable.disable_request_forgery_protection = true 70 | end 71 | -------------------------------------------------------------------------------- /bin/bundle: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'bundle' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | require "rubygems" 12 | 13 | m = Module.new do 14 | module_function 15 | 16 | def invoked_as_script? 17 | File.expand_path($0) == File.expand_path(__FILE__) 18 | end 19 | 20 | def env_var_version 21 | ENV["BUNDLER_VERSION"] 22 | end 23 | 24 | def cli_arg_version 25 | return unless invoked_as_script? # don't want to hijack other binstubs 26 | return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update` 27 | bundler_version = nil 28 | update_index = nil 29 | ARGV.each_with_index do |a, i| 30 | if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN 31 | bundler_version = a 32 | end 33 | next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/ 34 | bundler_version = $1 35 | update_index = i 36 | end 37 | bundler_version 38 | end 39 | 40 | def gemfile 41 | gemfile = ENV["BUNDLE_GEMFILE"] 42 | return gemfile if gemfile && !gemfile.empty? 43 | 44 | File.expand_path("../../Gemfile", __FILE__) 45 | end 46 | 47 | def lockfile 48 | lockfile = 49 | case File.basename(gemfile) 50 | when "gems.rb" then gemfile.sub(/\.rb$/, gemfile) 51 | else "#{gemfile}.lock" 52 | end 53 | File.expand_path(lockfile) 54 | end 55 | 56 | def lockfile_version 57 | return unless File.file?(lockfile) 58 | lockfile_contents = File.read(lockfile) 59 | return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/ 60 | Regexp.last_match(1) 61 | end 62 | 63 | def bundler_version 64 | @bundler_version ||= 65 | env_var_version || cli_arg_version || 66 | lockfile_version 67 | end 68 | 69 | def bundler_requirement 70 | return "#{Gem::Requirement.default}.a" unless bundler_version 71 | 72 | bundler_gem_version = Gem::Version.new(bundler_version) 73 | 74 | requirement = bundler_gem_version.approximate_recommendation 75 | 76 | return requirement unless Gem::Version.new(Gem::VERSION) < Gem::Version.new("2.7.0") 77 | 78 | requirement += ".a" if bundler_gem_version.prerelease? 79 | 80 | requirement 81 | end 82 | 83 | def load_bundler! 84 | ENV["BUNDLE_GEMFILE"] ||= gemfile 85 | 86 | activate_bundler 87 | end 88 | 89 | def activate_bundler 90 | gem_error = activation_error_handling do 91 | gem "bundler", bundler_requirement 92 | end 93 | return if gem_error.nil? 94 | require_error = activation_error_handling do 95 | require "bundler/version" 96 | end 97 | return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION)) 98 | warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`" 99 | exit 42 100 | end 101 | 102 | def activation_error_handling 103 | yield 104 | nil 105 | rescue StandardError, LoadError => e 106 | e 107 | end 108 | end 109 | 110 | m.load_bundler! 111 | 112 | if m.invoked_as_script? 113 | load Gem.bin_path("bundler", "bundle") 114 | end 115 | -------------------------------------------------------------------------------- /app/controllers/trips_controller.rb: -------------------------------------------------------------------------------- 1 | class TripsController < ApplicationController 2 | before_action :authenticate 3 | 4 | def index 5 | @trips = Trip.where({ 6 | 'user_id': @user.id, 7 | 'multi_city': params['multi'] == "1" ? 1 : 0, 8 | }) 9 | end 10 | def new 11 | @museums = Museum.all() 12 | end 13 | def create 14 | params.permit! 15 | pt = params['trip'] 16 | if !pt || !pt['name'] || pt['name']=='' || !pt['date'] || pt['date']=='' 17 | return report_error('you should specify the name and the date of the trip') 18 | end 19 | pm = params['museum'] 20 | if !pm || pm.keys.size == 0 21 | return report_error("a trip should have at least one museum") 22 | end 23 | @trip = Trip.new(pt) 24 | @trip.user_id = @user.id 25 | n = Time.now.strftime("%Y-%m-%d") 26 | regex = /\d{4}-\d{2}-\d{2}/ 27 | if @trip.date !~ regex || @trip.date <= n 28 | return report_error('bad date, should be a future date formated like "2001-05-15"') 29 | end 30 | 31 | ks = pm.keys 32 | cities = Museum.where(id: ks).select('city').uniq 33 | @trip.multi_city = cities.size >= 2 ? 1 : 0 34 | 35 | @trip.save 36 | ks.each do |m| 37 | tm = TripMuseum.new({'trip_id':@trip.id, 'museum_id': m}) 38 | tm.save 39 | end 40 | redirect_to '/trips' 41 | end 42 | def show 43 | @trip = Trip.find(params[:id]) 44 | ms = TripMuseum.where({'trip_id': params['id']}).select('museum_id') 45 | @museums = Museum.where({'id': ms}) 46 | end 47 | 48 | def museums 49 | mids = Hash.new 50 | TripMuseum.where({'trip_id': params['id']}).each do |k| 51 | mids[k.museum_id] = 1 52 | end 53 | @trip = Trip.find(params[:id]) 54 | @museums = Array.new 55 | Museum.all.each do |museum| 56 | @museums << { 57 | "name": museum.name, 58 | "city": museum.city, 59 | "state": museum.state, 60 | "description": museum.description, 61 | "id": museum.id, 62 | "selected": mids[museum.id]==1, 63 | } 64 | end 65 | end 66 | def trip_museum_delete 67 | TripMuseum.where({'trip_id': params['tid'], 'museum_id': params['mid']}).destroy_all 68 | redirect_to '/trips/'+params['tid'] 69 | end 70 | def trip_museum_toggle 71 | if params['op'] == 'del' 72 | TripMuseum.where({'trip_id': params['tid'], 'museum_id': params['mid']}).destroy_all 73 | update_multi(params['tid']) 74 | else 75 | TripMuseum.new({'trip_id': params['tid'], 'museum_id': params['mid']}).save 76 | update_multi(params['tid']) 77 | end 78 | redirect_to '/trips/museums?id='+params['tid'] 79 | end 80 | def trip_delete 81 | TripMuseum.where({'trip_id': params['id']}).destroy_all 82 | Trip.find_by_id(params['id']).destroy 83 | redirect_to trips_path 84 | end 85 | 86 | private 87 | def report_error(msg) 88 | redirect_to '/trips/new', alert: msg 89 | end 90 | def update_multi(tid) 91 | ids = TripMuseum.where({'trip_id': tid}).select('museum_id') 92 | cities = Museum.where(id: ids).select('city').uniq 93 | trip = Trip.find_by_id(tid) 94 | trip.multi_city = cities.size >= 2 ? 1 : 0 95 | trip.save 96 | end 97 | def authenticate 98 | authenticate_or_request_with_http_basic do |username, password| 99 | user = User.find_by_email(username) 100 | if user && user.password == password 101 | @user = user 102 | end 103 | end 104 | end 105 | end 106 | -------------------------------------------------------------------------------- /config/environments/production.rb: -------------------------------------------------------------------------------- 1 | require "active_support/core_ext/integer/time" 2 | 3 | Rails.application.configure do 4 | # Settings specified here will take precedence over those in config/application.rb. 5 | 6 | # Code is not reloaded between requests. 7 | config.cache_classes = true 8 | 9 | # Eager load code on boot. This eager loads most of Rails and 10 | # your application in memory, allowing both threaded web servers 11 | # and those relying on copy on write to perform better. 12 | # Rake tasks automatically ignore this option for performance. 13 | config.eager_load = true 14 | 15 | # Full error reports are disabled and caching is turned on. 16 | config.consider_all_requests_local = false 17 | config.action_controller.perform_caching = true 18 | 19 | # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"] 20 | # or in config/master.key. This key is used to decrypt credentials (and other encrypted files). 21 | # config.require_master_key = true 22 | 23 | # Disable serving static files from the `/public` folder by default since 24 | # Apache or NGINX already handles this. 25 | config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present? 26 | 27 | # Compress CSS using a preprocessor. 28 | # config.assets.css_compressor = :sass 29 | 30 | # Do not fallback to assets pipeline if a precompiled asset is missed. 31 | config.assets.compile = false 32 | 33 | # Enable serving of images, stylesheets, and JavaScripts from an asset server. 34 | # config.asset_host = "http://assets.example.com" 35 | 36 | # Specifies the header that your server uses for sending files. 37 | # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache 38 | # config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" # for NGINX 39 | 40 | # Store uploaded files on the local file system (see config/storage.yml for options). 41 | config.active_storage.service = :local 42 | 43 | # Mount Action Cable outside main process or domain. 44 | # config.action_cable.mount_path = nil 45 | # config.action_cable.url = "wss://example.com/cable" 46 | # config.action_cable.allowed_request_origins = [ "http://example.com", /http:\/\/example.*/ ] 47 | 48 | # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. 49 | # config.force_ssl = true 50 | 51 | # Include generic and useful information about system operation, but avoid logging too much 52 | # information to avoid inadvertent exposure of personally identifiable information (PII). 53 | config.log_level = :info 54 | 55 | # Prepend all log lines with the following tags. 56 | config.log_tags = [ :request_id ] 57 | 58 | # Use a different cache store in production. 59 | # config.cache_store = :mem_cache_store 60 | 61 | # Use a real queuing backend for Active Job (and separate queues per environment). 62 | # config.active_job.queue_adapter = :resque 63 | # config.active_job.queue_name_prefix = "blog_production" 64 | 65 | config.action_mailer.perform_caching = false 66 | 67 | # Ignore bad email addresses and do not raise email delivery errors. 68 | # Set this to true and configure the email server for immediate delivery to raise delivery errors. 69 | # config.action_mailer.raise_delivery_errors = false 70 | 71 | # Enable locale fallbacks for I18n (makes lookups for any locale fall back to 72 | # the I18n.default_locale when a translation cannot be found). 73 | config.i18n.fallbacks = true 74 | 75 | # Don't log any deprecations. 76 | config.active_support.report_deprecations = false 77 | 78 | # Use default logging formatter so that PID and timestamp are not suppressed. 79 | config.log_formatter = ::Logger::Formatter.new 80 | 81 | # Use a different logger for distributed setups. 82 | # require "syslog/logger" 83 | # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new "app-name") 84 | 85 | if ENV["RAILS_LOG_TO_STDOUT"].present? 86 | logger = ActiveSupport::Logger.new(STDOUT) 87 | logger.formatter = config.log_formatter 88 | config.logger = ActiveSupport::TaggedLogging.new(logger) 89 | end 90 | 91 | # Do not dump schema after migrations. 92 | config.active_record.dump_schema_after_migration = false 93 | end 94 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | actioncable (7.0.4) 5 | actionpack (= 7.0.4) 6 | activesupport (= 7.0.4) 7 | nio4r (~> 2.0) 8 | websocket-driver (>= 0.6.1) 9 | actionmailbox (7.0.4) 10 | actionpack (= 7.0.4) 11 | activejob (= 7.0.4) 12 | activerecord (= 7.0.4) 13 | activestorage (= 7.0.4) 14 | activesupport (= 7.0.4) 15 | mail (>= 2.7.1) 16 | net-imap 17 | net-pop 18 | net-smtp 19 | actionmailer (7.0.4) 20 | actionpack (= 7.0.4) 21 | actionview (= 7.0.4) 22 | activejob (= 7.0.4) 23 | activesupport (= 7.0.4) 24 | mail (~> 2.5, >= 2.5.4) 25 | net-imap 26 | net-pop 27 | net-smtp 28 | rails-dom-testing (~> 2.0) 29 | actionpack (7.0.4) 30 | actionview (= 7.0.4) 31 | activesupport (= 7.0.4) 32 | rack (~> 2.0, >= 2.2.0) 33 | rack-test (>= 0.6.3) 34 | rails-dom-testing (~> 2.0) 35 | rails-html-sanitizer (~> 1.0, >= 1.2.0) 36 | actiontext (7.0.4) 37 | actionpack (= 7.0.4) 38 | activerecord (= 7.0.4) 39 | activestorage (= 7.0.4) 40 | activesupport (= 7.0.4) 41 | globalid (>= 0.6.0) 42 | nokogiri (>= 1.8.5) 43 | actionview (7.0.4) 44 | activesupport (= 7.0.4) 45 | builder (~> 3.1) 46 | erubi (~> 1.4) 47 | rails-dom-testing (~> 2.0) 48 | rails-html-sanitizer (~> 1.1, >= 1.2.0) 49 | activejob (7.0.4) 50 | activesupport (= 7.0.4) 51 | globalid (>= 0.3.6) 52 | activemodel (7.0.4) 53 | activesupport (= 7.0.4) 54 | activerecord (7.0.4) 55 | activemodel (= 7.0.4) 56 | activesupport (= 7.0.4) 57 | activestorage (7.0.4) 58 | actionpack (= 7.0.4) 59 | activejob (= 7.0.4) 60 | activerecord (= 7.0.4) 61 | activesupport (= 7.0.4) 62 | marcel (~> 1.0) 63 | mini_mime (>= 1.1.0) 64 | activesupport (7.0.4) 65 | concurrent-ruby (~> 1.0, >= 1.0.2) 66 | i18n (>= 1.6, < 2) 67 | minitest (>= 5.1) 68 | tzinfo (~> 2.0) 69 | addressable (2.8.1) 70 | public_suffix (>= 2.0.2, < 6.0) 71 | bindex (0.8.1) 72 | bootsnap (1.13.0) 73 | msgpack (~> 1.2) 74 | builder (3.2.4) 75 | capybara (3.37.1) 76 | addressable 77 | matrix 78 | mini_mime (>= 0.1.3) 79 | nokogiri (~> 1.8) 80 | rack (>= 1.6.0) 81 | rack-test (>= 0.6.3) 82 | regexp_parser (>= 1.5, < 3.0) 83 | xpath (~> 3.2) 84 | childprocess (4.1.0) 85 | concurrent-ruby (1.1.10) 86 | crass (1.0.6) 87 | debug (1.6.2) 88 | irb (>= 1.3.6) 89 | reline (>= 0.3.1) 90 | digest (3.1.0) 91 | erubi (1.11.0) 92 | globalid (1.0.0) 93 | activesupport (>= 5.0) 94 | i18n (1.12.0) 95 | concurrent-ruby (~> 1.0) 96 | importmap-rails (1.1.5) 97 | actionpack (>= 6.0.0) 98 | railties (>= 6.0.0) 99 | io-console (0.5.11) 100 | irb (1.4.1) 101 | reline (>= 0.3.0) 102 | jbuilder (2.11.5) 103 | actionview (>= 5.0.0) 104 | activesupport (>= 5.0.0) 105 | loofah (2.19.0) 106 | crass (~> 1.0.2) 107 | nokogiri (>= 1.5.9) 108 | mail (2.7.1) 109 | mini_mime (>= 0.1.1) 110 | marcel (1.0.2) 111 | matrix (0.4.2) 112 | method_source (1.0.0) 113 | mini_mime (1.1.2) 114 | mini_portile2 (2.8.0) 115 | minitest (5.16.3) 116 | msgpack (1.5.6) 117 | net-imap (0.2.3) 118 | digest 119 | net-protocol 120 | strscan 121 | net-pop (0.1.1) 122 | digest 123 | net-protocol 124 | timeout 125 | net-protocol (0.1.3) 126 | timeout 127 | net-smtp (0.3.1) 128 | digest 129 | net-protocol 130 | timeout 131 | nio4r (2.5.8) 132 | nokogiri (1.13.8) 133 | mini_portile2 (~> 2.8.0) 134 | racc (~> 1.4) 135 | public_suffix (5.0.0) 136 | puma (5.6.5) 137 | nio4r (~> 2.0) 138 | racc (1.6.0) 139 | rack (2.2.4) 140 | rack-test (2.0.2) 141 | rack (>= 1.3) 142 | rails (7.0.4) 143 | actioncable (= 7.0.4) 144 | actionmailbox (= 7.0.4) 145 | actionmailer (= 7.0.4) 146 | actionpack (= 7.0.4) 147 | actiontext (= 7.0.4) 148 | actionview (= 7.0.4) 149 | activejob (= 7.0.4) 150 | activemodel (= 7.0.4) 151 | activerecord (= 7.0.4) 152 | activestorage (= 7.0.4) 153 | activesupport (= 7.0.4) 154 | bundler (>= 1.15.0) 155 | railties (= 7.0.4) 156 | rails-dom-testing (2.0.3) 157 | activesupport (>= 4.2.0) 158 | nokogiri (>= 1.6) 159 | rails-html-sanitizer (1.4.3) 160 | loofah (~> 2.3) 161 | railties (7.0.4) 162 | actionpack (= 7.0.4) 163 | activesupport (= 7.0.4) 164 | method_source 165 | rake (>= 12.2) 166 | thor (~> 1.0) 167 | zeitwerk (~> 2.5) 168 | rake (13.0.6) 169 | redis (4.8.0) 170 | regexp_parser (2.5.0) 171 | reline (0.3.1) 172 | io-console (~> 0.5) 173 | rexml (3.2.5) 174 | rubyzip (2.3.2) 175 | selenium-webdriver (4.4.0) 176 | childprocess (>= 0.5, < 5.0) 177 | rexml (~> 3.2, >= 3.2.5) 178 | rubyzip (>= 1.2.2, < 3.0) 179 | websocket (~> 1.0) 180 | sprockets (4.1.1) 181 | concurrent-ruby (~> 1.0) 182 | rack (> 1, < 3) 183 | sprockets-rails (3.4.2) 184 | actionpack (>= 5.2) 185 | activesupport (>= 5.2) 186 | sprockets (>= 3.0.0) 187 | sqlite3 (1.5.0) 188 | mini_portile2 (~> 2.8.0) 189 | stimulus-rails (1.1.0) 190 | railties (>= 6.0.0) 191 | strscan (3.0.4) 192 | thor (1.2.1) 193 | timeout (0.3.0) 194 | turbo-rails (1.1.1) 195 | actionpack (>= 6.0.0) 196 | activejob (>= 6.0.0) 197 | railties (>= 6.0.0) 198 | tzinfo (2.0.5) 199 | concurrent-ruby (~> 1.0) 200 | web-console (4.2.0) 201 | actionview (>= 6.0.0) 202 | activemodel (>= 6.0.0) 203 | bindex (>= 0.4.0) 204 | railties (>= 6.0.0) 205 | webdrivers (5.0.0) 206 | nokogiri (~> 1.6) 207 | rubyzip (>= 1.3.0) 208 | selenium-webdriver (~> 4.0) 209 | websocket (1.2.9) 210 | websocket-driver (0.7.5) 211 | websocket-extensions (>= 0.1.0) 212 | websocket-extensions (0.1.5) 213 | xpath (3.2.0) 214 | nokogiri (~> 1.8) 215 | zeitwerk (2.6.0) 216 | 217 | PLATFORMS 218 | ruby 219 | 220 | DEPENDENCIES 221 | bootsnap 222 | capybara 223 | debug 224 | importmap-rails 225 | jbuilder 226 | nokogiri 227 | puma (~> 5.0) 228 | rails (~> 7.0.4) 229 | redis (~> 4.0) 230 | selenium-webdriver 231 | sprockets-rails 232 | sqlite3 (~> 1.4) 233 | stimulus-rails 234 | turbo-rails 235 | tzinfo-data 236 | web-console 237 | webdrivers 238 | 239 | RUBY VERSION 240 | ruby 2.7.2p137 241 | 242 | BUNDLED WITH 243 | 2.1.4 244 | -------------------------------------------------------------------------------- /db/seeds.rb: -------------------------------------------------------------------------------- 1 | 2 | Museum.create([ 3 | {'name':'Frank Bette Center for the Arts','city':'Alameda','state':'California','description':'The Frank Bette Center for the Arts is a creative hub for the community, providing artistic growth and appreciation through a variety of activities and programs. Fulfilling Frank Bette"s dream of creating "a place where creative people could have meetings, readings, showings and other doings." To enhance that dream by being an advocate and resource for all to create, enjoy and appreciate the arts. FBCA is the leading catalyst for community development through art.'}, 4 | {'name':'C.N. Gorman Museum','city':'Davis','state':'California','description':'The C.N. Gorman Museum is a portal for Indigenous and non-Indigenous visionaries. It is a space where perceptions of contemporary Native American, Indigenous, and First Nations art are intellectually recalibrated. Exhibiting artists challenge critical issues of borders, stereotypes, and identity by speaking eloquently through their artistic medium of choice.'}, 5 | {'name':'Design Gallery/Design Alliance','city':'Davis','state':'California','description':'Design Gallery/Design Alliance in Davis, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 6 | {'name':'Memorial Union Art Gallery','city':'Davis','state':'California','description':'Memorial Union Art Gallery in Davis, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 7 | {'name':'Richard L. Nelson Gallery, U.C. Davis','city':'Davis','state':'California','description':'Richard L. Nelson Gallery, U.C. Davis in Davis, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 8 | {'name':'City of Lancaster Museum/Art Gallery','city':'Lancaster','state':'California','description':'This facility presents a variety of exhibitions which are planned by staff. It showcases seven to nine rotating shows annually; an exhibit can range from 4 to 12 weeks in duration. The Museum/Art Gallery features local, national, and international art and historical exhibitions from our collections, private lenders, and other museums. Our shows are accompanied with free public receptions and lectures.'}, 9 | {'name':'Palo Alto Art Center','city':'Palo Alto','state':'California','description':'Palo Alto Art Center in Palo Alto, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 10 | {'name':'Bowers Museum','city':'Santa Ana','state':'California','description':'The Bowers Museum of Cultural Art is one of California"s largest and finest museums. Its permanent collection includes more than 130,000 objects from such diverse areas as African, South Pacific, Asian, Native American, Pre-Columbian, and Californian. In addition to its permanent collection, the Museum also presents several special exhibitions each year as well as a variety of events and programs, including films, lectures, concerts, guided tours, talks, and family programs.'}, 11 | {'name':'Santa Ana College Art Gallery','city':'Santa Ana','state':'California','description':'Santa Ana College Art Gallery in Santa Ana, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 12 | {'name':'Soka University Art Gallery','city':'Aliso Viejo','state':'California','description':'Welcome to Soka University"s beautiful two-story, 8,000 square foot Founder"s Hall Art Gallery. Please see our calendar on our university website for upcoming shows and exhibitions.'}, 13 | {'name':'Downey Museum Of Art','city':'Downey','state':'California','description':'IMPORTANT CHANGE: The Downey Museum of Art is no longer located at 10419 Rives Avenue Downey Ca 90241.'}, 14 | {'name':'Lincoln Arts & Cultural Foundation.','city':'Lincoln','state':'California','description':'Lincoln Arts & Cultural Foundation. in Lincoln, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 15 | {'name':'Paradise Art Center','city':'Paradise','state':'California','description':'Paradise Art Center in Paradise, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 16 | {'name':'Carriage & Western Art Museum Of Santa Barbara','city':'Santa Barbara','state':'California','description':'Museum seeks to preserve and restore transportation methods of yesteryear. The collection includes over 80 carriages and wagons. Western saddles, tack and Western art are also displayed.'}, 17 | {'name':'Padre"s Quarters','city':'Santa Barbara','state':'California','description':'Padre"s Quarters in Santa Barbara, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 18 | {'name':'Santa Barbara Museum Of Art','city':'Santa Barbara','state':'California','description':'Santa Barbara Museum Of Art in Santa Barbara, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 19 | {'name':'Susan Quinlan Doll & Teddy Bear Museum & Library','city':'Santa Barbara','state':'California','description':'3,000 of the collection"s historical and contemporary dolls and teddy bears are on display at the current time. Many of the items are limited editions or one-of-a-kind creations by some of the world"s leading doll and teddy bear artists. Visitors love the way the items are displayed in large glass-fronted cases, as well as the beautiful murals in the tea area where customers can enjoy a complimentary cup of tea or coffee.'}, 20 | {'name':'University Art Museum, UCSB','city':'Santa Barbara','state':'California','description':'University Art Museum, UCSB in Santa Barbara, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 21 | {'name':'Modoc County Historical Museum','city':'Alturas','state':'California','description':'Located in Alturas, it contains several exhibits pertaining to the culture and history of Modoc County in California. Exhibits range from prehistoric cultures to modern residents of the surrounding region. Natural history including mammoth bone, and a taxidermist collection of several local species. A gun collection of over 200 firearms all used and collected by local people.'}, 22 | {'name':'Brown Trout Gallery','city':'Dunsmuir','state':'California','description':'Brown Trout Gallery in Dunsmuir, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 23 | {'name':'American Museum of Straw Art','city':'Long Beach','state':'California','description':'The American Museum of Straw Art shall exist to foster an understanding of the straw arts in all of its complexities, through various exhibitions of its cultural significance, folklore, history, technique, and shall, therefore, act as an agent of research, preservation and education to insure the survival and continuation of this artistic medium. The museum shall further acquire international examples of straw art that are in keeping with these values.'}, 24 | {'name':'Long Beach Museum Of Art','city':'Long Beach','state':'California','description':'Long Beach Museum Of Art in Long Beach, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 25 | {'name':'Long Beach Museum of Art Video Annex','city':'Long Beach','state':'California','description':'Long Beach Museum of Art Video Annex in Long Beach, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 26 | {'name':'Museum of Latin American Art','city':'Long Beach','state':'California','description':'MoLAA"s mission is to educate the public about contemporary Latin American fine art (by artists who have lived and worked in Latin America since WWII) through the presentation of a significant permanent collection, dynamic exhibitions and related cultural and educational programs.'}, 27 | {'name':'University Art Museum, CSULB','city':'Long Beach','state':'California','description':'University Art Museum, CSULB in Long Beach, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 28 | {'name':'Art Center College of Design Galleries','city':'Pasadena','state':'California','description':'Art Center College of Design Galleries in Pasadena, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 29 | {'name':'Finnish Folk Art Museum','city':'Pasadena','state':'California','description':'Finnish Folk Art Museum in Pasadena, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 30 | {'name':'Norton Simon Museum','city':'Pasadena','state':'California','description':'Norton Simon Museum features works from the 14th century up to contemporary works of art from 20th century artists.'}, 31 | {'name':'Pacific Asia Museum','city':'Pasadena','state':'California','description':'Established in 1971, Pacific Asia Museum is one of only four museums in the United States exclusively dedicated to the arts of Asia and the Pacific Islands. The museum houses 5,000 years of artistic expression from across Asia and the Pacific in a California historic landmark building. Visitors will enjoy a mix of contemporary and historic exhibitions and a wide variety of enriching public programs all year round.'}, 32 | {'name':'Pasadena Museum of Art','city':'Pasadena','state':'California','description':'Pasadena Museum of Art in Pasadena, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 33 | {'name':'Mission Santa Clara','city':'Santa Clara','state':'California','description':'We welcome visitors to our historic and beautiful campus. Our campus slideshow can give you a great preview of many campus sites, including the Mission Santa Clara, the Mission Gardens, the Center for Performing Arts, and the de Saisset Museum.'}, 34 | {'name':'Triton Museum Of Art','city':'Santa Clara','state':'California','description':'The Museum collects and exhibits contemporary and historical works with an emphasis on artist of the Greater Bay Area. The permanent collection includes 19th and 20th century American and Southwest Native American art.'}, 35 | {'name':'Anaheim Muzeo & Heritage Center','city':'Anaheim','state':'California','description':'"The Anaheim Muzeo shows what can be done to restore an abused old building to its former glory. Built and dedicated in 1908, the Muzeo structure is the only surviving Carnegie library in Orange County, and itâs on the National Register of Historic Places. The Muzeo opened in October, 2007, and includes the former Anaheim History Room as the Anaheim Heritage Center and Disney Resort Reading Room.'}, 36 | {'name':'Grossmont College Hyde Gallery','city':'El Cajon','state':'California','description':'Grossmont College Hyde Gallery in El Cajon, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 37 | {'name':'Helix Community Science Center','city':'Los Altos','state':'California','description':'Nestled amid Los Altos" boutiques, salons and eateries, Helix"s sleek, two-story storefront includes 5,000 square feet of exhibit rooms, gift shop and teaching/meeting space. Many of the 25 exhibits traveled down from the Exploratorium mothership and include popular standbys like an electromagnetic-powered ring toss, a windblown "dunescape" and various brain-fooling optical illusions.'}, 38 | {'name':'Museum Of Ancient & Modern Art','city':'Penn Valley','state':'California','description':'Museum Of Ancient & Modern Art in Penn Valley, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 39 | {'name':'Art Museum of Santa Cruz County','city':'Santa Cruz','state':'California','description':'Art Museum of Santa Cruz County in Santa Cruz, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 40 | {'name':'Eloise Pickard Smith Gallery - Cowell College','city':'Santa Cruz','state':'California','description':'Eloise Pickard Smith Gallery - Cowell College in Santa Cruz, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 41 | {'name':'Mary Porter Sesnon Gallery','city':'Santa Cruz','state':'California','description':'Mary Porter Sesnon Gallery in Santa Cruz, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 42 | {'name':'Museum of Art & History, McPherson Center','city':'Santa Cruz','state':'California','description':'The Museum of Art & History @ the McPherson Center is a non-profit educational institution that promotes a greater understanding of contemporary art and the history of Santa Cruz County through its exhibitions, collections, and programs for the benefit of residents and visitors to Santa Cruz County.'}, 43 | {'name':'Antioch Lynn House Gallery','city':'Antioch','state':'California','description':'Antioch Lynn House Gallery in Antioch, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 44 | {'name':'California Center for the Arts, Escondido','city':'Escondido','state':'California','description':'The Museum at the California Center for the Arts, Escondido is an inviting 9,000-square-foot exhibition space that boasts three galleries, a sculpture court, and a museum store.'}, 45 | {'name':'San Diego Childrenâs Discovery Museum','city':'Escondido','state':'California','description':'The mission of the San Diego Children"s Discovery Museum is to inspire children to learn about our world through exploration, imagination, and experimentation.'}, 46 | {'name':'The Autry Museum of the American West','city':'Los Angeles','state':'California','description':'In addition to ongoing and special exhibitions, the Autry continues to provide a wide range of programs, special activities, and events designed for a variety of interests and all ages.'}, 47 | {'name':'Barnsdall Jr. Arts Center','city':'Los Angeles','state':'California','description':'Barnsdall Jr. Arts Center in Los Angeles, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 48 | {'name':'Corita Art Center, Immaculate Heart Community','city':'Los Angeles','state':'California','description':'The Corita Art Center is a gallery and archive dedicated to preserving and promoting the art of Corita Kent, the spirited artist, activist, teacher and former nun. We exhibit Corita"s bold serigraphs here and facilitate exhibitions elsewhere, also offer educational programs, research opportunities and hundreds of Corita"s original signed serigraphs and watercolors for sale.'}, 49 | {'name':'Craft & Folk Art Museum','city':'Los Angeles','state':'California','description':'To cross the threshold of the Craft & Folk Art Museum is to enter a realm of life-affirming, culturally-nourishing, mind-expanding possibilities. It is a collaborative work in process, functioning as catalyst, bridge, and magic mirror. It draws together the passions, discoveries and dreams of collectors, curators and designers. It combines traditional and folk art with the creations of contemporary craft artists.'}, 50 | {'name':'Cultural Arts Institute Of Inglewood','city':'Los Angeles','state':'California','description':'Cultural Arts Institute Of Inglewood in Los Angeles, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 51 | {'name':'Elizabeth Holmes Fisher Gallery-U.S.C.','city':'Los Angeles','state':'California','description':'Elizabeth Holmes Fisher Gallery-U.S.C. in Los Angeles, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 52 | {'name':'Fowler Museum at UCLA','city':'Los Angeles','state':'California','description':''}, 53 | {'name':'Frederick S. Wright Art Gallery','city':'Los Angeles','state':'California','description':'Frederick S. Wright Art Gallery in Los Angeles, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 54 | {'name':'Grunwald Center for the Graphic Arts at UCLA','city':'Los Angeles','state':'California','description':'The center focuses on graphic arts. The collection includes over 5000 prints and drawings from the Renaissance through the 18th century. The collection also has more than 35, 000 prints, drawing, photographs and artist"s books.'}, 55 | {'name':'Grunwald Graphic Art Center','city':'Los Angeles','state':'California','description':'Grunwald Graphic Art Center in Los Angeles, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 56 | {'name':'J. Paul Getty Museum','city':'Los Angeles','state':'California','description':'J. Paul Getty Museum in Los Angeles, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 57 | {'name':'Junior Arts Center Gallery','city':'Los Angeles','state':'California','description':'Junior Arts Center Gallery in Los Angeles, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 58 | {'name':'L.A.C.E.','city':'Los Angeles','state':'California','description':'L.A.C.E. in Los Angeles, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 59 | {'name':'Laband Art Gallery, Loyola Marymount University','city':'Los Angeles','state':'California','description':'Laband Art Gallery, Loyola Marymount University in Los Angeles, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 60 | {'name':'The Latino Museum Of History, Art and Culture','city':'Los Angeles','state':'California','description':'The Latino Museum Of History, Art and Culture in Los Angeles, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 61 | {'name':'Los Angeles Art Association/Gallery 825','city':'Los Angeles','state':'California','description':'A pioneer in promoting unknown emerging artists, as well as already established artist, the LA Art Associations goal has been to encourage contemporary So. CA artists and to afford them the opportunity to exhibit their work in a unique art space.'}, 62 | {'name':'Los Angeles Municipal Art Gallery','city':'Los Angeles','state':'California','description':'Los Angeles Municipal Art Gallery in Los Angeles, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 63 | {'name':'Maxwell H. Dubin/Alfred Wolf Exhibit Center','city':'Los Angeles','state':'California','description':'Maxwell H. Dubin/Alfred Wolf Exhibit Center in Los Angeles, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 64 | {'name':'Museum Of African American Art','city':'Los Angeles','state':'California','description':'Museum Of African American Art in Los Angeles, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 65 | {'name':'Museum Of Contemporary Art, Los Angeles','city':'Los Angeles','state':'California','description':'Museum Of Contemporary Art, Los Angeles in Los Angeles, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 66 | {'name':'Wildlife and Mining Artifacts Museum','city':'Pine Grove','state':'California','description':'Wildlife and Mining Artifacts Museum in Pine Grove, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 67 | {'name':'Santa Maria Museum Art Center','city':'Santa Maria','state':'California','description':'Santa Maria Museum Art Center in Santa Maria, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 68 | {'name':'Cabrillo College Gallery','city':'Aptos','state':'California','description':'Cabrillo College Gallery in Aptos, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 69 | {'name':'College of the Redwoods Art Gallery','city':'Eureka','state':'California','description':'College of the Redwoods Art Gallery in Eureka, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 70 | {'name':'Romano Gabriel"s Wooden Sculpture Garden','city':'Eureka','state':'California','description':'Romano Gabriel"s Wooden Sculpture Garden in Eureka, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 71 | {'name':'Wildling Art Museum','city':'Los Olivos','state':'California','description':'The Wildling Art Museum is an educational institution dedicated to presenting the art of America"s wilderness for that participants of all ages gain a greater appreciation of the art and a better understanding of the importance of preserving our natural heritage.'}, 72 | {'name':'Los Medanos College Art Gallery','city':'Pittsburg','state':'California','description':'Los Medanos College Art Gallery in Pittsburg, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 73 | {'name':'California Heritage Museum','city':'Santa Monica','state':'California','description':'The building that houses the California Heritage Museumâs exhibits is as interesting and unique as the exhibits themselves.'}, 74 | {'name':'Santa Monica Museum of Art - Bergamot Station','city':'Santa Monica','state':'California','description':'Through its exhibitions, education, and outreach programs, SMMoA fosters diversity, innovation, and discovery in contemporary artâlocal, national, and international. The Museum celebrates: expanding boundaries; exploring individual differences; enhancing public knowledge of art; and broadening the art experience. SMMoA is a collection of ideas.'}, 75 | {'name':'Reese Bullen Gallery','city':'Arcata','state':'California','description':'Reese Bullen Gallery in Arcata, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 76 | {'name':'Triangle Tattoo and Museum','city':'Fort Bragg','state':'California','description':'yes-presently exhibiting in Astoria Oregon at the Columbia River Maritime Museum: "Tattoo, The Art of the Sailor". 77 | At Mystic Seaport Museum in Mystic Conneticut: "Skin and Bones" Exhibit....a traveling exhibit from Philadelphia"s Independence Seaport Museum presenting over two centuries of ancient and mordern tattooing tools, flash, tattoo related art, historic photographs and artifacts to tell the story of how tattoos entered the sailor"s life and what they meant and why they got them.'}, 78 | {'name':'Frederick R. Weisman Museum of Art, Pepperdine Univ.','city':'Malibu','state':'California','description':'The Museum includes works by Christo, John McLaughlin, Alison Sarr and Donald Teague.'}, 79 | {'name':'Wignall Museum of Contemporary Art','city':'Rancho Cucamonga','state':'California','description':'The Wignall Museum of Contemporary Art is located on the main campus of Chaffey College situated in the City of Rancho Cucamonga in Southern California. The Chaffey Community College District serves a population of 650,000 residents of the Inland Valley including the cities of Chino, Chino Hills, Fontana, Montclair, Ontario, Rancho Cucamonga and Upland. 80 | 81 | The Wignall Museum of Contemporary Art presents four to five exhibitions a year.'}, 82 | {'name':'Santa Rosa Jr. College Art Gallery','city':'Santa Rosa','state':'California','description':'Santa Rosa Jr. College Art Gallery in Santa Rosa, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 83 | {'name':'Sonoma County Museum','city':'Santa Rosa','state':'California','description':'The Museum"s purpose is to collect, preserve and exhibit the material culture of Sonoma County and the surrounding region of Northern California. Exhibits constantly change and cover a wide spectrum in time and subject.'}, 84 | {'name':'SRJC Museum','city':'Santa Rosa','state':'California','description':'The SRJC Museum has a collection of more than 4000 cataloged items, including art objects and archival materials such as photographs. Traditional Native American art makes up the greatest portion of the collection, with all of the North American Indian culture areas represented. Art forms include ceramics, basketry, beadwork, sculpture, textiles, and jewelry.'}, 85 | {'name':'Bakersfield Museum Of Art','city':'Bakersfield','state':'California','description':'Bakersfield Museum Of Art in Bakersfield, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 86 | {'name':'Ohlone College Gallery','city':'Fremont','state':'California','description':'Ohlone College Gallery in Fremont, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 87 | {'name':'Martinez Museum','city':'Martinez','state':'California','description':'Martinez Museum in Martinez, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 88 | {'name':'Randsburg Desert Museum','city':'Randsburg','state':'California','description':'The Rand Desert Museum is a non-profit organization dedicated to preserving and protecting the cultural and architectural history of the Rand Mining District and adjacent histoic sites in the Upper Mojave Desert Region of California. Information about the communites of Randsburg, Johannesburg, Red Moutain ( Osdick ), Atolia, Garlock, Saltdale, and Cantil may be found at the museum. In addition we have information and displays about Burro Schmidts Tunnel and other mines in the area.'}, 89 | {'name':'Sebastopol Center for the Arts','city':'Sebastopol','state':'California','description':'Sebastopol Center for the Arts is one of the most vibrant art organizations in Northern California, offering a full spectrum of activities in visual, performing, literary and film arts. We foster an environment where artists are supported in their work, and the arts are treasured by a thriving community.'}, 90 | {'name':'Berkeley Art Center','city':'Berkeley','state':'California','description':'Art inspires. The Berkeley Art Center is the City of Berkeley"s art gallery, charged with serving our city, the Bay Area and beyond as a forum for the art of our time in all media. We celebrate art--complex, beautiful, and provocative--through compelling exhibitions, performances and educational opportunities in an exploration of the social and political concerns of our diverse community. Be inspired.'}, 91 | {'name':'Berkeley Art Museum & Pacific Film Archive','city':'Berkeley','state':'California','description':'Berkeley Art Museum & Pacific Film Archive in Berkeley, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 92 | {'name':'Department of Museum Studies, John F. Kennedy University','city':'Berkeley','state':'California','description':'The Museum Studies program at John F. Kennedy University is one of the nationâs most recognized museum studies programs and is committed to preparing museum professionals to meet the demands of an increasingly complex profession. Todayâs museum professionals must have the knowledge and skills to serve diverse audiences, create collaborative partnerships with communities, design innovative exhibitions and programs, and develop a sustainable financial base of support.'}, 93 | {'name':'Judah L. Magnes Memorial Museum','city':'Berkeley','state':'California','description':'Jewish artwork'}, 94 | {'name':'Kala Institute Art Gallery','city':'Berkeley','state':'California','description':'Artists come from all over the world to create at the Kala Institute. The Gallery displays the artists" work temporarily and also shows pieces from their permanent collection.'}, 95 | {'name':'California Agricultural Museum','city':'Fresno','state':'California','description':'agricultural equipment of the past, present and future'}, 96 | {'name':'Fresno Art Museum','city':'Fresno','state':'California','description':'The Fresno Art Museum collects, preserves, and exhibits to the public tangible objects valuable to art and history. Exhibitions include a wide range of contemporary as well as modern works by local, national and international artists.'}, 97 | {'name':'Fresno Historical Society','city':'Fresno','state':'California','description':'The Fresno Historical Society Archives welcomes the use of its collections. The mission of an Archives includes two equally important components. In addition to providing access to primary source material for study and research, an Archives is a repository that is charged with the preservation of primary source materials of all kinds.'}, 98 | {'name':'Susan Cummins Gallery','city':'Mill Valley','state':'California','description':'Susan Cummins Gallery in Mill Valley, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 99 | {'name':'Elverhoj Museum of History & Art','city':'Solvang','state':'California','description':'Elverhøj Museum of History & Art occupies a historic hand-crafted structure built in a style derived from the large farmhouses of 18th century Denmark.'}, 100 | {'name':'Bolinas Gallery','city':'Bolinas','state':'California','description':'Bolinas Gallery in Bolinas, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 101 | {'name':'Fullerton Museum Center','city':'Fullerton','state':'California','description':'Fullerton Museum Center in Fullerton, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 102 | {'name':'Main Art Gallery - CSUF','city':'Fullerton','state':'California','description':'Main Art Gallery - CSUF in Fullerton, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 103 | {'name':'Muckenthaler Cultural Center','city':'Fullerton','state':'California','description':'Muckenthaler Cultural Center in Fullerton, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 104 | {'name':'Center For Photographic. Arts','city':'Monterey','state':'California','description':'Center For Photographic. Arts in Monterey, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 105 | {'name':'Monterey Museum Of Art','city':'Monterey','state':'California','description':'The museum"s permanent collection includes California art, photography, Asian art, international folk art and features significant bodies of work from Armin Hansen, William Ritschel, Ansel Adams and Edward Weston'}, 106 | {'name':'Museum of Monterey (MOM)','city':'Monterey','state':'California','description':'The Museum of Monterey is a world class multi media exhibition space. Our first floor is dedicated to rotating exhibitions of a contemporary nature and our second floor is dedicated to Monterey history and our permanent collection.'}, 107 | {'name':'Historical Glass Museum','city':'Redlands','state':'California','description':'Nine rooms of glassware by American manufacturers for over two centuries. Guided tours during weekdays by arrangement. Entry by donation and gift shop to support the museum'}, 108 | {'name':'Iris & B. Gerald Cantor Center for Visual Arts','city':'Stanford','state':'California','description':'After being closed for ten years, the Stanford University Museum of Art is finally ready to re-open. The newly rededicated Cantor Arts Center will offer a new home for the collections, exhibitions and academic research.'}, 109 | {'name':'City of Brea Gallery','city':'Brea','state':'California','description':'City of Brea Gallery in Brea, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 110 | {'name':'Brand Gallery','city':'Glendale','state':'California','description':'Brand Gallery in Glendale, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 111 | {'name':'Saint Mary"s College Museum of Art','city':'Moraga','state':'California','description':'The Hearst Art Galley is known for diverse, museum-quality exhibitions, publications and educational programs. The Gallery has over 2000 works in its permanent collection. Temporary exhibitions of contemporary, ethnographic and international subjects.'}, 112 | {'name':'Richmond Art Center','city':'Richmond','state':'California','description':'Richmond Art Center in Richmond, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 113 | {'name':'Alan Short Gallery','city':'Stockton','state':'California','description':'Alan Short Gallery in Stockton, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 114 | {'name':'Delta College Clever Planetarium and Earth Science Center','city':'Stockton','state':'California','description':'The Clever Planetarium completed and extensive remodeling and refurbishing program earlier this year. New items such as âSciDome HDâMagic PlanetâMagic Planet is new technology,âWe have one of the few in California.'}, 115 | {'name':'The Haggin Museum','city':'Stockton','state':'California','description':'The Haggin Museum, an art and history museum located in Stockton, has been referred to by Sunset magazine as "one of the undersung gems of California." The impressive brick building has stood in the center of Stocktonâs lush Victory Park for 79 years, but itâs whatâs on the inside that makes it worth visiting.'}, 116 | {'name':'L. H. Horton Jr. Art Gallery','city':'Stockton','state':'California','description':'The LH Horton Jr Gallery is a fine arts exhibition program within the Visual Arts Department of San Joaquin Delta College, and a venue of Delta Center for the Arts. Six exhibitions are presented annually, including a series of three juried exhibitions (ceramics, painting & sculpture, and photography); biennial faculty and alumni shows, a thematic small group show, and an annual student art show.'}, 117 | {'name':'Mexican Heritage Center and Gallery','city':'Stockton','state':'California','description':'A museum with exhibits on local Hispanic history and art.'}, 118 | {'name':'Burlingame Museum of Pez Memorabilia','city':'Burlingame','state':'California','description':'Austrian candy executive Eduard Haas invented Pez candy in 1927. The original little candy bricks were peppermint. In fact, the word Pez is an abbreviation of the German word for peppermint.(PfeffErminZ) Pez candy was originally sold in small tins. The first Pez dispenser appeared around 1950.'}, 119 | {'name':'Peninsula Museum of Art','city':'Burlingame','state':'California','description':'Fine Art Museum; rotating exhibitions of 2D and 3D art by extraordinary artists of San Francisco"s Greater Bay Area. Includes art reference library (2000+ books) and 30 studios for a diverse group of professional artists.'}, 120 | {'name':'Ansel Adams Gallery','city':'Gonzales','state':'California','description':'Ansel Adams Gallery in Gonzales, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 121 | {'name':'American Center for Wine, Food & the Arts','city':'Napa','state':'California','description':'American Center for Wine, Food & the Arts in Napa, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 122 | {'name':'Riverside Art Museum','city':'Riverside','state':'California','description':'Riverside Art Museum in Riverside, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 123 | {'name':'Riverside Community College Art Gallery','city':'Riverside','state':'California','description':'Riverside Community College Art Gallery in Riverside, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 124 | {'name':'Riverside Metropolitan Museum','city':'Riverside','state':'California','description':''}, 125 | {'name':'Sweeney Art Gallery, U.C. Riverside','city':'Riverside','state':'California','description':'Sweeney Art Gallery, U.C. Riverside in Riverside, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 126 | {'name':'UCR / CA Museum Of Photography','city':'Riverside','state':'California','description':'UCR / CA Museum Of Photography in Riverside, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 127 | {'name':'Nethercutt Collection','city':'Sylmar','state':'California','description':'Nethercutt Collection in Sylmar, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 128 | {'name':'McArthur-Burney Falls Memorial State Park','city':'Burney','state':'California','description':'natural history'}, 129 | {'name':'Earth Planet Museum','city':'Grass Valley','state':'California','description':'Earth Planet Museum in Grass Valley, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 130 | {'name':'William S. Hart Museum','city':'Newhall','state':'California','description':'William S. Hart Museum in Newhall, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 131 | {'name':'University Art Gallery, CSUS','city':'Rohnert Park','state':'California','description':'University Art Gallery, CSUS in Rohnert Park, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 132 | {'name':'Chumash Indian Museum','city':'Thousand Oaks','state':'California','description':'The goal at the center is to provide the public with an awareness of the Chumash People and their historical, cultural, material and present day interactions throughout Southern California. A blend of resources are used to accommodate a wide variety of interests!'}, 133 | {'name':'Sharpsteen Museum','city':'Calistoga','state':'California','description':'The Sharpsteen Museum is a unique historical museum. In addition to its many historical exhibits, it uses extensive dioramas to depict Calistoga at it height as the elegant 1860s Hot Springs resort developed by entrepreneur and pioneer Sam Brannan.'}, 134 | {'name':'Orange County Art Museum','city':'Newport Beach','state':'California','description':'Orange County Art Museum in Newport Beach, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 135 | {'name':'Crocker Art Museum','city':'Sacramento','state':'California','description':'The Crocker Art Museum was the first art museum in the Western U.S. and is now one of the leading art museums in California. Established in 1885, the Museum features one of the countryâs finest collections of Californian art, exceptional holdings of master drawings, a comprehensive collection of international ceramics, as well as European, Asian, African, and Oceanic art. The centerpiece of the Museum is the gallery building.'}, 136 | {'name':'Gregory Kondos Art Gallery','city':'Sacramento','state':'California','description':'Gregory Kondos Art Gallery in Sacramento, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 137 | {'name':'La Raza/Galeria Posada','city':'Sacramento','state':'California','description':''}, 138 | {'name':'Robert Else Gallery','city':'Sacramento','state':'California','description':'Robert Else Gallery in Sacramento, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 139 | {'name':'Bachelor Officers" Quarters at Angel Island','city':'Tiburon','state':'California','description':'Bachelor Officers" Quarters at Angel Island in Tiburon, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 140 | {'name':'West Garrison Officers" Quarters and Bakehouse','city':'Tiburon','state':'California','description':'West Garrison Officers" Quarters and Bakehouse in Tiburon, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 141 | {'name':'Children"s Museum of Art & Imagination','city':'Campbell','state':'California','description':'Children"s Museum of Art & Imagination in Campbell, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 142 | {'name':'Coastal Arts League Museum','city':'Half Moon Bay','state':'California','description':'The Coastal Arts League is a non-profit corporation founded in 1979 to develop and support creative artistic talent in the Coastside Community. The Coastal Arts League maintains a free Museum and a Museum Store to show-case the talent of Coastside artists and art groups. Monthly exhibitions in the Museum may be the work of individual artists or other, regional, art organizations.'}, 143 | {'name':'Sierra Mono Indian Museum','city':'North Fork','state':'California','description':'Permanent collections include a wide variety of Native American baskets and cultural artifacts. Also on display is the Tettleton Wildlife Diorama Collection consisting of over 100 freestanding taxidermy animals of North America and Asia. Other collections include historical photographs, cultural items, beadwork and weapons.'}, 144 | {'name':'Salinas Community Center','city':'Salinas','state':'California','description':'Salinas Community Center in Salinas, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 145 | {'name':'Joslyn Fine Arts Gallery','city':'Torrance','state':'California','description':'Joslyn Fine Arts Gallery in Torrance, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 146 | {'name':'Center For Photographic Art','city':'Carmel','state':'California','description':'Center For Photographic Art in Carmel, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 147 | {'name':'The Clark Center for Japanese Art and Culture','city':'Hanford','state':'California','description':'Through a significant gift of Japanese paintings from the Clarks, the Clark Center"s collection was established in October of 1995. Nearly one hundred and sixty hanging scrolls, thirty pairs or single screens, ten works of sculpture mainly from the Kamakura period (1185-1333), and a number of pieces of decorative art primarily from the Meiji period (1868-1912) are housed at the Center. The gallery spaces allow for approximately ten percent of the collection to be on display at one time.'}, 148 | {'name':'Art Gallery, CSUN','city':'Northridge','state':'California','description':'The gallery program emphasizes art from international and multi-cultural perspectives, particularly concentrating on art of the Pacific Rim.'}, 149 | {'name':'AICAIE, The Visual Arts Gallery','city':'San Bernardino','state':'California','description':'At our campus, we offer Bachelor of Science degree programs in Culinary Management, Fashion & Retail Management, Game Art & Design, Graphic Design, Interior Design, Media Arts & Animation, and Web Design & Interactive Media. We also offer a Bachelor of Fine Arts degree in Fashion Design, and Associate degree programs in Culinary Arts and Baking & Pastry, and Graphic Design.'}, 150 | {'name':'Robert and Frances Fullerton Museum of Art','city':'San Bernardino','state':'California','description':'The Robert and Frances Fullerton Museum of Art has accumulated a collection of close to 1,200 objects focusing on ceramics, ancient and contemporary art; the largest of which includes some 500 pieces encompassing over 4,000 years of Egyptian history. With nearly 7,500 square feet of gallery space, a portion of the museum"s permanent collection is on continuous display as well as a dynamic schedule of visiting exhibitions.'}, 151 | {'name':'Tulare Historical Museum','city':'Tulare','state':'California','description':'Built on the site of the city"s first schoolhouse, this museum chronicles the city"s railroad and agriculture background with historical displays, tools, artifacts and old photographs. It also features replicas of a barbershop and a blacksmith shop.'}, 152 | {'name':'University Art Gallery, CSUDH','city':'Carson','state':'California','description':'University Art Gallery, CSUDH in Carson, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 153 | {'name':'California State University Hayward Art Gallery','city':'Hayward','state':'California','description':'California State University Hayward Art Gallery in Hayward, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 154 | {'name':'Sun Gallery','city':'Hayward','state':'California','description':'The Sun Gallery features art exhibitions showcasing creative expression of multi-cultural themes, current issues and thought provoking ideas from prominent California artists and promising newcomers, and the Children"s Art Enrichment program.'}, 155 | {'name':'Junior Center of Art and Science','city':'Oakland','state':'California','description':'The Junior Center is a children"s art and science center which offers after school and summer classes for children ages 5 to 17, school outreach programs for elementary and middle school groups, a rotating cultural exhibit program, drop-in activities and community events for 2 to 12 year olds and their families, professional developement workshop for classroom teachers. Junior Center programs serve children and schools in Oakland and 12 other East Bay cities.'}, 156 | {'name':'Kennedy Art Center Gallery','city':'Oakland','state':'California','description':'Kennedy Art Center Gallery in Oakland, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 157 | {'name':'Lillian Paley Center for Visual Arts','city':'Oakland','state':'California','description':'Lillian Paley Center for Visual Arts in Oakland, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 158 | {'name':'Lireille - Gallery of Contemporary Jewelry and Art','city':'Oakland','state':'California','description':''}, 159 | {'name':'Mills College Art Museum','city':'Oakland','state':'California','description':'Mills College Art Museum in Oakland, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 160 | {'name':'Museum of Children"s Art (MOCHA)','city':'Oakland','state':'California','description':'MOCHA provides hands-on arts learning experiences for children and their families in our museum, in schools and preschools, and in public venues. MOCHA also prepares educators to teach art and integrate arts learning across academic subject areas. As well, we advocate for the arts as an essential part of a strong, vital and diverse community. We emphasize outreach to children in low-income communities that do not typically have wide access to the arts.'}, 161 | {'name':'Skyline College Gallery','city':'San Bruno','state':'California','description':'Skyline College Gallery in San Bruno, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 162 | {'name':'Grace Hudson Museum & Sun House','city':'Ukiah','state':'California','description':'The Grace Hudson Museum and Sun House in Ukiah, California, is an art, history and anthropology museum focusing on the lifeworks of artist Grace Carpenter Hudson (1865-1937) and her ethnologist husband, Dr. John W. Hudson (1857-1936). Changing interdisciplinary exhibitions and public programs feature Western American art, California Indian cultures, histories of California"s diverse North Coast region, and the work of contemporary regional artists.'}, 163 | {'name':'Tattoo Art Museum','city':'Ukiah','state':'California','description':'Tattoo Art Museum in Ukiah, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 164 | {'name':'Adobe Art Gallery','city':'Castro Valley','state':'California','description':'The Adobe Art Gallery is a program and facility of the Hayward Area Recreation and Park District. The Adobe Art Gallery is a public fine art gallery, committed to promoting and encouraging visual arts within the District.'}, 165 | {'name':'San Benito Co. Arts. Comm.','city':'Hollister','state':'California','description':'San Benito Co. Arts. Comm. in Hollister, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 166 | {'name':'Imperial Valley Desert Museum','city':'Ocotillo','state':'California','description':'The Imperial Valley Desert Museum is a new facility in the heart of the Yuha Desert housing Native American and historic artifacts collected from within the Imperial Valley. Opening a new museum in the twenty-first century, we do not want to be seen as an exhibit within four walls, but we want to engage and interact outside of the limitations of the "box", our new building, both metaphorically and physically.'}, 167 | {'name':'Casa Romantica Cultural Center & Gardens','city':'San Clemente','state':'California','description':'Perched on a bluff overseeing the historic San Clemente Pier, the magnificent Casa is a living demonstration of California history, culture and ecology â a showplace for the entire region. Casa Romantica is a genuine part of California, not a commercial re-creation. In an era when we seek connection, the Casa is tangible â a way to share in the experiences of other times, cultures, and people â and through that to learn more about our world.'}, 168 | {'name':'Surfing Heritage Foundation','city':'San Clemente','state':'California','description':'Exhibit Details: Participation in: California State Fair Exhibits, Newport Beach Nautical Museum surf exhibit, Moonshine festivals; Laguna Beach Surf Culture Exhibit which traveled around the world; fielded a request from Los Angeles County Museum of Art for the loan of a surfboard and historical materials for display; exhibit on the History of Surfing in Orange County at the John Wayne Airport.'}, 169 | {'name':'McCune Rare Book and Art Collection','city':'Vallejo','state':'California','description':'The McCune is a hands-on rare book collection. It contains a leaf from the Gutenberg Bible, 6 incunabula, a 1517 edition of Virgil with over 200 illustrations. This collection is a history of printing from the 15th-21st century with many famous printers represented. The unique thing about this collection is that we encourage people to actually sit down to read and examine the books and art. This means hands-on review of our items.'}, 170 | {'name':'Imagine It, Inc.','city':'Ceres','state':'California','description':'Hands on Science and Fine Arts experiences for children ages 4-14. Learn and experience through exploration and investigation. Changing exhibits focus on an area in science or art. Classes are offered on a varitey of topics. Excellent resource for home school, charter, and public school field trips. Experiences can be customized to meet your needs. Birthday parties with a science theme are available.'}, 171 | {'name':'Madame Tussauds Hollywood','city':'Hollywood','state':'California','description':'Madame Tussauds is a wax museum in Hollywood, CA with branches in a number of major cities. It was founded by wax sculptor Marie Tussaud. Madame Tussauds is a major tourist attraction, displaying waxworks of historical and political figures, film stars, sports stars and more.'}, 172 | {'name':'Gallery Of Historical Figures','city':'Ojai','state':'California','description':'The Gallery exhibits the Historical Figures(R) created by George Stuart. The Figures are highly accurate mixed media sculptures of famous and infamous people in history.'}, 173 | {'name':'Ojai Valley Museum of History and Art','city':'Ojai','state':'California','description':'Housed in a National Landmark, 1919, Spanish Revival Catholic Church, the museum houses a permanent collection of Ojai related History and Art; we have a Permanent Gallery which exhibits the history of the town of Ojai; Chumash Tribe; early Spanish Ranchos, etc. The Rotating Gallery changes every 8 to 10 weeks with temporary exhibitions addressing the art, history or culture found in Ojai and the Ojai Valley. 174 | Gift Shop open Museum Hours and carries Ojai related Books, objects etc.'}, 175 | {'name':'African American Museum Of Fine Arts','city':'San Diego','state':'California','description':'African American Museum Of Fine Arts in San Diego, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 176 | {'name':'Balboa Art Conservation Center','city':'San Diego','state':'California','description':'Balboa Art Conservation Center in San Diego, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 177 | {'name':'Mingei International Museum','city':'San Diego','state':'California','description':'Mingei International Museum in San Diego, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 178 | {'name':'Museum Of Photographic Arts','city':'San Diego','state':'California','description':'One of the few institutions in the country devoted to the photographic arts, the Museum of Photographic Arts houses more than 7,000 works, representing the entire history of photography, its aesthetic movements, and technological advancements. Illustrating the complex and varied history of the medium, the museum"s collection is particularly strong in modern and contemporary work, specifically social documentary photography and photojournalism.'}, 179 | {'name':'San Diego Museum Of Art','city':'San Diego','state':'California','description':'The San Diego Museum of Art is dedicated to the enrichment of the individual and the community through the acquisition, preservation, presentation and interpretation of works of art that demonstrate the enduring achievements of the human experience.'}, 180 | {'name':'Sushi Performance and Visual Art','city':'San Diego','state':'California','description':'Sushi Performance and Visual Art, founded in 1980, is a San Diego-based nonprofit multi-disciplinary presenting organization, which cultivates alternative voices in the contemporary arts. Sushi is committed to providing its artists and audiences with a laboratory where creative exploration, community engagement, and new ideas flourish.'}, 181 | {'name':'Timken Museum Of Art','city':'San Diego','state':'California','description':'Timken Museum Of Art in San Diego, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 182 | {'name':'Ventura County Museum, History & Art','city':'Ventura','state':'California','description':'Ventura County Museum, History & Art in Ventura, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 183 | {'name':'San Fernando Valley Relics Museum','city':'Chatsworth','state':'California','description':'Valley Relics is a collection of rare photos, yearbooks, documents, postcards, toys, photo negatives, vintage signs, books, antiques, and artifacts from the 1800"s to present, from the San Fernando Valley. The collection is currently housed in Chatsworth, CA. and is open every Saturday for viewing from 10:00am - 3:00pm.'}, 184 | {'name':'Huntington Beach Art Center','city':'Huntington Beach','state':'California','description':'Huntington Beach Art Center in Huntington Beach, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 185 | {'name':'Museum Of History & Art, Ontario','city':'Ontario','state':'California','description':'the Museum"s collections illustrate the history of Ontario and surrounding communities. Exhibits focus on local, regional or national significance.'}, 186 | {'name':'American Indian Contemporary Arts','city':'San Francisco','state':'California','description':'American Indian Contemporary Arts has a mission to support and promote creative expressions of living Native American artists. This mission is pursued through local and traveling exhibits, lectures and a referral program.'}, 187 | {'name':'Asian Art Museum of San Francisco','city':'San Francisco','state':'California','description':'Asian Art Museum of San Francisco in San Francisco, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 188 | {'name':'Cartoon Art Museum','city':'San Francisco','state':'California','description':'Cartoon Art Museum in San Francisco, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 189 | {'name':'Charles Pankow Collection','city':'San Francisco','state':'California','description':'Charles Pankow Collection in San Francisco, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 190 | {'name':'Chinese Culture Center','city':'San Francisco','state':'California','description':'Chinese Cultural Center in San Francisco, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 191 | {'name':'Exploratorium','city':'San Francisco','state':'California','description':'We"re now open in a spectacular new location at Pier 15 on the Embarcadero at Green St. in San Francisco. There are 150 new exhibits for a total of 600, indoors and out, including many beloved classics; a Bay Observatory; a bigger focus on tinkering and social science; and more. Come explore!'}, 192 | {'name':'Fine Arts Museums Of San Francisco','city':'San Francisco','state':'California','description':'Fine Arts Museums Of San Francisco in San Francisco, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 193 | {'name':'Hastings College Art Gallery','city':'San Francisco','state':'California','description':'Hastings College Art Gallery in San Francisco, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 194 | {'name':'International Children"s Art Museum','city':'San Francisco','state':'California','description':'Located within the World Trade Center section of San Francisco"s landmark Ferry Building, the International Children"s Art Museum features art from children around the world. Its purpose is to help viewers broaden their perspective of art and cultures by displaying, comparing, and contrasting the many ways in which youth the world over interpret life.'}, 195 | {'name':'Madame Tussauds San Francisco','city':'San Francisco','state':'California','description':'Madame Tussauds exceptionally showcases more than 100 exquisite wax figures of famous celebrities, combining legendary and contemporary stars from the world of film, sports and entertainment.'}, 196 | {'name':'Mexican Museum','city':'San Francisco','state':'California','description':'Fort Mason Center offers a variety of cultural activities as well as being in close proximity to the Marina Green, Crissy Field and the Golden Gate Bridge. Stop by and visit the museum while touring the Marina District and other nearby tourist destinations!'}, 197 | {'name':'Mission Cultural Center for Latino Arts','city':'San Francisco','state':'California','description':'The Cultural Center has an extensive collection of prints, the majority of which were done by Latin artists.'}, 198 | {'name':'Museo Italo-Americano','city':'San Francisco','state':'California','description':'The museums exhibits artwork by both renowned and emerging Italian or Italian-American artists. Most works are from the 20th century, but some 18th century engravings compliment the permanent collection. It is the only museum of its kind in the U.S.'}, 199 | {'name':'San Francisco African American Historical & Cultural Society','city':'San Francisco','state':'California','description':'The mission of the Society is: 200 | 201 | To promote an understanding of the role people of African descent have played in world history. 202 | To collect a library of material depicting and recording the contributions made by people of African descent to world history and culture. 203 | To make available the Societyâs materials and knowledge concerning people of African descent to all who may benefit by such information.'}, 204 | {'name':'San Francisco Art Institute','city':'San Francisco','state':'California','description':'San Francisco Art Institute in San Francisco, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 205 | {'name':'San Francisco Art Institute Galleries','city':'San Francisco','state':'California','description':'San Francisco Art Institute Galleries in San Francisco, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 206 | {'name':'San Francisco Craft & Folk Art Museum','city':'San Francisco','state':'California','description':'The Museum"s exhibitions of contemporary craft display the work of skilled artists using glass, ceramics, textiles, wood and metal. Exhibitions of traditional ethnic art explore the rich heritage of tribal cultures from around the world.'}, 207 | {'name':'San Francisco Museum of Craft and Folk Art','city':'San Francisco','state':'California','description':'San Francisco Museum of Craft and Folk Art in San Francisco, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 208 | {'name':'San Francisco Museum Of Modern Art','city':'San Francisco','state':'California','description':'San Francisco Museum Of Modern Art in San Francisco, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 209 | {'name':'San Francisco Performing Arts Library/Museum','city':'San Francisco','state':'California','description':'San Francisco Performing Arts Library/Museum in San Francisco, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 210 | {'name':'Bedford Gallery at the Dean Leshser Regional Center for the Arts','city':'Walnut Creek','state':'California','description':'Bedford Gallery at the Dean Leshser Regional Center for the Arts in Walnut Creek, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 211 | {'name':'Valley Art Center','city':'Walnut Creek','state':'California','description':'Valley Art Center in Walnut Creek, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 212 | {'name':'Edward-Dean Museum & Gardens','city':'Cherry Valley','state':'California','description':'Take a Tour of the Edward-Dean Museum: Make the museum your own personal museum by taking a guided group tour. The friendly staff and docents at the Edward-Dean Museum will guide you in and out of the museum showing you the many cultural treasures hidden in the picturesque setting of Cherry Valley. Guided tours are by appointment only and are $5 per person and non-guided walk-through tours are $3.'}, 213 | {'name':'Beall Center for Art and Technology','city':'Irvine','state':'California','description':''}, 214 | {'name':'Irvine Fine Arts Center','city':'Irvine','state':'California','description':'Irvine Fine Arts Center in Irvine, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 215 | {'name':'Irvine Museum','city':'Irvine','state':'California','description':'Dedicated to the preservation and display of California art of the Impressionist Period (1890-1930).'}, 216 | {'name':'Carnegie Art Museum','city':'Oxnard','state':'California','description':'This unique "Greek Temple" hosts special changing exhibits from international art collections and Museum"s permanent collection of California Impressionism and Hollywood photography.'}, 217 | {'name':'Channel Islands Maritime Museum','city':'Oxnard','state':'California','description':'The maritime museum is open in its new site on the west bank of Channel Islands Harbor with three major galleries featuring 4 centuries of seascape paintings and global naval history illustrated with historic ship models.'}, 218 | {'name':'Mullin Automotive Museum','city':'Oxnard','state':'California','description':'The Mullin Automotive Museum is an homage to the art deco and the machine age â eras that produced exquisite art and magnificent automobiles. The museum is home to the finest historic French automobiles from the Bugatti to the Voisin as well as significant and representative decorative art from the 1920s and 1930s.'}, 219 | {'name':'Highlands Art Center','city':'Weaverville','state':'California','description':'Highlands Art Center in Weaverville, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 220 | {'name':'Janet Turner Print Museum','city':'Chico','state':'California','description':'Janet Turner Print Collection & Gallery in Chico, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 221 | {'name':'Marin Community College Art Gallery','city':'Kentfield','state':'California','description':'Marin Community College Art Gallery in Kentfield, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 222 | {'name':'Pacific Grove Art Center','city':'Pacific Grove','state':'California','description':'Pacific Grove Art Center in Pacific Grove, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 223 | {'name':'Boehm Gallery of Palomar College','city':'San Marcos','state':'California','description':'The permanent collection has over 200 art works from the 15th to the 20th century in a variety of mediums.'}, 224 | {'name':'Chula Vista Nature Center','city':'Chula Vista','state':'California','description':'The Chula Vista Nature Center is a living, breathing, flapping, buzzing and splashing home to the unique animals and plants of Southern California. This Zoo & Aquarium is a convenient six miles south of downtown San Diego. Kids love meeting the live owls & hawks while exploring the aquarium exhibits, making nature crafts, and more. The Nature Center sits on the 316-acre Sweetwater Marsh National Wildlife Refuge.'}, 225 | {'name':'La Jolla Art Association Gallery','city':'La Jolla','state':'California','description':'The La Jolla Art Association is a 501(c)(3) non profit organization promoting art.'}, 226 | {'name':'Mandeville Art Gallery','city':'La Jolla','state':'California','description':'Mandeville Art Gallery in La Jolla, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 227 | {'name':'Museum Of Contemporary Art, San Diego','city':'La Jolla','state':'California','description':'Museum Of Contemporary Art, San Diego in La Jolla, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 228 | {'name':'Stuart Collection UCSD','city':'La Jolla','state':'California','description':'The collection results from an innovative partnership between the university and the Stuart Collection. Under an agreement forged in 1982 (and renewed in 2003), the entire campus may be considered as sites for commissioned sculpture. It is further distinguished from a traditional sculpture garden by integration of some of the projects with university buildings.'}, 229 | {'name':'University Art Gallery UCSD','city':'La Jolla','state':'California','description':'University Art Gallery UCSD in San Diego, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 230 | {'name':'University Art Gallery, UCSD','city':'La Jolla','state':'California','description':'University Art Gallery, UCSD in La Jolla, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 231 | {'name':'Aerie Sculpture Garden and Gallery','city':'Palm Desert','state':'California','description':'Aerie Sculpture Garden and Gallery in Palm Desert, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 232 | {'name':'College Of The Desert Art Gallery','city':'Palm Desert','state':'California','description':'College Of The Desert Art Gallery in Palm Desert, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 233 | {'name':'Angels Gate Cultural Center','city':'San Pedro','state':'California','description':'Angels Gate Cultural Center in San Pedro, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 234 | {'name':'Fort MacArthur Military Museum','city':'San Pedro','state':'California','description':'The Museum is dedicated to the preservation and interpretation of the Harbor Defenses of Los Angeles from 1916-1975. The 20-acre facility includes the only Taft-era fortification built in the continental United States and exhibits of military artifacts.'}, 235 | {'name':'Filoli','city':'Woodside','state':'California','description':'Located 30 miles south of San Francisco, Filoli is an historic site of the National Trust for Historic Preservation and one of the finest remaining country estates of the early 20th century. Whether enjoying its beauty or pursuing its educational opportunities, we invite you to explore this cherished community resource.'}, 236 | {'name':'Claremont Graduate School Galleries','city':'Claremont','state':'California','description':'Claremont Graduate School Galleries in Claremont, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 237 | {'name':'Petterson Museum Of Intercultural Art at Pilgrim Place','city':'Claremont','state':'California','description':'Petterson Museum Of Intercultural Art at Pilgrim Place in Claremont, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 238 | {'name':'Pomona College Museum of Art','city':'Claremont','state':'California','description':'The fine art collections of Pomona College are housed in the Pomona College Museum of Art, at the Montgomery Art Center, which was inaugurated in 1958 and named for the late Gladys K. Montgomery, Pomona trustee and Los Angeles civic leader.'}, 239 | {'name':'Ruth Chandler Williamson Gallery','city':'Claremont','state':'California','description':'Ruth Chandler Williamson Gallery in Claremont, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 240 | {'name':'Laguna Art Museum','city':'Laguna Beach','state':'California','description':'The Laguna Art Museum is a museum of American art with a special focus on the art of California. Its purpose is to provide the public with exposure to art.'}, 241 | {'name':'Palm Springs Art Museum','city':'Palm Springs','state':'California','description':'On April 9, 2010, the Palm Springs Art Museum held the 5th annual Meet the Museum party, a membership drive that traditionally occurs on the Friday of White Party Weekend. More than 1,100 new and renewing museum members attended, raising over $60,000 in membership funds that directly support the operational costs of the museum.'}, 242 | {'name':'Public Art Works','city':'San Rafael','state':'California','description':'Public Art Works in San Rafael, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 243 | {'name':'San Marcos Gallery Dominican College','city':'San Rafael','state':'California','description':'San Marcos Gallery Dominican College in San Rafael, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 244 | {'name':'Napa Valley Museum','city':'Yountville','state':'California','description':'Napa Valley Museum brings together collections of art, history and natural science under one roof to tell the extraordinary stories of Napa Valley and its people. Art exhibitions feature the work of local and national artists. Content originates from private collections and artist studios and is borrowed from museums, galleries, and other sources. Since our founding in 1972, our goal has been to integrate history and art into the lives of people'}, 245 | {'name':'Euphrat Museum of Art - De Anza College','city':'Cupertino','state':'California','description':'Euphrat Museum of Art - De Anza College in Cupertino, CA is one of more than 15,400 museums in the MuseumsUSA directory. Find an exciting museum to visit where you live or vacation today.'}, 246 | ]) --------------------------------------------------------------------------------