social_nets_db 0.0.2 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/social_nets_db.svg)](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"
|