plug 0.1.12 → 0.1.19

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.
Files changed (32) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +21 -1
  3. data/app/assets/images/favicon.png +0 -0
  4. data/app/assets/stylesheets/plug/application.scss +3 -0
  5. data/app/assets/stylesheets/plug/blocks/_alert.scss +5 -0
  6. data/app/assets/stylesheets/plug/blocks/_menu.scss +11 -0
  7. data/app/assets/stylesheets/plug/blocks/_task-button.scss +3 -0
  8. data/app/assets/stylesheets/plug/variables/_colors.scss +2 -1
  9. data/app/controllers/plug/api/api_controller.rb +7 -0
  10. data/app/controllers/plug/api/site_notices_controller.rb +21 -0
  11. data/app/controllers/plug/features_controller.rb +15 -1
  12. data/app/controllers/plug/site_notices_controller.rb +69 -0
  13. data/app/models/plug/concerns/model_helpers.rb +45 -0
  14. data/app/models/plug/concerns/themeable.rb +16 -0
  15. data/app/models/plug/feature.rb +1 -25
  16. data/app/models/plug/resources/site_notice.rb +17 -0
  17. data/app/models/plug/site_notice.rb +7 -0
  18. data/app/services/plug/task_execution_service.rb +18 -0
  19. data/app/views/layouts/plug/application.html.haml +2 -1
  20. data/app/views/plug/features/_task.html.haml +4 -0
  21. data/app/views/plug/features/index.html.haml +12 -2
  22. data/app/views/plug/shared/_nav.html.haml +8 -5
  23. data/app/views/plug/site_notices/_form.html.haml +25 -0
  24. data/app/views/plug/site_notices/edit.html.haml +5 -0
  25. data/app/views/plug/site_notices/index.html.haml +41 -0
  26. data/app/views/plug/site_notices/new.html.haml +7 -0
  27. data/config/routes.rb +11 -0
  28. data/db/migrate/20180403024712_create_plug_site_notices.rb +15 -0
  29. data/db/migrate/20180424015828_add_theme_to_plug_site_notice.rb +5 -0
  30. data/lib/plug/configuration.rb +4 -1
  31. data/lib/plug/version.rb +1 -1
  32. metadata +40 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8ff054c84075e1b2e008af464461eb7ad3610a78
4
- data.tar.gz: cde21d4902f6045df745f4d67699e09c16ba1aef
2
+ SHA256:
3
+ metadata.gz: a3e56677db5277835599245727b8f5a1ddc7b089a9261f788971c6de539279cd
4
+ data.tar.gz: 619eb3d58765d7fe2ae88e0d4cc784ce0df8cea15e2e580ce0228f335da1f175
5
5
  SHA512:
6
- metadata.gz: 4baea815778c86a46fcc78e001811c1c1a3bb305e035ca8d109670786bb9824e29080503ead8fe4fcd45c50d04ba7e539af9f020fe94cd71b213649786a519b9
7
- data.tar.gz: 4220069641d7cb9a1d41949c74477bde938c39543f861d98a387372280727643700db1f196a4ac64342e8e4f4e15cfba32f4c178c29790e605a45a00a4952995
6
+ metadata.gz: 3993e47bb2626186d6057b0aed81651a3ae46d7daec51b56dfe9a8cfbe0a46c242edfc95a6080cefe651d641092b3e157746df03c2a6595a72e96b9b32bc0a56
7
+ data.tar.gz: 210f55299e22933f46c48d469fc423ec3b7c85cd8be76d7eddeee93ce96efab89f50f11ed2598d530911eb208057c9c6691114d38beba6ff9425fc6b3fc60386
data/README.md CHANGED
@@ -31,7 +31,8 @@ And run the install generator:
31
31
 
32
32
  ```bash
33
33
  → rails g plug:install
34
- → rails g plug:install:migrations
34
+ → rails plug:install:migrations
35
+ → rake plug:install:migrations # For Rails <= 3.x
35
36
  → rails db:migrate # Newer version of Rails
36
37
  → rake db:migrate # Older version of Rails
37
38
  → rails s
@@ -72,6 +73,25 @@ If you have custom HTML for notice, you can pass a block.
72
73
  <% end %>
73
74
  ```
74
75
 
76
+ #### Buttons
77
+ Add buttons to the config block to perform rake tasks from the plug dashboard
78
+
79
+ ```ruby
80
+ config.buttons = [
81
+ { label: 'Clear cache', task: 'tmp:cache:clear' }
82
+ ]
83
+ ```
84
+
85
+ ### Creating new migrations
86
+
87
+ ```bash
88
+ → rails g migration MyAwesomeMigration
89
+ → rails g model MyModel name:string slug:string:index
90
+ → rails db:migrate
91
+ → rails db:migrate RAILS_ENV=test
92
+ → rake plug:install:migrations # Run this on the app to copy the new migrations
93
+ ```
94
+
75
95
  ### Running the tests
76
96
 
77
97
  ```bash
@@ -34,5 +34,8 @@
34
34
 
35
35
  // Blocks
36
36
  @import 'blocks/nav';
37
+ @import 'blocks/menu';
37
38
  @import 'blocks/notice';
39
+ @import 'blocks/alert';
38
40
  @import 'blocks/state';
41
+ @import 'blocks/task-button';
@@ -0,0 +1,5 @@
1
+ .alert {
2
+ background: $gallery;
3
+ border: solid 2px $lipstick;
4
+ padding: 2rem;
5
+ }
@@ -0,0 +1,11 @@
1
+ .menu {
2
+ list-style-type: none;
3
+
4
+ li {
5
+ display: inline-block;
6
+ margin-bottom: 0;
7
+ margin-top: 1rem;
8
+ margin-left: 2rem;
9
+ font-weight: bold;
10
+ }
11
+ }
@@ -0,0 +1,3 @@
1
+ .task-button {
2
+ margin: 0 .5rem;
3
+ }
@@ -4,4 +4,5 @@ $pale-sky: #637381;
4
4
  $alabaster: #f7f7f7;
5
5
  $gallery: #ebebeb;
6
6
  $tall-poppy: #c0392b;
7
- $jungle-green: #27ae60;
7
+ $lipstick: #c70376;
8
+ $jungle-green: #27ae60;
@@ -0,0 +1,7 @@
1
+ module Plug
2
+ module Api
3
+ class ApiController < ActionController::Base
4
+ protect_from_forgery with: :exception
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,21 @@
1
+ require_dependency 'plug/application_controller'
2
+
3
+ module Plug
4
+ module Api
5
+ class SiteNoticesController < ApiController
6
+ # GET /site_notices.json
7
+ def index
8
+ @site_notices = SiteNotice.all
9
+
10
+ render json: @site_notices
11
+ end
12
+
13
+ # GET /site_notices/slug.json
14
+ def show
15
+ @site_notice = SiteNotice.slug_and_name(params[:slug]).first
16
+
17
+ render json: @site_notice
18
+ end
19
+ end
20
+ end
21
+ end
@@ -50,6 +50,20 @@ module Plug
50
50
  redirect_to features_url, notice: 'Feature was successfully destroyed.'
51
51
  end
52
52
 
53
+ # POST /task
54
+ # TODO: Move this to a separate controller e.g. `tasks_controller.rb`
55
+ def task_execution
56
+ begin
57
+ Plug::TaskExecutionService.new(name: params[:task]).call
58
+ rescue StandardError => e
59
+ flash[:alert] = e.message
60
+ else
61
+ flash[:notice] = "Task: #{params[:task]} has completed"
62
+ end
63
+
64
+ redirect_to root_path
65
+ end
66
+
53
67
  private
54
68
  # Use callbacks to share common setup or constraints between actions.
55
69
  def set_feature
@@ -62,7 +76,7 @@ module Plug
62
76
  if Rails.version.to_i < 5
63
77
  ActiveSupport::HashWithIndifferentAccess.new(params[:feature])
64
78
  else
65
- params.require(:feature).permit(:name, :description, :state)
79
+ params.require(:feature).permit(:name, :description, :state, :notice)
66
80
  end
67
81
  end
68
82
  end
@@ -0,0 +1,69 @@
1
+ require_dependency 'plug/application_controller'
2
+
3
+ module Plug
4
+ class SiteNoticesController < ApplicationController
5
+ if Rails.version.to_i < 5
6
+ before_filter :set_site_notice, only: [:edit, :update, :destroy]
7
+ else
8
+ before_action :set_site_notice, only: [:edit, :update, :destroy]
9
+ end
10
+
11
+ # GET /site_notices
12
+ def index
13
+ @site_notices = SiteNotice.all
14
+ end
15
+
16
+ # GET /site_notices/1
17
+ # def show; end
18
+
19
+ # GET /site_notices/new
20
+ def new
21
+ @site_notice = SiteNotice.new
22
+ end
23
+
24
+ # GET /site_notices/1/edit
25
+ def edit; end
26
+
27
+ # POST /site_notices
28
+ def create
29
+ @site_notice = SiteNotice.new(site_notice_params)
30
+
31
+ if @site_notice.save
32
+ redirect_to site_notices_path, notice: 'Site Notice was successfully created.'
33
+ else
34
+ render :new
35
+ end
36
+ end
37
+
38
+ # PATCH/PUT /site_notices/1
39
+ def update
40
+ if @site_notice.update_attributes(site_notice_params)
41
+ redirect_to site_notices_path, notice: 'Site Notice was successfully updated.'
42
+ else
43
+ render :edit
44
+ end
45
+ end
46
+
47
+ # DELETE /site_notices/1
48
+ def destroy
49
+ @site_notice.destroy
50
+ redirect_to site_notices_url, notice: 'Site Notice was successfully destroyed.'
51
+ end
52
+
53
+ private
54
+ # Use callbacks to share common setup or constraints between actions.
55
+ def set_site_notice
56
+ @site_notice = SiteNotice.find(params[:id])
57
+ end
58
+
59
+ # Only allow a trusted parameter "white list" through.
60
+ # TODO: Strong params not available for older Rails
61
+ def site_notice_params
62
+ if Rails.version.to_i < 5
63
+ ActiveSupport::HashWithIndifferentAccess.new(params[:site_notice])
64
+ else
65
+ params.require(:site_notice).permit(:name, :notice, :state, :theme)
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,45 @@
1
+ require 'active_support/concern'
2
+
3
+ module Plug
4
+ module Concerns
5
+ module ModelHelpers
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ include AASM
10
+
11
+ # Validations
12
+ validates :name, presence: { message: "#{self.humanized_class_name} name is required" },
13
+ uniqueness: { message: "#{self.humanized_class_name} name must be unique", case_sensitive: false }
14
+ validates :state, presence: { message: "#{self.humanized_class_name} state is required" }
15
+
16
+ # Callbacks
17
+ before_save { self.slug = name.parameterize }
18
+
19
+ # Scopes
20
+ scope :slug_and_name, ->(arg) { where('slug = ? OR name = ?', arg, arg) }
21
+
22
+ # States
23
+ aasm column: :state do
24
+ state :enabled, initial: true
25
+ state :disabled
26
+
27
+ event :enable do
28
+ transitions from: :disabled, to: :enabled
29
+ end
30
+
31
+ event :disable do
32
+ transitions from: :enabled, to: :disabled
33
+ end
34
+ end
35
+
36
+ end
37
+
38
+ module ClassMethods
39
+ def humanized_class_name
40
+ self.name.demodulize.underscore.humanize.capitalize
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,16 @@
1
+ require 'active_support/concern'
2
+
3
+ module Plug
4
+ module Concerns
5
+ module Themeable
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+
10
+ def icon
11
+ theme.split(';').last.split(':').last
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,30 +1,6 @@
1
1
  module Plug
2
2
  class Feature < ApplicationRecord
3
3
  include AASM
4
-
5
- # Validations
6
- validates :name, presence: { message: 'Feature name is required' },
7
- uniqueness: { message: 'Feature name must be unique', case_sensitive: false }
8
- validates :state, presence: { message: 'Feature state is required' }
9
-
10
- # Callbacks
11
- before_save { self.slug = name.parameterize }
12
-
13
- # Scopes
14
- scope :slug_and_name, ->(arg) { where('slug = ? OR name = ?', arg, arg) }
15
-
16
- # States
17
- aasm column: :state do
18
- state :enabled, initial: true
19
- state :disabled
20
-
21
- event :enable do
22
- transitions from: :disabled, to: :enabled
23
- end
24
-
25
- event :disable do
26
- transitions from: :enabled, to: :disabled
27
- end
28
- end
4
+ include Plug::Concerns::ModelHelpers
29
5
  end
30
6
  end
@@ -0,0 +1,17 @@
1
+ module Plug
2
+ module Resources
3
+ class SiteNotice < ActiveResource::Base
4
+ include Plug::Concerns::Themeable
5
+
6
+ self.site = Plug.api_path
7
+
8
+ def enabled?
9
+ state == 'enabled'
10
+ end
11
+
12
+ def disabled?
13
+ state == 'disabled'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ module Plug
2
+ class SiteNotice < ApplicationRecord
3
+ include AASM
4
+ include Plug::Concerns::ModelHelpers
5
+ include Plug::Concerns::Themeable
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+ require 'rake'
2
+
3
+ module Plug
4
+ class TaskExecutionService
5
+ attr_reader :name
6
+
7
+ def initialize(name: nil)
8
+ raise 'Task name is required' if name.nil?
9
+
10
+ @name = name
11
+ end
12
+
13
+ def call
14
+ Rails.application.load_tasks
15
+ Rake::Task[name].execute
16
+ end
17
+ end
18
+ end
@@ -1,5 +1,6 @@
1
1
  !!!
2
2
  %html{ lang: 'en' }
3
+ = favicon_link_tag 'favicon.png'
3
4
  = render 'plug/shared/head'
4
5
 
5
6
  %body
@@ -7,4 +8,4 @@
7
8
  = render 'plug/shared/nav'
8
9
  = yield
9
10
 
10
- /= render 'shared/footer'
11
+ /= render 'shared/footer'
@@ -0,0 +1,4 @@
1
+ .task-button
2
+ = form_tag(task_execution_path) do
3
+ = hidden_field_tag(:task, task[:task])
4
+ = submit_tag(task[:label])
@@ -1,8 +1,15 @@
1
+ - if notice
2
+ %p.notice= sanitize(notice)
3
+
4
+ - if alert
5
+ %p.alert= sanitize(alert)
6
+
1
7
  .row
2
8
  .column
3
- - if notice
4
- %p.notice= notice
9
+ = render partial: 'task', collection: Plug.buttons
5
10
 
11
+ .row
12
+ .column
6
13
  .clearfix
7
14
  .float-left
8
15
  %h4 Features
@@ -16,6 +23,9 @@
16
23
  %th Description
17
24
  %th Slug
18
25
  %th State
26
+
27
+ - if Plug.allow_delete
28
+ %th Actions
19
29
 
20
30
  %tbody
21
31
  - @features.each do |feature|
@@ -1,6 +1,9 @@
1
1
  %nav.clearfix.nav
2
- .row
3
- .column
4
- %h3
5
- = link_to 'Plug', plug.root_path, class: 'nav__logo'
6
- %small /unplug features
2
+ .float-left
3
+ %h3
4
+ = link_to 'Plug', plug.root_path, class: 'nav__logo'
5
+ %small /unplug features
6
+ .float-right
7
+ %ul.menu
8
+ %li= link_to 'Features', plug.root_path
9
+ %li= link_to 'Site Notices', plug.site_notices_path
@@ -0,0 +1,25 @@
1
+ = form_for @site_notice do |f|
2
+ - if @site_notice.errors.any?
3
+ #error_explanation
4
+ %h2= "#{pluralize(@site_notice.errors.count, "error")} prohibited this feature from being saved:"
5
+ %ul
6
+ - @site_notice.errors.full_messages.each do |message|
7
+ %li= message
8
+
9
+ .field
10
+ = f.label :name
11
+ = f.text_field :name
12
+ .field
13
+ = f.label :notice
14
+ = f.text_area :notice, rows: 10
15
+ .field
16
+ = f.label :state
17
+ = f.select :state, ['enabled', 'disabled']
18
+ .field
19
+ = f.label :theme
20
+ = f.select :theme, Plug.themes.map { |theme| [theme[:name], "#{theme[:style].to_a.map { |s| s.join(':') }.join(';')}"] }
21
+ .actions.clearfix
22
+ .float-left
23
+ = link_to 'Back', site_notices_path, class: 'button'
24
+ .float-right
25
+ = f.submit 'Save'
@@ -0,0 +1,5 @@
1
+ .row
2
+ .column
3
+ %h4 Editing site notice
4
+
5
+ = render 'form'
@@ -0,0 +1,41 @@
1
+ .row
2
+ .column
3
+ - if notice
4
+ %p.notice= sanitize(notice)
5
+
6
+ - if alert
7
+ %p.alert= sanitize(alert)
8
+
9
+ .clearfix
10
+ .float-left
11
+ %h4 Site Notices
12
+ .float-right
13
+ = link_to 'New Site Notice', new_site_notice_path, class: 'button'
14
+
15
+ %table
16
+ %thead
17
+ %tr
18
+ %th Name
19
+ %th Notice
20
+ %th Slug
21
+ %th State
22
+
23
+ - if Plug.allow_delete
24
+ %th Actions
25
+
26
+ %tbody
27
+ - @site_notices.each do |site_notice|
28
+ %tr
29
+ %td= link_to site_notice.name, edit_site_notice_path(site_notice), class: 'strong'
30
+ %td= site_notice.notice
31
+ %td= site_notice.slug
32
+ %td
33
+ - if site_notice.state == 'enabled'
34
+ %i.fas.fa-check-circle.fa-2x.state__enabled
35
+ - else
36
+ %i.fas.fa-times-circle.fa-2x.state__disabled
37
+
38
+ - if Plug.allow_delete
39
+ %td= link_to 'Destroy', site_notice, method: :delete, data: { confirm: 'Are you sure?' }
40
+
41
+
@@ -0,0 +1,7 @@
1
+ .row
2
+ .column
3
+ .clearfix
4
+ .float-left
5
+ %h4 New site notice
6
+
7
+ = render 'form'
@@ -1,5 +1,16 @@
1
1
  Plug::Engine.routes.draw do
2
2
  root to: 'features#index'
3
3
 
4
+ # Features
4
5
  resources :features, except: :show
6
+
7
+ # Site notices
8
+ resources :site_notices, except: :show
9
+
10
+ namespace :api, defaults: { format: :json } do
11
+ get '/site_notices/:slug', to: 'site_notices#show'
12
+ get '/site_notices', to: 'site_notices#index'
13
+ end
14
+
15
+ post '/task', to: 'features#task_execution', as: :task_execution
5
16
  end
@@ -0,0 +1,15 @@
1
+ class CreatePlugSiteNotices < ActiveRecord::Migration
2
+ def change
3
+ create_table :plug_site_notices do |t|
4
+ t.string :name
5
+ t.string :slug
6
+ t.text :notice
7
+ t.string :state
8
+
9
+ t.timestamps
10
+ end
11
+
12
+ add_index :plug_site_notices, :name
13
+ add_index :plug_site_notices, :slug
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ class AddThemeToPlugSiteNotice < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :plug_site_notices, :theme, :string
4
+ end
5
+ end
@@ -7,7 +7,10 @@ module Plug
7
7
  VALID_OPTIONS_KEYS = [
8
8
  :auth_user,
9
9
  :auth_password,
10
- :allow_delete
10
+ :allow_delete,
11
+ :buttons,
12
+ :api_path,
13
+ :themes
11
14
  ].freeze
12
15
 
13
16
  attr_accessor *VALID_OPTIONS_KEYS
@@ -1,3 +1,3 @@
1
1
  module Plug
2
- VERSION = '0.1.12'
2
+ VERSION = '0.1.19'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plug
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.1.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-02-26 00:00:00.000000000 Z
12
+ date: 2020-06-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "<="
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 5.1.4
20
+ version: '0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - "<="
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: 5.1.4
27
+ version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: sass-rails
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -81,6 +81,20 @@ dependencies:
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: activeresource
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
84
98
  - !ruby/object:Gem::Dependency
85
99
  name: sqlite3
86
100
  requirement: !ruby/object:Gem::Requirement
@@ -191,13 +205,17 @@ files:
191
205
  - README.md
192
206
  - Rakefile
193
207
  - app/assets/config/plug_manifest.js
208
+ - app/assets/images/favicon.png
194
209
  - app/assets/javascripts/plug/application.js
195
210
  - app/assets/javascripts/plug/features.js
196
211
  - app/assets/stylesheets/plug/_settings.scss
197
212
  - app/assets/stylesheets/plug/application.scss
213
+ - app/assets/stylesheets/plug/blocks/_alert.scss
214
+ - app/assets/stylesheets/plug/blocks/_menu.scss
198
215
  - app/assets/stylesheets/plug/blocks/_nav.scss
199
216
  - app/assets/stylesheets/plug/blocks/_notice.scss
200
217
  - app/assets/stylesheets/plug/blocks/_state.scss
218
+ - app/assets/stylesheets/plug/blocks/_task-button.scss
201
219
  - app/assets/stylesheets/plug/foundation_and_overrides.scss
202
220
  - app/assets/stylesheets/plug/milligram.scss
203
221
  - app/assets/stylesheets/plug/mixins/_bem.scss
@@ -206,22 +224,37 @@ files:
206
224
  - app/assets/stylesheets/plug/partials/_utils.scss
207
225
  - app/assets/stylesheets/plug/variables/_colors.scss
208
226
  - app/assets/stylesheets/plug/variables/_typography.scss
227
+ - app/controllers/plug/api/api_controller.rb
228
+ - app/controllers/plug/api/site_notices_controller.rb
209
229
  - app/controllers/plug/application_controller.rb
210
230
  - app/controllers/plug/features_controller.rb
231
+ - app/controllers/plug/site_notices_controller.rb
211
232
  - app/helpers/plug/application_helper.rb
212
233
  - app/mailers/plug/application_mailer.rb
213
234
  - app/models/plug/application_record.rb
235
+ - app/models/plug/concerns/model_helpers.rb
236
+ - app/models/plug/concerns/themeable.rb
214
237
  - app/models/plug/feature.rb
238
+ - app/models/plug/resources/site_notice.rb
239
+ - app/models/plug/site_notice.rb
240
+ - app/services/plug/task_execution_service.rb
215
241
  - app/views/layouts/plug/application.html.haml
216
242
  - app/views/plug/features/_form.html.haml
243
+ - app/views/plug/features/_task.html.haml
217
244
  - app/views/plug/features/edit.html.haml
218
245
  - app/views/plug/features/index.html.haml
219
246
  - app/views/plug/features/new.html.haml
220
247
  - app/views/plug/shared/_head.html.haml
221
248
  - app/views/plug/shared/_nav.html.haml
249
+ - app/views/plug/site_notices/_form.html.haml
250
+ - app/views/plug/site_notices/edit.html.haml
251
+ - app/views/plug/site_notices/index.html.haml
252
+ - app/views/plug/site_notices/new.html.haml
222
253
  - config/routes.rb
223
254
  - db/migrate/20171207020316_create_plug_features.rb
224
255
  - db/migrate/20180128202026_add_notice_to_plug_features.rb
256
+ - db/migrate/20180403024712_create_plug_site_notices.rb
257
+ - db/migrate/20180424015828_add_theme_to_plug_site_notice.rb
225
258
  - lib/generators/plug/install_generator.rb
226
259
  - lib/generators/plug/templates/plug.rb
227
260
  - lib/plug.rb
@@ -249,8 +282,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
249
282
  - !ruby/object:Gem::Version
250
283
  version: '0'
251
284
  requirements: []
252
- rubyforge_project:
253
- rubygems_version: 2.6.13
285
+ rubygems_version: 3.0.3
254
286
  signing_key:
255
287
  specification_version: 4
256
288
  summary: Rails engine that can plug/unplug features