meetalendar 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/.rubocop.yml +96 -0
- data/.travis.yml +21 -0
- data/Gemfile +20 -0
- data/LICENSE +20 -0
- data/README.md +141 -0
- data/Rakefile +5 -0
- data/app/controllers/comfy/admin/meetalendar/meetups_controller.rb +154 -0
- data/app/models/comfy/admin/meetalendar/auth_credential.rb +22 -0
- data/app/models/comfy/admin/meetalendar/meetup_group.rb +3 -0
- data/app/models/comfy/admin/meetalendar/meetups_calendar_syncer.rb +178 -0
- data/app/models/comfy/admin/meetalendar/meetups_controller_logic.rb +77 -0
- data/app/models/google/auth/store/db_token_store.rb +37 -0
- data/app/views/comfy/admin/meetalendar/meetups/_authorize_calendar.slim +6 -0
- data/app/views/comfy/admin/meetalendar/meetups/_edit.slim +6 -0
- data/app/views/comfy/admin/meetalendar/meetups/_search_mask.slim +19 -0
- data/app/views/comfy/admin/meetalendar/meetups/_search_result.slim +57 -0
- data/app/views/comfy/admin/meetalendar/meetups/authorize_calendar.slim +6 -0
- data/app/views/comfy/admin/meetalendar/meetups/edit.slim +11 -0
- data/app/views/comfy/admin/meetalendar/meetups/index.slim +26 -0
- data/app/views/comfy/admin/meetalendar/meetups/search_mask.slim +5 -0
- data/app/views/comfy/admin/meetalendar/meetups/search_result.slim +5 -0
- data/app/views/comfy/admin/meetalendar/partials/_navigation.html.haml +9 -0
- data/app/views/layouts/comfy/meetalendar/application.html.erb +28 -0
- data/bin/bundle +3 -0
- data/bin/rails +4 -0
- data/bin/rake +4 -0
- data/bin/setup +36 -0
- data/bin/update +31 -0
- data/bin/yarn +11 -0
- data/comfy_meetalendar.gemspec +44 -0
- data/config.ru +6 -0
- data/config/application.rb +38 -0
- data/config/boot.rb +7 -0
- data/config/database.yml +11 -0
- data/config/environment.rb +7 -0
- data/config/environments/development.rb +64 -0
- data/config/environments/test.rb +51 -0
- data/config/initializers/meetalendar.rb +23 -0
- data/config/locales/en.yml +33 -0
- data/config/meetalendar_routes.rb +3 -0
- data/config/storage.yml +35 -0
- data/db/migrate/00_create_cms.rb +142 -0
- data/db/migrate/01_create_meetalendar_meetup_groups.rb +13 -0
- data/db/migrate/02_create_meetalendar_auth_credentials.rb +16 -0
- data/lib/generators/comfy/meetalendar/README +5 -0
- data/lib/generators/comfy/meetalendar/meetalendar_generator.rb +61 -0
- data/lib/meetalendar.rb +29 -0
- data/lib/meetalendar/configuration.rb +24 -0
- data/lib/meetalendar/engine.rb +32 -0
- data/lib/meetalendar/routes/meetalendar_admin.rb +30 -0
- data/lib/meetalendar/routing.rb +3 -0
- data/lib/meetalendar/version.rb +7 -0
- data/lib/tasks/meetalendar_tasks.rake +14 -0
- metadata +244 -0
@@ -0,0 +1,9 @@
|
|
1
|
+
-# - if @site && @site.persisted?
|
2
|
+
-# %li.nav-item
|
3
|
+
-# = active_link_to comfy_admin_meetalendar_meetups_path(@site), class: "nav-link" do
|
4
|
+
-# = t('comfy.admin.cms.base.meetups')
|
5
|
+
|
6
|
+
- if @site && @site.persisted?
|
7
|
+
%li.nav-item
|
8
|
+
= active_link_to comfy_admin_meetalendar_meetups_path(@site), class: "nav-link" do
|
9
|
+
= t('comfy.admin.cms.base.meetups')
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<title>Meetalendar</title>
|
5
|
+
<!-- Required meta tags -->
|
6
|
+
<meta charset="utf-8">
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
8
|
+
|
9
|
+
<!-- Bootstrap CSS -->
|
10
|
+
<%# <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous"> %>
|
11
|
+
|
12
|
+
<%= csrf_meta_tags %>
|
13
|
+
<%= csp_meta_tag %>
|
14
|
+
|
15
|
+
<%= stylesheet_link_tag "meetalendar/application", media: "all" %>
|
16
|
+
<%= javascript_include_tag "meetalendar/application" %>
|
17
|
+
</head>
|
18
|
+
<body>
|
19
|
+
|
20
|
+
<%= yield %>
|
21
|
+
|
22
|
+
<!-- Optional JavaScript -->
|
23
|
+
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
24
|
+
<%# <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
|
25
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
|
26
|
+
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script> %>
|
27
|
+
</body>
|
28
|
+
</html>
|
data/bin/bundle
ADDED
data/bin/rails
ADDED
data/bin/rake
ADDED
data/bin/setup
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'fileutils'
|
3
|
+
include FileUtils
|
4
|
+
|
5
|
+
# path to your application root.
|
6
|
+
APP_ROOT = File.expand_path('..', __dir__)
|
7
|
+
|
8
|
+
def system!(*args)
|
9
|
+
system(*args) || abort("\n== Command #{args} failed ==")
|
10
|
+
end
|
11
|
+
|
12
|
+
chdir APP_ROOT do
|
13
|
+
# This script is a starting point to setup your application.
|
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
|
+
# Install JavaScript dependencies if using Yarn
|
21
|
+
# system('bin/yarn')
|
22
|
+
|
23
|
+
# puts "\n== Copying sample files =="
|
24
|
+
# unless File.exist?('config/database.yml')
|
25
|
+
# cp 'config/database.yml.sample', 'config/database.yml'
|
26
|
+
# end
|
27
|
+
|
28
|
+
puts "\n== Preparing database =="
|
29
|
+
system! 'bin/rails db:setup'
|
30
|
+
|
31
|
+
puts "\n== Removing old logs and tempfiles =="
|
32
|
+
system! 'bin/rails log:clear tmp:clear'
|
33
|
+
|
34
|
+
puts "\n== Restarting application server =="
|
35
|
+
system! 'bin/rails restart'
|
36
|
+
end
|
data/bin/update
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'fileutils'
|
3
|
+
include FileUtils
|
4
|
+
|
5
|
+
# path to your application root.
|
6
|
+
APP_ROOT = File.expand_path('..', __dir__)
|
7
|
+
|
8
|
+
def system!(*args)
|
9
|
+
system(*args) || abort("\n== Command #{args} failed ==")
|
10
|
+
end
|
11
|
+
|
12
|
+
chdir APP_ROOT do
|
13
|
+
# This script is a way to update your development environment automatically.
|
14
|
+
# Add necessary update steps to this file.
|
15
|
+
|
16
|
+
puts '== Installing dependencies =='
|
17
|
+
system! 'gem install bundler --conservative'
|
18
|
+
system('bundle check') || system!('bundle install')
|
19
|
+
|
20
|
+
# Install JavaScript dependencies if using Yarn
|
21
|
+
# system('bin/yarn')
|
22
|
+
|
23
|
+
puts "\n== Updating database =="
|
24
|
+
system! 'bin/rails db:migrate'
|
25
|
+
|
26
|
+
puts "\n== Removing old logs and tempfiles =="
|
27
|
+
system! 'bin/rails log:clear tmp:clear'
|
28
|
+
|
29
|
+
puts "\n== Restarting application server =="
|
30
|
+
system! 'bin/rails restart'
|
31
|
+
end
|
data/bin/yarn
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
VENDOR_PATH = File.expand_path('..', __dir__)
|
3
|
+
Dir.chdir(VENDOR_PATH) do
|
4
|
+
begin
|
5
|
+
exec "yarnpkg #{ARGV.join(' ')}"
|
6
|
+
rescue Errno::ENOENT
|
7
|
+
$stderr.puts "Yarn executable was not detected in the system."
|
8
|
+
$stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install"
|
9
|
+
exit 1
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.push File.expand_path("lib", __dir__)
|
4
|
+
|
5
|
+
require "meetalendar/version"
|
6
|
+
|
7
|
+
# Describe your gem and declare its dependencies:
|
8
|
+
Gem::Specification.new do |s|
|
9
|
+
s.name = "meetalendar"
|
10
|
+
s.version = Meetalendar::VERSION
|
11
|
+
s.authors = ["Andreas Schau @ HicknHack"]
|
12
|
+
s.email = ["andreas.schau@hicknhack-software.com"]
|
13
|
+
s.homepage = "https://www.hicknhack-software.com/"
|
14
|
+
s.summary = "To have a section on a website that allows gathering of meetup groups. So that their events can regularely be syncronized into a google calendar."
|
15
|
+
s.description = "This gem prensents all the needed functionality to search for relevant groups on meetup, remember the chosen ones and offers a task that can be called regularely to transcribe the meetup-groups events to a google calendar. TLDR: It allows the user to subscribe to meetup-groups events."
|
16
|
+
s.license = "MIT"
|
17
|
+
|
18
|
+
s.files = `git ls-files -z`.split("\x0").reject do |f|
|
19
|
+
f.match(%r{^(test|doc)/})
|
20
|
+
end
|
21
|
+
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
|
24
|
+
s.required_ruby_version = ">= 2.3.0"
|
25
|
+
|
26
|
+
s.add_dependency 'rails', '~> 5.2', '>= 5.2.2'
|
27
|
+
|
28
|
+
# httpclient for manual auth calls
|
29
|
+
s.add_dependency 'httpclient', '~> 2.8', '>= 2.8.3'
|
30
|
+
|
31
|
+
# google api for calendar event insetion
|
32
|
+
s.add_dependency 'google-api-client', '~> 0.30.3'
|
33
|
+
|
34
|
+
# helps encrypt and decrypt tokens from the database
|
35
|
+
s.add_dependency 'attr_encrypted', '~> 3.1'
|
36
|
+
|
37
|
+
# helps with exceptions
|
38
|
+
s.add_dependency 'activeresource', '~> 5.1'
|
39
|
+
|
40
|
+
# Asset processors
|
41
|
+
s.add_dependency 'slim', '~> 4.0', '>= 4.0.1'
|
42
|
+
s.add_dependency 'multi_json', '~> 1.13', '>= 1.13.1'
|
43
|
+
s.add_dependency 'bootstrap-sass', '~> 3.3', '>= 3.3.7'
|
44
|
+
end
|
data/config.ru
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "boot"
|
4
|
+
|
5
|
+
require "rails/all"
|
6
|
+
|
7
|
+
# Require the gems listed in Gemfile, including any gems
|
8
|
+
# you've limited to :test, :development, or :production.
|
9
|
+
Bundler.require(*Rails.groups)
|
10
|
+
|
11
|
+
module Meetalendar
|
12
|
+
class Application < Rails::Application
|
13
|
+
|
14
|
+
require_relative "../lib/meetalendar"
|
15
|
+
|
16
|
+
config.load_defaults 5.2
|
17
|
+
|
18
|
+
# Settings in config/environments/* take precedence over those specified here.
|
19
|
+
# Application configuration should go into files in config/initializers
|
20
|
+
# -- all .rb files in that directory are automatically loaded.
|
21
|
+
|
22
|
+
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
23
|
+
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
24
|
+
# config.time_zone = 'Central Time (US & Canada)'
|
25
|
+
|
26
|
+
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
27
|
+
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
28
|
+
# config.i18n.default_locale = :de
|
29
|
+
|
30
|
+
# Ensuring that all ActiveStorage routes are loaded before out globbing route.
|
31
|
+
config.railties_order = [ActiveStorage::Engine, :main_app, :all]
|
32
|
+
|
33
|
+
# Making sure we don't load our dev routes as part of the engine
|
34
|
+
config.paths["config/routes.rb"] << "config/meetalendar_routes.rb"
|
35
|
+
|
36
|
+
config.i18n.enforce_available_locales = true
|
37
|
+
end
|
38
|
+
end
|
data/config/boot.rb
ADDED
data/config/database.yml
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
defined?(Meetalendar::Application) && Meetalendar::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 on
|
7
|
+
# every request. 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/disable caching. By default caching is disabled.
|
18
|
+
# Run rails dev:cache to toggle caching.
|
19
|
+
if Rails.root.join("tmp/caching-dev.txt").exist?
|
20
|
+
config.action_controller.perform_caching = true
|
21
|
+
|
22
|
+
config.cache_store = :memory_store
|
23
|
+
config.public_file_server.headers = {
|
24
|
+
"Cache-Control" => "public, max-age=#{2.days.to_i}"
|
25
|
+
}
|
26
|
+
else
|
27
|
+
config.action_controller.perform_caching = false
|
28
|
+
|
29
|
+
config.cache_store = :null_store
|
30
|
+
end
|
31
|
+
|
32
|
+
# Store uploaded files on the local file system (see config/storage.yml for options)
|
33
|
+
config.active_storage.service = :local
|
34
|
+
|
35
|
+
# Don't care if the mailer can't send.
|
36
|
+
config.action_mailer.raise_delivery_errors = false
|
37
|
+
|
38
|
+
config.action_mailer.perform_caching = false
|
39
|
+
|
40
|
+
# Print deprecation notices to the Rails logger.
|
41
|
+
config.active_support.deprecation = :log
|
42
|
+
|
43
|
+
# Raise an error on page load if there are pending migrations.
|
44
|
+
config.active_record.migration_error = :page_load
|
45
|
+
|
46
|
+
# Debug mode disables concatenation and preprocessing of assets.
|
47
|
+
# This option may cause significant delays in view rendering with a large
|
48
|
+
# number of complex assets.
|
49
|
+
config.assets.debug = true
|
50
|
+
|
51
|
+
# Suppress logger output for asset requests.
|
52
|
+
config.assets.quiet = true
|
53
|
+
|
54
|
+
# Raises error for missing translations
|
55
|
+
# config.action_view.raise_on_missing_translations = true
|
56
|
+
|
57
|
+
# Use an evented file watcher to asynchronously detect changes in source code,
|
58
|
+
# routes, locales, etc. This feature depends on the listen gem.
|
59
|
+
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
|
60
|
+
|
61
|
+
config.active_job.queue_adapter = :inline
|
62
|
+
|
63
|
+
config.action_view.raise_on_missing_translations = true
|
64
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
defined?(Meetalendar::Application) && Meetalendar::Application.configure do
|
4
|
+
# Settings specified here will take precedence over those in config/application.rb.
|
5
|
+
|
6
|
+
# The test environment is used exclusively to run your application's
|
7
|
+
# test suite. You never need to work with it otherwise. Remember that
|
8
|
+
# your test database is "scratch space" for the test suite and is wiped
|
9
|
+
# and recreated between test runs. Don't rely on the data there!
|
10
|
+
config.cache_classes = true
|
11
|
+
|
12
|
+
# Do not eager load code on boot. This avoids loading your whole application
|
13
|
+
# just for the purpose of running a single test. If you are using a tool that
|
14
|
+
# preloads Rails for running tests, you may have to set it to true.
|
15
|
+
config.eager_load = false
|
16
|
+
|
17
|
+
# Configure public file server for tests with Cache-Control for performance.
|
18
|
+
config.public_file_server.enabled = true
|
19
|
+
config.public_file_server.headers = {
|
20
|
+
"Cache-Control" => "public, max-age=#{1.hour.to_i}"
|
21
|
+
}
|
22
|
+
|
23
|
+
# Show full error reports and disable caching.
|
24
|
+
config.consider_all_requests_local = true
|
25
|
+
config.action_controller.perform_caching = false
|
26
|
+
|
27
|
+
# Raise exceptions instead of rendering exception templates.
|
28
|
+
config.action_dispatch.show_exceptions = false
|
29
|
+
|
30
|
+
# Disable request forgery protection in test environment.
|
31
|
+
config.action_controller.allow_forgery_protection = false
|
32
|
+
|
33
|
+
# Store uploaded files on the local file system in a temporary directory
|
34
|
+
config.active_storage.service = :test
|
35
|
+
config.action_mailer.perform_caching = false
|
36
|
+
|
37
|
+
# Tell Action Mailer not to deliver emails to the real world.
|
38
|
+
# The :test delivery method accumulates sent emails in the
|
39
|
+
# ActionMailer::Base.deliveries array.
|
40
|
+
config.action_mailer.delivery_method = :test
|
41
|
+
|
42
|
+
# Print deprecation notices to the stderr.
|
43
|
+
config.active_support.deprecation = :stderr
|
44
|
+
|
45
|
+
# Raises error for missing translations
|
46
|
+
# config.action_view.raise_on_missing_translations = true
|
47
|
+
|
48
|
+
config.active_job.queue_adapter = :inline
|
49
|
+
|
50
|
+
config.action_view.raise_on_missing_translations = true
|
51
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "googleauth"
|
4
|
+
|
5
|
+
Meetalendar.configure do |config|
|
6
|
+
# application layout to be used to index blog posts
|
7
|
+
# config.app_layout = 'comfy/meetalendar/application'
|
8
|
+
|
9
|
+
# Number of posts per page. Default is 10
|
10
|
+
# config.posts_per_page = 10
|
11
|
+
|
12
|
+
# Loading credentials for the meelanedar functionality
|
13
|
+
ENV_MEETALENDAR_CREDENTIALS_FILEPATH ||= "MEETALENDAR_CREDENTIALS_FILEPATH".freeze
|
14
|
+
Rails.logger.error("#{ENV_MEETALENDAR_CREDENTIALS_FILEPATH} is not set but needed!") if !ENV.has_key?(ENV_MEETALENDAR_CREDENTIALS_FILEPATH)
|
15
|
+
MEETALENDAR_CREDENTIALS_FILEPATH ||= Comfy::Admin::Meetalendar::AuthCredential.expand_env(ENV[ENV_MEETALENDAR_CREDENTIALS_FILEPATH].to_s)
|
16
|
+
|
17
|
+
File.open MEETALENDAR_CREDENTIALS_FILEPATH.to_s do |file|
|
18
|
+
json = file.read
|
19
|
+
all_credentials = MultiJson.load json
|
20
|
+
MEETALENDAR_CREDENTIALS_MEETUP ||= all_credentials["meetup"]
|
21
|
+
MEETALENDAR_CREDENTIALS_GOOGLE_CALENDAR_CLIENT_ID ||= Google::Auth::ClientId.from_hash all_credentials["google_calendar"]
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,33 @@
|
|
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 http://guides.rubyonrails.org/i18n.html.
|
31
|
+
|
32
|
+
en:
|
33
|
+
hello: "Hello world"
|