fera-api 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +143 -26
- data/.ruby-version +1 -0
- data/.spellr.yml +9 -0
- data/.spellr_wordlists/english.txt +774 -0
- data/.spellr_wordlists/html.txt +1 -0
- data/.spellr_wordlists/javascript.txt +3 -0
- data/.spellr_wordlists/ruby.txt +22 -0
- data/Gemfile +6 -4
- data/Gemfile.lock +64 -19
- data/README.md +1 -0
- data/lib/fera/api/version.rb +1 -1
- data/lib/fera/api.rb +7 -3
- data/lib/fera/app.rb +3 -0
- data/lib/fera/models/base.rb +28 -22
- data/lib/fera/models/concerns/belongs_to_customer.rb +2 -4
- data/lib/fera/models/concerns/belongs_to_order.rb +14 -17
- data/lib/fera/models/concerns/belongs_to_product.rb +14 -17
- data/lib/fera/models/concerns/belongs_to_review.rb +9 -12
- data/lib/fera/models/concerns/belongs_to_submission.rb +0 -2
- data/lib/fera/models/concerns/has_subject.rb +3 -5
- data/lib/fera/models/media.rb +8 -8
- metadata +91 -14
@@ -0,0 +1 @@
|
|
1
|
+
clearfix
|
data/Gemfile
CHANGED
@@ -5,10 +5,12 @@ 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 "
|
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"
|
14
16
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fera-api (0.1.
|
4
|
+
fera-api (0.1.2)
|
5
5
|
activemodel (>= 4)
|
6
6
|
activeresource (>= 6)
|
7
|
-
activesupport (>=
|
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 (
|
15
|
-
activesupport (=
|
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 (
|
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
|
-
|
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)
|
44
|
+
hashdiff (1.0.1)
|
45
|
+
httpclient (2.8.3)
|
36
46
|
i18n (1.12.0)
|
37
47
|
concurrent-ruby (~> 1.0)
|
38
|
-
|
48
|
+
interception (0.5)
|
49
|
+
json (2.6.2)
|
50
|
+
json-jwt (1.15.2)
|
39
51
|
activesupport (>= 4.2)
|
40
52
|
aes_key_wrap
|
41
53
|
bindata
|
42
|
-
|
54
|
+
httpclient
|
55
|
+
method_source (1.0.0)
|
56
|
+
minitest (5.16.3)
|
43
57
|
parallel (1.22.1)
|
44
|
-
parser (3.1.2.
|
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
|
-
|
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,46 @@ 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.
|
95
|
+
rubocop (1.35.0)
|
96
|
+
json (~> 2.3)
|
65
97
|
parallel (~> 1.10)
|
66
|
-
parser (>= 3.1.
|
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.
|
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.
|
105
|
+
rubocop-ast (1.21.0)
|
74
106
|
parser (>= 3.1.1.0)
|
75
107
|
ruby-progressbar (1.11.0)
|
108
|
+
slop (3.6.0)
|
109
|
+
to_bool (2.0.0)
|
76
110
|
tzinfo (2.0.5)
|
77
111
|
concurrent-ruby (~> 1.0)
|
78
|
-
unicode-display_width (2.
|
79
|
-
|
112
|
+
unicode-display_width (2.2.0)
|
113
|
+
webmock (3.18.0)
|
114
|
+
addressable (>= 2.8.0)
|
115
|
+
crack (>= 0.3.2)
|
116
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
80
117
|
|
81
118
|
PLATFORMS
|
82
119
|
x86_64-darwin-18
|
83
120
|
x86_64-darwin-20
|
121
|
+
x86_64-linux
|
84
122
|
|
85
123
|
DEPENDENCIES
|
86
124
|
fera-api!
|
87
|
-
|
88
|
-
|
125
|
+
pry
|
126
|
+
pry-byebug
|
127
|
+
pry-rails
|
128
|
+
pry-remote
|
129
|
+
pry-rescue
|
130
|
+
pry-stack_explorer
|
131
|
+
rspec (>= 3.0)
|
89
132
|
rubocop
|
133
|
+
to_bool
|
134
|
+
webmock (>= 3.0)
|
90
135
|
|
91
136
|
BUNDLED WITH
|
92
137
|
2.3.13
|
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
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)
|
2
3
|
|
3
4
|
# Fera API Ruby Client
|
4
5
|
|
data/lib/fera/api/version.rb
CHANGED
data/lib/fera/api.rb
CHANGED
@@ -18,11 +18,14 @@ 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
|
+
def self.configure(api_key, api_url: nil, strict_mode: false, debug_mode: false)
|
22
22
|
previous_base_site = Base.site
|
23
23
|
previous_base_headers = Base.headers
|
24
24
|
|
25
|
-
|
25
|
+
api_url ||= 'https://api.fera.ai'
|
26
|
+
Base.site = "#{ api_url.chomp('/') }/v3/private"
|
27
|
+
|
28
|
+
@debug_mode = debug_mode
|
26
29
|
|
27
30
|
if api_key =~ /^sk_/
|
28
31
|
Base.headers['Secret-Key'] = api_key
|
@@ -48,9 +51,10 @@ module Fera
|
|
48
51
|
else
|
49
52
|
self
|
50
53
|
end
|
51
|
-
|
52
54
|
end
|
53
55
|
|
56
|
+
def self.debug_mode?; @debug_mode; end
|
57
|
+
|
54
58
|
def self.revoke_token!(client_id:, client_secret:, auth_token:)
|
55
59
|
previous_site = Base.site
|
56
60
|
|
data/lib/fera/app.rb
CHANGED
data/lib/fera/models/base.rb
CHANGED
@@ -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 = {})
|
@@ -37,9 +36,7 @@ module Fera
|
|
37
36
|
end
|
38
37
|
end
|
39
38
|
|
40
|
-
|
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
|
|
108
|
+
return unless attributes.present?
|
109
|
+
|
111
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
|
115
|
+
end
|
117
116
|
end
|
118
117
|
|
119
118
|
def load(attributes, *args)
|
@@ -150,7 +149,7 @@ module Fera
|
|
150
149
|
end
|
151
150
|
end
|
152
151
|
|
153
|
-
def update(changed_attributes, extra_params = {}, raise
|
152
|
+
def update(changed_attributes, extra_params = {}, raise: false)
|
154
153
|
run_callbacks(:update) do
|
155
154
|
connection.put(element_path(prefix_options, extra_params), changed_attributes.to_json, self.class.headers).tap do |response|
|
156
155
|
load_attributes_from_response(response)
|
@@ -171,7 +170,7 @@ module Fera
|
|
171
170
|
end
|
172
171
|
|
173
172
|
def update!(changed_attributes, extra_params = {})
|
174
|
-
update(changed_attributes, extra_params, true)
|
173
|
+
update(changed_attributes, extra_params, raise: true)
|
175
174
|
end
|
176
175
|
|
177
176
|
def valid?(_context = nil)
|
@@ -179,13 +178,13 @@ module Fera
|
|
179
178
|
end
|
180
179
|
|
181
180
|
##
|
182
|
-
# @override to add
|
183
|
-
def create(extra_params = {}, raise
|
181
|
+
# @override to add extra params
|
182
|
+
def create(extra_params = {}, raise: false)
|
184
183
|
run_callbacks :create do
|
185
|
-
|
186
184
|
data = as_json
|
187
|
-
|
185
|
+
self.class.belongs_tos.merge(self.class.has_ones).each do |name, _opts|
|
188
186
|
next unless instance_variable_defined?(:"@#{ name }")
|
187
|
+
|
189
188
|
nested_resource = self.send(name)
|
190
189
|
if nested_resource.present? && !nested_resource.persisted?
|
191
190
|
nested_resource.validate!
|
@@ -195,6 +194,7 @@ module Fera
|
|
195
194
|
|
196
195
|
self.class.has_manys.each do |name, _opts|
|
197
196
|
next unless instance_variable_defined?(:"@#{ name }")
|
197
|
+
|
198
198
|
nested_resource = self.send(name)
|
199
199
|
|
200
200
|
next if nested_resource.nil?
|
@@ -227,13 +227,13 @@ module Fera
|
|
227
227
|
end
|
228
228
|
|
229
229
|
def create!(extra_params = {})
|
230
|
-
create(extra_params, true)
|
230
|
+
create(extra_params, raise: true)
|
231
231
|
end
|
232
232
|
|
233
|
-
def save(extra_params = {}, raise
|
233
|
+
def save(extra_params = {}, raise: false)
|
234
234
|
run_callbacks :save do
|
235
235
|
if new?
|
236
|
-
create(extra_params, raise) # We'll raise the error below
|
236
|
+
create(extra_params, raise: raise) # We'll raise the error below
|
237
237
|
else
|
238
238
|
# find changes
|
239
239
|
changed_attributes = attributes.filter { |key, value| !@clean_copy.attributes.key?(key) || (@clean_copy.attributes[key] != value) || (key == self.class.primary_key) }
|
@@ -241,23 +241,22 @@ module Fera
|
|
241
241
|
return false unless changed_attributes.keys.any?
|
242
242
|
|
243
243
|
# save
|
244
|
-
update(changed_attributes, extra_params, raise)
|
244
|
+
update(changed_attributes, extra_params, raise: raise)
|
245
245
|
end
|
246
246
|
|
247
247
|
@clean_copy = clone_with_nil # Clear changes
|
248
248
|
|
249
249
|
self
|
250
250
|
end
|
251
|
-
|
252
251
|
end
|
253
252
|
|
254
253
|
def save!(extra_params = {})
|
255
|
-
save(extra_params, true)
|
254
|
+
save(extra_params, raise: true)
|
256
255
|
end
|
257
256
|
|
258
257
|
def clone_with_nil
|
259
258
|
# Clone all attributes except the pk and any nested ARes
|
260
|
-
cloned =
|
259
|
+
cloned = attributes.reject { |k, v| k == self.class.primary_key || v.is_a?(ActiveResource::Base) }.map { |k, v| [k, v.clone] }.to_h
|
261
260
|
# Form the new resource - bypass initialize of resource with 'new' as that will call 'load' which
|
262
261
|
# attempts to convert hashes into member objects and arrays into collections of objects. We want
|
263
262
|
# the raw objects to be cloned so we bypass load by directly setting the attributes hash.
|
@@ -294,9 +293,11 @@ module Fera
|
|
294
293
|
if matcher.present?
|
295
294
|
attribute_name = matcher[1]
|
296
295
|
return super if attribute_name.blank?
|
296
|
+
|
297
297
|
attribute_name = "is_#{ attribute_name }" unless attribute_name =~ /^is_/
|
298
298
|
return super unless known_attribute?(attribute_name.to_s)
|
299
|
-
|
299
|
+
|
300
|
+
return !!send(attribute_name.to_sym).presence
|
300
301
|
end
|
301
302
|
|
302
303
|
super
|
@@ -307,6 +308,7 @@ module Fera
|
|
307
308
|
if matcher.present?
|
308
309
|
attribute_name = matcher[1]
|
309
310
|
return super if attribute_name.blank?
|
311
|
+
|
310
312
|
attribute_name = "is_#{ attribute_name }" unless attribute_name =~ /^is_/
|
311
313
|
return true if known_attribute?(attribute_name)
|
312
314
|
end
|
@@ -318,7 +320,7 @@ module Fera
|
|
318
320
|
known_attributes.map(&:to_s).include?(attribute_name.to_s)
|
319
321
|
end
|
320
322
|
|
321
|
-
def set_last_response(result)
|
323
|
+
def set_last_response(result) # rubocop:disable Naming/AccessorMethodName
|
322
324
|
response = if result.is_a?(StandardError)
|
323
325
|
@last_response_exception = result
|
324
326
|
@last_response_exception.response
|
@@ -376,5 +378,9 @@ module Fera
|
|
376
378
|
sub_fields = sub_fields.drop(1)
|
377
379
|
changed_attributes[sub_key] = values.map { |value| clone_selected_fields(value, sub_fields) }
|
378
380
|
end
|
381
|
+
|
382
|
+
def debug(message)
|
383
|
+
puts "[Fera-Api] #{ message }" if ::Fera::Api.debug_mode?
|
384
|
+
end
|
379
385
|
end
|
380
386
|
end
|
@@ -10,8 +10,8 @@ module Fera
|
|
10
10
|
|
11
11
|
def customer=(customer)
|
12
12
|
if customer.is_a?(Customer)
|
13
|
-
@customer
|
14
|
-
self.attributes['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)
|
@@ -59,8 +59,6 @@ module Fera
|
|
59
59
|
Customer.find(customer_id)
|
60
60
|
elsif attributes.key?('external_customer_id') && external_customer_id.present?
|
61
61
|
Customer.find(external_customer_id)
|
62
|
-
else
|
63
|
-
nil
|
64
62
|
end
|
65
63
|
end
|
66
64
|
end
|
@@ -9,21 +9,21 @@ module Fera
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def order=(order)
|
12
|
-
order_id
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
@order
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
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')
|
@@ -77,10 +77,7 @@ module Fera
|
|
77
77
|
Order.find(order_id)
|
78
78
|
elsif attributes.key?('external_order_id') && external_order_id.present?
|
79
79
|
Order.find(external_order_id)
|
80
|
-
else
|
81
|
-
nil
|
82
80
|
end
|
83
81
|
end
|
84
|
-
|
85
82
|
end
|
86
83
|
end
|
@@ -9,21 +9,21 @@ module Fera
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def product=(product)
|
12
|
-
product_id
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
@product
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
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')
|
@@ -38,10 +38,7 @@ module Fera
|
|
38
38
|
Product.find(product_id)
|
39
39
|
elsif attributes.key?('external_product_id') && external_product_id.present?
|
40
40
|
Product.find(external_product_id)
|
41
|
-
else
|
42
|
-
nil
|
43
41
|
end
|
44
42
|
end
|
45
|
-
|
46
43
|
end
|
47
44
|
end
|
@@ -10,15 +10,15 @@ module Fera
|
|
10
10
|
|
11
11
|
def review=(review)
|
12
12
|
review_id = if review.is_a?(Review)
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
@review
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
24
|
end
|
@@ -30,10 +30,7 @@ module Fera
|
|
30
30
|
Review.new(attributes['review'], true)
|
31
31
|
elsif attributes.key?('review_id') && review_id.present?
|
32
32
|
Review.find(review_id)
|
33
|
-
else
|
34
|
-
nil
|
35
33
|
end
|
36
34
|
end
|
37
|
-
|
38
35
|
end
|
39
36
|
end
|
@@ -26,11 +26,9 @@ module Fera
|
|
26
26
|
# Returns the associated product model if it was preloaded in the original request and if the object is for a product.
|
27
27
|
# @return [::Fera::Product, NilClass]
|
28
28
|
def product
|
29
|
-
if attributes['subject']
|
30
|
-
|
31
|
-
|
32
|
-
nil
|
33
|
-
end
|
29
|
+
return nil if attributes['subject'] !~ /^product/i
|
30
|
+
|
31
|
+
super
|
34
32
|
end
|
35
33
|
|
36
34
|
def for_product?
|
data/lib/fera/models/media.rb
CHANGED
@@ -31,25 +31,25 @@ module Fera
|
|
31
31
|
end
|
32
32
|
alias_method :photo?, :is_photo?
|
33
33
|
|
34
|
-
def file=(
|
35
|
-
if
|
36
|
-
file_name = File.basename(
|
34
|
+
def file=(val)
|
35
|
+
if val.is_a?(File)
|
36
|
+
file_name = File.basename(val.path)
|
37
37
|
mime_type_group = type == 'video' ? 'video' : 'image'
|
38
38
|
self.attributes['file'] = {
|
39
39
|
'name' => File.basename(file_name),
|
40
|
-
'data' => "data:#{ mime_type_group }/#{ file_name.split('.').last };base64,#{ Base64.encode64(
|
40
|
+
'data' => "data:#{ mime_type_group }/#{ file_name.split('.').last };base64,#{ Base64.encode64(val.read) }",
|
41
41
|
}
|
42
42
|
else
|
43
|
-
self.attributes['file'] =
|
43
|
+
self.attributes['file'] = val
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
private
|
48
48
|
|
49
49
|
def remove_file_param
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
return unless self.attributes.key?('file')
|
51
|
+
|
52
|
+
self.attributes.delete('file')
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|