forem-ruby 0.1.0.beta3 → 0.1.0.beta4
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/lib/forem/client.rb +20 -0
- data/lib/forem/resources/badge.rb +61 -0
- data/lib/forem/resources/badge_achievement.rb +55 -0
- data/lib/forem/services/badge_achievement_service.rb +95 -0
- data/lib/forem/services/badge_service.rb +117 -0
- data/lib/forem/services/base_service.rb +20 -0
- data/lib/forem/version.rb +1 -1
- data/lib/forem.rb +4 -0
- metadata +5 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 70aa093a419b454eae92eb74afdfddcea88acf77f0112c8d6d988874ec142b5c
|
|
4
|
+
data.tar.gz: 5e3ce2de3e9302ad7a2c0a05102af264288da4b0836c445c84fbf14d9fe4a7b8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 86e0016a62e3db3057028d61dd8fb23a29882b67e386a0446bca269eead5bfffa770be8fd67cb194868c43a7980d221255e31ac477a59f3561d7ff8b8bba37d2
|
|
7
|
+
data.tar.gz: f915cad693ab839f2f8afdacdc797aecfa4afd8a21ca499eb09f305a8f01289bd0296a891bd612f879f5ac27625469557a015639597f4704c8a3302c831bd245
|
data/lib/forem/client.rb
CHANGED
|
@@ -61,6 +61,26 @@ module Forem
|
|
|
61
61
|
# client.users.retrieve(42)
|
|
62
62
|
def users; @users ||= Services::UserService.new(@requestor); end
|
|
63
63
|
|
|
64
|
+
# Access the Badges API.
|
|
65
|
+
#
|
|
66
|
+
# @return [Services::BadgeService] the badges service
|
|
67
|
+
# @see https://developers.forem.com/api/v1
|
|
68
|
+
#
|
|
69
|
+
# @example
|
|
70
|
+
# client.badges.list(page: 1)
|
|
71
|
+
# client.badges.retrieve(45)
|
|
72
|
+
def badges; @badges ||= Services::BadgeService.new(@requestor); end
|
|
73
|
+
|
|
74
|
+
# Access the Badge Achievements API.
|
|
75
|
+
#
|
|
76
|
+
# @return [Services::BadgeAchievementService] the badge achievements service
|
|
77
|
+
# @see https://developers.forem.com/api/v1
|
|
78
|
+
#
|
|
79
|
+
# @example
|
|
80
|
+
# client.badge_achievements.create(user_id: 123, badge_id: 45)
|
|
81
|
+
# client.badge_achievements.delete(9876)
|
|
82
|
+
def badge_achievements; @badge_achievements ||= Services::BadgeAchievementService.new(@requestor); end
|
|
83
|
+
|
|
64
84
|
# Access the Comments API.
|
|
65
85
|
#
|
|
66
86
|
# @return [Services::CommentService] the comments service
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module Forem
|
|
2
|
+
# Represents a badge that can be awarded to users on a Forem instance.
|
|
3
|
+
#
|
|
4
|
+
# Badges are awards that can be given to users. Badges support full CRUD
|
|
5
|
+
# operations.
|
|
6
|
+
#
|
|
7
|
+
# Available operations (via mixins):
|
|
8
|
+
# - +List+ — GET /api/badges
|
|
9
|
+
# - +Create+ — POST /api/badges
|
|
10
|
+
# - +Retrieve+ — GET /api/badges/:id
|
|
11
|
+
# - +Update+ — PUT /api/badges/:id
|
|
12
|
+
# - +Delete+ — class- and instance-level delete (DELETE /api/badges/:id)
|
|
13
|
+
# - +Save+ — instance-level save (create or update)
|
|
14
|
+
#
|
|
15
|
+
# == Badge Fields
|
|
16
|
+
#
|
|
17
|
+
# - +id+ (Integer) — Assigned by the API; not writable
|
|
18
|
+
# - +title+ (String) — Badge title; unique across the instance
|
|
19
|
+
# - +slug+ (String) — Generated from +title+ by the API; not writable
|
|
20
|
+
# - +description+ (String) — Badge description
|
|
21
|
+
# - +badge_image+ (String) — Badge image URL; set on write with
|
|
22
|
+
# +remote_badge_image_url+
|
|
23
|
+
# - +credits_awarded+ (Integer) — Credits granted alongside the badge
|
|
24
|
+
# - +allow_multiple_awards+ (Boolean) — Whether the badge can be awarded to the same user more than once
|
|
25
|
+
# - +created_at+ / +updated_at+ (String) — ISO 8601 timestamps; not writable
|
|
26
|
+
#
|
|
27
|
+
# == Authentication
|
|
28
|
+
#
|
|
29
|
+
# All badge endpoints require an admin API key, reads included.
|
|
30
|
+
#
|
|
31
|
+
# == Pagination
|
|
32
|
+
#
|
|
33
|
+
# +list+ returns a fixed 50 records per page.
|
|
34
|
+
#
|
|
35
|
+
# @example List every badge
|
|
36
|
+
# page = 1
|
|
37
|
+
# loop do
|
|
38
|
+
# badges = client.badges.list(page: page)
|
|
39
|
+
# break if badges.data.empty?
|
|
40
|
+
# badges.data.each { |b| puts "#{b.id}: #{b.title}" }
|
|
41
|
+
# page += 1
|
|
42
|
+
# end
|
|
43
|
+
#
|
|
44
|
+
# @example Retrieve a badge by ID
|
|
45
|
+
# badge = client.badges.retrieve(45)
|
|
46
|
+
# puts badge.title
|
|
47
|
+
#
|
|
48
|
+
# @see BadgeAchievement
|
|
49
|
+
# @see https://developers.forem.com/api/v1
|
|
50
|
+
class Badge < APIResource
|
|
51
|
+
extend APIOperations::Create
|
|
52
|
+
extend APIOperations::List
|
|
53
|
+
extend APIOperations::Retrieve
|
|
54
|
+
extend APIOperations::Update
|
|
55
|
+
include APIOperations::Delete
|
|
56
|
+
include APIOperations::Save
|
|
57
|
+
|
|
58
|
+
OBJECT_NAME = "badge"
|
|
59
|
+
RESOURCE_PATH = "/api/badges"
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module Forem
|
|
2
|
+
# Represents a badge awarded to a specific user.
|
|
3
|
+
#
|
|
4
|
+
# Creating a badge achievement awards a badge; deleting one revokes it. There
|
|
5
|
+
# is no update endpoint.
|
|
6
|
+
#
|
|
7
|
+
# Available operations (via mixins):
|
|
8
|
+
# - +List+ — GET /api/badge_achievements
|
|
9
|
+
# - +Create+ — POST /api/badge_achievements
|
|
10
|
+
# - +Retrieve+ — GET /api/badge_achievements/:id
|
|
11
|
+
# - +Delete+ — class- and instance-level delete (DELETE /api/badge_achievements/:id)
|
|
12
|
+
#
|
|
13
|
+
# == BadgeAchievement Fields
|
|
14
|
+
#
|
|
15
|
+
# - +id+ (Integer) — Assigned by the API; not writable
|
|
16
|
+
# - +user_id+ (Integer) — The user the badge was awarded to
|
|
17
|
+
# - +badge_id+ (Integer) — The badge that was awarded
|
|
18
|
+
# - +rewarder_id+ (Integer) — The awarding user; not writable, so always
|
|
19
|
+
# +null+ on achievements created through the API
|
|
20
|
+
# - +rewarding_context_message_markdown+ (String) — Message shown with the award, in markdown
|
|
21
|
+
# - +rewarding_context_message+ (String) — Rendered from
|
|
22
|
+
# +rewarding_context_message_markdown+ by the API; not writable
|
|
23
|
+
# - +include_default_description+ (Boolean) — Whether the badge description accompanies the message
|
|
24
|
+
# - +created_at+ / +updated_at+ (String) — ISO 8601 timestamps; not writable
|
|
25
|
+
#
|
|
26
|
+
# == Authentication
|
|
27
|
+
#
|
|
28
|
+
# All badge achievement endpoints require an admin API key, reads included.
|
|
29
|
+
#
|
|
30
|
+
# == Pagination
|
|
31
|
+
#
|
|
32
|
+
# +list+ returns a fixed 50 records per page.
|
|
33
|
+
#
|
|
34
|
+
# @example Award a badge
|
|
35
|
+
# achievement = client.badge_achievements.create(
|
|
36
|
+
# user_id: 123,
|
|
37
|
+
# badge_id: 45
|
|
38
|
+
# )
|
|
39
|
+
# puts achievement.id
|
|
40
|
+
#
|
|
41
|
+
# @example Revoke a badge
|
|
42
|
+
# client.badge_achievements.delete(9876)
|
|
43
|
+
#
|
|
44
|
+
# @see Badge
|
|
45
|
+
# @see https://developers.forem.com/api/v1
|
|
46
|
+
class BadgeAchievement < APIResource
|
|
47
|
+
extend APIOperations::Create
|
|
48
|
+
extend APIOperations::List
|
|
49
|
+
extend APIOperations::Retrieve
|
|
50
|
+
include APIOperations::Delete
|
|
51
|
+
|
|
52
|
+
OBJECT_NAME = "badge_achievement"
|
|
53
|
+
RESOURCE_PATH = "/api/badge_achievements"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
module Forem
|
|
2
|
+
module Services
|
|
3
|
+
# Service for interacting with the Forem Badge Achievements API.
|
|
4
|
+
#
|
|
5
|
+
# A badge achievement is a badge awarded to a user; creating one awards the
|
|
6
|
+
# badge and deleting one revokes it. These endpoints require an API key with
|
|
7
|
+
# admin-level privileges.
|
|
8
|
+
#
|
|
9
|
+
# Access via {Client#badge_achievements}. All methods inject the client's
|
|
10
|
+
# requestor automatically so no additional configuration is required.
|
|
11
|
+
#
|
|
12
|
+
# @example
|
|
13
|
+
# client = Forem::Client.new("your-admin-api-key")
|
|
14
|
+
# client.badge_achievements.create(user_id: 123, badge_id: 45)
|
|
15
|
+
#
|
|
16
|
+
# @see BadgeAchievement
|
|
17
|
+
# @see BadgeService
|
|
18
|
+
# @see https://developers.forem.com/api/v1
|
|
19
|
+
class BadgeAchievementService < BaseService
|
|
20
|
+
# List badge achievements, most recently created first.
|
|
21
|
+
#
|
|
22
|
+
# Returns a fixed 50 records per page.
|
|
23
|
+
#
|
|
24
|
+
# @param params [Hash] query parameters
|
|
25
|
+
# @option params [Integer] :page page number (default: 1)
|
|
26
|
+
# @param opts [Hash] per-request options
|
|
27
|
+
# @return [ListObject<BadgeAchievement>] a page of achievements
|
|
28
|
+
#
|
|
29
|
+
# @example
|
|
30
|
+
# client.badge_achievements.list(page: 2)
|
|
31
|
+
#
|
|
32
|
+
# @see https://developers.forem.com/api/v1
|
|
33
|
+
def list(params = {}, opts = {})
|
|
34
|
+
BadgeAchievement.list(params, opts_with_requestor(opts))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Retrieve a single badge achievement by its numeric ID.
|
|
38
|
+
#
|
|
39
|
+
# @param id [Integer, String] the achievement ID
|
|
40
|
+
# @param opts [Hash] per-request options
|
|
41
|
+
# @return [BadgeAchievement] the achievement with the given ID
|
|
42
|
+
# @raise [NotFoundError] on HTTP 404
|
|
43
|
+
#
|
|
44
|
+
# @example
|
|
45
|
+
# client.badge_achievements.retrieve(9876)
|
|
46
|
+
#
|
|
47
|
+
# @see https://developers.forem.com/api/v1
|
|
48
|
+
def retrieve(id, opts = {})
|
|
49
|
+
BadgeAchievement.retrieve(id, opts_with_requestor(opts))
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Award a badge to a user.
|
|
53
|
+
#
|
|
54
|
+
# @param params [Hash] achievement attributes
|
|
55
|
+
# @option params [Integer] :user_id the user ID (required)
|
|
56
|
+
# @option params [Integer] :badge_id the badge ID (required)
|
|
57
|
+
# @option params [String] :rewarding_context_message_markdown a message
|
|
58
|
+
# shown with the award
|
|
59
|
+
# @option params [Boolean] :include_default_description whether to show
|
|
60
|
+
# the badge's own description alongside the message (default true)
|
|
61
|
+
# @param opts [Hash] per-request options
|
|
62
|
+
# @return [BadgeAchievement] the newly created achievement
|
|
63
|
+
# @raise [InvalidRequestError] on HTTP 422
|
|
64
|
+
#
|
|
65
|
+
# @example
|
|
66
|
+
# client.badge_achievements.create(
|
|
67
|
+
# user_id: 123,
|
|
68
|
+
# badge_id: 45
|
|
69
|
+
# )
|
|
70
|
+
#
|
|
71
|
+
# @see https://developers.forem.com/api/v1
|
|
72
|
+
def create(params = {}, opts = {})
|
|
73
|
+
BadgeAchievement.create(
|
|
74
|
+
enveloped(:badge_achievement, params),
|
|
75
|
+
opts_with_requestor(opts),
|
|
76
|
+
)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Revoke a badge by deleting the achievement.
|
|
80
|
+
#
|
|
81
|
+
# @param id [Integer, String] the achievement ID to delete
|
|
82
|
+
# @param opts [Hash] per-request options
|
|
83
|
+
# @return [nil] returns nil on success
|
|
84
|
+
# @raise [NotFoundError] on HTTP 404
|
|
85
|
+
#
|
|
86
|
+
# @example
|
|
87
|
+
# client.badge_achievements.delete(9876)
|
|
88
|
+
#
|
|
89
|
+
# @see https://developers.forem.com/api/v1
|
|
90
|
+
def delete(id, opts = {})
|
|
91
|
+
BadgeAchievement.delete(id, opts_with_requestor(opts))
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
module Forem
|
|
2
|
+
module Services
|
|
3
|
+
# Service for interacting with the Forem Badges API.
|
|
4
|
+
#
|
|
5
|
+
# Badges are awards that can be given to users. These endpoints require
|
|
6
|
+
# an API key with admin-level privileges.
|
|
7
|
+
#
|
|
8
|
+
# Access via {Client#badges}. All methods inject the client's requestor
|
|
9
|
+
# automatically so no additional configuration is required.
|
|
10
|
+
#
|
|
11
|
+
# @example
|
|
12
|
+
# client = Forem::Client.new("your-admin-api-key")
|
|
13
|
+
# badges = client.badges.list
|
|
14
|
+
# badge = client.badges.retrieve(45)
|
|
15
|
+
#
|
|
16
|
+
# @see Badge
|
|
17
|
+
# @see BadgeAchievementService for awarding a badge to a user
|
|
18
|
+
# @see https://developers.forem.com/api/v1
|
|
19
|
+
class BadgeService < BaseService
|
|
20
|
+
# List badges, most recently created first.
|
|
21
|
+
#
|
|
22
|
+
# Returns a fixed 50 records per page.
|
|
23
|
+
#
|
|
24
|
+
# @param params [Hash] query parameters
|
|
25
|
+
# @option params [Integer] :page page number (default: 1)
|
|
26
|
+
# @param opts [Hash] per-request options
|
|
27
|
+
# @return [ListObject<Badge>] a page of badges
|
|
28
|
+
#
|
|
29
|
+
# @example
|
|
30
|
+
# client.badges.list(page: 2)
|
|
31
|
+
#
|
|
32
|
+
# @see https://developers.forem.com/api/v1
|
|
33
|
+
def list(params = {}, opts = {})
|
|
34
|
+
Badge.list(params, opts_with_requestor(opts))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Retrieve a single badge by its numeric ID.
|
|
38
|
+
#
|
|
39
|
+
# @param id [Integer, String] the badge ID
|
|
40
|
+
# @param opts [Hash] per-request options
|
|
41
|
+
# @return [Badge] the badge with the given ID
|
|
42
|
+
# @raise [NotFoundError] on HTTP 404
|
|
43
|
+
#
|
|
44
|
+
# @example
|
|
45
|
+
# client.badges.retrieve(45)
|
|
46
|
+
#
|
|
47
|
+
# @see https://developers.forem.com/api/v1
|
|
48
|
+
def retrieve(id, opts = {})
|
|
49
|
+
Badge.retrieve(id, opts_with_requestor(opts))
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Create a new badge.
|
|
53
|
+
#
|
|
54
|
+
# @param params [Hash] badge attributes
|
|
55
|
+
# @option params [String] :title badge title (must be unique)
|
|
56
|
+
# @option params [String] :description badge description
|
|
57
|
+
# @option params [String] :remote_badge_image_url URL to fetch the badge
|
|
58
|
+
# image from
|
|
59
|
+
# @option params [Integer] :credits_awarded credits granted alongside the
|
|
60
|
+
# badge (default 0)
|
|
61
|
+
# @option params [Boolean] :allow_multiple_awards whether the badge can
|
|
62
|
+
# be awarded to the same user more than once (default false)
|
|
63
|
+
# @param opts [Hash] per-request options
|
|
64
|
+
# @return [Badge] the newly created badge
|
|
65
|
+
# @raise [InvalidRequestError] on HTTP 422 (validation errors)
|
|
66
|
+
#
|
|
67
|
+
# @example
|
|
68
|
+
# client.badges.create(
|
|
69
|
+
# title: "Forem Contributor",
|
|
70
|
+
# description: "Contributed an article",
|
|
71
|
+
# remote_badge_image_url: "https://example.com/badge.png"
|
|
72
|
+
# )
|
|
73
|
+
#
|
|
74
|
+
# @see https://developers.forem.com/api/v1
|
|
75
|
+
def create(params = {}, opts = {})
|
|
76
|
+
Badge.create(enveloped(:badge, params), opts_with_requestor(opts))
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Update an existing badge.
|
|
80
|
+
#
|
|
81
|
+
# @param id [Integer, String] the badge ID to update
|
|
82
|
+
# @param params [Hash] badge attributes to change
|
|
83
|
+
# @option params [String] :title new title
|
|
84
|
+
# @option params [String] :description new description
|
|
85
|
+
# @option params [Integer] :credits_awarded new credit amount
|
|
86
|
+
# @option params [Boolean] :allow_multiple_awards new multiple-award
|
|
87
|
+
# setting
|
|
88
|
+
# @param opts [Hash] per-request options
|
|
89
|
+
# @return [Badge] the updated badge
|
|
90
|
+
# @raise [NotFoundError] on HTTP 404
|
|
91
|
+
# @raise [InvalidRequestError] on HTTP 422 (validation errors)
|
|
92
|
+
#
|
|
93
|
+
# @example
|
|
94
|
+
# client.badges.update(45, description: "Updated description")
|
|
95
|
+
#
|
|
96
|
+
# @see https://developers.forem.com/api/v1
|
|
97
|
+
def update(id, params = {}, opts = {})
|
|
98
|
+
Badge.update(id, enveloped(:badge, params), opts_with_requestor(opts))
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Delete a badge.
|
|
102
|
+
#
|
|
103
|
+
# @param id [Integer, String] the badge ID to delete
|
|
104
|
+
# @param opts [Hash] per-request options
|
|
105
|
+
# @return [nil] returns nil on success
|
|
106
|
+
# @raise [NotFoundError] on HTTP 404
|
|
107
|
+
#
|
|
108
|
+
# @example
|
|
109
|
+
# client.badges.delete(45)
|
|
110
|
+
#
|
|
111
|
+
# @see https://developers.forem.com/api/v1
|
|
112
|
+
def delete(id, opts = {})
|
|
113
|
+
Badge.delete(id, opts_with_requestor(opts))
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -40,6 +40,26 @@ module Forem
|
|
|
40
40
|
def opts_with_requestor(opts)
|
|
41
41
|
opts.merge(requestor: @requestor)
|
|
42
42
|
end
|
|
43
|
+
|
|
44
|
+
# Wrap flat attributes in the envelope key an endpoint expects.
|
|
45
|
+
#
|
|
46
|
+
# Some write endpoints expect a nested body
|
|
47
|
+
# (<tt>{ badge: { title: "..." } }</tt>). This lets service methods take
|
|
48
|
+
# flat attributes and nest them on the caller's behalf. Params that are
|
|
49
|
+
# already enveloped are passed through untouched, so both call styles
|
|
50
|
+
# work.
|
|
51
|
+
#
|
|
52
|
+
# @param key [Symbol] the envelope key (e.g. +:badge+)
|
|
53
|
+
# @param params [Hash] attributes, flat or already enveloped
|
|
54
|
+
# @return [Hash] the enveloped params
|
|
55
|
+
#
|
|
56
|
+
# @example
|
|
57
|
+
# enveloped(:badge, title: "Top 7") #=> { badge: { title: "Top 7" } }
|
|
58
|
+
def enveloped(key, params)
|
|
59
|
+
return params if params.key?(key) || params.key?(key.to_s)
|
|
60
|
+
|
|
61
|
+
{ key => params }
|
|
62
|
+
end
|
|
43
63
|
end
|
|
44
64
|
end
|
|
45
65
|
end
|
data/lib/forem/version.rb
CHANGED
data/lib/forem.rb
CHANGED
|
@@ -16,6 +16,8 @@ require "forem/api_operations/save"
|
|
|
16
16
|
require "forem/api_resource"
|
|
17
17
|
require "forem/api_requestor"
|
|
18
18
|
require "forem/resources/article"
|
|
19
|
+
require "forem/resources/badge"
|
|
20
|
+
require "forem/resources/badge_achievement"
|
|
19
21
|
require "forem/resources/user"
|
|
20
22
|
require "forem/resources/comment"
|
|
21
23
|
require "forem/resources/organization"
|
|
@@ -42,6 +44,8 @@ require "forem/resources/admin_concept"
|
|
|
42
44
|
require "forem/resources/request_redirect"
|
|
43
45
|
require "forem/services/base_service"
|
|
44
46
|
require "forem/services/article_service"
|
|
47
|
+
require "forem/services/badge_service"
|
|
48
|
+
require "forem/services/badge_achievement_service"
|
|
45
49
|
require "forem/services/user_service"
|
|
46
50
|
require "forem/services/comment_service"
|
|
47
51
|
require "forem/services/organization_service"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: forem-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.0.
|
|
4
|
+
version: 0.1.0.beta4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Forem
|
|
@@ -38,6 +38,8 @@ files:
|
|
|
38
38
|
- lib/forem/resources/agent_session.rb
|
|
39
39
|
- lib/forem/resources/analytics.rb
|
|
40
40
|
- lib/forem/resources/article.rb
|
|
41
|
+
- lib/forem/resources/badge.rb
|
|
42
|
+
- lib/forem/resources/badge_achievement.rb
|
|
41
43
|
- lib/forem/resources/billboard.rb
|
|
42
44
|
- lib/forem/resources/comment.rb
|
|
43
45
|
- lib/forem/resources/concept.rb
|
|
@@ -63,6 +65,8 @@ files:
|
|
|
63
65
|
- lib/forem/services/agent_session_service.rb
|
|
64
66
|
- lib/forem/services/analytics_service.rb
|
|
65
67
|
- lib/forem/services/article_service.rb
|
|
68
|
+
- lib/forem/services/badge_achievement_service.rb
|
|
69
|
+
- lib/forem/services/badge_service.rb
|
|
66
70
|
- lib/forem/services/base_service.rb
|
|
67
71
|
- lib/forem/services/billboard_service.rb
|
|
68
72
|
- lib/forem/services/comment_service.rb
|