espace_membre-ruby 0.2
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 +7 -0
- data/README.md +24 -0
- data/Rakefile +3 -0
- data/lib/espace_membre/incubator.rb +13 -0
- data/lib/espace_membre/mission.rb +13 -0
- data/lib/espace_membre/mission_startup.rb +11 -0
- data/lib/espace_membre/phase.rb +36 -0
- data/lib/espace_membre/railtie.rb +23 -0
- data/lib/espace_membre/record.rb +7 -0
- data/lib/espace_membre/startup.rb +42 -0
- data/lib/espace_membre/team.rb +9 -0
- data/lib/espace_membre/user.rb +37 -0
- data/lib/espace_membre/version.rb +3 -0
- data/lib/espace_membre-ruby.rb +5 -0
- data/lib/tasks/espace_membre_tasks.rake +4 -0
- data/spec/dummy/spec/factories/incubators.rb +9 -0
- data/spec/dummy/spec/factories/missions.rb +10 -0
- data/spec/dummy/spec/factories/phases.rb +15 -0
- data/spec/dummy/spec/factories/questions.rb +8 -0
- data/spec/dummy/spec/factories/startups.rb +37 -0
- data/spec/dummy/spec/factories/users.rb +30 -0
- metadata +76 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 2bfd2579e27ef0ad32518182288290b7101e39669ec8dd6824f529b8cc038e88
|
|
4
|
+
data.tar.gz: 48ee8747ace9ce15c704f139f579b1e292a7bb34bf987b2120073e192e659f01
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: f6e5e5e58fd6816272d80ebd5efbc29c0710e574a94f6e0208312dc7a2352cb894d87d97812fe514c8aebe50f5f94d5d30178a52a8847e5807bfd0c667a12bfc
|
|
7
|
+
data.tar.gz: a56effda2e4587268d95c3e4d0ec8e59f4bb73e7418ea0d83c7549e6bc6a4bea5769b9e2ee3db784f8730468c862ef19d977e7fa18b0e53413dd9152cb584882
|
data/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# espace_membre-ruby
|
|
2
|
+
|
|
3
|
+
This gem offers some glue (namely ActiveRecord models) around the
|
|
4
|
+
Espace-Membre database to allow writing simple Ruby apps around it.
|
|
5
|
+
|
|
6
|
+
## TODO
|
|
7
|
+
|
|
8
|
+
- [ ] allow configuration (database name)
|
|
9
|
+
- [ ] restore RSpec
|
|
10
|
+
- [ ] run the tests
|
|
11
|
+
- [ ] distribute.
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
Add this line to your application's Gemfile:
|
|
15
|
+
|
|
16
|
+
```ruby
|
|
17
|
+
gem "espace_membre-ruby"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Then start having fun:
|
|
21
|
+
|
|
22
|
+
```ruby
|
|
23
|
+
EspaceMembre::User.without(:active_missions).last(10)
|
|
24
|
+
```
|
data/Rakefile
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module EspaceMembre
|
|
4
|
+
class Mission < Record
|
|
5
|
+
self.primary_key = "uuid"
|
|
6
|
+
|
|
7
|
+
belongs_to :user
|
|
8
|
+
|
|
9
|
+
has_and_belongs_to_many :startups, join_table: "missions_startups"
|
|
10
|
+
|
|
11
|
+
scope :active, -> { where(end: Time.zone.now..) }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module EspaceMembre
|
|
2
|
+
class Phase < Record
|
|
3
|
+
belongs_to :startup
|
|
4
|
+
|
|
5
|
+
PHASES = [
|
|
6
|
+
"investigation",
|
|
7
|
+
"construction",
|
|
8
|
+
"acceleration",
|
|
9
|
+
"success",
|
|
10
|
+
"alumni",
|
|
11
|
+
"transfer"
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
scope :latest_completed, -> { order(start: :desc) }
|
|
15
|
+
|
|
16
|
+
PHASES.each do |phase|
|
|
17
|
+
# define scopes for each state (Phase.success, Phase.alumni, etc.)
|
|
18
|
+
scope phase, -> { where("phases.name": phase) }
|
|
19
|
+
|
|
20
|
+
# define individual instance methods
|
|
21
|
+
define_method "#{phase}?" do
|
|
22
|
+
name == phase
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
scope :active_phase, -> { construction.or(acceleration) }
|
|
27
|
+
|
|
28
|
+
def terminate!
|
|
29
|
+
update!(end: Time.zone.now)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def to_s
|
|
33
|
+
name
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module EspaceMembre
|
|
2
|
+
class Railtie < ::Rails::Railtie
|
|
3
|
+
initializer "emdb.setup" do
|
|
4
|
+
ActiveSupport.on_load(:active_record) do
|
|
5
|
+
require "espace_membre/record.rb"
|
|
6
|
+
require "espace_membre/incubator.rb"
|
|
7
|
+
require "espace_membre/mission.rb"
|
|
8
|
+
require "espace_membre/mission_startup.rb"
|
|
9
|
+
require "espace_membre/phase.rb"
|
|
10
|
+
require "espace_membre/startup.rb"
|
|
11
|
+
require "espace_membre/user.rb"
|
|
12
|
+
|
|
13
|
+
path = [File.expand_path('../../../spec/dummy/spec/factories', __FILE__)]
|
|
14
|
+
|
|
15
|
+
FactoryBot.definition_file_paths += path if defined?(FactoryBotRails)
|
|
16
|
+
|
|
17
|
+
FactoryBot.factories.clear
|
|
18
|
+
|
|
19
|
+
FactoryBot.find_definitions
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module EspaceMembre
|
|
2
|
+
class Startup < Record
|
|
3
|
+
self.primary_key = "uuid"
|
|
4
|
+
|
|
5
|
+
validates :ghid, presence: true
|
|
6
|
+
|
|
7
|
+
belongs_to :incubator
|
|
8
|
+
|
|
9
|
+
has_many :phases
|
|
10
|
+
|
|
11
|
+
has_and_belongs_to_many :missions, join_table: "missions_startups"
|
|
12
|
+
|
|
13
|
+
has_many :users, through: :missions
|
|
14
|
+
|
|
15
|
+
has_one :evaluation, foreign_key: :startup_uuid
|
|
16
|
+
|
|
17
|
+
has_one :latest_phase,
|
|
18
|
+
-> { order(start: :desc) },
|
|
19
|
+
class_name: "Phase",
|
|
20
|
+
inverse_of: :startup
|
|
21
|
+
|
|
22
|
+
scope :in_phase, ->(phase) { joins(:latest_phase).where("phases.name" => phase) }
|
|
23
|
+
|
|
24
|
+
Phase::PHASES.each do |name|
|
|
25
|
+
define_method "in_#{name}?" do
|
|
26
|
+
latest_phase.send("#{name}?")
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def in_phase?(name)
|
|
31
|
+
send("in_#{name}?")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def to_s
|
|
35
|
+
name
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def latest_phase
|
|
39
|
+
phases.latest_completed.first
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module EspaceMembre
|
|
2
|
+
class User < Record
|
|
3
|
+
self.primary_key = "uuid"
|
|
4
|
+
|
|
5
|
+
DOMAINES = %w[
|
|
6
|
+
Coaching
|
|
7
|
+
Autre
|
|
8
|
+
Produit
|
|
9
|
+
Intraprenariat
|
|
10
|
+
Data
|
|
11
|
+
Déploiement
|
|
12
|
+
Animation
|
|
13
|
+
Design
|
|
14
|
+
Développement
|
|
15
|
+
Support
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
has_and_belongs_to_many :teams, join_table: "users_teams"
|
|
19
|
+
|
|
20
|
+
has_many :missions, -> { order '"end" ASC' }
|
|
21
|
+
has_one :last_mission, -> { order(end: :desc) }, class_name: "EspaceMembre::Mission"
|
|
22
|
+
|
|
23
|
+
has_many :startups, through: :missions
|
|
24
|
+
|
|
25
|
+
has_many :active_missions, -> { active }, class_name: "EspaceMembre::Mission"
|
|
26
|
+
has_many :active_startups, through: :active_missions, source: :startups
|
|
27
|
+
|
|
28
|
+
validates :username, :fullname, :role, :domaine, presence: true
|
|
29
|
+
validates :domaine, inclusion: { in: DOMAINES }
|
|
30
|
+
|
|
31
|
+
def self.identify_email!(email)
|
|
32
|
+
User.find_by!(primary_email: email)
|
|
33
|
+
rescue ActiveRecord::RecordNotFound
|
|
34
|
+
User.find_by!(secondary_email: email)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'faker'
|
|
2
|
+
|
|
3
|
+
FactoryBot.define do
|
|
4
|
+
factory :phase, class: 'EspaceMembre::Phase' do
|
|
5
|
+
uuid { Faker::Internet.uuid }
|
|
6
|
+
start { Time.zone.now }
|
|
7
|
+
name { Faker::Lorem.word }
|
|
8
|
+
|
|
9
|
+
EspaceMembre::Phase::PHASES.each do |phase_name|
|
|
10
|
+
trait phase_name do
|
|
11
|
+
name { phase_name }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'faker'
|
|
2
|
+
|
|
3
|
+
FactoryBot.define do
|
|
4
|
+
factory :startup, class: "EspaceMembre::Startup" do
|
|
5
|
+
ghid { Faker::Lorem.word.downcase }
|
|
6
|
+
uuid { Faker::Internet.uuid }
|
|
7
|
+
name { Faker::Lorem.word }
|
|
8
|
+
description { Faker::Lorem.paragraph }
|
|
9
|
+
incubator
|
|
10
|
+
|
|
11
|
+
trait :in_investigation do
|
|
12
|
+
after(:create) do |startup|
|
|
13
|
+
FactoryBot.create(:phase, :investigation, startup: startup)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
trait :in_construction do
|
|
18
|
+
in_investigation
|
|
19
|
+
|
|
20
|
+
after(:create) do |startup|
|
|
21
|
+
startup.latest_phase.terminate!
|
|
22
|
+
|
|
23
|
+
FactoryBot.create(:phase, :construction, startup: startup)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
trait :in_acceleration do
|
|
28
|
+
in_construction
|
|
29
|
+
|
|
30
|
+
after(:create) do |startup|
|
|
31
|
+
startup.latest_phase.terminate!
|
|
32
|
+
|
|
33
|
+
FactoryBot.create(:phase, :acceleration, startup: startup)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'faker'
|
|
4
|
+
|
|
5
|
+
FactoryBot.define do
|
|
6
|
+
factory :user, class: 'EspaceMembre::User' do
|
|
7
|
+
username { Faker::Internet.username }
|
|
8
|
+
uuid { Faker::Internet.uuid }
|
|
9
|
+
fullname { Faker::Name.name }
|
|
10
|
+
domaine { EspaceMembre::User::DOMAINES.sample }
|
|
11
|
+
role { Faker::Job.title }
|
|
12
|
+
primary_email { Faker::Internet.email }
|
|
13
|
+
secondary_email { Faker::Internet.email }
|
|
14
|
+
|
|
15
|
+
trait :with_active_mission do
|
|
16
|
+
after(:create) do |user|
|
|
17
|
+
user.missions.create!(start: Time.zone.now, end: Time.now.next_week)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
trait :with_active_startup do
|
|
22
|
+
with_active_mission
|
|
23
|
+
|
|
24
|
+
after(:create) do |user|
|
|
25
|
+
user.missions.last.startups << create(:startup, :in_construction)
|
|
26
|
+
user.save
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: espace_membre-ruby
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: '0.2'
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Stéphane Maniaci
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: rails
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: 8.1.2
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: 8.1.2
|
|
26
|
+
description: Write Ruby apps around the beta.gouv.fr dataset without the hassle
|
|
27
|
+
email:
|
|
28
|
+
- stephane.maniaci@beta.gouv.fr
|
|
29
|
+
executables: []
|
|
30
|
+
extensions: []
|
|
31
|
+
extra_rdoc_files: []
|
|
32
|
+
files:
|
|
33
|
+
- README.md
|
|
34
|
+
- Rakefile
|
|
35
|
+
- lib/espace_membre-ruby.rb
|
|
36
|
+
- lib/espace_membre/incubator.rb
|
|
37
|
+
- lib/espace_membre/mission.rb
|
|
38
|
+
- lib/espace_membre/mission_startup.rb
|
|
39
|
+
- lib/espace_membre/phase.rb
|
|
40
|
+
- lib/espace_membre/railtie.rb
|
|
41
|
+
- lib/espace_membre/record.rb
|
|
42
|
+
- lib/espace_membre/startup.rb
|
|
43
|
+
- lib/espace_membre/team.rb
|
|
44
|
+
- lib/espace_membre/user.rb
|
|
45
|
+
- lib/espace_membre/version.rb
|
|
46
|
+
- lib/tasks/espace_membre_tasks.rake
|
|
47
|
+
- spec/dummy/spec/factories/incubators.rb
|
|
48
|
+
- spec/dummy/spec/factories/missions.rb
|
|
49
|
+
- spec/dummy/spec/factories/phases.rb
|
|
50
|
+
- spec/dummy/spec/factories/questions.rb
|
|
51
|
+
- spec/dummy/spec/factories/startups.rb
|
|
52
|
+
- spec/dummy/spec/factories/users.rb
|
|
53
|
+
homepage: https://github.com/betagouv/espace_membre-ruby
|
|
54
|
+
licenses: []
|
|
55
|
+
metadata:
|
|
56
|
+
homepage_uri: https://github.com/betagouv/espace_membre-ruby
|
|
57
|
+
source_code_uri: https://github.com/betagouv/espace_membre-ruby
|
|
58
|
+
changelog_uri: https://github.com/betagouv/espace_membre-ruby
|
|
59
|
+
rdoc_options: []
|
|
60
|
+
require_paths:
|
|
61
|
+
- lib
|
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
63
|
+
requirements:
|
|
64
|
+
- - ">="
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
version: '0'
|
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
|
+
requirements:
|
|
69
|
+
- - ">="
|
|
70
|
+
- !ruby/object:Gem::Version
|
|
71
|
+
version: '0'
|
|
72
|
+
requirements: []
|
|
73
|
+
rubygems_version: 4.0.3
|
|
74
|
+
specification_version: 4
|
|
75
|
+
summary: A collection of Ruby code around the EspaceMembre app
|
|
76
|
+
test_files: []
|