platforms-core 0.1.2 → 0.1.3
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 +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
|