agilibox 1.0.9 → 1.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/app/controllers/agilibox/small_data/filters_controller.rb +3 -3
- data/app/controllers/concerns/agilibox/api_controller_concern.rb +52 -0
- data/app/controllers/concerns/agilibox/back_url_concern.rb +2 -2
- data/app/filters/agilibox/small_data/filter.rb +5 -1
- data/app/filters/agilibox/small_data/filter_strategy.rb +1 -1
- data/app/filters/agilibox/small_data/filter_strategy_by_date_begin.rb +1 -1
- data/app/filters/agilibox/small_data/filter_strategy_by_date_end.rb +1 -1
- data/app/filters/agilibox/small_data/filter_strategy_by_tags.rb +1 -1
- data/app/filters/agilibox/small_data/filter_strategy_by_time_period.rb +1 -1
- data/app/helpers/agilibox/bootstrap_helper.rb +2 -2
- data/app/helpers/agilibox/button_helper.rb +3 -3
- data/app/helpers/agilibox/filters_helper.rb +1 -2
- data/app/helpers/agilibox/form_helper.rb +7 -8
- data/app/helpers/agilibox/link_helper.rb +1 -1
- data/app/helpers/agilibox/pagination_helper.rb +1 -1
- data/app/helpers/agilibox/routes_helper.rb +1 -1
- data/app/helpers/agilibox/text_helper.rb +10 -11
- data/app/helpers/h.rb +3 -0
- data/app/libs/agilibox/mini_model_serializer/serialize.rb +30 -0
- data/app/libs/agilibox/mini_model_serializer/serializer.rb +23 -0
- data/app/libs/agilibox/phone_number_sanitizer.rb +16 -0
- data/app/libs/agilibox/token_generator.rb +37 -0
- data/app/models/concerns/agilibox/default_values_concern.rb +3 -2
- data/app/models/concerns/agilibox/model_i18n.rb +1 -2
- data/app/models/concerns/agilibox/polymorphic_id.rb +5 -2
- data/app/models/concerns/agilibox/search.rb +6 -6
- data/app/models/concerns/agilibox/timestamp_helpers.rb +17 -0
- data/app/serializers/agilibox/serializers/base.rb +1 -1
- data/config/locales/errors.en.yml +5 -0
- data/config/locales/errors.fr.yml +5 -0
- data/lib/agilibox/active_record_comma_type_cast.rb +1 -1
- data/lib/agilibox/engine.rb +3 -0
- data/lib/agilibox/engine_file.rb +10 -0
- data/lib/agilibox/version.rb +1 -1
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b31fd30195ec42898a2556ac6db48c97d1f05a7
|
4
|
+
data.tar.gz: 2582452bd5ec90baa46667ae2949e1e8d307dd69
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a521adc5a377d13ecf9a08c5d5f6f5bab1d2b2daceee2b43d6684fa3f185b46bc20f4f94e32e18e058ff0edc5cb6f57d360c0772fa0ac543c58461d8ea06b69
|
7
|
+
data.tar.gz: 94c11ba528b4e77db6fecfe49bb81a77d398a67ad29dcb68f4a43890ab73b3cd8efada3d1ae660878d1049c5c5782dfd0f18f2eab80a541e52ba554702688c48
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,17 @@
|
|
2
2
|
|
3
3
|
## Next version
|
4
4
|
|
5
|
+
## 1.0.10
|
6
|
+
|
7
|
+
- Add TokenGenerator
|
8
|
+
- Add PhoneNumberSanitizer
|
9
|
+
- Add engine_file helper to Kernel
|
10
|
+
- Syntax improvements and refactors
|
11
|
+
- Add H alias of Agilibox::AllHelpers
|
12
|
+
- Add TimestampHelpers
|
13
|
+
- Add MiniModelSerializer
|
14
|
+
- Add ApiControllerConcern
|
15
|
+
|
5
16
|
## 1.0.9
|
6
17
|
|
7
18
|
- Fix Model#tv
|
@@ -23,8 +23,9 @@ class Agilibox::SmallData::FiltersController < ::Agilibox::ApplicationController
|
|
23
23
|
url = [
|
24
24
|
params[:form_url],
|
25
25
|
request.referer,
|
26
|
-
|
27
|
-
|
26
|
+
main_app.try(:root_path),
|
27
|
+
"/",
|
28
|
+
].find(&:present?)
|
28
29
|
|
29
30
|
# Delete page param
|
30
31
|
base, query_string = url.split("?")
|
@@ -32,5 +33,4 @@ class Agilibox::SmallData::FiltersController < ::Agilibox::ApplicationController
|
|
32
33
|
query_string = "?#{query_string}" if query_string.present?
|
33
34
|
base + query_string
|
34
35
|
end
|
35
|
-
|
36
36
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Agilibox::ApiControllerConcern
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
private
|
5
|
+
|
6
|
+
def render_json(json = {}, options = {})
|
7
|
+
json.reverse_merge!(current_user: current_user)
|
8
|
+
options.reverse_merge!(current_user: current_user)
|
9
|
+
|
10
|
+
json = Agilibox::MiniModelSerializer::Serialize.call(json, options)
|
11
|
+
|
12
|
+
render options.merge(json: json)
|
13
|
+
end
|
14
|
+
|
15
|
+
def render_json_error(message_or_object, options = {})
|
16
|
+
if message_or_object.is_a?(ActiveRecord::Base)
|
17
|
+
message = message_or_object.errors.full_messages.join(", ")
|
18
|
+
else
|
19
|
+
message = message_or_object
|
20
|
+
end
|
21
|
+
|
22
|
+
options[:status] ||= :unprocessable_entity
|
23
|
+
|
24
|
+
render_json({error: message}, options)
|
25
|
+
end
|
26
|
+
|
27
|
+
def render_not_found
|
28
|
+
render_json_error t("errors.not_found"), status: :not_found
|
29
|
+
end
|
30
|
+
|
31
|
+
def render_forbidden
|
32
|
+
render_json_error t("errors.forbidden"), status: :forbidden
|
33
|
+
end
|
34
|
+
|
35
|
+
def render_unauthorized
|
36
|
+
render_json_error t("errors.unauthorized"), status: :unauthorized
|
37
|
+
end
|
38
|
+
|
39
|
+
def render_forbidden_or_unauthorized
|
40
|
+
current_user ? render_unauthorized : render_forbidden
|
41
|
+
end
|
42
|
+
|
43
|
+
included do |controller|
|
44
|
+
if controller < ActionController::Rescue
|
45
|
+
if defined?(Pundit::NotAuthorizedError)
|
46
|
+
rescue_from Pundit::NotAuthorizedError, with: :render_forbidden_or_unauthorized
|
47
|
+
end
|
48
|
+
|
49
|
+
rescue_from ActiveRecord::RecordNotFound, with: :render_not_found
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -42,6 +42,10 @@ class Agilibox::SmallData::Filter
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
+
def respond_to_missing?(method, *)
|
46
|
+
strategies.key?(method.to_s) || strategies.key?(method.to_s.chomp("="))
|
47
|
+
end
|
48
|
+
|
45
49
|
def read
|
46
50
|
JSON.parse jar["filters"].to_s
|
47
51
|
rescue JSON::ParserError
|
@@ -61,7 +65,7 @@ class Agilibox::SmallData::Filter
|
|
61
65
|
end
|
62
66
|
|
63
67
|
def empty?
|
64
|
-
!
|
68
|
+
!any?
|
65
69
|
end
|
66
70
|
|
67
71
|
private
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Agilibox::SmallData::FilterStrategyByDateBegin < ::Agilibox::SmallData::FilterStrategyByKeyValue
|
2
2
|
def apply(query, value)
|
3
|
-
value = Time.parse(value).beginning_of_day
|
3
|
+
value = Time.zone.parse(value).beginning_of_day
|
4
4
|
query.where("#{key} >= ?", value)
|
5
5
|
end
|
6
6
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class Agilibox::SmallData::FilterStrategyByTimePeriod < ::Agilibox::SmallData::FilterStrategyByKeyValue
|
2
|
-
def apply(query, value)
|
2
|
+
def apply(query, value) # rubocop:disable Metrics/MethodLength
|
3
3
|
if value == "today"
|
4
4
|
a = Time.zone.now.beginning_of_day
|
5
5
|
b = Time.zone.now.end_of_day
|
@@ -12,13 +12,13 @@ module Agilibox::ButtonHelper
|
|
12
12
|
:title => title,
|
13
13
|
}.deep_merge(options)
|
14
14
|
|
15
|
-
if confirm = options.delete(:confirm)
|
15
|
+
if (confirm = options.delete(:confirm))
|
16
16
|
confirm = t("actions.confirm") if confirm == true
|
17
17
|
|
18
18
|
options.deep_merge!(
|
19
19
|
:data => {
|
20
20
|
:confirm => confirm,
|
21
|
-
}
|
21
|
+
},
|
22
22
|
)
|
23
23
|
end
|
24
24
|
|
@@ -40,7 +40,7 @@ module Agilibox::ButtonHelper
|
|
40
40
|
options = {
|
41
41
|
:icon => :plus,
|
42
42
|
:action => :create,
|
43
|
-
:class =>"btn btn-xs btn-success link_create"
|
43
|
+
:class =>"btn btn-xs btn-success link_create",
|
44
44
|
}.merge(options)
|
45
45
|
|
46
46
|
bs_button(url, options)
|
@@ -54,7 +54,7 @@ module Agilibox::FiltersHelper
|
|
54
54
|
{
|
55
55
|
t("time_periods.all_time") => "",
|
56
56
|
t("time_periods.today") => "today",
|
57
|
-
t("time_periods.yesterday") => "yesterday"
|
57
|
+
t("time_periods.yesterday") => "yesterday",
|
58
58
|
t("time_periods.this_week") => "this_week",
|
59
59
|
t("time_periods.last_week") => "last_week",
|
60
60
|
t("time_periods.this_month") => "this_month",
|
@@ -64,5 +64,4 @@ module Agilibox::FiltersHelper
|
|
64
64
|
t("time_periods.custom_date") => "custom_date",
|
65
65
|
}
|
66
66
|
end
|
67
|
-
|
68
67
|
end
|
@@ -5,9 +5,9 @@ module Agilibox::FormHelper
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def form_buttons(opts = {})
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
back_url = opts[:back_url]
|
9
|
+
back_url = url_for(:back).html_safe if back_url.blank?
|
10
|
+
back_url = URI(back_url).path if back_url.include?("://")
|
11
11
|
|
12
12
|
if opts[:obj].present?
|
13
13
|
if opts[:obj].new_record?
|
@@ -25,7 +25,7 @@ module Agilibox::FormHelper
|
|
25
25
|
end
|
26
26
|
|
27
27
|
cancel = content_tag("a", href: back_url, class: "btn btn-primary btn-sm") do
|
28
|
-
content_tag(:span, class: "fa fa-times"){} + " " + t("actions.cancel")
|
28
|
+
content_tag(:span, class: "fa fa-times") {} + " " + t("actions.cancel")
|
29
29
|
end
|
30
30
|
|
31
31
|
cancel = "" if back_url == false
|
@@ -34,12 +34,12 @@ module Agilibox::FormHelper
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
def horizontal_form_for(obj, opts={}, &block)
|
37
|
+
def horizontal_form_for(obj, opts = {}, &block)
|
38
38
|
opts = {
|
39
39
|
:wrapper => "horizontal_form",
|
40
40
|
:html => {
|
41
|
-
:class => "form-horizontal"
|
42
|
-
}
|
41
|
+
:class => "form-horizontal",
|
42
|
+
},
|
43
43
|
}.deep_merge(opts)
|
44
44
|
|
45
45
|
simple_form_for(obj, opts, &block)
|
@@ -59,5 +59,4 @@ module Agilibox::FormHelper
|
|
59
59
|
:label => label,
|
60
60
|
)
|
61
61
|
end
|
62
|
-
|
63
62
|
end
|
@@ -13,13 +13,13 @@ module Agilibox::TextHelper
|
|
13
13
|
I18n.t("number.currency.format.format")
|
14
14
|
.gsub("%n", number(n))
|
15
15
|
.gsub("%u", u)
|
16
|
-
.
|
16
|
+
.tr(" ", "\u00A0")
|
17
17
|
end
|
18
18
|
|
19
19
|
def percentage(n)
|
20
20
|
return if n.nil?
|
21
21
|
|
22
|
-
(number(n) + " %").
|
22
|
+
(number(n) + " %").tr(" ", "\u00A0")
|
23
23
|
end
|
24
24
|
|
25
25
|
def number(n)
|
@@ -27,7 +27,7 @@ module Agilibox::TextHelper
|
|
27
27
|
|
28
28
|
opts = {}
|
29
29
|
|
30
|
-
if n.class.to_s
|
30
|
+
if n.class.to_s =~ /Float|Decimal/i
|
31
31
|
opts[:precision] = 2
|
32
32
|
else
|
33
33
|
opts[:precision] = 0
|
@@ -36,7 +36,7 @@ module Agilibox::TextHelper
|
|
36
36
|
opts[:delimiter] = I18n.t("number.format.delimiter")
|
37
37
|
opts[:separator] = I18n.t("number.format.separator")
|
38
38
|
|
39
|
-
number_with_precision(n, opts).
|
39
|
+
number_with_precision(n, opts).tr(" ", "\u00A0")
|
40
40
|
end
|
41
41
|
|
42
42
|
def date(d)
|
@@ -56,16 +56,17 @@ module Agilibox::TextHelper
|
|
56
56
|
def text2html(str)
|
57
57
|
return if str.to_s.blank?
|
58
58
|
|
59
|
-
str = str.
|
59
|
+
str = str.delete("\r").strip
|
60
60
|
strip_tags(str).gsub("\n", "<br />").html_safe
|
61
61
|
end
|
62
62
|
|
63
63
|
def lf2br(str)
|
64
64
|
return if str.to_s.blank?
|
65
65
|
|
66
|
-
str.
|
66
|
+
str.delete("\r").gsub("\n", "<br />").html_safe
|
67
67
|
end
|
68
68
|
|
69
|
+
# rubocop:disable Metrics/MethodLength
|
69
70
|
def info(object, attribute, value_or_options = nil, options = {})
|
70
71
|
if value_or_options.nil?
|
71
72
|
value = object.public_send(attribute)
|
@@ -90,8 +91,8 @@ module Agilibox::TextHelper
|
|
90
91
|
klass = object.is_a?(Module) ? object : object.class
|
91
92
|
object_type = klass.to_s.split("::").last.underscore
|
92
93
|
|
93
|
-
value = t("yes") if value
|
94
|
-
value = t("no") if value
|
94
|
+
value = t("yes") if value == true
|
95
|
+
value = t("no") if value == false
|
95
96
|
value = object.t("#{attribute}.#{value}") if nested
|
96
97
|
value = send(helper, value) if helper
|
97
98
|
value = number(value) if value.is_a?(Numeric)
|
@@ -99,7 +100,6 @@ module Agilibox::TextHelper
|
|
99
100
|
value = l(value) if value.is_a?(Date)
|
100
101
|
value = value.to_s
|
101
102
|
|
102
|
-
|
103
103
|
html_label = content_tag(:strong, class: "info-label") { label }
|
104
104
|
span_css_class = "info-value #{object_type}-#{attribute}"
|
105
105
|
html_value = content_tag(:span, class: span_css_class) { value }
|
@@ -120,10 +120,9 @@ module Agilibox::TextHelper
|
|
120
120
|
return "" if object.tag_list.empty?
|
121
121
|
|
122
122
|
object.tag_list.map { |tag|
|
123
|
-
content_tag(:span, class: "tag label label-primary"){
|
123
|
+
content_tag(:span, class: "tag label label-primary") {
|
124
124
|
"#{icon :tag} #{tag}".html_safe
|
125
125
|
}
|
126
126
|
}.join(" ").html_safe
|
127
127
|
end
|
128
|
-
|
129
128
|
end
|
data/app/helpers/h.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
class Agilibox::MiniModelSerializer::Serialize
|
2
|
+
attr_reader :object, :options
|
3
|
+
|
4
|
+
def initialize(object, options = {})
|
5
|
+
@object = object
|
6
|
+
@options = options
|
7
|
+
end
|
8
|
+
|
9
|
+
def call
|
10
|
+
if object.is_a?(Hash)
|
11
|
+
object.map { |k, v| [k.to_s, serialize(v)] }.to_h
|
12
|
+
elsif object.is_a?(Enumerable)
|
13
|
+
object.map { |e| serialize(e) }
|
14
|
+
elsif (serializer = "#{object.class}Serializer".safe_constantize)
|
15
|
+
serializer.call(object, options)
|
16
|
+
else
|
17
|
+
object.as_json
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.call(*args)
|
22
|
+
new(*args).call
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def serialize(object)
|
28
|
+
Agilibox::MiniModelSerializer::Serialize.call(object, options)
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Agilibox::MiniModelSerializer::Serializer < Agilibox::MiniModelSerializer::Serialize
|
2
|
+
def attributes
|
3
|
+
raise NotImplementedError
|
4
|
+
end
|
5
|
+
|
6
|
+
def call
|
7
|
+
serialize attributes.map { |k| [k, send(k)] }.to_h
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def method_missing(m, *args)
|
13
|
+
if respond_to_missing?(m)
|
14
|
+
object.send(m, *args)
|
15
|
+
else
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def respond_to_missing?(m, *)
|
21
|
+
object.respond_to?(m, true)
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Agilibox::PhoneNumberSanitizer
|
2
|
+
attr_reader :phone_number
|
3
|
+
|
4
|
+
def initialize(phone_number)
|
5
|
+
@phone_number = phone_number
|
6
|
+
end
|
7
|
+
|
8
|
+
def call
|
9
|
+
sanitized = phone_number.to_s.gsub(/[^0-9\+]+/, "")
|
10
|
+
sanitized if sanitized.present?
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.call(*args)
|
14
|
+
new(*args).call
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class Agilibox::TokenGenerator
|
2
|
+
attr_reader :options
|
3
|
+
|
4
|
+
def initialize(options = {})
|
5
|
+
@options = options
|
6
|
+
end
|
7
|
+
|
8
|
+
def size
|
9
|
+
options[:size] || self.class.default_size
|
10
|
+
end
|
11
|
+
|
12
|
+
def alphabet
|
13
|
+
options[:alphabet] || self.class.default_alphabet
|
14
|
+
end
|
15
|
+
|
16
|
+
def call
|
17
|
+
(alphabet * size).sample(size).join
|
18
|
+
end
|
19
|
+
|
20
|
+
class << self
|
21
|
+
def call(*args)
|
22
|
+
new(*args).call
|
23
|
+
end
|
24
|
+
|
25
|
+
attr_writer :default_size
|
26
|
+
|
27
|
+
def default_size
|
28
|
+
@default_size ||= 64
|
29
|
+
end
|
30
|
+
|
31
|
+
attr_writer :default_alphabet
|
32
|
+
|
33
|
+
def default_alphabet
|
34
|
+
@default_alphabet ||= (0..9).to_a + ("a".."z").to_a + ("A".."Z").to_a
|
35
|
+
end
|
36
|
+
end # class << self
|
37
|
+
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
module Agilibox::DefaultValuesConcern
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
|
-
def assign_default_values
|
4
|
+
def assign_default_values
|
5
|
+
end
|
5
6
|
|
6
7
|
def assign_default(attribute, value)
|
7
|
-
|
8
|
+
send("#{attribute}=", value) if send(attribute).nil?
|
8
9
|
end
|
9
10
|
|
10
11
|
included do
|
@@ -11,7 +11,7 @@ module Agilibox::PolymorphicId
|
|
11
11
|
def guid
|
12
12
|
return nil if new_record?
|
13
13
|
|
14
|
-
"#{self.class.base_class}-#{
|
14
|
+
"#{self.class.base_class}-#{id}"
|
15
15
|
end
|
16
16
|
end # included
|
17
17
|
end # module
|
@@ -26,7 +26,10 @@ Module.new do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def relation_guid=(guid)
|
29
|
-
|
29
|
+
if guid.blank?
|
30
|
+
self.relation = nil
|
31
|
+
return
|
32
|
+
end
|
30
33
|
|
31
34
|
type, id = guid.split("-", 2)
|
32
35
|
self.relation = type.constantize.find(id)
|
@@ -3,7 +3,7 @@ module Agilibox::Search
|
|
3
3
|
|
4
4
|
class_methods do
|
5
5
|
def default_search_fields
|
6
|
-
|
6
|
+
columns.map do |column|
|
7
7
|
"#{table_name}.#{column.name}"
|
8
8
|
end
|
9
9
|
end # def default_search_fields
|
@@ -12,11 +12,11 @@ module Agilibox::Search
|
|
12
12
|
words = q.to_s.parameterize.split("-")
|
13
13
|
fields = default_search_fields if fields.empty?
|
14
14
|
|
15
|
-
sql_query = words.map.with_index
|
16
|
-
fields.map
|
15
|
+
sql_query = words.map.with_index { |_word, index|
|
16
|
+
fields.map { |field|
|
17
17
|
"(UNACCENT(CAST(#{field} AS TEXT)) ILIKE :w#{index})"
|
18
|
-
|
19
|
-
|
18
|
+
}.join(" OR ")
|
19
|
+
}.map { |e| "(#{e})" }.join(" AND ")
|
20
20
|
|
21
21
|
sql_params_a = words.map.with_index do |word, index|
|
22
22
|
["w#{index}".to_sym, "%#{word}%"]
|
@@ -24,7 +24,7 @@ module Agilibox::Search
|
|
24
24
|
|
25
25
|
sql_params_h = Hash[sql_params_a]
|
26
26
|
|
27
|
-
|
27
|
+
where(sql_query, sql_params_h)
|
28
28
|
end # def search
|
29
29
|
end # class_methods
|
30
30
|
end # class Agilibox::Search
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Agilibox::TimestampHelpers
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
class_methods do
|
5
|
+
def first_created
|
6
|
+
reorder(:created_at, :id).first
|
7
|
+
end
|
8
|
+
|
9
|
+
def last_created
|
10
|
+
reorder(:created_at, :id).last
|
11
|
+
end
|
12
|
+
|
13
|
+
def last_updated
|
14
|
+
reorder(:updated_at, :id).last
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/agilibox/engine.rb
CHANGED
@@ -0,0 +1,10 @@
|
|
1
|
+
module Kernel
|
2
|
+
def engine_file(engine)
|
3
|
+
app_file = caller(1..1).first.split(":").first
|
4
|
+
app_root = ::Rails.application.root.to_s
|
5
|
+
relative_file = app_file.sub(app_root, "")
|
6
|
+
engine_root = engine::Engine.root.to_s
|
7
|
+
|
8
|
+
::File.join(engine_root, relative_file)
|
9
|
+
end
|
10
|
+
end
|
data/lib/agilibox/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: agilibox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- agilidée
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails-i18n
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- app/assets/stylesheets/agilibox/print.sass
|
80
80
|
- app/controllers/agilibox/application_controller.rb
|
81
81
|
- app/controllers/agilibox/small_data/filters_controller.rb
|
82
|
+
- app/controllers/concerns/agilibox/api_controller_concern.rb
|
82
83
|
- app/controllers/concerns/agilibox/back_url_concern.rb
|
83
84
|
- app/filters/agilibox/small_data/filter.rb
|
84
85
|
- app/filters/agilibox/small_data/filter_strategy.rb
|
@@ -100,13 +101,19 @@ files:
|
|
100
101
|
- app/helpers/agilibox/routes_helper.rb
|
101
102
|
- app/helpers/agilibox/sorting_helper.rb
|
102
103
|
- app/helpers/agilibox/text_helper.rb
|
104
|
+
- app/helpers/h.rb
|
105
|
+
- app/libs/agilibox/mini_model_serializer/serialize.rb
|
106
|
+
- app/libs/agilibox/mini_model_serializer/serializer.rb
|
107
|
+
- app/libs/agilibox/phone_number_sanitizer.rb
|
103
108
|
- app/libs/agilibox/sortable_uuid_generator.rb
|
109
|
+
- app/libs/agilibox/token_generator.rb
|
104
110
|
- app/models/concerns/agilibox/active_record_uuid_concern.rb
|
105
111
|
- app/models/concerns/agilibox/default_values_concern.rb
|
106
112
|
- app/models/concerns/agilibox/model_i18n.rb
|
107
113
|
- app/models/concerns/agilibox/model_to_s.rb
|
108
114
|
- app/models/concerns/agilibox/polymorphic_id.rb
|
109
115
|
- app/models/concerns/agilibox/search.rb
|
116
|
+
- app/models/concerns/agilibox/timestamp_helpers.rb
|
110
117
|
- app/serializers/agilibox/serializers.rb
|
111
118
|
- app/serializers/agilibox/serializers/base.rb
|
112
119
|
- app/serializers/agilibox/serializers/xlsx.rb
|
@@ -121,6 +128,8 @@ files:
|
|
121
128
|
- config/locales/common.en.yml
|
122
129
|
- config/locales/common.fr.yml
|
123
130
|
- config/locales/dates.fr.yml
|
131
|
+
- config/locales/errors.en.yml
|
132
|
+
- config/locales/errors.fr.yml
|
124
133
|
- config/routes.rb
|
125
134
|
- db/migrate/20170502143330_enable_unaccent.rb
|
126
135
|
- features/support/ajax.rb
|
@@ -142,6 +151,7 @@ files:
|
|
142
151
|
- lib/agilibox/core_and_rails_ext.rb
|
143
152
|
- lib/agilibox/cucumber_config.rb
|
144
153
|
- lib/agilibox/engine.rb
|
154
|
+
- lib/agilibox/engine_file.rb
|
145
155
|
- lib/agilibox/form_back_url.rb
|
146
156
|
- lib/agilibox/version.rb
|
147
157
|
- lib/tasks/agilibox_tasks.rake
|