plug 0.1.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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +28 -0
  4. data/Rakefile +22 -0
  5. data/app/assets/config/plug_manifest.js +2 -0
  6. data/app/assets/javascripts/plug/application.js +15 -0
  7. data/app/assets/javascripts/plug/features.js +2 -0
  8. data/app/assets/stylesheets/plug/_settings.scss +865 -0
  9. data/app/assets/stylesheets/plug/application.scss +35 -0
  10. data/app/assets/stylesheets/plug/blocks/_nav.scss +6 -0
  11. data/app/assets/stylesheets/plug/blocks/_plugs.scss +17 -0
  12. data/app/assets/stylesheets/plug/features.scss +3 -0
  13. data/app/assets/stylesheets/plug/foundation_and_overrides.scss +59 -0
  14. data/app/assets/stylesheets/plug/mixins/_bem.scss +17 -0
  15. data/app/assets/stylesheets/plug/partials/_main.scss +3 -0
  16. data/app/assets/stylesheets/plug/partials/_utils.scss +3 -0
  17. data/app/assets/stylesheets/plug/scaffolds.scss +84 -0
  18. data/app/assets/stylesheets/plug/variables/_colors.scss +5 -0
  19. data/app/assets/stylesheets/scaffolds.scss +84 -0
  20. data/app/controllers/plug/application_controller.rb +5 -0
  21. data/app/controllers/plug/features_controller.rb +71 -0
  22. data/app/helpers/plug/application_helper.rb +4 -0
  23. data/app/jobs/plug/application_job.rb +4 -0
  24. data/app/mailers/plug/application_mailer.rb +6 -0
  25. data/app/models/plug/application_record.rb +5 -0
  26. data/app/models/plug/feature.rb +30 -0
  27. data/app/views/layouts/plug/application.html.haml +11 -0
  28. data/app/views/plug/features/_form.html.haml +19 -0
  29. data/app/views/plug/features/edit.html.haml +7 -0
  30. data/app/views/plug/features/index.html.haml +27 -0
  31. data/app/views/plug/features/new.html.haml +5 -0
  32. data/app/views/plug/features/show.html.haml +18 -0
  33. data/app/views/plug/shared/_head.html.haml +8 -0
  34. data/app/views/plug/shared/_nav.html.haml +6 -0
  35. data/config/routes.rb +5 -0
  36. data/db/migrate/20171207020316_create_plug_features.rb +15 -0
  37. data/lib/plug/engine.rb +14 -0
  38. data/lib/plug/version.rb +3 -0
  39. data/lib/plug.rb +13 -0
  40. data/lib/tasks/plug_tasks.rake +4 -0
  41. metadata +251 -0
@@ -0,0 +1,35 @@
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 file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's 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/SCSS
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_self
14
+ */
15
+
16
+ @import 'scaffolds';
17
+
18
+ // Variables
19
+ @import 'variables/colors';
20
+
21
+ // Third-party
22
+ // If you need foundation and font-awesome, uncomment the line in gemspec
23
+ // @import 'foundation_and_overrides';
24
+ // @import 'font-awesome';
25
+
26
+ // Mixins
27
+ @import 'mixins/bem';
28
+
29
+ // Partials
30
+ @import 'partials/main';
31
+ @import 'partials/utils';
32
+
33
+ // Blocks
34
+ @import 'blocks/nav';
35
+ @import 'blocks/plugs';
@@ -0,0 +1,6 @@
1
+ .nav {
2
+ @include element('logo') {
3
+ color: $studio;
4
+ font-weight: 700;
5
+ }
6
+ }
@@ -0,0 +1,17 @@
1
+ .plugs {
2
+ margin-top: 2rem;
3
+
4
+ @include element('content') {
5
+ background: $white;
6
+ border: 1px solid $gallery;
7
+
8
+ @include element('item') {
9
+ padding: .5rem;
10
+ border-bottom: 1px solid $gallery;
11
+
12
+ &:last-of-type {
13
+ border-bottom: none;
14
+ }
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,3 @@
1
+ // Place all the styles related to the Features controller here.
2
+ // They will automatically be included in application.css.
3
+ // You can use Sass (SCSS) here: http://sass-lang.com/
@@ -0,0 +1,59 @@
1
+ @charset 'utf-8';
2
+
3
+ @import 'settings';
4
+ @import 'foundation';
5
+
6
+ // 1. Global
7
+ // ---------
8
+ $body-background: $alabaster;
9
+
10
+ // If you'd like to include motion-ui the foundation-rails gem comes prepackaged with it, uncomment the 3 @imports, if you are not using the gem you need to install the motion-ui sass package.
11
+ //
12
+ // @import 'motion-ui/motion-ui';
13
+
14
+ // We include everything by default. To slim your CSS, remove components you don't use.
15
+
16
+ @include foundation-global-styles;
17
+ // @include foundation-grid;
18
+ @include foundation-flex-classes;
19
+ @include foundation-flex-grid;
20
+ @include foundation-typography;
21
+ @include foundation-button;
22
+ @include foundation-forms;
23
+ @include foundation-visibility-classes;
24
+ @include foundation-float-classes;
25
+ // @include foundation-accordion;
26
+ // @include foundation-accordion-menu;
27
+ // @include foundation-badge;
28
+ // @include foundation-breadcrumbs;
29
+ @include foundation-button-group;
30
+ @include foundation-callout;
31
+ // @include foundation-card;
32
+ @include foundation-close-button;
33
+ // @include foundation-drilldown-menu;
34
+ // @include foundation-dropdown;
35
+ // @include foundation-dropdown-menu;
36
+ @include foundation-responsive-embed;
37
+ @include foundation-label;
38
+ // @include foundation-media-object;
39
+ // @include foundation-menu;
40
+ // @include foundation-menu-icon;
41
+ // @include foundation-off-canvas;
42
+ // @include foundation-orbit;
43
+ // @include foundation-pagination;
44
+ // @include foundation-progress-bar;
45
+ // @include foundation-slider;
46
+ // @include foundation-sticky;
47
+ @include foundation-reveal;
48
+ @include foundation-switch;
49
+ @include foundation-table;
50
+ // @include foundation-tabs;
51
+ @include foundation-thumbnail;
52
+ @include foundation-title-bar;
53
+ @include foundation-tooltip;
54
+ @include foundation-top-bar;
55
+
56
+ // If you'd like to include motion-ui the foundation-rails gem comes prepackaged with it, uncomment the 3 @imports, if you are not using the gem you need to install the motion-ui sass package.
57
+ //
58
+ // @include motion-ui-transitions;
59
+ // @include motion-ui-animations;
@@ -0,0 +1,17 @@
1
+ /// Block Element
2
+ /// @access public
3
+ /// @param {String} $element - Element's name
4
+ @mixin element($element) {
5
+ &__#{$element} {
6
+ @content;
7
+ }
8
+ }
9
+
10
+ /// Block Modifier
11
+ /// @access public
12
+ /// @param {String} $modifier - Modifier's name
13
+ @mixin modifier($modifier) {
14
+ &--#{$modifier} {
15
+ @content;
16
+ }
17
+ }
@@ -0,0 +1,3 @@
1
+ body {
2
+ margin-top: 1.5rem;
3
+ }
@@ -0,0 +1,3 @@
1
+ .strong {
2
+ font-weight: 700;
3
+ }
@@ -0,0 +1,84 @@
1
+ body {
2
+ background-color: #fff;
3
+ color: #333;
4
+ margin: 33px;
5
+ font-family: verdana, arial, helvetica, sans-serif;
6
+ font-size: 13px;
7
+ line-height: 18px;
8
+ }
9
+
10
+ p, ol, ul, td {
11
+ font-family: verdana, arial, helvetica, sans-serif;
12
+ font-size: 13px;
13
+ line-height: 18px;
14
+ }
15
+
16
+ pre {
17
+ background-color: #eee;
18
+ padding: 10px;
19
+ font-size: 11px;
20
+ }
21
+
22
+ a {
23
+ color: #000;
24
+
25
+ &:visited {
26
+ color: #666;
27
+ }
28
+
29
+ &:hover {
30
+ color: #fff;
31
+ background-color: #000;
32
+ }
33
+ }
34
+
35
+ th {
36
+ padding-bottom: 5px;
37
+ }
38
+
39
+ td {
40
+ padding: 0 5px 7px;
41
+ }
42
+
43
+ div {
44
+ &.field, &.actions {
45
+ margin-bottom: 10px;
46
+ }
47
+ }
48
+
49
+ #notice {
50
+ color: green;
51
+ }
52
+
53
+ .field_with_errors {
54
+ padding: 2px;
55
+ background-color: red;
56
+ display: table;
57
+ }
58
+
59
+ #error_explanation {
60
+ width: 450px;
61
+ border: 2px solid red;
62
+ padding: 7px 7px 0;
63
+ margin-bottom: 20px;
64
+ background-color: #f0f0f0;
65
+
66
+ h2 {
67
+ text-align: left;
68
+ font-weight: bold;
69
+ padding: 5px 5px 5px 15px;
70
+ font-size: 12px;
71
+ margin: -7px -7px 0;
72
+ background-color: #c00;
73
+ color: #fff;
74
+ }
75
+
76
+ ul li {
77
+ font-size: 12px;
78
+ list-style: square;
79
+ }
80
+ }
81
+
82
+ label {
83
+ display: block;
84
+ }
@@ -0,0 +1,5 @@
1
+ $white: #ffffff;
2
+ $studio: #3F46AD;
3
+ $pale-sky: #637381;
4
+ $alabaster: #f7f7f7;
5
+ $gallery: #ebebeb;
@@ -0,0 +1,84 @@
1
+ body {
2
+ background-color: #fff;
3
+ color: #333;
4
+ margin: 33px;
5
+ font-family: verdana, arial, helvetica, sans-serif;
6
+ font-size: 13px;
7
+ line-height: 18px;
8
+ }
9
+
10
+ p, ol, ul, td {
11
+ font-family: verdana, arial, helvetica, sans-serif;
12
+ font-size: 13px;
13
+ line-height: 18px;
14
+ }
15
+
16
+ pre {
17
+ background-color: #eee;
18
+ padding: 10px;
19
+ font-size: 11px;
20
+ }
21
+
22
+ a {
23
+ color: #000;
24
+
25
+ &:visited {
26
+ color: #666;
27
+ }
28
+
29
+ &:hover {
30
+ color: #fff;
31
+ background-color: #000;
32
+ }
33
+ }
34
+
35
+ th {
36
+ padding-bottom: 5px;
37
+ }
38
+
39
+ td {
40
+ padding: 0 5px 7px;
41
+ }
42
+
43
+ div {
44
+ &.field, &.actions {
45
+ margin-bottom: 10px;
46
+ }
47
+ }
48
+
49
+ #notice {
50
+ color: green;
51
+ }
52
+
53
+ .field_with_errors {
54
+ padding: 2px;
55
+ background-color: red;
56
+ display: table;
57
+ }
58
+
59
+ #error_explanation {
60
+ width: 450px;
61
+ border: 2px solid red;
62
+ padding: 7px 7px 0;
63
+ margin-bottom: 20px;
64
+ background-color: #f0f0f0;
65
+
66
+ h2 {
67
+ text-align: left;
68
+ font-weight: bold;
69
+ padding: 5px 5px 5px 15px;
70
+ font-size: 12px;
71
+ margin: -7px -7px 0;
72
+ background-color: #c00;
73
+ color: #fff;
74
+ }
75
+
76
+ ul li {
77
+ font-size: 12px;
78
+ list-style: square;
79
+ }
80
+ }
81
+
82
+ label {
83
+ display: block;
84
+ }
@@ -0,0 +1,5 @@
1
+ module Plug
2
+ class ApplicationController < ActionController::Base
3
+ protect_from_forgery with: :exception
4
+ end
5
+ end
@@ -0,0 +1,71 @@
1
+ require_dependency 'plug/application_controller'
2
+
3
+ module Plug
4
+ class FeaturesController < ApplicationController
5
+ if Rails.version.to_i < 5
6
+ before_filter :set_feature, only: [:show, :edit, :update, :destroy]
7
+ else
8
+ before_action :set_feature, only: [:show, :edit, :update, :destroy]
9
+ end
10
+
11
+ # GET /features
12
+ def index
13
+ @features = Feature.all
14
+ end
15
+
16
+ # GET /features/1
17
+ def show
18
+ end
19
+
20
+ # GET /features/new
21
+ def new
22
+ @feature = Feature.new
23
+ end
24
+
25
+ # GET /features/1/edit
26
+ def edit
27
+ end
28
+
29
+ # POST /features
30
+ def create
31
+ @feature = Feature.new(feature_params)
32
+
33
+ if @feature.save
34
+ redirect_to @feature, notice: 'Feature was successfully created.'
35
+ else
36
+ render :new
37
+ end
38
+ end
39
+
40
+ # PATCH/PUT /features/1
41
+ def update
42
+ if @feature.update_attributes(feature_params)
43
+ redirect_to @feature, notice: 'Feature was successfully updated.'
44
+ else
45
+ render :edit
46
+ end
47
+ end
48
+
49
+ # DELETE /features/1
50
+ def destroy
51
+ @feature.destroy
52
+ redirect_to features_url, notice: 'Feature was successfully destroyed.'
53
+ end
54
+
55
+ private
56
+ # Use callbacks to share common setup or constraints between actions.
57
+ def set_feature
58
+ @feature = Feature.find(params[:id])
59
+ end
60
+
61
+ # Only allow a trusted parameter "white list" through.
62
+ # TODO: Strong params not available for older Rails
63
+ def feature_params
64
+ if Rails.version.to_i < 5
65
+ ActiveSupport::HashWithIndifferentAccess.new(params[:feature])
66
+ else
67
+ params.require(:feature).permit(:name, :description, :state)
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,4 @@
1
+ module Plug
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Plug
2
+ class ApplicationJob < ActiveJob::Base
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ module Plug
2
+ class ApplicationMailer < ActionMailer::Base
3
+ default from: 'from@example.com'
4
+ layout 'mailer'
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ module Plug
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ end
@@ -0,0 +1,30 @@
1
+ module Plug
2
+ class Feature < ApplicationRecord
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
29
+ end
30
+ end
@@ -0,0 +1,11 @@
1
+ !!!
2
+ %html{ lang: 'en' }
3
+ = render 'plug/shared/head'
4
+
5
+ %body
6
+ = render 'plug/shared/nav'
7
+
8
+ .container
9
+ = yield
10
+
11
+ /= render 'shared/footer'
@@ -0,0 +1,19 @@
1
+ = form_for @feature do |f|
2
+ - if @feature.errors.any?
3
+ #error_explanation
4
+ %h2= "#{pluralize(@feature.errors.count, "error")} prohibited this feature from being saved:"
5
+ %ul
6
+ - @feature.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 :description
14
+ = f.text_area :description, rows: 5
15
+ .field
16
+ = f.label :state
17
+ = f.select :state, ['enabled', 'disabled']
18
+ .actions
19
+ = f.submit 'Save'
@@ -0,0 +1,7 @@
1
+ %h1 Editing feature
2
+
3
+ = render 'form'
4
+
5
+ = link_to 'Show', @feature
6
+ \|
7
+ = link_to 'Back', features_path
@@ -0,0 +1,27 @@
1
+ %h1 Listing features
2
+
3
+ %table
4
+ %thead
5
+ %tr
6
+ %th Name
7
+ %th Description
8
+ %th Slug
9
+ %th State
10
+ %th
11
+ %th
12
+ %th
13
+
14
+ %tbody
15
+ - @features.each do |feature|
16
+ %tr
17
+ %td= feature.name
18
+ %td= feature.description
19
+ %td= feature.slug
20
+ %td= feature.state
21
+ %td= link_to 'Show', feature
22
+ %td= link_to 'Edit', edit_feature_path(feature)
23
+ %td= link_to 'Destroy', feature, method: :delete, data: { confirm: 'Are you sure?' }
24
+
25
+ %br
26
+
27
+ = link_to 'New Feature', new_feature_path
@@ -0,0 +1,5 @@
1
+ %h1 New feature
2
+
3
+ = render 'form'
4
+
5
+ = link_to 'Back', features_path
@@ -0,0 +1,18 @@
1
+ %p#notice= notice
2
+
3
+ %p
4
+ %b Name:
5
+ = @feature.name
6
+ %p
7
+ %b Description:
8
+ = @feature.description
9
+ %p
10
+ %b Slug:
11
+ = @feature.slug
12
+ %p
13
+ %b State:
14
+ = @feature.state
15
+
16
+ = link_to 'Edit', edit_feature_path(@feature)
17
+ \|
18
+ = link_to 'Back', features_path
@@ -0,0 +1,8 @@
1
+ %head
2
+ %meta{charset: 'utf-8'}/
3
+ %meta{content: 'width=device-width, initial-scale=1.0', name: 'viewport'}/
4
+ %title Plug
5
+
6
+ = stylesheet_link_tag 'plug/application', media: 'all'
7
+ = javascript_include_tag 'plug/application'
8
+ = csrf_meta_tags
@@ -0,0 +1,6 @@
1
+ %nav.clearfix.nav
2
+ .row.align-middle.small-unstack
3
+ .columns
4
+ %h4
5
+ = link_to 'Plug', plug.root_path, class: 'nav__logo'
6
+ %small /Unplug features
data/config/routes.rb ADDED
@@ -0,0 +1,5 @@
1
+ Plug::Engine.routes.draw do
2
+ root to: 'features#index'
3
+
4
+ resources :features
5
+ end
@@ -0,0 +1,15 @@
1
+ class CreatePlugFeatures < ActiveRecord::Migration
2
+ def change
3
+ create_table :plug_features do |t|
4
+ t.string :name
5
+ t.string :description
6
+ t.string :slug
7
+ t.string :state
8
+
9
+ t.timestamps
10
+ end
11
+
12
+ add_index :plug_features, :name
13
+ add_index :plug_features, :slug
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ # Require engine dependencies
2
+ require 'haml-rails'
3
+ require 'aasm'
4
+ require 'jquery-rails'
5
+
6
+ module Plug
7
+ class Engine < ::Rails::Engine
8
+ isolate_namespace Plug
9
+
10
+ config.generators do |g|
11
+ g.test_framework :rspec
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,3 @@
1
+ module Plug
2
+ VERSION = '0.1.1'
3
+ end
data/lib/plug.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'plug/engine'
2
+
3
+ module Plug
4
+ extend self
5
+
6
+ def enabled?(arg)
7
+ arg = arg.to_s if arg.is_a? Symbol
8
+ feature = Plug::Feature.slug_and_name(arg).first
9
+
10
+ return false unless feature
11
+ return feature.enabled?
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :plug do
3
+ # # Task goes here
4
+ # end