releasable 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: 94ec222a158bd97ecda74dfe54686d6e732ad0ba
4
+ data.tar.gz: 8841c1c6cfe67836e31527df7ada7a6dfcc9182f
5
+ SHA512:
6
+ metadata.gz: 78ebf52d51fb479d9aee023e61a4c5b55e31d6c11199570ec14cd7db2b00fbc598556d616cd0d90ef8fdd1ab469f1597cea252116bb367b025f5bd5cef9d0fb2
7
+ data.tar.gz: e39e852d16746942b48b62ccbc704222ebd0e9b8df9a47756c0994872e7460977f7198a3a880966d875a85015d530bbc215b16f27adb2e99d9e6b65a7fc68870
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2017 Duy Trinh Duc
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/Rakefile ADDED
@@ -0,0 +1,26 @@
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 = 'Releasable'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+ load 'rails/tasks/statistics.rake'
22
+
23
+
24
+
25
+ Bundler::GemHelper.install_tasks
26
+
@@ -0,0 +1,5 @@
1
+ module Releasable
2
+ class ApplicationController < ActionController::Base
3
+ protect_from_forgery with: :exception
4
+ end
5
+ end
@@ -0,0 +1,52 @@
1
+ module Releasable
2
+ class ReleasesController < ApplicationController
3
+ def index
4
+ @releases = Release.all
5
+ end
6
+
7
+ def new
8
+ @release = Release.new
9
+ end
10
+
11
+ def edit
12
+ @release = retrieve_release
13
+ end
14
+
15
+ def create
16
+ @release = Release.new(release_params)
17
+
18
+ if @release.save
19
+ redirect_to releases_path, notice: "Release #{@release.key} has been created"
20
+ else
21
+ render :new
22
+ end
23
+ end
24
+
25
+ def update
26
+ @release = retrieve_release
27
+
28
+ if @release.update(release_params)
29
+ redirect_to releases_path, notice: "Release #{@release.key} has been updated"
30
+ else
31
+ render :edit
32
+ end
33
+ end
34
+
35
+ def destroy
36
+ @release = retrieve_release
37
+ @release.destroy
38
+
39
+ redirect_to releases_path, notice: "Release #{@release.key} has been deleted"
40
+ end
41
+
42
+ private
43
+
44
+ def retrieve_release
45
+ @release = Release.find(params[:id])
46
+ end
47
+
48
+ def release_params
49
+ params.require(:release).permit(:user_ids, :release_all)
50
+ end
51
+ end
52
+ end
File without changes
@@ -0,0 +1,7 @@
1
+ module Releasable
2
+ module ReleasableHelper
3
+ def releasable?(key, user)
4
+ Releasable.can_release?(key, user)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,17 @@
1
+ module Releasable
2
+ class Release < ActiveRecord::Base
3
+ validates :key, presence: true, uniqueness: true
4
+ validates :user_ids, presence: true
5
+
6
+ before_validation :generate_key, on: :create
7
+
8
+ private
9
+
10
+ def generate_key
11
+ self.key = loop do
12
+ random_uuid = SecureRandom.uuid
13
+ break random_uuid unless Release.exists?(key: random_uuid)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Releasable</title>
5
+ <%= stylesheet_link_tag "releasable/application", media: "all" %>
6
+ <%= javascript_include_tag "releasable/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,18 @@
1
+ <%= form_for @release do |f| %>
2
+ <p>
3
+ <%= f.label :user_ids %>
4
+ <%= f.text_field :user_ids %>
5
+
6
+ <br />
7
+ <i>(Separated by comma. E.g 1,2,3)</i>
8
+ </p>
9
+
10
+ <p>
11
+ <%= f.label :release_all %>
12
+ <%= f.check_box :release_all %>
13
+ <br />
14
+ <i>(Be careful when checking this option because the feature will be released for all user)</i>
15
+ </p>
16
+
17
+ <%= f.submit %>
18
+ <% end %>
@@ -0,0 +1,2 @@
1
+ <h1>Edit release</h1>
2
+ <%= render "form" %>
@@ -0,0 +1,37 @@
1
+ <%= link_to "Create release", new_release_path %>
2
+
3
+ <table>
4
+ <thead>
5
+ <tr>
6
+ <th>ID</th>
7
+ <th>Key</th>
8
+ <th>User IDs</th>
9
+ <th>Release All</th>
10
+ <th>Created At</th>
11
+ <th>Updated At</th>
12
+ <th></th>
13
+ <th></th>
14
+ </tr>
15
+ </thead>
16
+
17
+ <tbody>
18
+ <% if @releases.size > 0 %>
19
+ <% @releases.each do |release| %>
20
+ <tr>
21
+ <td><%= release.id %></td>
22
+ <td><%= release.key %></td>
23
+ <td><%= release.user_ids %></td>
24
+ <td><%= release.release_all? %></td>
25
+ <td><%= release.created_at %></td>
26
+ <td><%= release.updated_at %></td>
27
+ <td><%= link_to "Edit", edit_release_path(release) %></td>
28
+ <td><%= link_to "Delete", release, method: :delete, data: { confirm: "Are you sure?" } %></td>
29
+ </tr>
30
+ <% end %>
31
+ <% else %>
32
+ <tr>
33
+ <td colspan="7">No release has been created yet</td>
34
+ </tr>
35
+ <% end %>
36
+ </tbody>
37
+ </table>
@@ -0,0 +1,2 @@
1
+ <h1>Create new release</h1>
2
+ <%= render "form" %>
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+ Releasable::Engine.routes.draw do
2
+ resources :releases, only: [:index, :new, :create, :edit, :update, :destroy]
3
+ end
@@ -0,0 +1,12 @@
1
+ class CreateReleasableReleases < ActiveRecord::Migration
2
+ def change
3
+ create_table :releasable_releases do |t|
4
+ t.string :key
5
+ t.string :user_ids
6
+ t.boolean :release_all, default: false
7
+
8
+ t.timestamps
9
+ end
10
+ add_index :releasable_releases, :key
11
+ end
12
+ end
data/lib/releasable.rb ADDED
@@ -0,0 +1,22 @@
1
+ require "releasable/engine"
2
+
3
+ module Releasable
4
+ ReleasableError = Class.new(StandardError)
5
+
6
+ def self.can_release?(key, user)
7
+ return false if key.nil?
8
+
9
+ release = Releasable::Release.find_by(key: key)
10
+
11
+ if release.present?
12
+ return true if release.release_all?
13
+ return false if user.nil?
14
+ user_ids = release.user_ids.split(",").map(&:strip)
15
+
16
+ raise ReleasableError, "User must have an ID" unless user.respond_to?(:id)
17
+ return user_ids.include?(user.id.to_s)
18
+ end
19
+
20
+ false
21
+ end
22
+ end
@@ -0,0 +1,10 @@
1
+ module Releasable
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace Releasable
4
+
5
+ config.generators do |g|
6
+ g.test_framework :rspec
7
+ g.fixture_replacement :factory_bot, dir: "spec/factories"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module Releasable
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,5 @@
1
+ namespace :releasable do
2
+ task install: :environment do
3
+ Rake::Task["releasable:install:migrations"].invoke
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,125 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: releasable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Duy Trinh Duc
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-11-04 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: 4.1.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5.2'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 4.1.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.2'
33
+ - !ruby/object:Gem::Dependency
34
+ name: sqlite3
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec-rails
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.7'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '3.7'
61
+ - !ruby/object:Gem::Dependency
62
+ name: factory_bot_rails
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '4.8'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '4.8'
75
+ description: Pre-release Ruby On Rails application for white-list users
76
+ email:
77
+ - duytd.hanu@gmail.com
78
+ executables: []
79
+ extensions: []
80
+ extra_rdoc_files: []
81
+ files:
82
+ - MIT-LICENSE
83
+ - Rakefile
84
+ - app/controllers/releasable/application_controller.rb
85
+ - app/controllers/releasable/releases_controller.rb
86
+ - app/helpers/application_helper.rb
87
+ - app/helpers/releasable/releasable_helper.rb
88
+ - app/models/releasable/release.rb
89
+ - app/views/layouts/releasable/application.html.erb
90
+ - app/views/releasable/releases/_form.html.erb
91
+ - app/views/releasable/releases/edit.html.erb
92
+ - app/views/releasable/releases/index.html.erb
93
+ - app/views/releasable/releases/new.html.erb
94
+ - config/routes.rb
95
+ - db/migrate/20171104113256_create_releasable_releases.rb
96
+ - lib/releasable.rb
97
+ - lib/releasable/engine.rb
98
+ - lib/releasable/version.rb
99
+ - lib/tasks/releasable_tasks.rake
100
+ homepage: https://github.com/duytd/releasable
101
+ licenses:
102
+ - MIT
103
+ metadata: {}
104
+ post_install_message:
105
+ rdoc_options: []
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ requirements: []
119
+ rubyforge_project:
120
+ rubygems_version: 2.5.1
121
+ signing_key:
122
+ specification_version: 4
123
+ summary: Pre-release Ruby On Rails application for white-list users
124
+ test_files: []
125
+ has_rdoc: