smooth_operator 1.22.6 → 1.30.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +13 -8
- data/lib/smooth_operator.rb +2 -2
- data/lib/smooth_operator/associations.rb +1 -3
- data/lib/smooth_operator/attribute_assignment.rb +1 -3
- data/lib/smooth_operator/delegation.rb +1 -3
- data/lib/smooth_operator/open_struct.rb +2 -0
- data/lib/smooth_operator/operator.rb +2 -6
- data/lib/smooth_operator/options.rb +30 -0
- data/lib/smooth_operator/persistence.rb +26 -22
- data/lib/smooth_operator/resource_name.rb +4 -12
- data/lib/smooth_operator/type_casting.rb +1 -1
- data/lib/smooth_operator/validations.rb +1 -3
- data/lib/smooth_operator/version.rb +1 -1
- data/spec/smooth_operator/attribute_assignment_spec.rb +1 -1
- data/spec/support/models/address.rb +8 -8
- data/spec/support/models/comment.rb +1 -1
- data/spec/support/models/post.rb +5 -9
- data/spec/support/models/user.rb +8 -11
- data/spec/support/models/user_with_address_and_posts.rb +3 -3
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZGJiZDVhYzQxYmIwMjNkZDcyZWI2ZWYwNzA5YTdkNDdlN2UzMGFjZg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MjBkM2NhMWRjMThmZTg2NmM1NzA4MjVjNzM2ZTdjOTBjZjU3Mjk0OQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YzdlZWMwN2VkMDE4N2EwNjZkMjBhZmM0MzZmMTY5ZDU5Nzg1NzJiNjBkNjE2
|
10
|
+
NzRhYjVmZDJhNGE4MWIwMTBhZTExZWJjZmRmODBiMzI2ZGQ3MjliMWM1OTFl
|
11
|
+
NmEzOWNhMjRiNmQ1ZmJlNzAzMTY4ZWFiZmViMjE4ZjRmN2NmNDE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MDA1MDc3NzQxMWQ4ZDYwYzhlZjc3ZmI5YmRiNzgwMTVkMGUyNmVmN2JjZWYx
|
14
|
+
YmU2NDE2OTI0OGU1YWIyYTczM2VmMGMzY2NhN2Y4M2M0NWIyMDVhNzUzOTc0
|
15
|
+
MjYyYmUwYWQyNmQxOTNjMzJiNTQyMDhkZTE2NGFiZGU2OTgyNzQ=
|
data/README.md
CHANGED
@@ -37,11 +37,14 @@ Or install it yourself as:
|
|
37
37
|
|
38
38
|
```ruby
|
39
39
|
class MyBlogResource < SmoothOperator::Base
|
40
|
-
self.endpoint = 'http://myblog.com/api/v0'
|
41
40
|
|
42
41
|
# HTTP BASIC AUTH
|
43
|
-
|
44
|
-
|
42
|
+
options endpoint_user: 'admin',
|
43
|
+
endpoint_pass: 'admin',
|
44
|
+
endpoint: 'http://myblog.com/api/v0'
|
45
|
+
|
46
|
+
# OR
|
47
|
+
# smooth_operator_options
|
45
48
|
end
|
46
49
|
|
47
50
|
class Post < MyBlogResource
|
@@ -134,7 +137,9 @@ post.save('/save_and_add_to_list')
|
|
134
137
|
### 2.4) Saving using HTTP Patch verb
|
135
138
|
```ruby
|
136
139
|
class Page < MyBlogResource
|
137
|
-
|
140
|
+
options update_http_verb: 'patch'
|
141
|
+
# OR
|
142
|
+
#smooth_operator_options update_http_verb: 'patch'
|
138
143
|
end
|
139
144
|
|
140
145
|
page = Page.find(2)
|
@@ -241,13 +246,13 @@ Models
|
|
241
246
|
```ruby
|
242
247
|
class SmoothResource < SmoothOperator::Rails
|
243
248
|
|
244
|
-
|
245
|
-
headers = super
|
249
|
+
options headers: :custom_headers
|
246
250
|
|
247
|
-
|
251
|
+
def self.custom_headers
|
252
|
+
{
|
248
253
|
cookie: current_user.blog_cookie,
|
249
254
|
"X_CSRF_TOKEN" => current_user.blog_auth_token
|
250
|
-
}
|
255
|
+
}
|
251
256
|
end
|
252
257
|
|
253
258
|
protected ############## PROTECTED #################
|
data/lib/smooth_operator.rb
CHANGED
@@ -23,7 +23,7 @@ module SmoothOperator
|
|
23
23
|
include Persistence
|
24
24
|
include FinderMethods
|
25
25
|
|
26
|
-
|
26
|
+
options strict_behaviour: true
|
27
27
|
|
28
28
|
def self.smooth_operator?
|
29
29
|
true
|
@@ -38,7 +38,7 @@ module SmoothOperator
|
|
38
38
|
include ActiveModel::Validations::Callbacks
|
39
39
|
include ActiveModel::Conversion
|
40
40
|
|
41
|
-
|
41
|
+
options unknown_hash_class: SmoothOperator::OpenStruct
|
42
42
|
|
43
43
|
validate :validate_induced_errors, :validate_nested_objects
|
44
44
|
|
@@ -29,11 +29,9 @@ module SmoothOperator
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def rails_serialization
|
32
|
-
|
32
|
+
get_option :rails_serialization, false
|
33
33
|
end
|
34
34
|
|
35
|
-
attr_writer :rails_serialization
|
36
|
-
|
37
35
|
protected ###################### PROTECTED ###################
|
38
36
|
|
39
37
|
# TODO: THIS MUST GO TO A HELPER_METHODS MODULE
|
@@ -67,10 +67,8 @@ module SmoothOperator
|
|
67
67
|
|
68
68
|
module ClassMethods
|
69
69
|
|
70
|
-
attr_writer :unknown_hash_class
|
71
|
-
|
72
70
|
def unknown_hash_class
|
73
|
-
|
71
|
+
get_option :unknown_hash_class, ::OpenStruct
|
74
72
|
end
|
75
73
|
|
76
74
|
def attributes_white_list
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require "smooth_operator/options"
|
1
2
|
require "smooth_operator/delegation"
|
2
3
|
require "smooth_operator/validations"
|
3
4
|
require "smooth_operator/resource_name"
|
@@ -8,6 +9,7 @@ require "smooth_operator/attribute_assignment"
|
|
8
9
|
module SmoothOperator
|
9
10
|
class OpenStruct
|
10
11
|
|
12
|
+
extend Options
|
11
13
|
extend ResourceName
|
12
14
|
|
13
15
|
include Delegation
|
@@ -55,17 +55,13 @@ module SmoothOperator
|
|
55
55
|
OPTIONS = [:endpoint, :endpoint_user, :endpoint_pass, :timeout, :server_name]
|
56
56
|
|
57
57
|
OPTIONS.each do |option|
|
58
|
-
define_method(option) {
|
58
|
+
define_method(option) { get_option option, '' }
|
59
59
|
end
|
60
60
|
|
61
|
-
attr_writer *OPTIONS
|
62
|
-
|
63
61
|
def headers
|
64
|
-
|
62
|
+
get_option :headers, {}
|
65
63
|
end
|
66
64
|
|
67
|
-
attr_writer :headers
|
68
|
-
|
69
65
|
def make_the_call(http_verb, relative_path = '', data = {}, options = {})
|
70
66
|
options = HelperMethods.populate_options(self, options)
|
71
67
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module SmoothOperator
|
2
|
+
module Options
|
3
|
+
|
4
|
+
def get_option(option, default, *args)
|
5
|
+
return default unless config_options.include?(option)
|
6
|
+
|
7
|
+
_option = config_options[option]
|
8
|
+
|
9
|
+
case _option
|
10
|
+
when Symbol
|
11
|
+
respond_to?(_option) ? send(_option, *args) : _option
|
12
|
+
when Proc
|
13
|
+
_option.call(*args)
|
14
|
+
else
|
15
|
+
_option
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def config_options
|
20
|
+
Helpers.get_instance_variable(self, :config_options, {})
|
21
|
+
end
|
22
|
+
|
23
|
+
def smooth_operator_options(options = {})
|
24
|
+
config_options.merge!(options)
|
25
|
+
end
|
26
|
+
|
27
|
+
alias_method :options, :smooth_operator_options
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -49,11 +49,11 @@ module SmoothOperator
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def save(relative_path = nil, data = {}, options = {})
|
52
|
-
|
52
|
+
resource_data = resource_data_for_server(data)
|
53
53
|
|
54
54
|
method = new_record? ? :create : :update
|
55
55
|
|
56
|
-
make_a_persistence_call(method, relative_path,
|
56
|
+
make_a_persistence_call(method, relative_path, resource_data, options) do |remote_call|
|
57
57
|
@new_record = false if method == :create && remote_call.status
|
58
58
|
|
59
59
|
block_given? ? yield(remote_call) : remote_call.status
|
@@ -78,14 +78,28 @@ module SmoothOperator
|
|
78
78
|
|
79
79
|
protected ######################### PROTECTED ##################
|
80
80
|
|
81
|
-
def
|
82
|
-
data =
|
81
|
+
def internal_data_for_server
|
82
|
+
data = self.class.get_option(:internal_data_for_server, false)
|
83
83
|
|
84
|
-
|
84
|
+
if data == false
|
85
|
+
serializable_hash.dup.tap { |hash| hash.delete(self.class.primary_key) }
|
86
|
+
else
|
87
|
+
data
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def resource_data_for_server(data)
|
92
|
+
resource_data =
|
93
|
+
self.class.get_option(:resource_data_for_server, false, data)
|
85
94
|
|
86
|
-
|
95
|
+
if resource_data == false
|
96
|
+
data = Helpers.stringify_keys(data)
|
97
|
+
resource_data = Helpers.stringify_keys(internal_data_for_server)
|
87
98
|
|
88
|
-
|
99
|
+
{ self.class.resource_name.to_s => resource_data }.merge(data)
|
100
|
+
else
|
101
|
+
resource_data
|
102
|
+
end
|
89
103
|
end
|
90
104
|
|
91
105
|
private ##################### PRIVATE ##################
|
@@ -93,7 +107,7 @@ module SmoothOperator
|
|
93
107
|
def make_a_persistence_call(method, relative_path, data, options)
|
94
108
|
options ||= {}
|
95
109
|
|
96
|
-
http_verb = options[:http_verb] || self.class.
|
110
|
+
http_verb = options[:http_verb] || self.class.http_verb_for(method)
|
97
111
|
|
98
112
|
make_the_call(http_verb, relative_path, data, options) do |remote_call|
|
99
113
|
@last_remote_call = remote_call
|
@@ -110,26 +124,16 @@ module SmoothOperator
|
|
110
124
|
|
111
125
|
METHODS_VS_HTTP_VERBS = { reload: :get, create: :post, update: :put, destroy: :delete }
|
112
126
|
|
113
|
-
def
|
114
|
-
|
127
|
+
def http_verb_for(method)
|
128
|
+
get_option "#{method}_http_verb".to_sym, METHODS_VS_HTTP_VERBS[method]
|
115
129
|
end
|
116
130
|
|
117
131
|
def primary_key
|
118
|
-
|
132
|
+
get_option :primary_key, 'id'
|
119
133
|
end
|
120
134
|
|
121
|
-
attr_writer :primary_key
|
122
|
-
|
123
135
|
def destroy_key
|
124
|
-
|
125
|
-
end
|
126
|
-
|
127
|
-
attr_writer :destroy_key
|
128
|
-
|
129
|
-
METHODS_VS_HTTP_VERBS.keys.each do |method|
|
130
|
-
define_method("#{method}_http_verb=") do |http_verb|
|
131
|
-
methods_vs_http_verbs[method] = http_verb
|
132
|
-
end
|
136
|
+
get_option :destroy_key, '_destroy'
|
133
137
|
end
|
134
138
|
|
135
139
|
def create(attributes = nil, relative_path = nil, data = {}, options = {})
|
@@ -1,22 +1,14 @@
|
|
1
1
|
module SmoothOperator
|
2
2
|
module ResourceName
|
3
3
|
|
4
|
-
def resources_name
|
5
|
-
|
6
|
-
|
7
|
-
(Helpers.super_method(self, :resources_name, true) || (default_bypass ? nil : self.resource_name.pluralize))
|
4
|
+
def resources_name
|
5
|
+
get_option :resources_name, self.resource_name.pluralize
|
8
6
|
end
|
9
7
|
|
10
|
-
|
11
|
-
|
12
|
-
def resource_name(default_bypass = nil)
|
13
|
-
return @resource_name if defined?(@resource_name)
|
14
|
-
|
15
|
-
(Helpers.super_method(self, :resource_name, true) || (default_bypass ? nil : self.model_name.to_s.underscore))
|
8
|
+
def resource_name
|
9
|
+
get_option :resource_name, self.model_name.to_s.underscore
|
16
10
|
end
|
17
11
|
|
18
|
-
attr_writer :resource_name
|
19
|
-
|
20
12
|
def model_name
|
21
13
|
return '' if custom_model_name == :none
|
22
14
|
|
@@ -103,7 +103,7 @@ module SmoothOperator
|
|
103
103
|
end
|
104
104
|
|
105
105
|
def new_unknown_hash(hash, unknown_hash_class, parent_object)
|
106
|
-
if unknown_hash_class
|
106
|
+
if unknown_hash_class.nil?
|
107
107
|
hash
|
108
108
|
else
|
109
109
|
unknown_hash_class.new(cast_params(hash, unknown_hash_class, parent_object))
|
@@ -89,7 +89,7 @@ describe SmoothOperator::AttributeAssignment do
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
-
context "when the .unknown_hash_class is set to
|
92
|
+
context "when the .unknown_hash_class is set to nil" do
|
93
93
|
subject { User::UnknownHashClass::None.new(creator: { first_name: 'admin', address: { street: 'something' } }) }
|
94
94
|
|
95
95
|
it "the hash will be copied as it is" do
|
@@ -1,12 +1,12 @@
|
|
1
1
|
class Address < SmoothOperator::Base
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
3
|
+
options resource_name: '',
|
4
|
+
endpoint_user: 'admin',
|
5
|
+
endpoint_pass: 'admin',
|
6
|
+
endpoint: 'http://localhost:4567/',
|
7
|
+
headers: {
|
8
|
+
"X-APPTOKEN" => "app_token",
|
9
|
+
"X-LAYERTOKEN" => "layer_token"
|
10
|
+
}
|
11
11
|
|
12
12
|
end
|
data/spec/support/models/post.rb
CHANGED
@@ -1,14 +1,10 @@
|
|
1
1
|
class Post < SmoothOperator::Base
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
self.rails_serialization = true
|
10
|
-
|
11
|
-
self.unknown_hash_class = SmoothOperator::OpenStruct
|
3
|
+
options endpoint_user: 'admin',
|
4
|
+
endpoint_pass: 'admin',
|
5
|
+
rails_serialization: true,
|
6
|
+
endpoint: 'http://localhost:4567/',
|
7
|
+
unknown_hash_class: SmoothOperator::OpenStruct
|
12
8
|
|
13
9
|
has_many :comments#, rails_serialization: true
|
14
10
|
|
data/spec/support/models/user.rb
CHANGED
@@ -2,13 +2,10 @@ module User
|
|
2
2
|
|
3
3
|
class Base < SmoothOperator::Base
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
self.endpoint_pass = 'admin'
|
10
|
-
|
11
|
-
self.endpoint = 'http://localhost:4567/'
|
5
|
+
options resource_name: 'user',
|
6
|
+
endpoint_user: 'admin',
|
7
|
+
endpoint_pass: 'admin',
|
8
|
+
endpoint: 'http://localhost:4567/'
|
12
9
|
|
13
10
|
def self.query_string(params)
|
14
11
|
params['query_string_param'] = true
|
@@ -21,21 +18,21 @@ module User
|
|
21
18
|
module UnknownHashClass
|
22
19
|
|
23
20
|
class OpenStructBase < User::Base
|
24
|
-
|
21
|
+
options unknown_hash_class: SmoothOperator::OpenStruct
|
25
22
|
end
|
26
23
|
|
27
24
|
class None < User::Base
|
28
|
-
|
25
|
+
options unknown_hash_class: nil
|
29
26
|
end
|
30
27
|
|
31
28
|
end
|
32
29
|
|
33
30
|
class BrokenConnection < SmoothOperator::Base
|
34
|
-
|
31
|
+
options endpoint: 'http://localhost:1234/'
|
35
32
|
end
|
36
33
|
|
37
34
|
class TimeoutConnection < Base
|
38
|
-
|
35
|
+
options timeout: 1
|
39
36
|
end
|
40
37
|
|
41
38
|
end
|
@@ -2,7 +2,7 @@ module UserWithAddressAndPosts
|
|
2
2
|
|
3
3
|
class Father < User::Base
|
4
4
|
|
5
|
-
|
5
|
+
options resource_name: 'user'
|
6
6
|
|
7
7
|
schema(
|
8
8
|
posts: Post,
|
@@ -27,13 +27,13 @@ module UserWithAddressAndPosts
|
|
27
27
|
|
28
28
|
class SoftBehaviour < Son
|
29
29
|
|
30
|
-
|
30
|
+
options strict_behaviour: false
|
31
31
|
|
32
32
|
end
|
33
33
|
|
34
34
|
class WithPatch < Son
|
35
35
|
|
36
|
-
|
36
|
+
options update_http_verb: 'patch'
|
37
37
|
|
38
38
|
end
|
39
39
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smooth_operator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.30.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- João Gonçalves
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -98,6 +98,7 @@ files:
|
|
98
98
|
- lib/smooth_operator/operators/connection_wrapper.rb
|
99
99
|
- lib/smooth_operator/operators/faraday.rb
|
100
100
|
- lib/smooth_operator/operators/typhoeus.rb
|
101
|
+
- lib/smooth_operator/options.rb
|
101
102
|
- lib/smooth_operator/persistence.rb
|
102
103
|
- lib/smooth_operator/remote_call/base.rb
|
103
104
|
- lib/smooth_operator/remote_call/errors/connection_failed.rb
|