grape-client 0.2.0 → 0.3.0
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/.rubocop_todo.yml +15 -17
- data/README.md +3 -3
- data/grape-client.gemspec +3 -1
- data/lib/grape_client/base.rb +14 -26
- data/lib/grape_client/belongs_to.rb +36 -0
- data/lib/grape_client/has_many.rb +23 -0
- data/lib/grape_client/version.rb +1 -1
- metadata +5 -4
- data/lib/grape_client/accessors.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d99e13172df1dbea1cdcd2e85d189ef17d4399d
|
4
|
+
data.tar.gz: 2ac2dffcf2dad4ff2c9c4a6ae8d082b86272a84a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e5d85cad27a76b8272d449478b6e1fd3e796993df972f87195537fd6fd1fe59dba9dd78f9b55ed6fc4e40b306925ccd19aa33b8626b5e050f787740caadbe8a
|
7
|
+
data.tar.gz: 94b0242a1d87f4057f3c051cf7514f73b6cfa22e42989ff42868d14674bdac9f242243dd3392141bcb3d97921594e92b674428d017e747f6794f57db3aabe2dd
|
data/.rubocop_todo.yml
CHANGED
@@ -1,33 +1,31 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2016-03-
|
3
|
+
# on 2016-03-23 18:23:13 +0200 using RuboCop version 0.37.2.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
-
# Offense count:
|
9
|
+
# Offense count: 1
|
10
|
+
Metrics/AbcSize:
|
11
|
+
Max: 19
|
12
|
+
|
13
|
+
# Offense count: 9
|
10
14
|
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
|
11
15
|
# URISchemes: http, https
|
12
16
|
Metrics/LineLength:
|
13
17
|
Max: 104
|
14
18
|
|
15
|
-
# Offense count:
|
19
|
+
# Offense count: 2
|
16
20
|
# Configuration parameters: CountComments.
|
17
21
|
Metrics/MethodLength:
|
18
|
-
Max:
|
22
|
+
Max: 16
|
19
23
|
|
20
|
-
# Offense count:
|
21
|
-
|
24
|
+
# Offense count: 1
|
25
|
+
# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist.
|
26
|
+
# NamePrefix: is_, has_, have_
|
27
|
+
# NamePrefixBlacklist: is_, has_, have_
|
28
|
+
# NameWhitelist: is_a?
|
29
|
+
Style/PredicateName:
|
22
30
|
Exclude:
|
23
|
-
- '
|
24
|
-
- 'test/**/*'
|
25
|
-
- 'lib/grape_client.rb'
|
26
|
-
- 'lib/grape_client/accessors.rb'
|
27
|
-
- 'lib/grape_client/base.rb'
|
28
|
-
- 'lib/grape_client/cache.rb'
|
29
|
-
- 'lib/grape_client/collection.rb'
|
30
|
-
- 'lib/grape_client/connection.rb'
|
31
|
-
- 'lib/grape_client/response_parser.rb'
|
32
|
-
- 'lib/grape_client/rest_methods_collection.rb'
|
33
|
-
- 'lib/grape_client/rest_methods_member.rb'
|
31
|
+
- 'lib/grape_client/has_many.rb'
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
[](https://codeclimate.com/github/desofto/grape-client/coverage)
|
5
5
|
|
6
6
|
Simple access from your client to Grape APIs.
|
7
|
-
Automatically supports: kaminari pagination, network access, nested objects.
|
7
|
+
Automatically supports: kaminari pagination, network access cache, nested objects, http basic authentication.
|
8
8
|
|
9
9
|
## Installation
|
10
10
|
|
@@ -29,9 +29,9 @@ class User < GrapeClient::Base
|
|
29
29
|
self.site = 'http://localhost:3000'
|
30
30
|
self.user = 'user'
|
31
31
|
self.password = 'password'
|
32
|
-
self.prefix
|
32
|
+
self.prefix = '/api/v1/'
|
33
33
|
|
34
|
-
|
34
|
+
attr_accessor :id, :email
|
35
35
|
end
|
36
36
|
|
37
37
|
u = User.create(email: 'test@example.com')
|
data/grape-client.gemspec
CHANGED
@@ -10,7 +10,9 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ['dmitry@desofto.com']
|
11
11
|
|
12
12
|
spec.summary = 'Simple access from your client to Grape APIs.'
|
13
|
-
spec.description = 'Simple access from your client to Grape APIs.
|
13
|
+
spec.description = 'Simple access from your client to Grape APIs.'\
|
14
|
+
'Automatically supports: kaminari pagination, '\
|
15
|
+
'network access cache, nested objects, http basic authentication.'
|
14
16
|
spec.homepage = 'https://github.com/desofto/grape-client'
|
15
17
|
spec.license = 'MIT'
|
16
18
|
|
data/lib/grape_client/base.rb
CHANGED
@@ -1,40 +1,22 @@
|
|
1
1
|
module GrapeClient
|
2
2
|
class Base
|
3
|
-
extend Accessors
|
4
|
-
mattr_accessor :site, :user, :password, :prefix
|
5
|
-
|
6
|
-
extend RestMethodsCollection
|
7
3
|
include RestMethodsMember
|
8
4
|
|
5
|
+
mattr_accessor :site, :user, :password, :prefix
|
9
6
|
attr_reader :attributes
|
10
7
|
|
11
8
|
class << self
|
12
|
-
|
9
|
+
include RestMethodsCollection
|
10
|
+
include BelongsTo
|
11
|
+
include HasMany
|
12
|
+
|
13
|
+
def attr_accessor(*names)
|
13
14
|
attributes = self.attributes
|
14
15
|
names.each do |name|
|
15
16
|
attributes << name.to_sym
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
19
|
-
def belongs_to(property, options = {})
|
20
|
-
field_accessor "#{property}_id"
|
21
|
-
|
22
|
-
define_method(property) do
|
23
|
-
@attributes[property] ||= retrive_object(options[:class_name] || property,
|
24
|
-
self["#{property}_id"])
|
25
|
-
end
|
26
|
-
|
27
|
-
define_method("#{property}=") do |object|
|
28
|
-
self["#{property}_id"] = object.id
|
29
|
-
@attributes[property] = object
|
30
|
-
end
|
31
|
-
|
32
|
-
define_method("#{property}_id=") do |id|
|
33
|
-
@attributes[property] = nil
|
34
|
-
self["#{property}_id"] = id
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
20
|
def connection
|
39
21
|
@connection ||= Connection.new(user, password)
|
40
22
|
end
|
@@ -92,6 +74,12 @@ module GrapeClient
|
|
92
74
|
end
|
93
75
|
end
|
94
76
|
|
77
|
+
def respond_to?(method_name, *args, &block)
|
78
|
+
name = method_name.to_s
|
79
|
+
name = name[0..-2] if name.last == '='
|
80
|
+
self.class.attributes.include?(name.to_sym) || super
|
81
|
+
end
|
82
|
+
|
95
83
|
def to_post
|
96
84
|
entity_name = self.class.entity_name
|
97
85
|
list = self.class.attributes
|
@@ -101,8 +89,8 @@ module GrapeClient
|
|
101
89
|
|
102
90
|
private
|
103
91
|
|
104
|
-
def
|
105
|
-
name.to_s.camelcase.constantize
|
92
|
+
def class_from_name(name)
|
93
|
+
name.to_s.camelcase.constantize
|
106
94
|
end
|
107
95
|
end
|
108
96
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module GrapeClient
|
2
|
+
module BelongsTo
|
3
|
+
def belongs_to(property, options = {})
|
4
|
+
attr_accessor "#{property}_id"
|
5
|
+
|
6
|
+
define_method("#{property}_id=") do |id|
|
7
|
+
@attributes[property] = nil
|
8
|
+
self["#{property}_id"] = id
|
9
|
+
end
|
10
|
+
|
11
|
+
define_object_getter(property, options)
|
12
|
+
define_object_setter(property, options)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def define_object_getter(property, options = {})
|
18
|
+
define_method(property) do
|
19
|
+
clazz = class_from_name(options[:class_name] || property)
|
20
|
+
if @attributes[property].is_a? Hash
|
21
|
+
@attributes[property] = clazz.new(@attributes[property])
|
22
|
+
else
|
23
|
+
id = self["#{property}_id"]
|
24
|
+
@attributes[property] ||= clazz.find(id) if id.present?
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def define_object_setter(property, _options = {})
|
30
|
+
define_method("#{property}=") do |value|
|
31
|
+
self["#{property}_id"] = value.try(:id) unless value.is_a? Hash
|
32
|
+
@attributes[property] = value
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module GrapeClient
|
2
|
+
module HasMany
|
3
|
+
def has_many(property, options = {})
|
4
|
+
define_method(property) do
|
5
|
+
clazz = class_from_name(options[:class_name] || property.to_s.singularize)
|
6
|
+
case @attributes[property]
|
7
|
+
when Collection then @attributes[property]
|
8
|
+
when nil?
|
9
|
+
@attributes[property] = clazz.where("#{self.class.entity_name}_id" => id)
|
10
|
+
else
|
11
|
+
@attributes[property].map! do |element|
|
12
|
+
next element unless element.is_a? Hash
|
13
|
+
clazz.new(element)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
define_method("#{property}=") do |array|
|
19
|
+
@attributes[property] = array
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/grape_client/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Silchenko
|
@@ -66,8 +66,8 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '4.2'
|
69
|
-
description: 'Simple access from your client to Grape APIs.
|
70
|
-
kaminari pagination, network access, nested objects.'
|
69
|
+
description: 'Simple access from your client to Grape APIs.Automatically supports:
|
70
|
+
kaminari pagination, network access cache, nested objects, http basic authentication.'
|
71
71
|
email:
|
72
72
|
- dmitry@desofto.com
|
73
73
|
executables: []
|
@@ -87,11 +87,12 @@ files:
|
|
87
87
|
- bin/setup
|
88
88
|
- grape-client.gemspec
|
89
89
|
- lib/grape_client.rb
|
90
|
-
- lib/grape_client/accessors.rb
|
91
90
|
- lib/grape_client/base.rb
|
91
|
+
- lib/grape_client/belongs_to.rb
|
92
92
|
- lib/grape_client/cache.rb
|
93
93
|
- lib/grape_client/collection.rb
|
94
94
|
- lib/grape_client/connection.rb
|
95
|
+
- lib/grape_client/has_many.rb
|
95
96
|
- lib/grape_client/response_parser.rb
|
96
97
|
- lib/grape_client/rest_methods_collection.rb
|
97
98
|
- lib/grape_client/rest_methods_member.rb
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module GrapeClient
|
2
|
-
module Accessors
|
3
|
-
def mattr_accessor(*attr_names)
|
4
|
-
attr_names.each do |attr_name|
|
5
|
-
define_singleton_method(attr_name) do
|
6
|
-
class_variable_get("@@#{attr_name}")
|
7
|
-
end
|
8
|
-
define_singleton_method("#{attr_name}=") do |value|
|
9
|
-
class_variable_set("@@#{attr_name}", value)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|