espace_membre-ruby 0.4.1 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b0e3692f295d3f9155807570eb17711b8cfd900ce0081e982e36248316f8bc8b
4
- data.tar.gz: bbf1dfa5c0907491887a09a6803064b7a6e238c33ee5a29b2af90f4de635c7ed
3
+ metadata.gz: fbae60e86ca64c6d034aa0ef062da4acd9e1344e397e0c8bb8b70331fbecf989
4
+ data.tar.gz: 0dfb3737dbff3f3eba1710ff55921ad304e665a6af960111845f30e3af59c664
5
5
  SHA512:
6
- metadata.gz: 2843954aa3366b34c280b1e46c511da4be753f2c568ecff1e6f3449860ce66fe562871901528bac8b58e7aee1d9cef3d31e23158b0462bd7e129613dd38776cc
7
- data.tar.gz: '09b9734b2d34c322f28269332ea93c6675b7903681da52eccd9972437e7719fa0e557c40615e33ac83b2d3d0b3ede2519d7347904379616f9c102057e16987a1'
6
+ metadata.gz: e19498d8dad9a4e2ddac597f1c712c063f438217abcd684ea5a56a2d1bc6238edeecd4bf7bc4c99d3e36c1b8671c0df7a9eb3880cab0a291b4b1aebe3978f9c0
7
+ data.tar.gz: dd3cbd06706117fd1ca34583d878ce7f9f8d85811198b656b209268da05a81473a9792e662287b42b545ddd177bdbf8c975192393a32183194fbecda74237c9d
data/README.md CHANGED
@@ -1,24 +1,42 @@
1
1
  # espace_membre-ruby
2
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
- - [X] restore RSpec
10
- - [X] run the tests
11
- - [X] distribute.
3
+ Cette gem fournit des classes ActiveRecord communes pour encapsuler et
4
+ partager la logique de l'Espace-Membre. Elle est [déjà
5
+ utilisée](https://github.com/betagouv/espace_membre-ruby/network/dependents)
6
+ par d'autres produits pour construire autour des données beta.gouv.fr
7
+ et leurs logique métier (ex: "est-ce qu'un produit est actif ?", "qui
8
+ est considéré alumni", etc).
12
9
 
13
10
  ## Installation
14
- Add this line to your application's Gemfile:
11
+
12
+ Dans votre Gemfile:
15
13
 
16
14
  ```ruby
17
15
  gem "espace_membre-ruby"
18
16
  ```
19
17
 
20
- Then start having fun:
18
+ Puis vous devez indiquer à Rails la base de données de Beta au travers
19
+ d'une nouvelle base `espace_membre_db`, c.f [la configuration de
20
+ standards.beta.gouv.fr](https://github.com/betagouv/standards-front/blob/main/config/database.yml#L1-L6).
21
+
22
+ Ensuite vous pouvez lancer votre console et vérifier que le connecteur
23
+ fonctionne bien :
21
24
 
22
25
  ```ruby
23
26
  EspaceMembre::User.without(:active_missions).last(10)
24
27
  ```
28
+
29
+ ## Documentation
30
+
31
+ Pas encore disponible mais vous pouvez [consulter la liste des
32
+ modèles](https://github.com/betagouv/espace_membre-ruby/tree/main/lib/espace_membre)
33
+ ou [les tests
34
+ associés](https://github.com/betagouv/espace_membre-ruby/blob/53e282c9e3afff9bd4fbaf7bd0cf15734756e9cc/spec/dummy/spec/models/user_spec.rb#L30)
35
+ pour explorer la gem.
36
+
37
+ ## TODO
38
+
39
+ - [ ] allow configuration (database name)
40
+ - [X] restore RSpec
41
+ - [X] run the tests
42
+ - [X] distribute.
@@ -1,7 +1,5 @@
1
1
  module EspaceMembre
2
2
  class Incubator < Record
3
- self.primary_key = "uuid"
4
-
5
3
  validates :ghid, presence: true
6
4
 
7
5
  has_many :startups
@@ -2,8 +2,6 @@
2
2
 
3
3
  module EspaceMembre
4
4
  class Mission < Record
5
- self.primary_key = "uuid"
6
-
7
5
  belongs_to :user
8
6
 
9
7
  has_and_belongs_to_many :startups, join_table: "missions_startups"
@@ -3,7 +3,6 @@
3
3
  module EspaceMembre
4
4
  class MissionStartup < Record
5
5
  self.table_name = "missions_startups"
6
- self.primary_key = "uuid"
7
6
 
8
7
  belongs_to :mission
9
8
  belongs_to :startup_id
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EspaceMembre
4
+ class Organization < Record
5
+ has_and_belongs_to_many :startups, join_table: "startups_organizations"
6
+
7
+ # EMDB has a `type` column which triggers ActiveRecord – but still
8
+ # it is still kind enough to provide the following fix:
9
+ self.inheritance_column = :null
10
+ end
11
+ end
@@ -2,21 +2,17 @@ module EspaceMembre
2
2
  class Phase < Record
3
3
  belongs_to :startup
4
4
 
5
- PHASES = [
6
- "investigation",
7
- "construction",
8
- "acceleration",
9
- "success",
10
- "alumni",
11
- "transfer"
5
+ PHASES = %w[
6
+ investigation
7
+ abandon-investigation
8
+ construction
9
+ acceleration
10
+ consolidation
11
+ abandon
12
+ opere
13
+ transfere
12
14
  ]
13
15
 
14
- # FIXME: at the moment multiple ongoing/active (i.e no end date)
15
- # phases for the same startup can coexist happily, we must fix the
16
- # data and make this a valid statement.
17
- #
18
- # scope :active, -> { where("end" => nil) } # this does NOT work
19
-
20
16
  PHASES.each do |phase|
21
17
  # define scopes for each state (Phase.success, Phase.alumni, etc.)
22
18
  scope phase, -> { where("phases.name": phase) }
@@ -27,12 +23,6 @@ module EspaceMembre
27
23
  end
28
24
  end
29
25
 
30
- scope :active_phase, -> { construction.or(acceleration) }
31
-
32
- def terminate!
33
- update!(end: Time.zone.now)
34
- end
35
-
36
26
  def to_s
37
27
  name
38
28
  end
@@ -6,8 +6,10 @@ module EspaceMembre
6
6
  require "espace_membre/incubator.rb"
7
7
  require "espace_membre/mission.rb"
8
8
  require "espace_membre/mission_startup.rb"
9
+ require "espace_membre/organization.rb"
9
10
  require "espace_membre/phase.rb"
10
11
  require "espace_membre/startup.rb"
12
+ require "espace_membre/team.rb"
11
13
  require "espace_membre/user.rb"
12
14
 
13
15
  path = [File.expand_path('../../../spec/dummy/spec/factories', __FILE__)]
@@ -1,5 +1,6 @@
1
1
  module EspaceMembre
2
2
  class Record < ActiveRecord::Base
3
+ self.primary_key = "uuid"
3
4
  self.abstract_class = true
4
5
 
5
6
  connects_to database: { writing: :espace_membre_db, reading: :espace_membre_db }
@@ -1,13 +1,13 @@
1
1
  module EspaceMembre
2
2
  class Startup < Record
3
- self.primary_key = "uuid"
4
-
5
3
  validates :ghid, presence: true
6
4
 
7
5
  belongs_to :incubator
8
6
 
9
7
  has_many :phases
10
8
 
9
+ has_and_belongs_to_many :organizations, join_table: "startups_organizations"
10
+
11
11
  has_and_belongs_to_many :missions, join_table: "missions_startups"
12
12
 
13
13
  has_many :users, through: :missions
@@ -31,14 +31,8 @@ module EspaceMembre
31
31
  .where("phases.start = (SELECT MAX(p2.start) FROM phases p2 WHERE p2.startup_id = startups.uuid)")
32
32
  }
33
33
 
34
- Phase::PHASES.each do |name|
35
- define_method "in_#{name}?" do
36
- latest_phase.send("#{name}?")
37
- end
38
- end
39
-
40
34
  def in_phase?(name)
41
- send("in_#{name}?")
35
+ latest_phase.name == name.to_s
42
36
  end
43
37
 
44
38
  def to_s
@@ -1,9 +1,9 @@
1
1
  module EspaceMembre
2
2
  class Team < Record
3
- self.primary_key = "uuid"
4
-
5
3
  validates :ghid, presence: true
6
4
 
7
5
  belongs_to :incubator
6
+
7
+ has_and_belongs_to_many :users, join_table: "users_teams"
8
8
  end
9
9
  end
@@ -28,6 +28,20 @@ module EspaceMembre
28
28
  validates :username, :fullname, :role, :domaine, presence: true
29
29
  validates :domaine, inclusion: { in: DOMAINES }
30
30
 
31
+ has_many :incubators, through: :teams
32
+
33
+ has_many :team_startups,
34
+ class_name: "EspaceMembre::Startup",
35
+ through: :incubators,
36
+ source: :startups
37
+
38
+ scope :expired, -> {
39
+ where(
40
+ "NOT EXISTS (:active_missions)",
41
+ active_missions: Mission.active.where("missions.user_id = users.uuid")
42
+ )
43
+ }
44
+
31
45
  def self.identify_email!(email)
32
46
  User.find_by!(primary_email: email)
33
47
  rescue ActiveRecord::RecordNotFound
@@ -1,3 +1,3 @@
1
1
  module EspaceMembre
2
- VERSION = "0.4.1"
2
+ VERSION = "1.1.1"
3
3
  end
@@ -18,20 +18,40 @@ FactoryBot.define do
18
18
  in_investigation
19
19
 
20
20
  after(:create) do |startup|
21
- startup.latest_phase.terminate!
22
-
23
21
  FactoryBot.create(:phase, :construction, startup: startup)
24
22
  end
25
23
  end
26
24
 
27
- trait :in_acceleration do
25
+ trait :in_abandon do
28
26
  in_construction
29
27
 
30
28
  after(:create) do |startup|
31
- startup.latest_phase.terminate!
29
+ FactoryBot.create(:phase, :abandon, startup: startup)
30
+ end
31
+ end
32
+
33
+ trait :in_acceleration do
34
+ in_construction
32
35
 
36
+ after(:create) do |startup|
33
37
  FactoryBot.create(:phase, :acceleration, startup: startup)
34
38
  end
35
39
  end
40
+
41
+ trait :in_transfere do
42
+ in_acceleration
43
+
44
+ after(:create) do |startup|
45
+ FactoryBot.create(:phase, :transfere, startup: startup)
46
+ end
47
+ end
48
+
49
+ trait :abandon_investigation do
50
+ in_investigation
51
+
52
+ after(:create) do |startup|
53
+ FactoryBot.create(:phase, :"abandon-investigation", startup: startup)
54
+ end
55
+ end
36
56
  end
37
57
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faker'
4
+
5
+ FactoryBot.define do
6
+ factory :team, class: 'EspaceMembre::Team' do
7
+ incubator
8
+
9
+ ghid { Faker::Internet.username }
10
+ mission { Faker::Commerce.department }
11
+ name { Faker::Commerce.product_name }
12
+ end
13
+ end
@@ -18,6 +18,18 @@ FactoryBot.define do
18
18
  end
19
19
  end
20
20
 
21
+ trait :with_expired_mission do
22
+ with_active_mission
23
+
24
+ transient do
25
+ mission_end { Date.yesterday }
26
+ end
27
+
28
+ after(:create) do |user, context|
29
+ user.missions.last.update!(end: context.mission_end)
30
+ end
31
+ end
32
+
21
33
  trait :with_active_startup do
22
34
  with_active_mission
23
35
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: espace_membre-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stéphane Maniaci
@@ -36,6 +36,7 @@ files:
36
36
  - lib/espace_membre/incubator.rb
37
37
  - lib/espace_membre/mission.rb
38
38
  - lib/espace_membre/mission_startup.rb
39
+ - lib/espace_membre/organization.rb
39
40
  - lib/espace_membre/phase.rb
40
41
  - lib/espace_membre/railtie.rb
41
42
  - lib/espace_membre/record.rb
@@ -48,6 +49,7 @@ files:
48
49
  - spec/dummy/spec/factories/missions.rb
49
50
  - spec/dummy/spec/factories/phases.rb
50
51
  - spec/dummy/spec/factories/startups.rb
52
+ - spec/dummy/spec/factories/teams.rb
51
53
  - spec/dummy/spec/factories/users.rb
52
54
  homepage: https://github.com/betagouv/espace_membre-ruby
53
55
  licenses: []