oxen 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 71813f0499bcf1be30d896a74cd0c72bd1bbdc4e
4
+ data.tar.gz: f34e4b6f4a4e2943a86bfbefd18bc1b24cc4ba9d
5
+ SHA512:
6
+ metadata.gz: 14ee6cfa9cdee514c0307c107249da906f6792e761dbb8e7bb467fb5fda81d1e5e4659b42ebf0cf27a198c16d5c48e63020a0f5dc3e41d7b9393cf612127302f
7
+ data.tar.gz: 1087a2d5f74667a1cd44feb6f2de5db961c014b991648426f8e886582338b9bee9106082b29764645aaa384ef9a06676e72b1a2d37b55bdcdc694a82894271f7
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2017 zxy
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # Oxen
2
+ Short description and motivation.
3
+
4
+ ## Usage
5
+ How to use my plugin.
6
+
7
+ ## Installation
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'oxen'
12
+ ```
13
+
14
+ And then execute:
15
+ ```bash
16
+ $ bundle
17
+ ```
18
+
19
+ Or install it yourself as:
20
+ ```bash
21
+ $ gem install oxen
22
+ ```
23
+
24
+ ## Contributing
25
+ Contribution directions go here.
26
+
27
+ ## License
28
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,34 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Oxen'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+
18
+
19
+ load 'rails/tasks/statistics.rake'
20
+
21
+
22
+
23
+ require 'bundler/gem_tasks'
24
+
25
+ require 'rake/testtask'
26
+
27
+ Rake::TestTask.new(:test) do |t|
28
+ t.libs << 'test'
29
+ t.pattern = 'test/**/*_test.rb'
30
+ t.verbose = false
31
+ end
32
+
33
+
34
+ task default: :test
@@ -0,0 +1,2 @@
1
+ //= link_directory ../javascripts/oxen .js
2
+ //= link_directory ../stylesheets/oxen .css
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,16 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file. JavaScript code in this file should be added after the last require_* statement.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require bootstrap-sprockets
16
+ //= require_tree .
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,6 @@
1
+ /*
2
+ *= require_tree .
3
+ *= require_self
4
+ */
5
+ @import "bootstrap-sprockets";
6
+ @import "bootstrap";
@@ -0,0 +1,80 @@
1
+ body {
2
+ background-color: #fff;
3
+ color: #333;
4
+ margin: 33px;
5
+ }
6
+
7
+ body, p, ol, ul, td {
8
+ font-family: verdana, arial, helvetica, sans-serif;
9
+ font-size: 13px;
10
+ line-height: 18px;
11
+ }
12
+
13
+ pre {
14
+ background-color: #eee;
15
+ padding: 10px;
16
+ font-size: 11px;
17
+ }
18
+
19
+ a {
20
+ color: #000;
21
+ }
22
+
23
+ a:visited {
24
+ color: #666;
25
+ }
26
+
27
+ a:hover {
28
+ color: #fff;
29
+ background-color: #000;
30
+ }
31
+
32
+ th {
33
+ padding-bottom: 5px;
34
+ }
35
+
36
+ td {
37
+ padding: 0 5px 7px;
38
+ }
39
+
40
+ div.field,
41
+ div.actions {
42
+ margin-bottom: 10px;
43
+ }
44
+
45
+ #notice {
46
+ color: green;
47
+ }
48
+
49
+ .field_with_errors {
50
+ padding: 2px;
51
+ background-color: red;
52
+ display: table;
53
+ }
54
+
55
+ #error_explanation {
56
+ width: 450px;
57
+ border: 2px solid red;
58
+ padding: 7px 7px 0;
59
+ margin-bottom: 20px;
60
+ background-color: #f0f0f0;
61
+ }
62
+
63
+ #error_explanation h2 {
64
+ text-align: left;
65
+ font-weight: bold;
66
+ padding: 5px 5px 5px 15px;
67
+ font-size: 12px;
68
+ margin: -7px -7px 0;
69
+ background-color: #c00;
70
+ color: #fff;
71
+ }
72
+
73
+ #error_explanation ul li {
74
+ font-size: 12px;
75
+ list-style: square;
76
+ }
77
+
78
+ label {
79
+ display: block;
80
+ }
@@ -0,0 +1,86 @@
1
+ require_dependency "oxen/application_controller"
2
+
3
+ module Oxen
4
+ class AccountsController < ApplicationController
5
+ before_action :need_login
6
+ before_action :need_root, except: [:changepsd]
7
+ before_action :set_account, only: [:show, :edit, :update, :destroy]
8
+ before_action :pageit, only: [:index, :search]
9
+ before_action :is_root?, only: [:destory]
10
+
11
+ def changepsd
12
+ @user = Account.where(login: session[:login]).first
13
+ render :changepsd and return if request.method == "GET"
14
+ if params[:password] == params[:password_confirmation] and !params[:password].blank?
15
+ @user.password = params[:password]
16
+ if @user.save
17
+ flash[:notice] = "更新成功"
18
+ redirect_to main_app.root_path and return
19
+ else
20
+ flash[:alert] = "更新失败"
21
+ redirect_to main_app.root_path and return
22
+ end
23
+ else
24
+ flash[:alert] = "信息不一致"
25
+ redirect_to changepsd_path and return
26
+ end
27
+ end
28
+
29
+ # GET /accounts
30
+ def index
31
+ @accounts = Account.page params[:page]
32
+ end
33
+
34
+ # GET /accounts/1
35
+ def show
36
+ end
37
+
38
+ # GET /accounts/new
39
+ def new
40
+ @account = Account.new
41
+ end
42
+
43
+ # GET /accounts/1/edit
44
+ def edit
45
+ end
46
+
47
+ # POST /accounts
48
+ def create
49
+ @account = Account.new(account_params)
50
+
51
+ if @account.save
52
+ redirect_to @account, notice: '帐号创建成功.'
53
+ else
54
+ render :new
55
+ end
56
+ end
57
+
58
+ # PATCH/PUT /accounts/1
59
+ def update
60
+ if @account.update(account_params)
61
+ redirect_to @account, notice: '帐号更新成功'
62
+ else
63
+ render :edit
64
+ end
65
+ end
66
+
67
+ # DELETE /accounts/1
68
+ def destroy
69
+ @account.destroy
70
+ redirect_to accounts_url, notice: '帐号已经删除.'
71
+ end
72
+
73
+ private
74
+ # Use callbacks to share common setup or constraints between actions.
75
+ def set_account
76
+ @account = Account.find(params[:id])
77
+ end
78
+
79
+ # Only allow a trusted parameter "white list" through.
80
+ def account_params
81
+ params.require(:account).permit(:login, :password, :tags_list, :avatar).tap do |account|
82
+ account[:avatar] = attachit("account",:avatar,width: 64)
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,7 @@
1
+ module Oxen
2
+ class ApplicationController < ::ApplicationController
3
+ protect_from_forgery with: :exception
4
+ need_role :root,:teacher,:student
5
+ helper_method :is_login?,:is_root?,:need_login
6
+ end
7
+ end
@@ -0,0 +1,35 @@
1
+ require_dependency "oxen/application_controller"
2
+ require "digest"
3
+
4
+ module Oxen
5
+ class AuthController < ApplicationController
6
+ def auth
7
+ unless verify_rucaptcha?
8
+ flash[:alert] = "验证码出错"
9
+ redirect_to login_path and return
10
+ end
11
+
12
+ login = params[:login]
13
+ psd = params[:password]
14
+ hsh_psd = Digest::SHA2.hexdigest(psd)
15
+ ac = Account.where(login: login,hashed_password: hsh_psd).first
16
+ if ac
17
+ session[:login] = login
18
+ flash[:notice] = "登录成功"
19
+ redirect_to main_app.root_path and return
20
+ else
21
+ flash[:alert] = "登录失败"
22
+ redirect_to login_path and return
23
+ end
24
+ end
25
+
26
+ def login
27
+ end
28
+
29
+ def logout
30
+ reset_session
31
+ flash[:notice] = "成功退出"
32
+ redirect_to main_app.root_path
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,4 @@
1
+ module Oxen
2
+ module AccountsHelper
3
+ end
4
+ end
@@ -0,0 +1,18 @@
1
+ module Oxen
2
+ module ApplicationHelper
3
+ def is_login?
4
+ !!session[:login]
5
+ end
6
+
7
+ def need_login
8
+ unless is_login?
9
+ flash[:alert] = "需要登录"
10
+ redirect_to login_path and return
11
+ end
12
+ end
13
+
14
+ def is_root?
15
+ session[:login] == "root"
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,4 @@
1
+ module Oxen
2
+ module AuthHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Oxen
2
+ class ApplicationJob < ActiveJob::Base
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ module Oxen
2
+ class ApplicationMailer < ActionMailer::Base
3
+ default from: 'from@example.com'
4
+ layout 'mailer'
5
+ end
6
+ end
@@ -0,0 +1,32 @@
1
+ module Oxen
2
+ class Account
3
+ include Mongoid::Document
4
+ include Mongoid::Timestamps
5
+ include ::Plug::Mixin
6
+ array_attr :tags
7
+ attr_accessor :password
8
+ field :login, type: String
9
+ field :tags, type: Array
10
+ field :hashed_password, type: String
11
+ field :avatar, type: Hash
12
+
13
+ default_scope -> {where(:login.ne => "root")}
14
+
15
+ attr_readonly :login
16
+
17
+ validates :login, :password, presence: true
18
+ validates :login, uniqueness: true
19
+ validates :password, confirmation: true
20
+ validates :password, length: { minimum: 6 , message: "密码太短"}
21
+ before_save :hashit
22
+
23
+ after_destroy :remove_avatar
24
+
25
+ private
26
+
27
+ def hashit
28
+ self.hashed_password = Digest::SHA2.hexdigest(self.password)
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,5 @@
1
+ module Oxen
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ end
@@ -0,0 +1,29 @@
1
+ = form_for @account do |f|
2
+ - if @account.errors.any?
3
+ #error_explanation
4
+ h2 = "#{pluralize(@account.errors.count, "error")} prohibited this account from being saved:"
5
+ ul
6
+ - @account.errors.full_messages.each do |message|
7
+ li = message
8
+
9
+ - if params[:action] != "edit"
10
+ .form-group
11
+ = f.label :帐号
12
+ = f.text_field :login, class: "form-control"
13
+ .form-group
14
+ = f.label :密码
15
+ = f.password_field :password, class: "form-control"
16
+ .form-group
17
+ = f.label :密码确认
18
+ = f.password_field :password_confirmation, class: "form-control"
19
+
20
+ .form-group
21
+ = f.label :标签
22
+ = f.text_field :tags_list, class: "form-control"
23
+
24
+ .form-group
25
+ = f.label :头像
26
+ = f.file_field :avatar, class: "form-control"
27
+
28
+ p.actions
29
+ = f.submit "提交", class: "btn btn-primary"
@@ -0,0 +1,12 @@
1
+ h2 align="center"
2
+ = icon("user","修改密码#{session[:login]}")
3
+ .container
4
+ .row
5
+ .col-md-4.col-md-offset-4
6
+ = form_tag changepsd_path,method: "post",class: " panel panel-default form-horizontal" do
7
+ .panel-body
8
+ label 新密码:
9
+ p: input type="password" name="password" class="form-control"
10
+ label 确认密码:
11
+ p: input type="password" name="password_confirmation" class="form-control"
12
+ p =<> submit_tag "修改密码", class: "btn btn-primary "
@@ -0,0 +1,4 @@
1
+ .row
2
+ .col-md-4.col-md-offset-4
3
+ h1 编辑帐号
4
+ == render 'form'
@@ -0,0 +1,31 @@
1
+ h1.text-center 帐号列表
2
+
3
+ table.table.table-striped.table-hover.table-bordered
4
+ thead
5
+ tr
6
+ th
7
+ th 登录名
8
+ th 标签
9
+ th 头像
10
+ th
11
+
12
+ tbody
13
+ - @accounts.each do |account|
14
+ tr
15
+ td = @num+=1
16
+ td = account.login
17
+ td = account.tags_list
18
+ td
19
+ - if account.avatar
20
+ - if account.avatar["content_type"].include?("image")
21
+ = image_tag(main_app.see_path(account.avatar["grid_id"]))
22
+ td
23
+ =<> link_to icon("eye"), account, class: "btn btn-default"
24
+ - if is_root?
25
+ =<> link_to icon('edit'), edit_account_path(account), class: "btn btn-default"
26
+ =<> link_to icon('trash'), account, data: { confirm: 'Are you sure?' }, method: :delete, class: "btn btn-default"
27
+
28
+ br
29
+
30
+ = paginate @accounts
31
+ p = link_to '新建帐号', new_account_path, class: "btn btn-primary"
@@ -0,0 +1,4 @@
1
+ .row
2
+ .col-md-4.col-md-offset-4
3
+ h1 新建帐号
4
+ == render 'form'
@@ -0,0 +1,9 @@
1
+ p
2
+ strong 登录名:
3
+ = @account.login
4
+ p
5
+ strong Role:
6
+ = @account.tags_list
7
+ - if @account.avatar
8
+ - if @account.avatar["content_type"].include?("image")
9
+ = image_tag(main_app.see_path(@account.avatar["grid_id"]))
@@ -0,0 +1,35 @@
1
+ h2.text-center =<> icon("user") + ' 登 录'
2
+ br
3
+ .row
4
+ .col-md-4
5
+ .col-md-4
6
+ = form_tag auth_path, role: "form", class: "panel panel-default loginForm form-horizontal" do
7
+ .panel-body
8
+ strong 登录名
9
+ br
10
+ = text_field_tag :login,nil,class: "form-control"
11
+ br
12
+ strong 密码:
13
+ br
14
+ = password_field_tag :password,nil, class: "form-control"
15
+ p.text-center
16
+ a.rucaptcha-image-box href="#" = rucaptcha_image_tag
17
+ p
18
+ = rucaptcha_input_tag(class: 'form-control code',placeholder: "输入验证码")
19
+ .panel-footer
20
+ = submit_tag '登录', class: "btn-block btn-primary btn"
21
+
22
+ javascript:
23
+ $(".loginForm").submit(function(event){
24
+ if($("input.code").val()==""){alert("请填写验证码");return false;};
25
+ if($("input.login").val()==""){alert("登录名不能为空");return false;};
26
+ if($("input.password").val()==""){alert("密码不能为空");return false;};
27
+ });
28
+ $("a.rucaptcha-image-box").click(function(e){
29
+ e.preventDefault();
30
+ btn = $(e.currentTarget);
31
+ img = btn.find('img:first');
32
+ currentSrc = img.attr('src');
33
+ img.attr('src', currentSrc.split('?')[0] + '?' + (new Date()).getTime());
34
+ return false;
35
+ });
data/config/routes.rb ADDED
@@ -0,0 +1,8 @@
1
+ Oxen::Engine.routes.draw do
2
+ post 'auth' => "auth#auth", as: "auth"
3
+ get 'login' => "auth#login" ,as: "login"
4
+ get 'logout' => "auth#logout", as: "logout"
5
+ match 'changepsd' => "accounts#changepsd", as: "changepsd",via: [:get,:post]
6
+ resources :accounts
7
+ root to: "accounts#index"
8
+ end
@@ -0,0 +1,19 @@
1
+ module Oxen
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace Oxen
4
+
5
+ initializer 'oxen.mount' do |app|
6
+ app.routes.preprend do
7
+ mount Oxen::Engine => "/"
8
+ end
9
+ end
10
+ end
11
+ end
12
+
13
+ ActiveSupport.on_load :action_controller do
14
+ ActionController::Base.include Oxen::ApplicationHelper
15
+ ActionController::Base.helper_method Oxen::ApplicationHelper
16
+ end
17
+ #ActiveSupport.on_load :action_view do
18
+ # Oxen::ApplicationHelper
19
+ #end
@@ -0,0 +1,3 @@
1
+ module Oxen
2
+ VERSION = '0.0.1'
3
+ end
data/lib/oxen.rb ADDED
@@ -0,0 +1,4 @@
1
+ require "oxen/engine"
2
+
3
+ module Oxen
4
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :oxen do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oxen
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - zxy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 5.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 5.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: slim-rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 3.1.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 3.1.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: mongoid
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 6.1.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 6.1.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: zbox
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.1.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: bootstrap-sass
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.3.7
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.3.7
83
+ description: simple user and account engine
84
+ email:
85
+ - zxy@qq.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - MIT-LICENSE
91
+ - README.md
92
+ - Rakefile
93
+ - app/assets/config/oxen_manifest.js
94
+ - app/assets/javascripts/oxen/accounts.js
95
+ - app/assets/javascripts/oxen/application.js
96
+ - app/assets/stylesheets/oxen/accounts.css
97
+ - app/assets/stylesheets/oxen/application.scss
98
+ - app/assets/stylesheets/scaffold.css
99
+ - app/controllers/oxen/accounts_controller.rb
100
+ - app/controllers/oxen/application_controller.rb
101
+ - app/controllers/oxen/auth_controller.rb
102
+ - app/helpers/oxen/accounts_helper.rb
103
+ - app/helpers/oxen/application_helper.rb
104
+ - app/helpers/oxen/auth_helper.rb
105
+ - app/jobs/oxen/application_job.rb
106
+ - app/mailers/oxen/application_mailer.rb
107
+ - app/models/oxen/account.rb
108
+ - app/models/oxen/application_record.rb
109
+ - app/views/oxen/accounts/_form.html.slim
110
+ - app/views/oxen/accounts/changepsd.slim
111
+ - app/views/oxen/accounts/edit.html.slim
112
+ - app/views/oxen/accounts/index.html.slim
113
+ - app/views/oxen/accounts/new.html.slim
114
+ - app/views/oxen/accounts/show.html.slim
115
+ - app/views/oxen/auth/login.html.slim
116
+ - config/routes.rb
117
+ - lib/oxen.rb
118
+ - lib/oxen/engine.rb
119
+ - lib/oxen/version.rb
120
+ - lib/tasks/oxen_tasks.rake
121
+ homepage: https://www.zapps.online
122
+ licenses:
123
+ - MIT
124
+ metadata: {}
125
+ post_install_message:
126
+ rdoc_options: []
127
+ require_paths:
128
+ - lib
129
+ required_ruby_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ required_rubygems_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ requirements: []
140
+ rubyforge_project:
141
+ rubygems_version: 2.6.8
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: user and account engine.
145
+ test_files: []