smooth_operator 1.22.6 → 1.30.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 +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
|