bible270 0.6.2
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/CHANGELOG.md +181 -0
- data/MIT-LICENSE +18 -0
- data/README.md +373 -0
- data/Rakefile +11 -0
- data/app/controllers/bible270/application_controller.rb +48 -0
- data/app/controllers/bible270/checkoffs_controller.rb +32 -0
- data/app/controllers/bible270/comments_controller.rb +46 -0
- data/app/controllers/bible270/days_controller.rb +42 -0
- data/app/controllers/bible270/readers_controller.rb +46 -0
- data/app/controllers/bible270/sessions_controller.rb +126 -0
- data/app/helpers/bible270/plan_helper.rb +45 -0
- data/app/mailers/bible270/application_mailer.rb +7 -0
- data/app/mailers/bible270/sign_in_mailer.rb +14 -0
- data/app/models/bible270/application_record.rb +6 -0
- data/app/models/bible270/checkoff.rb +23 -0
- data/app/models/bible270/comment.rb +16 -0
- data/app/models/bible270/reader.rb +211 -0
- data/app/models/bible270/sign_in_token.rb +74 -0
- data/app/views/bible270/checkoffs/toggle.turbo_stream.erb +4 -0
- data/app/views/bible270/comments/_comment.html.erb +15 -0
- data/app/views/bible270/comments/_form.html.erb +13 -0
- data/app/views/bible270/comments/create.turbo_stream.erb +7 -0
- data/app/views/bible270/comments/destroy.turbo_stream.erb +1 -0
- data/app/views/bible270/days/_reading.html.erb +25 -0
- data/app/views/bible270/days/_start_date.html.erb +43 -0
- data/app/views/bible270/days/index.html.erb +72 -0
- data/app/views/bible270/days/show.html.erb +50 -0
- data/app/views/bible270/readers/index.html.erb +24 -0
- data/app/views/bible270/readers/show.html.erb +41 -0
- data/app/views/bible270/sessions/new.html.erb +52 -0
- data/app/views/bible270/shared/_header.html.erb +20 -0
- data/app/views/bible270/shared/_styles.html.erb +147 -0
- data/app/views/bible270/sign_in_mailer/magic_link.html.erb +20 -0
- data/app/views/bible270/sign_in_mailer/magic_link.text.erb +7 -0
- data/app/views/layouts/bible270/application.html.erb +28 -0
- data/config/routes.rb +30 -0
- data/db/migrate/20260101000001_create_bible270_readers.rb +17 -0
- data/db/migrate/20260101000002_create_bible270_checkoffs.rb +15 -0
- data/db/migrate/20260101000003_create_bible270_comments.rb +14 -0
- data/db/migrate/20260101000004_create_bible270_sign_in_tokens.rb +18 -0
- data/lib/bible270/configuration.rb +177 -0
- data/lib/bible270/email_sign_in.rb +68 -0
- data/lib/bible270/engine.rb +21 -0
- data/lib/bible270/plan.rb +352 -0
- data/lib/bible270/versification.rb +83 -0
- data/lib/bible270/version.rb +4 -0
- data/lib/bible270.rb +9 -0
- data/lib/generators/bible270/install/install_generator.rb +66 -0
- data/lib/generators/bible270/install/templates/bible270.rb.tt +41 -0
- data/lib/generators/bible270/install/templates/omniauth.rb.tt +25 -0
- metadata +158 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Verse counts per chapter (standard English / KJV versification).
|
|
3
|
+
# Verse counts are facts about the text's structure, used purely to weight
|
|
4
|
+
# daily reading portions by length. Generated from a public-domain KJV text.
|
|
5
|
+
module Bible270
|
|
6
|
+
module Versification
|
|
7
|
+
# book name => [verses in chapter 1, chapter 2, ...]
|
|
8
|
+
VERSES = {
|
|
9
|
+
"Genesis" => [31, 25, 24, 26, 32, 22, 24, 22, 29, 32, 32, 20, 18, 24, 21, 16, 27, 33, 38, 18, 34, 24, 20, 67, 34, 35, 46, 22, 35, 43, 55, 32, 20, 31, 29, 43, 36, 30, 23, 23, 57, 38, 34, 34, 28, 34, 31, 22, 33, 26],
|
|
10
|
+
"Exodus" => [22, 25, 22, 31, 23, 30, 25, 32, 35, 29, 10, 51, 22, 31, 27, 36, 16, 27, 25, 26, 36, 31, 33, 18, 40, 37, 21, 43, 46, 38, 18, 35, 23, 35, 35, 38, 29, 31, 43, 38],
|
|
11
|
+
"Leviticus" => [17, 16, 17, 35, 19, 30, 38, 36, 24, 20, 47, 8, 59, 57, 33, 34, 16, 30, 37, 27, 24, 33, 44, 23, 55, 46, 34],
|
|
12
|
+
"Numbers" => [54, 34, 51, 49, 31, 27, 89, 26, 23, 36, 35, 16, 33, 45, 41, 50, 13, 32, 22, 29, 35, 41, 30, 25, 18, 65, 23, 31, 40, 16, 54, 42, 56, 29, 34, 13],
|
|
13
|
+
"Deuteronomy" => [46, 37, 29, 49, 33, 25, 26, 20, 29, 22, 32, 32, 18, 29, 23, 22, 20, 22, 21, 20, 23, 30, 25, 22, 19, 19, 26, 68, 29, 20, 30, 52, 29, 12],
|
|
14
|
+
"Joshua" => [18, 24, 17, 24, 15, 27, 26, 35, 27, 43, 23, 24, 33, 15, 63, 10, 18, 28, 51, 9, 45, 34, 16, 33],
|
|
15
|
+
"Judges" => [36, 23, 31, 24, 31, 40, 25, 35, 57, 18, 40, 15, 25, 20, 20, 31, 13, 31, 30, 48, 25],
|
|
16
|
+
"Ruth" => [22, 23, 18, 22],
|
|
17
|
+
"1 Samuel" => [28, 36, 21, 22, 12, 21, 17, 22, 27, 27, 15, 25, 23, 52, 35, 23, 58, 30, 24, 43, 15, 23, 29, 22, 44, 25, 12, 25, 11, 31, 13],
|
|
18
|
+
"2 Samuel" => [27, 32, 39, 12, 25, 23, 29, 18, 13, 19, 27, 31, 39, 33, 37, 23, 29, 33, 43, 26, 22, 51, 39, 25],
|
|
19
|
+
"1 Kings" => [53, 46, 28, 34, 18, 38, 51, 66, 28, 29, 43, 33, 34, 31, 34, 34, 24, 46, 21, 43, 29, 54],
|
|
20
|
+
"2 Kings" => [18, 25, 27, 44, 27, 33, 20, 29, 37, 36, 21, 21, 25, 29, 38, 20, 41, 37, 37, 21, 26, 20, 37, 20, 30],
|
|
21
|
+
"1 Chronicles" => [54, 55, 24, 43, 26, 81, 40, 40, 44, 14, 47, 40, 14, 17, 29, 43, 27, 17, 19, 8, 30, 19, 32, 31, 31, 32, 34, 21, 30],
|
|
22
|
+
"2 Chronicles" => [17, 18, 17, 22, 14, 42, 22, 18, 31, 19, 23, 16, 22, 15, 19, 14, 19, 34, 11, 37, 20, 12, 21, 27, 28, 23, 9, 27, 36, 27, 21, 33, 25, 33, 27, 23],
|
|
23
|
+
"Ezra" => [11, 70, 13, 24, 17, 22, 28, 36, 15, 44],
|
|
24
|
+
"Nehemiah" => [11, 20, 32, 23, 19, 19, 73, 18, 38, 39, 36, 47, 31],
|
|
25
|
+
"Esther" => [22, 23, 15, 17, 14, 14, 10, 17, 32, 3],
|
|
26
|
+
"Job" => [22, 13, 26, 21, 27, 30, 21, 22, 35, 22, 20, 25, 28, 22, 35, 22, 16, 21, 29, 29, 34, 30, 17, 25, 6, 14, 23, 28, 25, 31, 40, 22, 33, 37, 16, 33, 24, 41, 30, 24, 34, 17],
|
|
27
|
+
"Psalm" => [6, 12, 8, 8, 12, 10, 17, 9, 20, 18, 7, 8, 6, 7, 5, 11, 15, 50, 14, 9, 13, 31, 6, 10, 22, 12, 14, 9, 11, 12, 24, 11, 22, 22, 28, 12, 40, 22, 13, 17, 13, 11, 5, 26, 17, 11, 9, 14, 20, 23, 19, 9, 6, 7, 23, 13, 11, 11, 17, 12, 8, 12, 11, 10, 13, 20, 7, 35, 36, 5, 24, 20, 28, 23, 10, 12, 20, 72, 13, 19, 16, 8, 18, 12, 13, 17, 7, 18, 52, 17, 16, 15, 5, 23, 11, 13, 12, 9, 9, 5, 8, 28, 22, 35, 45, 48, 43, 13, 31, 7, 10, 10, 9, 8, 18, 19, 2, 29, 176, 7, 8, 9, 4, 8, 5, 6, 5, 6, 8, 8, 3, 18, 3, 3, 21, 26, 9, 8, 24, 13, 10, 7, 12, 15, 21, 10, 20, 14, 9, 6],
|
|
28
|
+
"Proverbs" => [33, 22, 35, 27, 23, 35, 27, 36, 18, 32, 31, 28, 25, 35, 33, 33, 28, 24, 29, 30, 31, 29, 35, 34, 28, 28, 27, 28, 27, 33, 31],
|
|
29
|
+
"Ecclesiastes" => [18, 26, 22, 16, 20, 12, 29, 17, 18, 20, 10, 14],
|
|
30
|
+
"Song of Solomon" => [17, 17, 11, 16, 16, 13, 13, 14],
|
|
31
|
+
"Isaiah" => [31, 22, 26, 6, 30, 13, 25, 22, 21, 34, 16, 6, 22, 32, 9, 14, 14, 7, 25, 6, 17, 25, 18, 23, 12, 21, 13, 29, 24, 33, 9, 20, 24, 17, 10, 22, 38, 22, 8, 31, 29, 25, 28, 28, 25, 13, 15, 22, 26, 11, 23, 15, 12, 17, 13, 12, 21, 14, 21, 22, 11, 12, 19, 12, 25, 24],
|
|
32
|
+
"Jeremiah" => [19, 37, 25, 31, 31, 30, 34, 22, 26, 25, 23, 17, 27, 22, 21, 21, 27, 23, 15, 18, 14, 30, 40, 10, 38, 24, 22, 17, 32, 24, 40, 44, 26, 22, 19, 32, 21, 28, 18, 16, 18, 22, 13, 30, 5, 28, 7, 47, 39, 46, 64, 34],
|
|
33
|
+
"Lamentations" => [22, 22, 66, 22, 22],
|
|
34
|
+
"Ezekiel" => [28, 10, 27, 17, 17, 14, 27, 18, 11, 22, 25, 28, 23, 23, 8, 63, 24, 32, 14, 49, 32, 31, 49, 27, 17, 21, 36, 26, 21, 26, 18, 32, 33, 31, 15, 38, 28, 23, 29, 49, 26, 20, 27, 31, 25, 24, 23, 35],
|
|
35
|
+
"Daniel" => [21, 49, 30, 37, 31, 28, 28, 27, 27, 21, 45, 13],
|
|
36
|
+
"Hosea" => [11, 23, 5, 19, 15, 11, 16, 14, 17, 15, 12, 14, 16, 9],
|
|
37
|
+
"Joel" => [20, 32, 21],
|
|
38
|
+
"Amos" => [15, 16, 15, 13, 27, 14, 17, 14, 15],
|
|
39
|
+
"Obadiah" => [21],
|
|
40
|
+
"Jonah" => [17, 10, 10, 11],
|
|
41
|
+
"Micah" => [16, 13, 12, 13, 15, 16, 20],
|
|
42
|
+
"Nahum" => [15, 13, 19],
|
|
43
|
+
"Habakkuk" => [17, 20, 19],
|
|
44
|
+
"Zephaniah" => [18, 15, 20],
|
|
45
|
+
"Haggai" => [15, 23],
|
|
46
|
+
"Zechariah" => [21, 13, 10, 14, 11, 15, 14, 23, 17, 12, 17, 14, 9, 21],
|
|
47
|
+
"Malachi" => [14, 17, 18, 6],
|
|
48
|
+
"Matthew" => [25, 22, 17, 25, 48, 34, 29, 34, 38, 42, 30, 50, 58, 36, 39, 28, 27, 35, 30, 34, 46, 45, 39, 51, 46, 74, 66, 20],
|
|
49
|
+
"Mark" => [45, 28, 35, 40, 43, 56, 36, 37, 50, 52, 33, 44, 37, 72, 47, 20],
|
|
50
|
+
"Luke" => [80, 52, 38, 44, 39, 49, 50, 56, 62, 42, 54, 59, 35, 35, 32, 31, 37, 43, 48, 47, 38, 71, 56, 53],
|
|
51
|
+
"John" => [51, 25, 36, 54, 47, 71, 53, 59, 41, 42, 57, 50, 38, 31, 27, 33, 26, 40, 42, 31, 25],
|
|
52
|
+
"Acts" => [26, 47, 26, 37, 42, 15, 60, 40, 43, 48, 30, 25, 52, 28, 41, 40, 34, 28, 41, 38, 40, 30, 35, 27, 27, 32, 44, 31],
|
|
53
|
+
"Romans" => [32, 29, 31, 25, 21, 23, 25, 39, 33, 21, 36, 21, 14, 23, 33, 27],
|
|
54
|
+
"1 Corinthians" => [31, 16, 23, 21, 13, 20, 40, 13, 27, 33, 34, 31, 13, 40, 58, 24],
|
|
55
|
+
"2 Corinthians" => [24, 17, 18, 18, 21, 18, 16, 24, 15, 18, 33, 21, 14],
|
|
56
|
+
"Galatians" => [24, 21, 29, 31, 26, 18],
|
|
57
|
+
"Ephesians" => [23, 22, 21, 32, 33, 24],
|
|
58
|
+
"Philippians" => [30, 30, 21, 23],
|
|
59
|
+
"Colossians" => [29, 23, 25, 18],
|
|
60
|
+
"1 Thessalonians" => [10, 20, 13, 18, 28],
|
|
61
|
+
"2 Thessalonians" => [12, 17, 18],
|
|
62
|
+
"1 Timothy" => [20, 15, 16, 16, 25, 21],
|
|
63
|
+
"2 Timothy" => [18, 26, 17, 22],
|
|
64
|
+
"Titus" => [16, 15, 15],
|
|
65
|
+
"Philemon" => [25],
|
|
66
|
+
"Hebrews" => [14, 18, 19, 16, 14, 20, 28, 13, 28, 39, 40, 29, 25],
|
|
67
|
+
"James" => [27, 26, 18, 17, 20],
|
|
68
|
+
"1 Peter" => [25, 25, 22, 19, 14],
|
|
69
|
+
"2 Peter" => [21, 22, 18],
|
|
70
|
+
"1 John" => [10, 29, 24, 21, 21],
|
|
71
|
+
"2 John" => [13],
|
|
72
|
+
"3 John" => [15],
|
|
73
|
+
"Jude" => [25],
|
|
74
|
+
"Revelation" => [20, 29, 22, 11, 14, 17, 17, 13, 21, 11, 19, 18, 18, 20, 8, 21, 18, 24, 21, 15, 27, 21],
|
|
75
|
+
}.freeze
|
|
76
|
+
|
|
77
|
+
module_function
|
|
78
|
+
|
|
79
|
+
def verses(book, chapter) = VERSES.fetch(book)[chapter - 1]
|
|
80
|
+
def chapter_count(book) = VERSES.fetch(book).size
|
|
81
|
+
def total_verses(book) = VERSES.fetch(book).sum
|
|
82
|
+
end
|
|
83
|
+
end
|
data/lib/bible270.rb
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "rails/generators"
|
|
3
|
+
|
|
4
|
+
module Bible270
|
|
5
|
+
module Generators
|
|
6
|
+
# rails generate bible270:install [--mount-at=/reading-plan] [--providers=github]
|
|
7
|
+
#
|
|
8
|
+
# Writes the engine initializer and an OmniAuth initializer whose path_prefix
|
|
9
|
+
# matches the mount point (the one detail that is easy to get wrong).
|
|
10
|
+
class InstallGenerator < Rails::Generators::Base
|
|
11
|
+
source_root File.expand_path("templates", __dir__)
|
|
12
|
+
|
|
13
|
+
class_option :mount_at, type: :string, default: "/reading-plan",
|
|
14
|
+
desc: "Path the engine is mounted at"
|
|
15
|
+
class_option :providers, type: :string, default: "github",
|
|
16
|
+
desc: "Comma-separated OmniAuth providers (e.g. github,google_oauth2)"
|
|
17
|
+
|
|
18
|
+
def create_initializers
|
|
19
|
+
template "bible270.rb.tt", "config/initializers/bible270.rb"
|
|
20
|
+
template "omniauth.rb.tt", "config/initializers/omniauth.rb"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def add_route
|
|
24
|
+
route %(mount Bible270::Engine, at: "#{mount_at}")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def show_next_steps
|
|
28
|
+
say ""
|
|
29
|
+
say "bible270 installed.", :green
|
|
30
|
+
say ""
|
|
31
|
+
say "Next steps:"
|
|
32
|
+
say " 1. Add the strategy gems to your Gemfile, e.g.:"
|
|
33
|
+
provider_list.each { |p| say " gem \"omniauth-#{p.tr('_', '-')}\"" }
|
|
34
|
+
say " plus: gem \"omniauth\" and gem \"omniauth-rails_csrf_protection\""
|
|
35
|
+
say " 2. bundle install"
|
|
36
|
+
say " 3. bin/rails bible270:install:migrations && bin/rails db:migrate"
|
|
37
|
+
say " 4. Set the provider credentials in your environment / credentials store."
|
|
38
|
+
say " 5. Set config.mailer_from and make sure Action Mailer can deliver"
|
|
39
|
+
say " (email sign-in is what lets readers without a social account join)."
|
|
40
|
+
say " 6. Register the callback URL with each provider:"
|
|
41
|
+
provider_list.each { |p| say " https://YOUR-HOST#{mount_at}/auth/#{p}/callback" }
|
|
42
|
+
say ""
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
def mount_at
|
|
48
|
+
path = options[:mount_at].to_s
|
|
49
|
+
path = "/#{path}" unless path.start_with?("/")
|
|
50
|
+
path.chomp("/")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def provider_list
|
|
54
|
+
options[:providers].to_s.split(",").map { |p| p.strip }.reject(&:empty?)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def providers_literal
|
|
58
|
+
provider_list.map { |p| ":#{p}" }.join(", ")
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def omniauth_path_prefix
|
|
62
|
+
"#{mount_at}/auth"
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# bible270 configuration. See the gem README for the full reference.
|
|
4
|
+
Bible270.configure do |config|
|
|
5
|
+
config.app_name = "Daily Bread"
|
|
6
|
+
config.tagline = "A 270-day journey through Scripture"
|
|
7
|
+
|
|
8
|
+
# Share the host application's layout, helpers and CSRF setup.
|
|
9
|
+
config.parent_controller = "::ApplicationController"
|
|
10
|
+
# config.layout = "layouts/application"
|
|
11
|
+
|
|
12
|
+
# --- Authentication --------------------------------------------------------
|
|
13
|
+
# Email sign-in: a one-time link, no password, no third-party account needed.
|
|
14
|
+
# This is what lets anyone take part. Requires Action Mailer delivery to work.
|
|
15
|
+
config.email_sign_in = true
|
|
16
|
+
config.mailer_from = "no-reply@example.com" # <- change me
|
|
17
|
+
# config.email_sign_in_ttl = 20 * 60 # link lifetime, seconds
|
|
18
|
+
# config.email_sign_in_max_per_window = 5 # per email, per window
|
|
19
|
+
# config.email_sign_in_window = 15 * 60
|
|
20
|
+
config.email_sign_in_ask_name = true # let readers choose a display name
|
|
21
|
+
# config.email_sign_in_deliver_later = true # if you have a queue backend
|
|
22
|
+
|
|
23
|
+
# Optional social sign-in. The matching strategy gems and credentials live in
|
|
24
|
+
# the host app (see config/initializers/omniauth.rb). Set to [] to use email only.
|
|
25
|
+
config.omniauth_providers = [<%= providers_literal %>]
|
|
26
|
+
|
|
27
|
+
# Viewing the plan is always public; checking off and commenting require a reader.
|
|
28
|
+
config.require_sign_in_to_participate = true
|
|
29
|
+
|
|
30
|
+
# Where to land after signing in / out (defaults to the plan's own root).
|
|
31
|
+
# config.after_sign_in_path = "<%= mount_at %>"
|
|
32
|
+
# config.after_sign_out_path = "/"
|
|
33
|
+
|
|
34
|
+
# --- Start date ------------------------------------------------------------
|
|
35
|
+
# Community-wide start date (Date, Time, or "YYYY-MM-DD"), or nil for undated.
|
|
36
|
+
# config.start_date = Date.new(2026, 9, 6)
|
|
37
|
+
config.allow_reader_start_date = true
|
|
38
|
+
|
|
39
|
+
# --- Reading links ---------------------------------------------------------
|
|
40
|
+
config.bible_version = "ESV"
|
|
41
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# OmniAuth middleware for bible270's built-in sign-in.
|
|
4
|
+
#
|
|
5
|
+
# IMPORTANT: path_prefix must match where the engine is mounted, so that
|
|
6
|
+
# OmniAuth's callback (<prefix>/:provider/callback) lands on the engine's
|
|
7
|
+
# route. bible270 derives its sign-in button paths from the same value.
|
|
8
|
+
#
|
|
9
|
+
# OmniAuth 2.0+ only allows POST to the request phase (CVE-2015-9284);
|
|
10
|
+
# omniauth-rails_csrf_protection supplies the Rails-aware token check, and
|
|
11
|
+
# bible270's sign-in controls are already POST forms.
|
|
12
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
|
13
|
+
path_prefix "<%= omniauth_path_prefix %>"
|
|
14
|
+
|
|
15
|
+
<% provider_list.each do |p| -%>
|
|
16
|
+
provider :<%= p %>,
|
|
17
|
+
Rails.application.credentials.dig(:<%= p %>, :client_id) || ENV["<%= p.upcase %>_CLIENT_ID"],
|
|
18
|
+
Rails.application.credentials.dig(:<%= p %>, :client_secret) || ENV["<%= p.upcase %>_CLIENT_SECRET"]
|
|
19
|
+
<% end -%>
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Send OmniAuth failures to the engine's failure route rather than raising.
|
|
23
|
+
OmniAuth.config.on_failure = proc do |env|
|
|
24
|
+
Bible270::SessionsController.action(:failure).call(env)
|
|
25
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: bible270
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.6.2
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Andrew vonderLuft
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: rails
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '7.0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '7.0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: omniauth
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '2.0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '2.0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: omniauth-rails_csrf_protection
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '1.0'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '1.0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: minitest
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '5.0'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '5.0'
|
|
68
|
+
description: 'Drop-in Rails engine that adds a social daily Bible reading plan over
|
|
69
|
+
270 days: the Old Testament once, the New Testament twice, and a whole-chapter Psalms/Proverbs
|
|
70
|
+
companion. Daily portions are balanced by verse count so each day takes about the
|
|
71
|
+
same time to read, and chapters are never split except Psalm 119. Readers check
|
|
72
|
+
off each day''s readings, leave reflections, and see one another''s progress. Designed
|
|
73
|
+
to mount cleanly into a host Rails app such as ComfortableMediaSurfer.'
|
|
74
|
+
email:
|
|
75
|
+
- wonder@hey.com
|
|
76
|
+
executables: []
|
|
77
|
+
extensions: []
|
|
78
|
+
extra_rdoc_files: []
|
|
79
|
+
files:
|
|
80
|
+
- CHANGELOG.md
|
|
81
|
+
- MIT-LICENSE
|
|
82
|
+
- README.md
|
|
83
|
+
- Rakefile
|
|
84
|
+
- app/controllers/bible270/application_controller.rb
|
|
85
|
+
- app/controllers/bible270/checkoffs_controller.rb
|
|
86
|
+
- app/controllers/bible270/comments_controller.rb
|
|
87
|
+
- app/controllers/bible270/days_controller.rb
|
|
88
|
+
- app/controllers/bible270/readers_controller.rb
|
|
89
|
+
- app/controllers/bible270/sessions_controller.rb
|
|
90
|
+
- app/helpers/bible270/plan_helper.rb
|
|
91
|
+
- app/mailers/bible270/application_mailer.rb
|
|
92
|
+
- app/mailers/bible270/sign_in_mailer.rb
|
|
93
|
+
- app/models/bible270/application_record.rb
|
|
94
|
+
- app/models/bible270/checkoff.rb
|
|
95
|
+
- app/models/bible270/comment.rb
|
|
96
|
+
- app/models/bible270/reader.rb
|
|
97
|
+
- app/models/bible270/sign_in_token.rb
|
|
98
|
+
- app/views/bible270/checkoffs/toggle.turbo_stream.erb
|
|
99
|
+
- app/views/bible270/comments/_comment.html.erb
|
|
100
|
+
- app/views/bible270/comments/_form.html.erb
|
|
101
|
+
- app/views/bible270/comments/create.turbo_stream.erb
|
|
102
|
+
- app/views/bible270/comments/destroy.turbo_stream.erb
|
|
103
|
+
- app/views/bible270/days/_reading.html.erb
|
|
104
|
+
- app/views/bible270/days/_start_date.html.erb
|
|
105
|
+
- app/views/bible270/days/index.html.erb
|
|
106
|
+
- app/views/bible270/days/show.html.erb
|
|
107
|
+
- app/views/bible270/readers/index.html.erb
|
|
108
|
+
- app/views/bible270/readers/show.html.erb
|
|
109
|
+
- app/views/bible270/sessions/new.html.erb
|
|
110
|
+
- app/views/bible270/shared/_header.html.erb
|
|
111
|
+
- app/views/bible270/shared/_styles.html.erb
|
|
112
|
+
- app/views/bible270/sign_in_mailer/magic_link.html.erb
|
|
113
|
+
- app/views/bible270/sign_in_mailer/magic_link.text.erb
|
|
114
|
+
- app/views/layouts/bible270/application.html.erb
|
|
115
|
+
- config/routes.rb
|
|
116
|
+
- db/migrate/20260101000001_create_bible270_readers.rb
|
|
117
|
+
- db/migrate/20260101000002_create_bible270_checkoffs.rb
|
|
118
|
+
- db/migrate/20260101000003_create_bible270_comments.rb
|
|
119
|
+
- db/migrate/20260101000004_create_bible270_sign_in_tokens.rb
|
|
120
|
+
- lib/bible270.rb
|
|
121
|
+
- lib/bible270/configuration.rb
|
|
122
|
+
- lib/bible270/email_sign_in.rb
|
|
123
|
+
- lib/bible270/engine.rb
|
|
124
|
+
- lib/bible270/plan.rb
|
|
125
|
+
- lib/bible270/versification.rb
|
|
126
|
+
- lib/bible270/version.rb
|
|
127
|
+
- lib/generators/bible270/install/install_generator.rb
|
|
128
|
+
- lib/generators/bible270/install/templates/bible270.rb.tt
|
|
129
|
+
- lib/generators/bible270/install/templates/omniauth.rb.tt
|
|
130
|
+
homepage: https://gknt.org
|
|
131
|
+
licenses:
|
|
132
|
+
- MIT
|
|
133
|
+
metadata:
|
|
134
|
+
homepage_uri: https://gknt.org
|
|
135
|
+
source_code_uri: https://github.com/avonderluft/bible270
|
|
136
|
+
bug_tracker_uri: https://github.com/avonderluft/bible270/issues
|
|
137
|
+
changelog_uri: https://github.com/avonderluft/bible270/blob/main/CHANGELOG.md
|
|
138
|
+
rubygems_mfa_required: 'true'
|
|
139
|
+
rdoc_options: []
|
|
140
|
+
require_paths:
|
|
141
|
+
- lib
|
|
142
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
143
|
+
requirements:
|
|
144
|
+
- - ">="
|
|
145
|
+
- !ruby/object:Gem::Version
|
|
146
|
+
version: '3.0'
|
|
147
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
|
+
requirements:
|
|
149
|
+
- - ">="
|
|
150
|
+
- !ruby/object:Gem::Version
|
|
151
|
+
version: '0'
|
|
152
|
+
requirements: []
|
|
153
|
+
rubygems_version: 4.0.16
|
|
154
|
+
specification_version: 4
|
|
155
|
+
summary: 'A mountable Rails engine: a 270-day, verse-balanced Bible reading plan (OT
|
|
156
|
+
once, NT twice, Psalms/Proverbs alongside) with per-user check-offs, comments, and
|
|
157
|
+
shared community progress.'
|
|
158
|
+
test_files: []
|