platforms-core 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +55 -22
- data/lib/generators/platforms/core/base.rb +96 -0
- data/lib/generators/platforms/core/install/USAGE +11 -0
- data/lib/generators/platforms/core/install/install_generator.rb +26 -0
- data/lib/generators/platforms/core/install/templates/platforms_core.rb +13 -0
- data/lib/generators/platforms/core/network/USAGE +14 -0
- data/lib/generators/platforms/core/network/network_generator.rb +19 -0
- data/lib/generators/platforms/core/user/USAGE +14 -0
- data/lib/generators/platforms/core/user/user_generator.rb +19 -0
- data/lib/platforms/core.rb +4 -0
- data/lib/platforms/core/app_network.rb +19 -0
- data/lib/platforms/core/app_user.rb +19 -0
- data/lib/platforms/core/o_auth_2.rb +0 -1
- data/lib/platforms/core/version.rb +1 -1
- metadata +26 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 635a8202983e8824756c06d3d17d240c0f5b7de960da2d962fb566511a8ed517
|
4
|
+
data.tar.gz: 24b2cbf4024362c01ecb502ea933279740ed30f8b758cd0c9d1199f09f4e7685
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3051fc09751fc8f5e0d61fe38f8ed6ff08cca2c87b328416c3f62cab6cdfdde4acb58cfc48b9ddc3bf8df78fc2027dffafbfaac83ea520ac84145132e158829f
|
7
|
+
data.tar.gz: f7294f4060c51e25fffbccaba08010c0baef619f10796b8c621770ca5314a50ea7569c4a3d90c1497e2fe6e25453b33545f77a52e2e5d60f9720bb414374571e
|
data/README.md
CHANGED
@@ -32,55 +32,88 @@ Or install it yourself as:
|
|
32
32
|
$ gem install platforms-core
|
33
33
|
```
|
34
34
|
|
35
|
-
Once the gem is installed, from your Rails directory you will
|
35
|
+
Once the gem is installed, from your Rails directory you will can run the following generator to complete the installation:
|
36
36
|
|
37
37
|
```bash
|
38
|
-
$
|
38
|
+
$ rails generate platforms:core:install
|
39
39
|
```
|
40
40
|
|
41
|
+
This will:
|
42
|
+
|
43
|
+
* Copy a basic initializer to `config/initializers/platforms_core.rb`; and
|
44
|
+
* Install the gem's migrations into your application.
|
45
|
+
|
41
46
|
## Configuration
|
42
47
|
|
43
48
|
REST-based APIs require authentication to get started. Please refer to
|
44
49
|
your platform for instructions on how to do this.
|
45
50
|
|
46
|
-
|
51
|
+
### Starting a New App
|
52
|
+
|
53
|
+
Your application needs to have at least `Network` and `User` models. These can be created by calling the generator:
|
54
|
+
|
55
|
+
```bash
|
56
|
+
$ rails generate platform:core:network foo some_info:string
|
57
|
+
$ rails generate platform:core:user bar user more_info:string
|
58
|
+
```
|
59
|
+
|
60
|
+
Most of the options for the regular ActiveRecord model generator are available, including namespacing and indexing.
|
61
|
+
|
62
|
+
This is roughly equivalent to calling the standard Rails model generators (`rails g model foo some_info:string`), however by using the above version the resulting models are configured by Platforms::Core as the `Network` or `User` models.
|
63
|
+
|
64
|
+
Typically these would be called "Network" and "User", but here we have called them "Foo" and "Bar".
|
65
|
+
|
66
|
+
### Adding to an Existing App
|
67
|
+
|
68
|
+
If you already have `Network` and `User` models (which let's assume are called "Foo" and "Bar" respectively), you can add the relevant configuration by using the generator with the `--existing-model` flag:
|
69
|
+
|
70
|
+
```bash
|
71
|
+
$ rails generate platform:core:network foo --existing-model
|
72
|
+
$ rails generate platform:core:user bar --existing-model
|
73
|
+
```
|
74
|
+
|
75
|
+
This will add the relevant concerns to the models, and update the initializer, without needing to create models from scratch.
|
76
|
+
|
77
|
+
### Manual Configuration
|
78
|
+
|
79
|
+
Finally, if you don't want to use the built-in generators then you can always create the models and configuration manually. The models should look something like this for a `Network`:
|
47
80
|
|
48
81
|
```ruby
|
49
|
-
|
82
|
+
# app/models/network.rb
|
50
83
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
84
|
+
class Network < ApplicationRecord
|
85
|
+
include Platforms::Core::AppNetwork
|
86
|
+
|
87
|
+
# This requires an integer database column called
|
88
|
+
# 'platforms_network_id'
|
55
89
|
|
56
|
-
#
|
57
|
-
validates :platforms_user_id, uniqueness: true
|
90
|
+
# ...
|
58
91
|
end
|
59
92
|
```
|
60
|
-
|
93
|
+
|
94
|
+
and for a `User`:
|
61
95
|
|
62
96
|
```ruby
|
63
|
-
|
97
|
+
# app/models/user.rb
|
98
|
+
|
99
|
+
class User < ApplicationRecord
|
100
|
+
include Platforms::Core::AppUser
|
64
101
|
|
65
|
-
#
|
66
|
-
|
67
|
-
class_name: "Platforms::Network",
|
68
|
-
inverse_of: :app_network
|
102
|
+
# This requires an integer database column called
|
103
|
+
# 'platforms_user_id'
|
69
104
|
|
70
|
-
#
|
71
|
-
validates :platforms_network_id, uniqueness: true
|
105
|
+
# ...
|
72
106
|
end
|
73
107
|
```
|
74
108
|
|
75
|
-
|
76
|
-
use configurations:
|
109
|
+
Additionally, you will need to create an initializer which configures the `Network` and `User` classes for the gem:
|
77
110
|
|
78
111
|
```ruby
|
79
112
|
# config/initializers/platforms.rb
|
80
113
|
|
81
114
|
Platforms::Core.configure do |config|
|
82
|
-
config.network_class = "
|
83
|
-
config.user_class = "
|
115
|
+
config.network_class = "Foo"
|
116
|
+
config.user_class = "Bar"
|
84
117
|
end
|
85
118
|
```
|
86
119
|
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require "rails/generators/active_record"
|
2
|
+
|
3
|
+
module Platforms
|
4
|
+
module Core
|
5
|
+
# Generators to simpify installing Platforms::Core
|
6
|
+
module Generators
|
7
|
+
|
8
|
+
# These are common functions that apply to both User and Network model types.
|
9
|
+
# The setup for both is really quite similar:
|
10
|
+
# * Generating a model, or creating a migration to add an association column
|
11
|
+
# * Add the relevant Concern to the Model
|
12
|
+
# * Update the initializer to reference the new class
|
13
|
+
class Base < Rails::Generators::NamedBase
|
14
|
+
include ActiveRecord::Generators::Migration
|
15
|
+
|
16
|
+
source_root File.join(__dir__, "templates")
|
17
|
+
|
18
|
+
argument :attributes, type: :array, default: [], banner: "field[:type][:index] field[:type][:index]"
|
19
|
+
|
20
|
+
# Don't do check_class_collision here. It can be done within
|
21
|
+
# create_model instead, if required.
|
22
|
+
|
23
|
+
class_option :migration, type: :boolean
|
24
|
+
class_option :timestamps, type: :boolean
|
25
|
+
class_option :parent, type: :string, desc: "The parent class for the generated model"
|
26
|
+
class_option :indexes, type: :boolean, default: true, desc: "Add indexes for references and belongs_to columns"
|
27
|
+
class_option :primary_key_type, type: :string, desc: "The type for primary key"
|
28
|
+
class_option :database, type: :string, aliases: %i(--db), desc: "The database for your model's migration. By default, the current environment's primary database is used."
|
29
|
+
|
30
|
+
# Platforms-specific class option
|
31
|
+
class_option :existing_model, type: :boolean, default: false, desc: "Use existing model. Do not generate a new model definition"
|
32
|
+
|
33
|
+
# Create the model, unless --existing_model is specified.
|
34
|
+
# Calls the standard rails model generator, so should accept similar arguments
|
35
|
+
# to 'rails g model Foo'.
|
36
|
+
def create_model
|
37
|
+
return if options[:existing_model]
|
38
|
+
args = [name]
|
39
|
+
args << "platforms_#{concern_type}_id:integer"
|
40
|
+
|
41
|
+
# Recreate arguments
|
42
|
+
attributes.each do |a|
|
43
|
+
args << "#{a.name}:#{a.type}#{a.has_index? ? ":index" : "" }"
|
44
|
+
end
|
45
|
+
|
46
|
+
# Recreate options
|
47
|
+
options.each do |k, v|
|
48
|
+
unless k == "existing_model"
|
49
|
+
args << "--#{k}=#{v}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Use the standard model generator
|
54
|
+
generate "model", args.join(" ")
|
55
|
+
end
|
56
|
+
|
57
|
+
# Create a migration, when a model already exists.
|
58
|
+
# This could be for platforms_network_id or platforms_user_id.
|
59
|
+
def create_migration
|
60
|
+
return unless options[:existing_model]
|
61
|
+
migration_name = table_name.classify.pluralize
|
62
|
+
args = "AddPlatformsNetworkIdTo#{migration_name} platforms_#{concern_type}_id:integer"
|
63
|
+
generate "migration", args
|
64
|
+
end
|
65
|
+
|
66
|
+
# Adds the relevant concern to the network or user model.
|
67
|
+
# This is either Platforms::Core:AppNetwork or Platforms::Core::AppUser
|
68
|
+
# #file_name is inherited from Rails::Generators::NamedBase, according
|
69
|
+
# to https://guides.rubyonrails.org/generators.html
|
70
|
+
def add_concern_to_model
|
71
|
+
|
72
|
+
# Add the concern line
|
73
|
+
model_file_path = File.join("app", "models", class_path, "#{file_name}.rb")
|
74
|
+
inject_into_class model_file_path, class_name do
|
75
|
+
" include Platforms::Core::App#{concern_type.capitalize}\n\n"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# Set a line in the initializer to 'config.network_class = "Network"'
|
80
|
+
# or similar. This could also be 'config.user_class = "MyUser"'
|
81
|
+
#
|
82
|
+
# Rather than gsub, matching config lines are removed and then added again.
|
83
|
+
def edit_initializer
|
84
|
+
init = "config/initializers/platforms_core.rb"
|
85
|
+
gsub_file init, /\s*config.#{concern_type}_class\s+= .*\n/, "\n"
|
86
|
+
|
87
|
+
inject_into_file init, after: "Platforms::Core.configure do |config|\n" do
|
88
|
+
" config.#{concern_type}_class = \"#{class_name}\"\n"
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Description:
|
2
|
+
This will install the required migrations, and set up the initializer
|
3
|
+
|
4
|
+
Example:
|
5
|
+
rails generate platforms:core:install
|
6
|
+
|
7
|
+
This will create:
|
8
|
+
The initializer in config/initializers/platforms_core.rb
|
9
|
+
Run $ rake patforms_core:install:migrations
|
10
|
+
|
11
|
+
Note that it will not run the migrations
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module Platforms
|
4
|
+
module Core
|
5
|
+
|
6
|
+
# Simplify the installation of Platforms::Core by creating an
|
7
|
+
# initializer file and installing the migrations.
|
8
|
+
# This does not run the migrations.
|
9
|
+
class InstallGenerator < Rails::Generators::Base
|
10
|
+
source_root File.expand_path('templates', __dir__)
|
11
|
+
|
12
|
+
# Create config/initializers/platforms_core.rb according to the template.
|
13
|
+
def copy_initializer_file
|
14
|
+
copy_file "platforms_core.rb", "config/initializers/platforms_core.rb"
|
15
|
+
end
|
16
|
+
|
17
|
+
# Install the gem's migrations.
|
18
|
+
# This is equivalent to the built-in rake task
|
19
|
+
# "platforms_core:install:migrations"
|
20
|
+
def install_migrations
|
21
|
+
rake "platforms_core:install:migrations"
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# This file has been generated by the installer
|
2
|
+
# $ rails generate platforms:core:install
|
3
|
+
#
|
4
|
+
# To change the Network and User class, edit this file.
|
5
|
+
# It will also be automatically updated when either of the
|
6
|
+
# following generators are run:
|
7
|
+
# $ rails generate platforms:core:network [args]
|
8
|
+
# $ rails generate platforms:core:user [args]
|
9
|
+
|
10
|
+
Platforms::Core.configure do |config|
|
11
|
+
config.network_class = "Network"
|
12
|
+
config.user_class = "User"
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Description:
|
2
|
+
Create a Network model, and include the relevant Platforms::Core Concern.
|
3
|
+
This will also set the relevant Network configuration in
|
4
|
+
config/initializers/plaforms_core.rb.
|
5
|
+
|
6
|
+
Example:
|
7
|
+
rails generate platforms:core:network blah more_info:string
|
8
|
+
|
9
|
+
This will create the Blah model, including migration, and test suite.
|
10
|
+
It will have a string column called "more_info".
|
11
|
+
The concern is then included in app/models/blah.rb
|
12
|
+
|
13
|
+
Also works for namespaced models, and accepts similar arguments
|
14
|
+
as the ActiveRecord generator (database columns, associations).
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# require "platforms/core/generators/base"
|
2
|
+
require "generators/platforms/core/base"
|
3
|
+
|
4
|
+
module Platforms
|
5
|
+
module Core
|
6
|
+
|
7
|
+
# Create a model, with Platforms::Core specific additions for the
|
8
|
+
# 'Network' class that should be implemented by the parent
|
9
|
+
# application.
|
10
|
+
class NetworkGenerator < Platforms::Core::Generators::Base
|
11
|
+
|
12
|
+
# Set the concern_type to network
|
13
|
+
def concern_type
|
14
|
+
"network"
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Description:
|
2
|
+
Create a User model, and include the relevant Platforms::Core Concern.
|
3
|
+
This will also set the relevant User configuration in
|
4
|
+
config/initializers/plaforms_core.rb.
|
5
|
+
|
6
|
+
Example:
|
7
|
+
rails generate platforms:core:user blah more_info:string
|
8
|
+
|
9
|
+
This will create the Blah model, including migration, and test suite.
|
10
|
+
It will have a string column called "more_info".
|
11
|
+
The concern is then included in app/models/blah.rb
|
12
|
+
|
13
|
+
Also works for namespaced models, and accepts similar arguments
|
14
|
+
as the ActiveRecord generator (database columns, associations).
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#require "platforms/core/generators/base"
|
2
|
+
require "generators/platforms/core/base"
|
3
|
+
|
4
|
+
module Platforms
|
5
|
+
module Core
|
6
|
+
|
7
|
+
# Create a model, with Platforms::Core specific additions for the
|
8
|
+
# 'User' class that should be implemented by the parent
|
9
|
+
# application.
|
10
|
+
class UserGenerator < Platforms::Core::Generators::Base
|
11
|
+
|
12
|
+
# Set the concern_type to user.
|
13
|
+
def concern_type
|
14
|
+
"user"
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/platforms/core.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
+
require "platforms/core/app_network"
|
2
|
+
require "platforms/core/app_user"
|
1
3
|
require "platforms/core/configuration"
|
2
4
|
require "platforms/core/engine"
|
3
5
|
require "platforms/core/omni_auth_setup"
|
4
6
|
require "platforms/core/o_auth_2"
|
5
7
|
|
8
|
+
require "generators/platforms/core/install/install_generator"
|
9
|
+
|
6
10
|
# The top level namespace for Platforms, which includes Core and
|
7
11
|
# other vendor-specific implementations.
|
8
12
|
module Platforms
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Platforms
|
2
|
+
module Core
|
3
|
+
# Add the relevant associations to a Network-type class.
|
4
|
+
module AppNetwork
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
# A valid association object is required from Rails 5 onwards,
|
9
|
+
# unless otherwise specified.
|
10
|
+
belongs_to :platforms_network,
|
11
|
+
class_name: "Platforms::Network",
|
12
|
+
inverse_of: :app_network
|
13
|
+
|
14
|
+
# Ensure AppNetwork only maps to one Platforms::Network
|
15
|
+
validates :platforms_network_id, uniqueness: true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Platforms
|
2
|
+
module Core
|
3
|
+
# Add the relevant associations to a User-type class.
|
4
|
+
module AppUser
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
# A valid association object is required from Rails 5 onwards,
|
9
|
+
# unless otherwise specified.
|
10
|
+
belongs_to :platforms_user,
|
11
|
+
class_name: "Platforms::User",
|
12
|
+
inverse_of: :app_user
|
13
|
+
|
14
|
+
# Ensure AppUser only maps to one Platforms::User
|
15
|
+
validates :platforms_user_id, uniqueness: true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: platforms-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Elias
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-04-
|
11
|
+
date: 2020-04-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -100,6 +100,20 @@ dependencies:
|
|
100
100
|
- - ">="
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '0'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: generator_spec
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
103
117
|
- !ruby/object:Gem::Dependency
|
104
118
|
name: hashie
|
105
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -208,7 +222,17 @@ files:
|
|
208
222
|
- db/migrate/20200308091132_create_platforms_groups.rb
|
209
223
|
- db/migrate/20200308091141_create_platforms_group_members.rb
|
210
224
|
- db/migrate/20200313102128_create_platforms_certificates.rb
|
225
|
+
- lib/generators/platforms/core/base.rb
|
226
|
+
- lib/generators/platforms/core/install/USAGE
|
227
|
+
- lib/generators/platforms/core/install/install_generator.rb
|
228
|
+
- lib/generators/platforms/core/install/templates/platforms_core.rb
|
229
|
+
- lib/generators/platforms/core/network/USAGE
|
230
|
+
- lib/generators/platforms/core/network/network_generator.rb
|
231
|
+
- lib/generators/platforms/core/user/USAGE
|
232
|
+
- lib/generators/platforms/core/user/user_generator.rb
|
211
233
|
- lib/platforms/core.rb
|
234
|
+
- lib/platforms/core/app_network.rb
|
235
|
+
- lib/platforms/core/app_user.rb
|
212
236
|
- lib/platforms/core/configuration.rb
|
213
237
|
- lib/platforms/core/engine.rb
|
214
238
|
- lib/platforms/core/o_auth_2.rb
|