social_nets_db 0.0.2 → 0.0.6
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/CHANGELOG.md +17 -1
- data/Gemfile.lock +1 -1
- data/README.md +64 -100
- data/lib/social_nets_db/db.yml +1 -1
- data/lib/social_nets_db/social_net.rb +11 -10
- data/lib/social_nets_db/version.rb +1 -1
- data/social_nets_db.gemspec +14 -13
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b16ceb6656a59c747798848c9a99d8fd53c5db5fa903b1d2df388534a122cdc3
|
4
|
+
data.tar.gz: 4f2f515a1e9bf204a33cd01d274df52953db1d24e2a951cf70cbe7c7c4ad50a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3441ffff109b6b15a45a85be1100b235422f3dbd3ded19e099a7b3e18811a94226d06393e239052edbb7023b716b1c06c26063dc66ce4e5701f6f048e5f5cea1
|
7
|
+
data.tar.gz: 76791b05f97311c578435150d61c1780c3980ead21ac60c2cc938a22135bbeef36778f18120759ff2e51283568c783b1fe1897e3b1928a045460ef65dda161a7
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,22 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
## [0.0.
|
3
|
+
## [0.0.6] - 2021-12-03
|
4
|
+
|
5
|
+
- Corrects data source of accessor methods
|
6
|
+
|
7
|
+
## [0.0.5] - 2021-12-03
|
8
|
+
|
9
|
+
- Corrects an error in `uids`
|
10
|
+
|
11
|
+
## [0.0.4] - 2021-12-03
|
12
|
+
|
13
|
+
- Corrects an error in `values_for_select`
|
14
|
+
|
15
|
+
## [0.0.3] - 2021-12-03
|
16
|
+
|
17
|
+
- Corrects an error with email / website
|
18
|
+
|
19
|
+
## [0.0.2] - 2021-12-02
|
4
20
|
|
5
21
|
- Renames `:font_awesome` into `:font_awesome_4` because FA v5 and v6 may have different UIDs.
|
6
22
|
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Social nets DB
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/social_nets_db)
|
4
|
+
|
3
5
|
## Installation
|
4
6
|
|
5
7
|
```ruby
|
@@ -9,27 +11,24 @@ gem "social_nets_db"
|
|
9
11
|
|
10
12
|
## Internals
|
11
13
|
|
12
|
-
It stores data about social nets in a
|
14
|
+
It stores data about popular social nets, video hostings etc. in a YAML file [`db.yml`](https://github.com/sergeypedan/social-nets-db/blob/master/lib/social_nets_db/db.yml):
|
13
15
|
|
14
16
|
```yaml
|
15
|
-
|
17
|
+
behance:
|
16
18
|
name: Behance
|
17
|
-
uid: behance
|
18
19
|
icons:
|
19
|
-
font_awesome_4:
|
20
|
+
font_awesome_4: behance
|
20
21
|
color: "#1769ff"
|
21
|
-
|
22
|
+
domain: behance.com
|
22
23
|
tags:
|
23
|
-
- recruiting
|
24
24
|
- art
|
25
25
|
- design
|
26
|
+
- recruiting
|
26
27
|
profile_url:
|
27
|
-
by_username: https
|
28
|
-
by_account_id: "https
|
28
|
+
by_username: "https://${domain}/${uid}"
|
29
|
+
by_account_id: "https://${domain}/${uid}"
|
29
30
|
```
|
30
31
|
|
31
|
-
[Peek into the source](https://github.com/sergeypedan/social-nets-db/blob/master/lib/social_net_db/db.yml).
|
32
|
-
|
33
32
|
Everything else is just helpers around this simple DB: finders, accessors & view helpers.
|
34
33
|
|
35
34
|
|
@@ -47,18 +46,20 @@ ruby:
|
|
47
46
|
{ net_uid: "instagram", username: "dhh" },
|
48
47
|
{ net_uid: "facebook", username: "d-h-h" },
|
49
48
|
{ net_uid: "twitter", username: "d_h_h" },
|
50
|
-
{ net_uid: "upwork", account_id: "401298374012374" }
|
49
|
+
{ net_uid: "upwork", account_id: "401298374012374" },
|
50
|
+
{ net_uid: "email", username: "elon@musk.io" },
|
51
|
+
{ net_uid: "website", username: "musk.io" }
|
51
52
|
]
|
52
53
|
|
53
54
|
ul
|
54
55
|
- accounts.each do |account|
|
55
|
-
- net = SocialNetsDB.find account[:net_uid]
|
56
|
+
- net = SocialNetsDB::SocialNet.find account[:net_uid]
|
56
57
|
li
|
57
|
-
=
|
58
|
+
- fa_icon_uid = net.icons["font_awesome_4"] || "link"
|
59
|
+
= fa_icon fa_icon_uid, class: "fw", style: "color: #{net.color}"
|
58
60
|
=< link_to net.name, \
|
59
61
|
net.user_page(username: account[:username], account_id: account[:account_id]), \
|
60
|
-
target: "_blank",
|
61
|
-
rel: "noopener noreferrer"
|
62
|
+
target: "_blank", rel: "noopener noreferrer"
|
62
63
|
```
|
63
64
|
|
64
65
|
Here the gem:
|
@@ -66,15 +67,13 @@ Here the gem:
|
|
66
67
|
- builds the URL to user page
|
67
68
|
|
68
69
|
```ruby
|
69
|
-
net.user_page(username: account[:username])
|
70
|
-
# "https://facebook.com/dhh"
|
70
|
+
net.user_page(username: account[:username]) #=> "https://facebook.com/dhh"
|
71
71
|
```
|
72
72
|
|
73
73
|
- gives you the correct name of the social net
|
74
74
|
|
75
75
|
```ruby
|
76
|
-
net.name
|
77
|
-
# "Facebook"
|
76
|
+
net.name #=> "Facebook"
|
78
77
|
```
|
79
78
|
|
80
79
|
### 2. To help building a `<select>` with social nets when storing user's account link
|
@@ -84,7 +83,7 @@ Here the gem:
|
|
84
83
|
= f.fields_for :social_net_accounts do |sna|
|
85
84
|
.form-group
|
86
85
|
= sna.label :social_net_uid, class: "control-label"
|
87
|
-
= sna.select :social_net_uid, SocialNetsDB.values_for_select, {}, class: "form-control"
|
86
|
+
= sna.select :social_net_uid, SocialNetsDB::SocialNet.values_for_select, {}, class: "form-control"
|
88
87
|
```
|
89
88
|
|
90
89
|
which produces
|
@@ -109,12 +108,14 @@ See section “[Using with Rails](#use-with-rails)” below for more details.
|
|
109
108
|
|
110
109
|
## API
|
111
110
|
|
112
|
-
###
|
111
|
+
### Find a social net record
|
113
112
|
|
114
|
-
|
113
|
+
Use either one:
|
115
114
|
|
116
115
|
```ruby
|
117
|
-
social_net = SocialNetsDB.find("facebook")
|
116
|
+
social_net = SocialNetsDB::SocialNet.find("facebook")
|
117
|
+
social_net = SocialNetsDB::SocialNet.find_by(uid: "facebook")
|
118
|
+
social_net = SocialNetsDB::SocialNet.find_by_uid("facebook")
|
118
119
|
# => #<SocialNetsDB:0x00007fddc0041b40 @uid="facebook">
|
119
120
|
```
|
120
121
|
|
@@ -131,97 +132,45 @@ SocialNetsDB.uids
|
|
131
132
|
# "habr",
|
132
133
|
# "github",
|
133
134
|
# "instagram",
|
134
|
-
#
|
135
|
-
# "linkedin",
|
136
|
-
# "medium",
|
137
|
-
# "my.mail.ru",
|
138
|
-
# "odnoklassniki",
|
139
|
-
# "stackoverflow",
|
140
|
-
# "telegram",
|
141
|
-
# "twitter",
|
142
|
-
# "upwork",
|
143
|
-
# "vkontakte",
|
144
|
-
# "youtube"
|
135
|
+
# ...
|
145
136
|
# ]
|
146
137
|
```
|
147
138
|
|
148
|
-
If you try to initialize with an unsupported UID, and you will also get the list along with an Exception:
|
149
|
-
|
150
|
-
```ruby
|
151
|
-
SocialNetsDB.find("diaspora")
|
152
|
-
# ArgumentError (Social net with UID test is not supported.
|
153
|
-
#
|
154
|
-
# Currently supported UIDs are: behance, dribble, facebook, github, instagram, livejournal, linkedin, medium, my.mail.ru, odnoklassniki, stackoverflow, telegram, twitter, vkontakte, youtube)
|
155
|
-
```
|
156
|
-
|
157
|
-
### find_by
|
158
|
-
|
159
|
-
If you don't want to rescue exceptions while initializing, you can use `find_by(uid:)` instead.
|
160
|
-
|
161
|
-
It returns an instance:
|
162
|
-
|
163
|
-
```ruby
|
164
|
-
SocialNetsDB.find_by(uid: "facebook")
|
165
|
-
# => #<SocialNetsDB:0x00007fddc0041b40 @uid="facebook">
|
166
|
-
```
|
167
|
-
|
168
|
-
or `nil`:
|
169
|
-
|
170
|
-
```ruby
|
171
|
-
SocialNetsDB.find_by(uid: "blabla")
|
172
|
-
# => nil
|
173
|
-
```
|
174
|
-
|
175
139
|
### Data
|
176
140
|
|
177
141
|
```ruby
|
178
|
-
social_net.to_h
|
179
|
-
#
|
180
|
-
#
|
181
|
-
#
|
182
|
-
#
|
183
|
-
#
|
184
|
-
#
|
185
|
-
#
|
186
|
-
#
|
187
|
-
#
|
188
|
-
#
|
189
|
-
#
|
190
|
-
# }
|
142
|
+
social_net.to_h #=>
|
143
|
+
# {
|
144
|
+
# "name" => "Facebook",
|
145
|
+
# "icons" => { "font_awesome_4" => "facebook" },
|
146
|
+
# "color" => "#3C5A99",
|
147
|
+
# "domain" => "facebook.com",
|
148
|
+
# "tags" => ["social net"],
|
149
|
+
# "profile_url" => {
|
150
|
+
# "by_username" => "https://${domain}/${uid}",
|
151
|
+
# "by_account_id" => "https://${domain}/${uid}"
|
152
|
+
# }
|
153
|
+
# }
|
191
154
|
```
|
192
155
|
|
193
156
|
### Property accessors
|
194
157
|
|
195
158
|
```ruby
|
196
|
-
social_net.color
|
197
|
-
social_net.
|
198
|
-
social_net.
|
199
|
-
social_net.
|
200
|
-
social_net.url
|
159
|
+
social_net.color #=> "#3C5A99"
|
160
|
+
social_net.name #=> "Facebook"
|
161
|
+
social_net.uid #=> "facebook"
|
162
|
+
social_net.domain #=> "facebook.com"
|
163
|
+
social_net.url #=> "https://facebook.com"
|
164
|
+
social_net.icons #=> { "font_awesome_4" => "facebook" }
|
201
165
|
```
|
202
166
|
|
203
167
|
### FontAwesome icon
|
204
168
|
|
205
|
-
Assumes you have [FontAwesome](https://fontawesome.com/v4.7.0/) installed. Just builds the HTML tag.
|
206
|
-
|
207
169
|
```ruby
|
208
|
-
social_net.
|
209
|
-
#=> <span class="fa fa-facebook" style="color: #3C5A99"></span>
|
170
|
+
social_net.icons["font_awesome_4"] #=> "facebook"
|
210
171
|
```
|
211
172
|
|
212
|
-
|
213
|
-
|
214
|
-
```ruby
|
215
|
-
social_net.fa_icon(class: "fa-fw", id: "my-id", style: "margin-top: 10px")
|
216
|
-
#=> <span class="fa fa-facebook fa-fw" style="color: #3C5A99; margin-top: 10px;" id="my-id"></span>
|
217
|
-
```
|
218
|
-
|
219
|
-
Exporting social net brand color to `styles` attribute can be turned off by passing `color: false` Hash pair among others:
|
220
|
-
|
221
|
-
```ruby
|
222
|
-
social_net.fa_icon(color: false, class: "fa-fw", id: "my-id", style: "margin-top: 10px")
|
223
|
-
#=> <span class="fa fa-facebook fa-fw" style="cmargin-top: 10px;" id="my-id"></span>
|
224
|
-
```
|
173
|
+
Currently, only FontAwesome v4 icons are store. I plan adding newer version of FA, maybe other icon providers, and also SVGs.
|
225
174
|
|
226
175
|
### User's page URL
|
227
176
|
|
@@ -230,7 +179,7 @@ social_net.user_page(username: "dhh") #=> "https://facebook.com/dhh
|
|
230
179
|
social_net.user_page(account_id: "id1234566789") #=> "https://facebook.com/account/id1234566789"
|
231
180
|
```
|
232
181
|
|
233
|
-
If you pass a username,
|
182
|
+
If you pass a username, while the `SocialNet` supports user page URLs only via account ids, the method call will return `nil`.
|
234
183
|
|
235
184
|
You can check which is supported
|
236
185
|
|
@@ -250,13 +199,13 @@ This gem is Rails-agnostic, but you can use it in Rails like so:
|
|
250
199
|
= f.fields_for :social_net_accounts do |sna|
|
251
200
|
.form-group
|
252
201
|
= sna.label :social_net_uid, class: "control-label"
|
253
|
-
= sna.select :social_net_uid, SocialNetsDB.values_for_select, {}, class: "form-control"
|
202
|
+
= sna.select :social_net_uid, SocialNetsDB::SocialNet.values_for_select, {}, class: "form-control"
|
254
203
|
```
|
255
204
|
|
256
205
|
because
|
257
206
|
|
258
207
|
```ruby
|
259
|
-
SocialNetsDB.values_for_select
|
208
|
+
SocialNetsDB::SocialNet.values_for_select
|
260
209
|
#=> [
|
261
210
|
# ["Behance", "behance"],
|
262
211
|
# ["Dribble", "dribble"],
|
@@ -284,6 +233,21 @@ model User < ApplicationRecord
|
|
284
233
|
end
|
285
234
|
```
|
286
235
|
|
236
|
+
This would be a standard approach:
|
237
|
+
|
238
|
+
```ruby
|
239
|
+
# model SocialNet < ApplicationRecord
|
240
|
+
# has_many :social_net_accounts
|
241
|
+
# end
|
242
|
+
```
|
243
|
+
|
244
|
+
but instead we will use `SocialNetsDB::SocialNet` class instead of an ActiveRecord class:
|
245
|
+
|
246
|
+
```ruby
|
247
|
+
SocialNetsDB::SocialNet.find("facebook")
|
248
|
+
SocialNetsDB::SocialNet.find_by(uid: "facebook")
|
249
|
+
```
|
250
|
+
|
287
251
|
```ruby
|
288
252
|
model SocialNetAccount < ApplicationRecord
|
289
253
|
belongs_to :user
|
@@ -293,7 +257,7 @@ model SocialNetAccount < ApplicationRecord
|
|
293
257
|
validates :username, presence: true, if: Proc.new { |record| record.account_id.blank? }
|
294
258
|
|
295
259
|
def social_net
|
296
|
-
@social_net ||= SocialNetsDB.find(self.social_net_uid)
|
260
|
+
@social_net ||= SocialNetsDB::SocialNet.find(self.social_net_uid)
|
297
261
|
end
|
298
262
|
|
299
263
|
def user_page
|
data/lib/social_nets_db/db.yml
CHANGED
@@ -17,11 +17,12 @@ class SocialNetsDB
|
|
17
17
|
|
18
18
|
attr_accessor :uid
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
[:color, :domain, :icons, :name, :tags].each do |method_symbol|
|
21
|
+
define_method(method_symbol) do
|
22
|
+
fallback_value = method_symbol == :tags ? [] : nil
|
23
|
+
@data.fetch(method_symbol.to_s, fallback_value)
|
24
|
+
end
|
25
|
+
end
|
25
26
|
|
26
27
|
def to_h
|
27
28
|
self.class.send :raw_data_for, @uid
|
@@ -38,10 +39,10 @@ class SocialNetsDB
|
|
38
39
|
|
39
40
|
if username && page["by_username"]
|
40
41
|
fail ArgumentError, "Either a username or an account id must be provided" unless present_str?(username)
|
41
|
-
template.sub("${domain}", domain).sub("${uid}", username)
|
42
|
+
template.sub("${domain}", domain.to_s).sub("${uid}", username)
|
42
43
|
elsif account_id && page["by_account_id"]
|
43
44
|
fail ArgumentError, "Either a username or an account id must be provided" unless present_str?(account_id)
|
44
|
-
template.sub("${domain}", domain).sub("${uid}", account_id)
|
45
|
+
template.sub("${domain}", domain.to_s).sub("${uid}", account_id)
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
@@ -92,15 +93,15 @@ class SocialNetsDB
|
|
92
93
|
end
|
93
94
|
|
94
95
|
def names
|
95
|
-
RECORDS.map { |uid, data| data[
|
96
|
+
RECORDS.map { |uid, data| data["name"] }
|
96
97
|
end
|
97
98
|
|
98
99
|
def uids
|
99
|
-
RECORDS.map
|
100
|
+
RECORDS.keys.map(&:to_s)
|
100
101
|
end
|
101
102
|
|
102
103
|
def values_for_select
|
103
|
-
RECORDS.map { |uid, data| [data[
|
104
|
+
RECORDS.map { |uid, data| [data["name"], uid] }
|
104
105
|
end
|
105
106
|
|
106
107
|
alias_method :find, :find_by_uid
|
data/social_nets_db.gemspec
CHANGED
@@ -8,19 +8,20 @@
|
|
8
8
|
require_relative "lib/social_nets_db/version"
|
9
9
|
|
10
10
|
Gem::Specification.new do |spec|
|
11
|
-
spec.name
|
12
|
-
spec.version
|
13
|
-
spec.authors
|
14
|
-
spec.email
|
15
|
-
spec.license
|
16
|
-
|
17
|
-
spec.summary
|
18
|
-
spec.description
|
19
|
-
|
20
|
-
spec.homepage
|
21
|
-
spec.metadata
|
22
|
-
|
23
|
-
|
11
|
+
spec.name = "social_nets_db"
|
12
|
+
spec.version = SocialNetsDB::VERSION
|
13
|
+
spec.authors = ["Sergey Pedan"]
|
14
|
+
spec.email = ["sergey.pedan@gmail.com"]
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.summary = "A non-comprehensive database of social nets packed in a Ruby gem"
|
18
|
+
spec.description = "#{spec.summary}. We have helpers for color, user page URL, FontAwesome icon, social net domain, some tags for grouping social nets, etc."
|
19
|
+
|
20
|
+
spec.homepage = "https://sergeypedan.ru/open_source_projects/social-nets-db"
|
21
|
+
spec.metadata = { "changelog_uri" => "https://github.com/sergeypedan/social-nets-db/blob/master/CHANGELOG.md",
|
22
|
+
"documentation_uri" => "https://www.rubydoc.info/gems/#{spec.name}",
|
23
|
+
"homepage_uri" => spec.homepage,
|
24
|
+
"source_code_uri" => "https://github.com/sergeypedan/social-nets-db" }
|
24
25
|
|
25
26
|
spec.extra_rdoc_files = Dir["README*", "LICENSE*"]
|
26
27
|
spec.rdoc_options = ["--charset=UTF-8"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: social_nets_db
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey Pedan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-12-
|
11
|
+
date: 2021-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -146,13 +146,14 @@ files:
|
|
146
146
|
- lib/social_nets_db/tag_helper.rb
|
147
147
|
- lib/social_nets_db/version.rb
|
148
148
|
- social_nets_db.gemspec
|
149
|
-
homepage: https://
|
149
|
+
homepage: https://sergeypedan.ru/open_source_projects/social-nets-db
|
150
150
|
licenses:
|
151
151
|
- MIT
|
152
152
|
metadata:
|
153
153
|
changelog_uri: https://github.com/sergeypedan/social-nets-db/blob/master/CHANGELOG.md
|
154
|
-
|
155
|
-
|
154
|
+
documentation_uri: https://www.rubydoc.info/gems/social_nets_db
|
155
|
+
homepage_uri: https://sergeypedan.ru/open_source_projects/social-nets-db
|
156
|
+
source_code_uri: https://github.com/sergeypedan/social-nets-db
|
156
157
|
post_install_message:
|
157
158
|
rdoc_options:
|
158
159
|
- "--charset=UTF-8"
|