oxen 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 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: []