active_brainz 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +9 -0
  3. data/LICENSE.md +21 -0
  4. data/README.md +83 -0
  5. data/config/inflections.rb +9 -0
  6. data/lib/active_brainz.rb +36 -0
  7. data/lib/active_brainz/models/area/area.rb +123 -0
  8. data/lib/active_brainz/models/area/area_type.rb +37 -0
  9. data/lib/active_brainz/models/artist/artist.rb +150 -0
  10. data/lib/active_brainz/models/artist/artist_alias.rb +62 -0
  11. data/lib/active_brainz/models/artist/artist_alias_type.rb +37 -0
  12. data/lib/active_brainz/models/artist/artist_credit.rb +60 -0
  13. data/lib/active_brainz/models/artist/artist_credit_name.rb +46 -0
  14. data/lib/active_brainz/models/artist/artist_type.rb +37 -0
  15. data/lib/active_brainz/models/base.rb +16 -0
  16. data/lib/active_brainz/models/concerns/has_begin_end_date.rb +27 -0
  17. data/lib/active_brainz/models/concerns/has_gid.rb +15 -0
  18. data/lib/active_brainz/models/concerns/has_parent_children.rb +20 -0
  19. data/lib/active_brainz/models/gender/gender.rb +41 -0
  20. data/lib/active_brainz/models/genre/genre.rb +36 -0
  21. data/lib/active_brainz/models/genre/genre_alias.rb +42 -0
  22. data/lib/active_brainz/models/label/label.rb +121 -0
  23. data/lib/active_brainz/models/label/label_alias.rb +62 -0
  24. data/lib/active_brainz/models/label/label_alias_type.rb +37 -0
  25. data/lib/active_brainz/models/label/label_type.rb +37 -0
  26. data/lib/active_brainz/models/medium/medium.rb +68 -0
  27. data/lib/active_brainz/models/place/place.rb +97 -0
  28. data/lib/active_brainz/models/place/place_alias.rb +62 -0
  29. data/lib/active_brainz/models/place/place_alias_type.rb +37 -0
  30. data/lib/active_brainz/models/place/place_type.rb +37 -0
  31. data/lib/active_brainz/models/recording/recording.rb +101 -0
  32. data/lib/active_brainz/models/release/release.rb +150 -0
  33. data/lib/active_brainz/models/release/release_group.rb +100 -0
  34. data/lib/active_brainz/models/track/track.rb +72 -0
  35. data/lib/active_brainz/version.rb +24 -0
  36. metadata +372 -0
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveBrainz
4
+ class ArtistAlias < Base
5
+ self.table_name = "artist_alias"
6
+
7
+ include HasBeginEndDate
8
+
9
+ belongs_to :artist_alias_artist,
10
+ class_name: "Artist",
11
+ foreign_key: "artist",
12
+ optional: true
13
+
14
+ belongs_to :artist_alias_type,
15
+ class_name: "ArtistAliasType",
16
+ foreign_key: "type",
17
+ optional: true
18
+
19
+ attribute :name
20
+ attribute :sort_name
21
+
22
+ attribute :locale
23
+ attribute :primary_for_locale, :boolean
24
+
25
+ attribute :edits_pending, :integer
26
+ attribute :last_updated, :datetime
27
+ end
28
+ end
29
+
30
+ # == Schema Information
31
+ #
32
+ # Table name: artist_alias
33
+ #
34
+ # id :integer not null, primary key
35
+ # artist :integer not null
36
+ # begin_date_day :integer
37
+ # begin_date_month :integer
38
+ # begin_date_year :integer
39
+ # edits_pending :integer default(0), not null
40
+ # end_date_day :integer
41
+ # end_date_month :integer
42
+ # end_date_year :integer
43
+ # ended :boolean default(FALSE), not null
44
+ # last_updated :datetime
45
+ # locale :text
46
+ # name :string not null
47
+ # primary_for_locale :boolean default(FALSE), not null
48
+ # sort_name :string not null
49
+ # type :integer
50
+ #
51
+ # Indexes
52
+ #
53
+ # artist_alias_idx_artist (artist)
54
+ # artist_alias_idx_primary (artist,locale) UNIQUE WHERE ((primary_for_locale = true) AND (locale IS NOT NULL))
55
+ # artist_alias_idx_txt (mb_simple_tsvector((name)::text)) USING gin
56
+ # artist_alias_idx_txt_sort (mb_simple_tsvector((sort_name)::text)) USING gin
57
+ #
58
+ # Foreign Keys
59
+ #
60
+ # artist_alias_fk_artist (artist => artist.id)
61
+ # artist_alias_fk_type (type => artist_alias_type.id)
62
+ #
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveBrainz
4
+ class ArtistAliasType < Base
5
+ self.table_name = "artist_alias_type"
6
+
7
+ include HasGID
8
+ include HasParentChildren
9
+
10
+ has_many :artist_aliases,
11
+ class_name: "ArtistAlias",
12
+ foreign_key: "type"
13
+
14
+ attribute :name
15
+ attribute :description
16
+ end
17
+ end
18
+
19
+ # == Schema Information
20
+ #
21
+ # Table name: artist_alias_type
22
+ #
23
+ # id :integer not null, primary key
24
+ # child_order :integer default(0), not null
25
+ # description :text
26
+ # gid :uuid not null
27
+ # name :text not null
28
+ # parent :integer
29
+ #
30
+ # Indexes
31
+ #
32
+ # artist_alias_type_idx_gid (gid) UNIQUE
33
+ #
34
+ # Foreign Keys
35
+ #
36
+ # artist_alias_type_fk_parent (parent => artist_alias_type.id)
37
+ #
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveBrainz
4
+ class ArtistCredit < Base
5
+ self.table_name = "artist_credit"
6
+
7
+ # has_many :alternative_releases,
8
+ # class_name: "AlternativeRelease",
9
+ # foreign_key: "artist_credit"
10
+
11
+ # has_many :alternative_tracks,
12
+ # class_name: "AlternativeTrack",
13
+ # foreign_key: "artist_credit"
14
+
15
+ has_many :artist_credit_names,
16
+ class_name: "ArtistCreditName",
17
+ foreign_key: "artist_credit"
18
+
19
+ has_many :recordings,
20
+ class_name: "Recording",
21
+ foreign_key: "artist_credit"
22
+
23
+ has_many :release_groups,
24
+ class_name: "ReleaseGroup",
25
+ foreign_key: "artist_credit"
26
+
27
+ has_many :releases,
28
+ class_name: "Release",
29
+ foreign_key: "artist_credit"
30
+
31
+ has_many :tracks,
32
+ class_name: "Track",
33
+ foreign_key: "artist_credit"
34
+
35
+ attribute :name
36
+
37
+ attribute :edits_pending, :integer
38
+ attribute :artist_count, :integer
39
+ attribute :ref_count, :integer
40
+
41
+ attribute :created, :datetime
42
+ end
43
+ end
44
+
45
+ # == Schema Information
46
+ #
47
+ # Table name: artist_credit
48
+ #
49
+ # id :integer not null, primary key
50
+ # artist_count :integer not null
51
+ # created :datetime
52
+ # edits_pending :integer default(0), not null
53
+ # name :string not null
54
+ # ref_count :integer default(0)
55
+ #
56
+ # Indexes
57
+ #
58
+ # artist_credit_idx_musicbrainz_collate (name)
59
+ # artist_credit_idx_txt (mb_simple_tsvector((name)::text)) USING gin
60
+ #
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveBrainz
4
+ class ArtistCreditName < Base
5
+ self.table_name = "artist_credit_name"
6
+ self.primary_key = %w(artist_credit position)
7
+
8
+ belongs_to :artist_credit_name_artist,
9
+ class_name: "Artist",
10
+ foreign_key: "artist",
11
+ optional: true
12
+
13
+ belongs_to :artist_credit_name_artist_credit,
14
+ class_name: "ArtistCredit",
15
+ foreign_key: "artist_credit",
16
+ optional: true
17
+
18
+ attribute :name
19
+
20
+ attribute :position, :integer
21
+
22
+ attribute :join_phrase
23
+ end
24
+ end
25
+
26
+ # == Schema Information
27
+ #
28
+ # Table name: artist_credit_name
29
+ #
30
+ # artist :integer not null
31
+ # artist_credit :integer not null
32
+ # join_phrase :text default(""), not null
33
+ # name :string not null
34
+ # position :integer not null
35
+ #
36
+ # Indexes
37
+ #
38
+ # artist_credit_name_idx_artist (artist)
39
+ # artist_credit_name_idx_musicbrainz_collate (name)
40
+ # artist_credit_name_idx_txt (mb_simple_tsvector((name)::text)) USING gin
41
+ #
42
+ # Foreign Keys
43
+ #
44
+ # artist_credit_name_fk_artist (artist => artist.id) ON DELETE => cascade
45
+ # artist_credit_name_fk_artist_credit (artist_credit => artist_credit.id) ON DELETE => cascade
46
+ #
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveBrainz
4
+ class ArtistType < Base
5
+ self.table_name = "artist_type"
6
+
7
+ include HasGID
8
+ include HasParentChildren
9
+
10
+ has_many :artists,
11
+ class_name: "Artist",
12
+ foreign_key: "type"
13
+
14
+ attribute :name
15
+ attribute :description
16
+ end
17
+ end
18
+
19
+ # == Schema Information
20
+ #
21
+ # Table name: artist_type
22
+ #
23
+ # id :integer not null, primary key
24
+ # child_order :integer default(0), not null
25
+ # description :text
26
+ # gid :uuid not null
27
+ # name :string(255) not null
28
+ # parent :integer
29
+ #
30
+ # Indexes
31
+ #
32
+ # artist_type_idx_gid (gid) UNIQUE
33
+ #
34
+ # Foreign Keys
35
+ #
36
+ # artist_type_fk_parent (parent => artist_type.id)
37
+ #
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+
5
+ module ActiveBrainz
6
+ class Base < ActiveRecord::Base
7
+ self.abstract_class = true
8
+ self.inheritance_column = nil
9
+
10
+ establish_connection :musicbrainz
11
+
12
+ def readonly?
13
+ ENV["ACTIVE_BRAINZ_ENV"] != "test"
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveBrainz
4
+ module HasBeginEndDate
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ attribute :begin_date_year, :integer
9
+ attribute :begin_date_month, :integer
10
+ attribute :begin_date_day, :integer
11
+
12
+ attribute :end_date_year, :integer
13
+ attribute :end_date_month, :integer
14
+ attribute :end_date_day, :integer
15
+
16
+ attribute :ended, :boolean
17
+
18
+ def begin_date
19
+ @begin_date ||= Date.new(*[begin_date_year, begin_date_month, begin_date_day].compact)
20
+ end
21
+
22
+ def end_date
23
+ @end_date ||= Date.new(*[end_date_year, end_date_month, end_date_day].compact)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveBrainz
4
+ module HasGID
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ attribute :gid
9
+
10
+ validates :gid,
11
+ presence: true,
12
+ uniqueness: true
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveBrainz
4
+ module HasParentChildren
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ has_many :children,
9
+ class_name: name.demodulize,
10
+ foreign_key: "parent"
11
+
12
+ belongs_to :parent,
13
+ class_name: name.demodulize,
14
+ foreign_key: "parent",
15
+ optional: true
16
+
17
+ attribute :child_order, :integer
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveBrainz
4
+ class Gender < Base
5
+ self.table_name = "gender"
6
+
7
+ include HasGID
8
+ include HasParentChildren
9
+
10
+ has_many :artists,
11
+ class_name: "Artist",
12
+ foreign_key: "gender"
13
+
14
+ # has_many :editors,
15
+ # class_name: "Editor",
16
+ # foreign_key: "gender"
17
+
18
+ attribute :name
19
+ attribute :description
20
+ end
21
+ end
22
+
23
+ # == Schema Information
24
+ #
25
+ # Table name: gender
26
+ #
27
+ # id :integer not null, primary key
28
+ # child_order :integer default(0), not null
29
+ # description :text
30
+ # gid :uuid not null
31
+ # name :string(255) not null
32
+ # parent :integer
33
+ #
34
+ # Indexes
35
+ #
36
+ # gender_idx_gid (gid) UNIQUE
37
+ #
38
+ # Foreign Keys
39
+ #
40
+ # gender_fk_parent (parent => gender.id)
41
+ #
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveBrainz
4
+ class Genre < Base
5
+ self.table_name = "genre"
6
+
7
+ include HasGID
8
+
9
+ has_many :genre_aliases,
10
+ class_name: "GenreAlias",
11
+ foreign_key: "genre"
12
+
13
+ attribute :name
14
+ attribute :comment
15
+
16
+ attribute :edits_pending, :integer
17
+ attribute :last_updated, :datetime
18
+ end
19
+ end
20
+
21
+ # == Schema Information
22
+ #
23
+ # Table name: genre
24
+ #
25
+ # id :integer not null, primary key
26
+ # comment :string(255) default(""), not null
27
+ # edits_pending :integer default(0), not null
28
+ # gid :uuid not null
29
+ # last_updated :datetime
30
+ # name :string not null
31
+ #
32
+ # Indexes
33
+ #
34
+ # genre_idx_gid (gid) UNIQUE
35
+ # genre_idx_name (lower((name)::text)) UNIQUE
36
+ #
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveBrainz
4
+ class GenreAlias < Base
5
+ self.table_name = "genre_alias"
6
+
7
+ belongs_to :genre_alias_genre,
8
+ class_name: "Genre",
9
+ foreign_key: "genre",
10
+ optional: true
11
+
12
+ attribute :name
13
+
14
+ attribute :locale
15
+ attribute :primary_for_locale, :boolean
16
+
17
+ attribute :edits_pending, :integer
18
+ attribute :last_updated, :datetime
19
+ end
20
+ end
21
+
22
+ # == Schema Information
23
+ #
24
+ # Table name: genre_alias
25
+ #
26
+ # id :integer not null, primary key
27
+ # edits_pending :integer default(0), not null
28
+ # genre :integer not null
29
+ # last_updated :datetime
30
+ # locale :text
31
+ # name :string not null
32
+ # primary_for_locale :boolean default(FALSE), not null
33
+ #
34
+ # Indexes
35
+ #
36
+ # genre_alias_idx_genre (genre)
37
+ # genre_alias_idx_primary (genre,locale) UNIQUE WHERE ((primary_for_locale = true) AND (locale IS NOT NULL))
38
+ #
39
+ # Foreign Keys
40
+ #
41
+ # genre_alias_fk_genre (genre => genre.id)
42
+ #