freefeed-client 0.1.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -9
- data/lib/freefeed.rb +11 -11
- data/lib/freefeed/client.rb +1 -33
- data/lib/freefeed/types/comment.rb +7 -5
- data/lib/freefeed/types/post.rb +13 -13
- data/lib/freefeed/version.rb +1 -1
- data/lib/resource_kitling.rb +9 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22b40faff7e8f35015ea4eafb279f5d6e8f7fe57
|
4
|
+
data.tar.gz: 1a20bc8d5471ea2871815496e6ec5f371d7107dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1518543888e251f82c382f63500b8b741fe01ef76f9dffb31f263d70ad11033159a443f9856ad31636f128252458b3fc6957c45c38b9632c56cdd53d82c9f73
|
7
|
+
data.tar.gz: 140e6030f65557cb10fe73a887e2aa3d9c23345bc459f878015490a77a921669d732cc7b2d7fd6b6711e91827e5e9db03e1f8f476b9c5ca4f0c0115fc2ad1bd6
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Ruby wrapper for [Freefeed API](https://fetsh.github.io/freefeed-api).
|
4
4
|
|
5
|
-
[![Gem Version](https://badge.fury.io/rb/
|
5
|
+
[![Gem Version](https://badge.fury.io/rb/freefeed-client.svg)](https://badge.fury.io/rb/freefeed-client)
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -44,12 +44,10 @@ post = Freefeed::Types::PostCreate.new(
|
|
44
44
|
}
|
45
45
|
)
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
post_resource.create(post)
|
47
|
+
Freefeed::Post.create(client, post)
|
50
48
|
```
|
51
49
|
|
52
|
-
You can
|
50
|
+
You can achive the same result without addressing `Freefeed::Post` class directly:
|
53
51
|
|
54
52
|
```ruby
|
55
53
|
require 'freefeed'
|
@@ -67,10 +65,10 @@ post = Freefeed::Types::PostCreate.new(
|
|
67
65
|
}
|
68
66
|
)
|
69
67
|
|
70
|
-
client.
|
68
|
+
client.posts_create(post)
|
71
69
|
```
|
72
70
|
|
73
|
-
You can even skip instantiating
|
71
|
+
You can even skip instantiating `PostCreate` type, but you will lose some validation:
|
74
72
|
|
75
73
|
|
76
74
|
```ruby
|
@@ -78,12 +76,12 @@ require 'freefeed'
|
|
78
76
|
|
79
77
|
client = Freefeed::Client.new('yourFreefeedAPIToken')
|
80
78
|
|
81
|
-
client.
|
79
|
+
client.posts_create({post: {body: 'Hello World!'}, meta: {feeds: ['yourusername']}})
|
82
80
|
```
|
83
81
|
|
84
82
|
## Logging
|
85
83
|
|
86
|
-
By default, `freefeed-client` logs everything to STDOUT. You can change this behavior and provide your own logger class with
|
84
|
+
By default, `freefeed-client` logs everything to STDOUT. You can change this behavior and provide your own logger class with some options. See example below:
|
87
85
|
|
88
86
|
```ruby
|
89
87
|
client = Freefeed::Client.new(
|
data/lib/freefeed.rb
CHANGED
@@ -31,16 +31,16 @@ require 'freefeed/types/comment'
|
|
31
31
|
require 'freefeed/types/post'
|
32
32
|
|
33
33
|
ResourceKitling::Resource.subclasses.each do |sc|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
34
|
+
sc.actions.each do |an|
|
35
|
+
mn = "#{sc.to_s.downcase.split('::').last.pluralize}_#{an.name}"
|
36
|
+
if Freefeed::Client.method_defined?(mn)
|
37
|
+
raise(
|
38
|
+
ArgumentError,
|
39
|
+
"Method '#{mn}' is already defined on Freefeed::Client"
|
40
|
+
)
|
41
|
+
end
|
42
|
+
Freefeed::Client.send(:define_method, mn) do |*args|
|
43
|
+
sc.create(self, *args)
|
44
|
+
end
|
45
45
|
end
|
46
46
|
end
|
data/lib/freefeed/client.rb
CHANGED
@@ -10,20 +10,11 @@ module Freefeed
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def authenticate(username:, password:)
|
13
|
-
Session.
|
14
|
-
.create(username: username, password: password).tap do |re|
|
13
|
+
Session.create(self, username: username, password: password).tap do |re|
|
15
14
|
@api_token = re.fetch('authToken')
|
16
15
|
end
|
17
16
|
end
|
18
17
|
|
19
|
-
def call(endpoint, params = {}, headers = {})
|
20
|
-
guard_wrong_endpoint(endpoint)
|
21
|
-
call!(
|
22
|
-
ENDPOINTS[endpoint][:method], path(endpoint),
|
23
|
-
build_options(endpoint, params), headers
|
24
|
-
)
|
25
|
-
end
|
26
|
-
|
27
18
|
def call!(verb, endpoint, params = {}, headers = {})
|
28
19
|
response = conn.send(
|
29
20
|
verb, endpoint, params, auth_header.merge(headers)
|
@@ -47,29 +38,6 @@ module Freefeed
|
|
47
38
|
end
|
48
39
|
end
|
49
40
|
|
50
|
-
def guard_wrong_endpoint(endpoint)
|
51
|
-
raise Exceptions::WrongEndpoint unless ENDPOINTS.keys.include?(endpoint)
|
52
|
-
end
|
53
|
-
|
54
|
-
def build_options(endpoint, params)
|
55
|
-
default_params(endpoint).merge(sanitize_params(endpoint, params))
|
56
|
-
end
|
57
|
-
|
58
|
-
def path(endpoint)
|
59
|
-
(endpoint.start_with?('/') ? '' : BASE_PATH) + endpoint.split('#').first
|
60
|
-
end
|
61
|
-
|
62
|
-
def default_params(endpoint)
|
63
|
-
{}.merge(ENDPOINTS[endpoint][:default_params] || {})
|
64
|
-
end
|
65
|
-
|
66
|
-
def sanitize_params(endpoint, params)
|
67
|
-
return {} unless ENDPOINTS[endpoint][:params]
|
68
|
-
params.delete_if do |key, _|
|
69
|
-
!ENDPOINTS[endpoint][:params].include?(key.to_s)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
41
|
def handle_erros(response)
|
74
42
|
raise(
|
75
43
|
Exceptions::ResponseError.new(response),
|
@@ -3,14 +3,16 @@ require 'dry-struct'
|
|
3
3
|
module Freefeed
|
4
4
|
module Types
|
5
5
|
class CommentCreate < Dry::Struct
|
6
|
-
attribute :comment
|
7
|
-
body
|
8
|
-
postId
|
9
|
-
|
6
|
+
attribute :comment do
|
7
|
+
attribute :body, Types::Body
|
8
|
+
attribute :postId, Types::UID
|
9
|
+
end
|
10
10
|
end
|
11
11
|
|
12
12
|
class CommentUpdate < Dry::Struct
|
13
|
-
attribute :comment
|
13
|
+
attribute :comment do
|
14
|
+
attribute :body, Types::Body
|
15
|
+
end
|
14
16
|
end
|
15
17
|
end
|
16
18
|
end
|
data/lib/freefeed/types/post.rb
CHANGED
@@ -3,22 +3,22 @@ require 'dry-struct'
|
|
3
3
|
module Freefeed
|
4
4
|
module Types
|
5
5
|
class PostCreate < Dry::Struct
|
6
|
-
attribute :post
|
7
|
-
body
|
8
|
-
attachments
|
9
|
-
|
10
|
-
attribute :meta
|
11
|
-
commentsDisabled
|
12
|
-
feeds
|
13
|
-
|
6
|
+
attribute :post do
|
7
|
+
attribute :body, Types::Body
|
8
|
+
attribute :attachments, Types::Attachments.meta(omittable: true)
|
9
|
+
end
|
10
|
+
attribute :meta do
|
11
|
+
attribute :commentsDisabled, Types::Strict::Bool.default(false)
|
12
|
+
attribute :feeds, Types::AccountName | Types::Feeds
|
13
|
+
end
|
14
14
|
end
|
15
15
|
|
16
16
|
class PostUpdate < Dry::Struct
|
17
|
-
attribute :post
|
18
|
-
body
|
19
|
-
attachments
|
20
|
-
feeds
|
21
|
-
|
17
|
+
attribute :post do
|
18
|
+
attribute :body, Types::Body.meta(omittable: true)
|
19
|
+
attribute :attachments, Types::Attachments.meta(omittable: true)
|
20
|
+
attribute :feeds, Types::Feeds.meta(omittable: true)
|
21
|
+
end
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
data/lib/freefeed/version.rb
CHANGED
data/lib/resource_kitling.rb
CHANGED
@@ -2,7 +2,7 @@ module ResourceKitling
|
|
2
2
|
require 'forwardable'
|
3
3
|
class ActionCollection
|
4
4
|
extend Forwardable
|
5
|
-
def_delegators :@collection, :find, :<<, :each, :include
|
5
|
+
def_delegators :@collection, :find, :<<, :each, :include?, :map
|
6
6
|
def initialize
|
7
7
|
@collection = []
|
8
8
|
end
|
@@ -46,6 +46,10 @@ module ResourceKitling
|
|
46
46
|
np.gsub(":#{key}", value.to_s)
|
47
47
|
end
|
48
48
|
end
|
49
|
+
|
50
|
+
def to_s
|
51
|
+
name
|
52
|
+
end
|
49
53
|
end
|
50
54
|
class Resource
|
51
55
|
class << self
|
@@ -62,16 +66,15 @@ module ResourceKitling
|
|
62
66
|
self._actions ||= ActionCollection.new
|
63
67
|
if block_given?
|
64
68
|
self._actions.instance_eval(&block)
|
65
|
-
# MethodFactory.construct(self, self._actions)
|
66
69
|
self._actions.each do |action|
|
67
|
-
if
|
70
|
+
if respond_to?(action.name.to_sym)
|
68
71
|
raise(
|
69
72
|
ArgumentError,
|
70
73
|
"Action '#{action.name}' is already defined on `#{self}`"
|
71
74
|
)
|
72
75
|
end
|
73
76
|
method_block = method_for_action(action)
|
74
|
-
send(:
|
77
|
+
send(:define_singleton_method, action.name, &method_block)
|
75
78
|
end
|
76
79
|
end
|
77
80
|
self._actions
|
@@ -79,6 +82,7 @@ module ResourceKitling
|
|
79
82
|
|
80
83
|
def self.method_for_action(action)
|
81
84
|
Proc.new do |*args|
|
85
|
+
client = args.shift
|
82
86
|
pathopts = action.path.include?(':') ? args.shift : {}
|
83
87
|
payload = args.shift
|
84
88
|
payload = payload.to_h if payload.respond_to?(:to_h)
|
@@ -92,10 +96,7 @@ module ResourceKitling
|
|
92
96
|
self.class.actions
|
93
97
|
end
|
94
98
|
|
95
|
-
|
96
|
-
|
97
|
-
def initialize(client: nil)
|
98
|
-
@client = client
|
99
|
+
def initialize
|
99
100
|
end
|
100
101
|
end
|
101
102
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: freefeed-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilia Zemskov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|