fera-api 0.1.0 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ clearfix
@@ -0,0 +1,3 @@
1
+ concat
2
+ intl
3
+ swal
@@ -0,0 +1,22 @@
1
+ cattr
2
+ endcapture
3
+ endfor
4
+ endform
5
+ endif
6
+ evalsha
7
+ hdel
8
+ hget
9
+ hgetall
10
+ hkeys
11
+ hmset
12
+ sadd
13
+ sismember
14
+ smembers
15
+ spop
16
+ srem
17
+ zadd
18
+ zcount
19
+ zrangebyscore
20
+ zrank
21
+ zrem
22
+ zrevrange
data/Gemfile CHANGED
@@ -5,10 +5,13 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in fera.gemspec
6
6
  gemspec
7
7
 
8
- gem "rake", "~> 13.0"
9
-
10
8
  group :development, :test do
11
- gem "rspec", "~> 3.0"
12
-
9
+ gem "pry"
10
+ gem "pry-byebug"
11
+ gem "pry-rails"
12
+ gem "pry-remote"
13
+ gem "pry-rescue"
14
+ gem "pry-stack_explorer"
13
15
  gem "rubocop"
16
+ gem "rubocop-rspec"
14
17
  end
data/Gemfile.lock CHANGED
@@ -1,18 +1,18 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fera-api (0.1.0)
4
+ fera-api (0.1.3)
5
5
  activemodel (>= 4)
6
6
  activeresource (>= 6)
7
- activesupport (>= 5.0)
7
+ activesupport (>= 4.0)
8
8
  json-jwt (>= 1)
9
9
  require_all (>= 2)
10
10
 
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- activemodel (6.1.6)
15
- activesupport (= 6.1.6)
14
+ activemodel (7.0.3.1)
15
+ activesupport (= 7.0.3.1)
16
16
  activemodel-serializers-xml (1.0.2)
17
17
  activemodel (> 5.x)
18
18
  activesupport (> 5.x)
@@ -21,31 +21,62 @@ GEM
21
21
  activemodel (>= 6.0)
22
22
  activemodel-serializers-xml (~> 1.0)
23
23
  activesupport (>= 6.0)
24
- activesupport (6.1.6)
24
+ activesupport (7.0.3.1)
25
25
  concurrent-ruby (~> 1.0, >= 1.0.2)
26
26
  i18n (>= 1.6, < 2)
27
27
  minitest (>= 5.1)
28
28
  tzinfo (~> 2.0)
29
- zeitwerk (~> 2.3)
29
+ addressable (2.8.0)
30
+ public_suffix (>= 2.0.2, < 5.0)
30
31
  aes_key_wrap (1.1.0)
31
32
  ast (2.4.2)
32
33
  bindata (2.4.10)
34
+ binding_of_caller (1.0.0)
35
+ debug_inspector (>= 0.0.1)
33
36
  builder (3.2.4)
37
+ byebug (11.1.3)
38
+ coderay (1.1.3)
34
39
  concurrent-ruby (1.1.10)
40
+ crack (0.4.5)
41
+ rexml
42
+ debug_inspector (1.1.0)
35
43
  diff-lcs (1.5.0)
36
- i18n (1.10.0)
44
+ hashdiff (1.0.1)
45
+ httpclient (2.8.3)
46
+ i18n (1.12.0)
37
47
  concurrent-ruby (~> 1.0)
38
- json-jwt (1.13.0)
48
+ interception (0.5)
49
+ json (2.6.2)
50
+ json-jwt (1.15.3)
39
51
  activesupport (>= 4.2)
40
52
  aes_key_wrap
41
53
  bindata
42
- minitest (5.16.0)
54
+ httpclient
55
+ method_source (1.0.0)
56
+ minitest (5.16.3)
43
57
  parallel (1.22.1)
44
- parser (3.1.2.0)
58
+ parser (3.1.2.1)
45
59
  ast (~> 2.4.1)
60
+ pry (0.14.1)
61
+ coderay (~> 1.1)
62
+ method_source (~> 1.0)
63
+ pry-byebug (3.10.1)
64
+ byebug (~> 11.0)
65
+ pry (>= 0.13, < 0.15)
66
+ pry-rails (0.3.9)
67
+ pry (>= 0.10.4)
68
+ pry-remote (0.1.8)
69
+ pry (~> 0.9)
70
+ slop (~> 3.0)
71
+ pry-rescue (1.5.2)
72
+ interception (>= 0.5)
73
+ pry (>= 0.12.0)
74
+ pry-stack_explorer (0.6.1)
75
+ binding_of_caller (~> 1.0)
76
+ pry (~> 0.13)
77
+ public_suffix (4.0.7)
46
78
  rainbow (3.1.1)
47
- rake (13.0.6)
48
- regexp_parser (2.4.0)
79
+ regexp_parser (2.5.0)
49
80
  require_all (3.0.0)
50
81
  rexml (3.2.5)
51
82
  rspec (3.11.0)
@@ -61,32 +92,49 @@ GEM
61
92
  diff-lcs (>= 1.2.0, < 2.0)
62
93
  rspec-support (~> 3.11.0)
63
94
  rspec-support (3.11.0)
64
- rubocop (1.29.0)
95
+ rubocop (1.35.0)
96
+ json (~> 2.3)
65
97
  parallel (~> 1.10)
66
- parser (>= 3.1.0.0)
98
+ parser (>= 3.1.2.1)
67
99
  rainbow (>= 2.2.2, < 4.0)
68
100
  regexp_parser (>= 1.8, < 3.0)
69
101
  rexml (>= 3.2.5, < 4.0)
70
- rubocop-ast (>= 1.17.0, < 2.0)
102
+ rubocop-ast (>= 1.20.1, < 2.0)
71
103
  ruby-progressbar (~> 1.7)
72
104
  unicode-display_width (>= 1.4.0, < 3.0)
73
- rubocop-ast (1.17.0)
105
+ rubocop-ast (1.21.0)
74
106
  parser (>= 3.1.1.0)
107
+ rubocop-rspec (2.12.1)
108
+ rubocop (~> 1.31)
75
109
  ruby-progressbar (1.11.0)
76
- tzinfo (2.0.4)
110
+ slop (3.6.0)
111
+ to_bool (2.0.0)
112
+ tzinfo (2.0.5)
77
113
  concurrent-ruby (~> 1.0)
78
- unicode-display_width (2.1.0)
79
- zeitwerk (2.5.4)
114
+ unicode-display_width (2.2.0)
115
+ webmock (3.18.0)
116
+ addressable (>= 2.8.0)
117
+ crack (>= 0.3.2)
118
+ hashdiff (>= 0.4.0, < 2.0.0)
80
119
 
81
120
  PLATFORMS
82
121
  x86_64-darwin-18
83
122
  x86_64-darwin-20
123
+ x86_64-linux
84
124
 
85
125
  DEPENDENCIES
86
126
  fera-api!
87
- rake (~> 13.0)
88
- rspec (~> 3.0)
127
+ pry
128
+ pry-byebug
129
+ pry-rails
130
+ pry-remote
131
+ pry-rescue
132
+ pry-stack_explorer
133
+ rspec (>= 3.0)
89
134
  rubocop
135
+ rubocop-rspec
136
+ to_bool
137
+ webmock (>= 3.0)
90
138
 
91
139
  BUNDLED WITH
92
140
  2.3.13
data/README.md CHANGED
@@ -1,4 +1,7 @@
1
- # Introduction
1
+ [![Checks](https://github.com/feracommerce/fera-api-ruby/actions/workflows/checks.yml/badge.svg)](https://github.com/feracommerce/fera-api-ruby/actions/workflows/checks.yml)
2
+ [![Tests](https://github.com/feracommerce/fera-api-ruby/actions/workflows/tests.yml/badge.svg)](https://github.com/feracommerce/fera-api-ruby/actions/workflows/tests.yml)
3
+
4
+ # Fera API Ruby Client
2
5
 
3
6
  Welcome to the Fera API gem for Ruby. This gem is Fera's official Ruby SDK and make it easy to interact with the Fera API.
4
7
 
@@ -9,7 +12,7 @@ Fera API Developer Docs and API Reference can be found at: [https://developers.f
9
12
  Install the gem and add to the application's Gemfile by executing:
10
13
 
11
14
  ```ruby
12
- gem 'fera', '~> 0.1'
15
+ gem 'fera-api'
13
16
  ```
14
17
 
15
18
  # Configuration
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Fera
4
4
  module API
5
- VERSION = "0.1.0"
5
+ VERSION = "0.1.3"
6
6
  end
7
7
  end
data/lib/fera/api.rb CHANGED
@@ -18,11 +18,15 @@ module Fera
18
18
 
19
19
  ##
20
20
  # @param api_key [String] Public API key, Secret API key or Auth Token (if app)
21
- def self.configure(api_key, api_url: nil, strict_mode: false)
21
+ # @return [Object, ::Fera::API] Result of the block operation if given, otherwise self
22
+ def self.configure(api_key, api_url: nil, strict_mode: false, debug_mode: false)
22
23
  previous_base_site = Base.site
23
24
  previous_base_headers = Base.headers
24
25
 
25
- Base.site = api_url || 'https://api.fera.ai/v3/private'
26
+ api_url ||= 'https://api.fera.ai'
27
+ Base.site = "#{ api_url.chomp('/') }/v3/private"
28
+
29
+ @debug_mode = debug_mode
26
30
 
27
31
  if api_key =~ /^sk_/
28
32
  Base.headers['Secret-Key'] = api_key
@@ -48,9 +52,10 @@ module Fera
48
52
  else
49
53
  self
50
54
  end
51
-
52
55
  end
53
56
 
57
+ def self.debug_mode?; @debug_mode; end
58
+
54
59
  def self.revoke_token!(client_id:, client_secret:, auth_token:)
55
60
  previous_site = Base.site
56
61
 
data/lib/fera/app.rb CHANGED
@@ -29,5 +29,8 @@ module Fera
29
29
  nil
30
30
  end
31
31
 
32
+ def encode_jwt(payload)
33
+ JWT.encode(payload, @client_secret)
34
+ end
32
35
  end
33
36
  end
@@ -2,11 +2,10 @@ require_relative './collection'
2
2
 
3
3
  module Fera
4
4
  class Base < ActiveResource::Base
5
- # include ActiveModel::Dirty
6
-
7
5
  attr_reader :last_response, :last_response_body, :last_response_message, :last_response_exception, :options
8
6
 
9
7
  self.collection_parser = ::Fera::Collection
8
+ self.site ||= "https://api.fera.ai/v3/private"
10
9
 
11
10
  class << self
12
11
  def belongs_to(name, options = {})
@@ -33,13 +32,11 @@ module Fera
33
32
  elsif superclass != Object && superclass.headers
34
33
  superclass.headers
35
34
  else
36
- _headers ||= {}
35
+ _headers ||= {} # rubocop:disable Lint/UnderscorePrefixedVariableName
37
36
  end
38
37
  end
39
38
 
40
- def default_params=(default_params)
41
- @default_params = default_params
42
- end
39
+ attr_writer :default_params
43
40
 
44
41
  ##
45
42
  # @override to support extra_params
@@ -80,7 +77,7 @@ module Fera
80
77
  end
81
78
 
82
79
  def new_element_path(prefix_options = {}, extra_params = {})
83
- url = "#{prefix(prefix_options)}#{collection_name}/new#{format_extension}"
80
+ url = "#{ prefix(prefix_options) }#{ collection_name }/new#{ format_extension }"
84
81
  url += "?#{ extra_params.to_param }" if extra_params.present?
85
82
  url
86
83
  end
@@ -108,12 +105,14 @@ module Fera
108
105
 
109
106
  super(dynamic_attributes, persisted)
110
107
 
111
- association_keys.each do |name, opts|
108
+ return unless attributes.present?
109
+
110
+ association_keys.each do |name, _opts|
112
111
  if attributes.key?(name.to_s) || attributes.key?(name.to_sym)
113
112
  val = attributes.to_h[name.to_s] || attributes.to_h[name.to_sym]
114
113
  self.send("#{ name }=", val) if respond_to?("#{ name }=")
115
114
  end
116
- end if attributes.present?
115
+ end
117
116
  end
118
117
 
119
118
  def load(attributes, *args)
@@ -135,18 +134,24 @@ module Fera
135
134
  end
136
135
 
137
136
  def created_at=(new_created_at)
138
- return super(Time.parse(new_created_at)) if new_created_at.is_a?(String)
139
- super
137
+ if new_created_at.is_a?(String)
138
+ super(Time.parse(new_created_at))
139
+ else
140
+ super
141
+ end
140
142
  end
141
143
 
142
144
  def updated_at=(new_updated_at)
143
- return super(Time.parse(new_updated_at)) if new_updated_at.is_a?(String)
144
- super
145
+ if new_updated_at.is_a?(String)
146
+ super(Time.parse(new_updated_at))
147
+ else
148
+ super
149
+ end
145
150
  end
146
151
 
147
- def update(changed_attributes, extra_params = {}, raise = false)
152
+ def update(changed_attributes, extra_params = {}, raise: false)
148
153
  run_callbacks(:update) do
149
- connection.put(element_path(prefix_options, extra_params), dynamic_changed_attributes.to_json, self.class.headers).tap do |response|
154
+ connection.put(element_path(prefix_options, extra_params), changed_attributes.to_json, self.class.headers).tap do |response|
150
155
  load_attributes_from_response(response)
151
156
  end
152
157
 
@@ -165,21 +170,21 @@ module Fera
165
170
  end
166
171
 
167
172
  def update!(changed_attributes, extra_params = {})
168
- update(changed_attributes, extra_params, true)
173
+ update(changed_attributes, extra_params, raise: true)
169
174
  end
170
175
 
171
- def valid?(context = nil)
176
+ def valid?(_context = nil)
172
177
  super()
173
178
  end
174
179
 
175
180
  ##
176
- # @override to add exgtra params
177
- def create(extra_params = {}, raise = false)
181
+ # @override to add extra params
182
+ def create(extra_params = {}, raise: false)
178
183
  run_callbacks :create do
179
-
180
184
  data = as_json
181
- (self.class.belongs_tos.merge(self.class.has_ones)).each do |name, opts|
185
+ self.class.belongs_tos.merge(self.class.has_ones).each do |name, _opts|
182
186
  next unless instance_variable_defined?(:"@#{ name }")
187
+
183
188
  nested_resource = self.send(name)
184
189
  if nested_resource.present? && !nested_resource.persisted?
185
190
  nested_resource.validate!
@@ -187,8 +192,9 @@ module Fera
187
192
  end
188
193
  end
189
194
 
190
- self.class.has_manys.each do |name, opts|
195
+ self.class.has_manys.each do |name, _opts|
191
196
  next unless instance_variable_defined?(:"@#{ name }")
197
+
192
198
  nested_resource = self.send(name)
193
199
 
194
200
  next if nested_resource.nil?
@@ -203,7 +209,7 @@ module Fera
203
209
  end
204
210
  end
205
211
 
206
- connection.post(collection_path(nil, extra_params), data.to_json, self.class.headers).tap do |response|
212
+ connection.post(collection_path(nil, extra_params), { data: data }.to_json, self.class.headers).tap do |response|
207
213
  self.id = id_from_response(response)
208
214
  load_attributes_from_response(response)
209
215
  end
@@ -221,13 +227,13 @@ module Fera
221
227
  end
222
228
 
223
229
  def create!(extra_params = {})
224
- create(extra_params, true)
230
+ create(extra_params, raise: true)
225
231
  end
226
232
 
227
- def save(extra_params = {}, raise = false)
233
+ def save(extra_params = {}, raise: false)
228
234
  run_callbacks :save do
229
235
  if new?
230
- create(extra_params, raise) # We'll raise the error below
236
+ create(extra_params, raise: raise) # We'll raise the error below
231
237
  else
232
238
  # find changes
233
239
  changed_attributes = attributes.filter { |key, value| !@clean_copy.attributes.key?(key) || (@clean_copy.attributes[key] != value) || (key == self.class.primary_key) }
@@ -235,23 +241,22 @@ module Fera
235
241
  return false unless changed_attributes.keys.any?
236
242
 
237
243
  # save
238
- update(changed_attributes, extra_params, raise)
244
+ update(changed_attributes, extra_params, raise: raise)
239
245
  end
240
246
 
241
247
  @clean_copy = clone_with_nil # Clear changes
242
248
 
243
249
  self
244
250
  end
245
-
246
251
  end
247
252
 
248
253
  def save!(extra_params = {})
249
- save(extra_params, true)
254
+ save(extra_params, raise: true)
250
255
  end
251
256
 
252
257
  def clone_with_nil
253
258
  # Clone all attributes except the pk and any nested ARes
254
- cloned = Hash[attributes.reject { |k, v| k == self.class.primary_key || v.is_a?(ActiveResource::Base) }.map { |k, v| [k, v.clone] }]
259
+ cloned = attributes.reject { |k, v| k == self.class.primary_key || v.is_a?(ActiveResource::Base) }.map { |k, v| [k, v.clone] }.to_h
255
260
  # Form the new resource - bypass initialize of resource with 'new' as that will call 'load' which
256
261
  # attempts to convert hashes into member objects and arrays into collections of objects. We want
257
262
  # the raw objects to be cloned so we bypass load by directly setting the attributes hash.
@@ -288,9 +293,11 @@ module Fera
288
293
  if matcher.present?
289
294
  attribute_name = matcher[1]
290
295
  return super if attribute_name.blank?
296
+
291
297
  attribute_name = "is_#{ attribute_name }" unless attribute_name =~ /^is_/
292
298
  return super unless known_attribute?(attribute_name.to_s)
293
- return !!(send(attribute_name.to_sym).presence)
299
+
300
+ return !!send(attribute_name.to_sym).presence
294
301
  end
295
302
 
296
303
  super
@@ -301,6 +308,7 @@ module Fera
301
308
  if matcher.present?
302
309
  attribute_name = matcher[1]
303
310
  return super if attribute_name.blank?
311
+
304
312
  attribute_name = "is_#{ attribute_name }" unless attribute_name =~ /^is_/
305
313
  return true if known_attribute?(attribute_name)
306
314
  end
@@ -312,7 +320,7 @@ module Fera
312
320
  known_attributes.map(&:to_s).include?(attribute_name.to_s)
313
321
  end
314
322
 
315
- def set_last_response(result)
323
+ def set_last_response(result) # rubocop:disable Naming/AccessorMethodName
316
324
  response = if result.is_a?(StandardError)
317
325
  @last_response_exception = result
318
326
  @last_response_exception.response
@@ -370,5 +378,9 @@ module Fera
370
378
  sub_fields = sub_fields.drop(1)
371
379
  changed_attributes[sub_key] = values.map { |value| clone_selected_fields(value, sub_fields) }
372
380
  end
381
+
382
+ def debug(message)
383
+ puts "[Fera-Api] #{ message }" if ::Fera::Api.debug_mode?
384
+ end
373
385
  end
374
386
  end
@@ -5,7 +5,7 @@ module Fera
5
5
  attr_reader :result_count, :total_count, :page, :total_pages, :page_size, :offset, :limit
6
6
 
7
7
  def initialize(parsed = {})
8
- @elements = parsed['data']
8
+ super(parsed['data'])
9
9
  @result_count = parsed['result_count']
10
10
  @total_count = parsed['total_count']
11
11
 
@@ -10,8 +10,8 @@ module Fera
10
10
 
11
11
  def customer=(customer)
12
12
  if customer.is_a?(Customer)
13
- @customer = customer
14
- self.attributes['customer_id'] = customer.id
13
+ @customer = customer
14
+ self.attributes['customer_id'] = customer.id
15
15
  self.attributes['external_customer_id'] = customer.try(:external_id)
16
16
  self.attributes.delete('customer')
17
17
  elsif customer.is_a?(Hash)
@@ -32,9 +32,6 @@ module Fera
32
32
  @customer = Customer.new(customer, customer_id.present?)
33
33
  self.attributes.delete('customer')
34
34
  end
35
-
36
-
37
- @customer
38
35
  end
39
36
 
40
37
  def customer_id=(new_id)
@@ -62,8 +59,6 @@ module Fera
62
59
  Customer.find(customer_id)
63
60
  elsif attributes.key?('external_customer_id') && external_customer_id.present?
64
61
  Customer.find(external_customer_id)
65
- else
66
- nil
67
62
  end
68
63
  end
69
64
  end
@@ -9,29 +9,28 @@ module Fera
9
9
  end
10
10
 
11
11
  def order=(order)
12
- order_id = if order.is_a?(Order)
13
- order.id
14
- else
15
- order.try(:with_indifferent_access).try(:[], :id)
16
- end
12
+ order_id = if order.is_a?(Order)
13
+ order.id
14
+ else
15
+ order.try(:with_indifferent_access).try(:[], :id)
16
+ end
17
17
  external_order_id = if order.is_a?(Order)
18
- order.external_id
19
- else
20
- order.try(:with_indifferent_access).try(:[], :external_id)
21
- end
22
- @order = if order.is_a?(Order)
23
- order
24
- else
25
- Order.new(order, order_id.present?)
26
- end
18
+ order.external_id
19
+ else
20
+ order.try(:with_indifferent_access).try(:[], :external_id)
21
+ end
22
+ @order = if order.is_a?(Order)
23
+ order
24
+ else
25
+ Order.new(order, order_id.present?)
26
+ end
27
27
  self.attributes['order_id'] = order_id
28
28
  self.attributes['external_order_id'] = external_order_id
29
29
  self.attributes.delete('order')
30
- @order
31
30
  end
32
31
 
33
32
  def order_id=(new_id)
34
- return new_id if order_id == new_id
33
+ return if order_id == new_id
35
34
 
36
35
  if new_id.nil?
37
36
  reset_order_instance_assoc
@@ -41,7 +40,7 @@ module Fera
41
40
  end
42
41
 
43
42
  def external_order_id=(new_id)
44
- return new_id if external_order_id == new_id
43
+ return if external_order_id == new_id
45
44
 
46
45
  if new_id.nil?
47
46
  reset_order_instance_assoc
@@ -78,10 +77,7 @@ module Fera
78
77
  Order.find(order_id)
79
78
  elsif attributes.key?('external_order_id') && external_order_id.present?
80
79
  Order.find(external_order_id)
81
- else
82
- nil
83
80
  end
84
81
  end
85
-
86
82
  end
87
83
  end
@@ -9,25 +9,24 @@ module Fera
9
9
  end
10
10
 
11
11
  def product=(product)
12
- product_id = if product.is_a?(Product)
13
- product.id
14
- else
15
- product.try(:with_indifferent_access).try(:[], :id)
16
- end
12
+ product_id = if product.is_a?(Product)
13
+ product.id
14
+ else
15
+ product.try(:with_indifferent_access).try(:[], :id)
16
+ end
17
17
  external_product_id = if product.is_a?(Product)
18
- product.external_id
19
- else
20
- product.try(:with_indifferent_access).try(:[], :external_id)
21
- end
22
- @product = if product.is_a?(Product)
23
- product
24
- else
25
- Product.new(product, product_id.present?)
26
- end
18
+ product.external_id
19
+ else
20
+ product.try(:with_indifferent_access).try(:[], :external_id)
21
+ end
22
+ @product = if product.is_a?(Product)
23
+ product
24
+ else
25
+ Product.new(product, product_id.present?)
26
+ end
27
27
  self.attributes['product_id'] = product_id
28
28
  self.attributes['external_product_id'] = external_product_id
29
29
  self.attributes.delete('product')
30
- @product
31
30
  end
32
31
 
33
32
  def product
@@ -39,10 +38,7 @@ module Fera
39
38
  Product.find(product_id)
40
39
  elsif attributes.key?('external_product_id') && external_product_id.present?
41
40
  Product.find(external_product_id)
42
- else
43
- nil
44
41
  end
45
42
  end
46
-
47
43
  end
48
44
  end
@@ -10,18 +10,17 @@ module Fera
10
10
 
11
11
  def review=(review)
12
12
  review_id = if review.is_a?(Review)
13
- review.id
14
- else
15
- review.try(:with_indifferent_access).try(:[], :id)
16
- end
17
- @review = if review.is_a?(Review)
18
- review
19
- else
20
- Review.new(review, review_id.present?)
21
- end
13
+ review.id
14
+ else
15
+ review.try(:with_indifferent_access).try(:[], :id)
16
+ end
17
+ @review = if review.is_a?(Review)
18
+ review
19
+ else
20
+ Review.new(review, review_id.present?)
21
+ end
22
22
  self.attributes['review_id'] = review_id
23
23
  self.attributes.delete('review')
24
- @review
25
24
  end
26
25
 
27
26
  def review
@@ -31,10 +30,7 @@ module Fera
31
30
  Review.new(attributes['review'], true)
32
31
  elsif attributes.key?('review_id') && review_id.present?
33
32
  Review.find(review_id)
34
- else
35
- nil
36
33
  end
37
34
  end
38
-
39
35
  end
40
36
  end