agilibox 1.5.13 → 1.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6f2f44dd973a477f962ee2e76805ca19f698a011d9000cedcd83aae30673dbaa
4
- data.tar.gz: 90ba13ccc6e08721384bb9abd608fe716166f695b7f09841abc5afa60eb1c2ab
3
+ metadata.gz: 21f228e7863e5274343cddda10e487d18fe613c5dc6bc520e2db03f0475cf7fa
4
+ data.tar.gz: b981d9c578d42bca6253c38bbb31690c3f0b417d1f43cbd23ed3a5ffac2e2bbd
5
5
  SHA512:
6
- metadata.gz: 5f81afa67332d05cf6ff56d78ac408d3fbeb8bbd01bcdbee99b8d2cc7547b8318192b4ea00ecb954f39e58e8ff90f484add167d7e1f09b4120862d0008192d25
7
- data.tar.gz: e6db62b2dfcd78066dec9982171b2c0a66fb02898a77e08edafd2d86b4d26e66d3bedd929457f4a7c048a0dcf416b3e282c70c0d4897ec5132abf537401aee1d
6
+ metadata.gz: cf9b9f217b374801aa1cff551b27dbe0454c82acd8608437918f9b3b301541bcddc40b8bc4d5d4353ba1d833a82ea3eca561c0a3111919836aafcc49e0144aef
7
+ data.tar.gz: 3559c5cc114505be9fac3391222f29bdde5fbe2c4f75fe385b80fc6c8713332dff084a60e73a0a45596c9d8b67e4fbf8ab532a6d341ac5a6a22f029dba9a717d
data/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  ## Next version
4
4
 
5
+ ## 1.6.0
6
+ - Remove `GetHTTP`
7
+ - I18n fixes
8
+ - Add `Agilibox::TapMethods`
9
+ - Filters CSS : add flex-wrap
10
+ - Add `bs_card` helper
11
+ - Add `:br` separator to `info` helper
12
+ - TextHelper refactors
13
+ - Update dummy app to Rails 5.2
14
+ - Replace AXLSX by SpreadsheetArchitect
15
+
5
16
  ## 1.5.13
6
17
  - Fix `info` helper with nested blank value
7
18
 
@@ -6,6 +6,7 @@
6
6
  padding: 8px
7
7
  box-shadow: none
8
8
  display: flex
9
+ flex-wrap: wrap
9
10
  flex-direction: initial
10
11
  background: #F0F0F0
11
12
 
@@ -1,4 +1,19 @@
1
1
  module Agilibox::BootstrapHelper
2
+ class << self
3
+ attr_writer :card_classes
4
+
5
+ # rubocop:disable Rails/HelperInstanceVariable
6
+ def card_classes
7
+ @card_classes ||= {
8
+ :card => "card",
9
+ :header => "card-header",
10
+ :body => "card-body",
11
+ :footer => "card-footer",
12
+ }
13
+ end
14
+ # rubocop:enable Rails/HelperInstanceVariable
15
+ end
16
+
2
17
  def bs_progress_bar(percentage)
3
18
  content_tag(:div, class: "progress") do
4
19
  content_tag(:div, class: "progress-bar", style: "width:#{percentage}%") do
@@ -6,4 +21,47 @@ module Agilibox::BootstrapHelper
6
21
  end
7
22
  end
8
23
  end
24
+
25
+ def bs_card( # rubocop:disable Metrics/ParameterLists
26
+ header: nil,
27
+ body: true,
28
+ footer: nil,
29
+ card_tag: :div,
30
+ header_tag: :div,
31
+ body_tag: :div,
32
+ footer_tag: :div,
33
+ card_class: nil,
34
+ header_class: nil,
35
+ body_class: nil,
36
+ footer_class: nil,
37
+ &block
38
+ )
39
+ global_classes = Agilibox::BootstrapHelper.card_classes
40
+ card_classes = ([global_classes[:card]] + card_class.to_s.split(" ")).compact.sort
41
+ header_classes = ([global_classes[:header]] + header_class.to_s.split(" ")).compact.sort
42
+ body_classes = ([global_classes[:body]] + body_class.to_s.split(" ")).compact.sort
43
+ footer_classes = ([global_classes[:footer]] + footer_class.to_s.split(" ")).compact.sort
44
+
45
+ if header
46
+ header_html = content_tag(header_tag, class: header_classes) { header }
47
+ else
48
+ header_html = "".html_safe
49
+ end
50
+
51
+ if body
52
+ body_html = content_tag(body_tag, class: body_classes) { capture(&block) }
53
+ else
54
+ body_html = capture(&block)
55
+ end
56
+
57
+ if footer
58
+ footer_html = content_tag(footer_tag, class: footer_classes) { footer }
59
+ else
60
+ footer_html = "".html_safe
61
+ end
62
+
63
+ content_tag(card_tag, class: card_classes) do
64
+ header_html + body_html + footer_html
65
+ end
66
+ end
9
67
  end
@@ -5,7 +5,7 @@ module Agilibox::TextHelper
5
5
 
6
6
  def nbsp(text = :no_argument)
7
7
  if text == :no_argument
8
- " "
8
+ "\u00A0"
9
9
  else
10
10
  text.to_s.gsub(" ", nbsp)
11
11
  end
@@ -21,13 +21,13 @@ module Agilibox::TextHelper
21
21
  I18n.t("number.currency.format.format")
22
22
  .gsub("%n", number(n))
23
23
  .gsub("%u", u)
24
- .tr(" ", "\u00A0")
24
+ .tr(" ", nbsp)
25
25
  end
26
26
 
27
27
  def percentage(n)
28
28
  return if n.nil?
29
29
 
30
- (number(n) + " %").tr(" ", "\u00A0")
30
+ number(n) + nbsp + "%"
31
31
  end
32
32
 
33
33
  def number(n)
@@ -44,7 +44,7 @@ module Agilibox::TextHelper
44
44
  opts[:delimiter] = I18n.t("number.format.delimiter")
45
45
  opts[:separator] = I18n.t("number.format.separator")
46
46
 
47
- number_with_precision(n, opts).tr(" ", "\u00A0")
47
+ number_with_precision(n, opts).tr(" ", nbsp)
48
48
  end
49
49
 
50
50
  def date(d, *args)
@@ -101,6 +101,7 @@ module Agilibox::TextHelper
101
101
  label = options[:label] || object.t(attribute)
102
102
  tag = options[:tag] || :div
103
103
  separator = options[:separator] || " : "
104
+ separator = " :<br/>".html_safe if separator == :br
104
105
  helper = options[:helper]
105
106
  i18n_key = "#{object.class.to_s.tableize.singularize}/#{attribute}"
106
107
  nested = I18n.t("activerecord.attributes.#{i18n_key}", default: "").is_a?(Hash)
@@ -0,0 +1,23 @@
1
+ module Agilibox::TapMethods
2
+ extend ActiveSupport::Concern
3
+
4
+ def tap_save!(options = {})
5
+ save!(options)
6
+ self
7
+ end
8
+
9
+ def tap_update!(attributes)
10
+ update!(attributes)
11
+ self
12
+ end
13
+
14
+ def tap_validate(context = nil)
15
+ validate(context)
16
+ self
17
+ end
18
+
19
+ def tap_validate!(context = nil)
20
+ validate!(context)
21
+ self
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ class Agilibox::Serializers::AXLSX < Agilibox::Serializers::Base
2
+ def render_inline
3
+ xlsx.to_stream.read.force_encoding("BINARY")
4
+ end
5
+
6
+ def render_file(file_path)
7
+ xlsx.serialize(file_path)
8
+ end
9
+
10
+ def xlsx
11
+ @xlsx ||= Axlsx::Package.new do |p|
12
+ p.workbook.add_worksheet do |sheet|
13
+ formatted_data.each do |line|
14
+ sheet.add_row(line)
15
+ end
16
+ end
17
+
18
+ p.use_shared_strings = true
19
+ end
20
+ end
21
+ end
@@ -6,6 +6,12 @@ class Agilibox::Serializers::Base
6
6
  @options = options
7
7
  end
8
8
 
9
+ def formatted_data
10
+ data.map do |line|
11
+ line.map { |value| self.class.format(value) }
12
+ end
13
+ end
14
+
9
15
  def render_inline
10
16
  raise NotImplementedError
11
17
  end
@@ -1,22 +1,11 @@
1
1
  class Agilibox::Serializers::XLSX < Agilibox::Serializers::Base
2
2
  def render_inline
3
- xlsx.to_stream.read.force_encoding("BINARY")
3
+ SpreadsheetArchitect.to_xlsx(data: formatted_data)
4
4
  end
5
5
 
6
6
  def render_file(file_path)
7
- xlsx.serialize(file_path)
8
- end
9
-
10
- def xlsx
11
- @xlsx ||= Axlsx::Package.new do |p|
12
- p.workbook.add_worksheet do |sheet|
13
- data.each do |line|
14
- values = line.map { |value| self.class.format(value) }
15
- sheet.add_row(values)
16
- end
17
- end
18
-
19
- p.use_shared_strings = true
7
+ File.open(file_path, "w+b") do |f|
8
+ f.write(render_inline)
20
9
  end
21
10
  end
22
11
  end
@@ -5,4 +5,5 @@
5
5
 
6
6
  .alert class="alert-#{type}"
7
7
  = message
8
- button.close data-dismiss="alert" aria-label="Fermer" = "×"
8
+ button.close data-dismiss="alert" aria-label=ta(:close) title=ta(:close)
9
+ = "×"
@@ -1,3 +1,3 @@
1
1
  module Agilibox
2
- VERSION = "1.5.13"
2
+ VERSION = "1.6.0"
3
3
  end
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.5.13
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - agilidée
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-25 00:00:00.000000000 Z
11
+ date: 2019-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails-i18n
@@ -115,7 +115,6 @@ files:
115
115
  - app/libs/agilibox/collection_update.rb
116
116
  - app/libs/agilibox/fcm/notifier.rb
117
117
  - app/libs/agilibox/fcm/request.rb
118
- - app/libs/agilibox/get_http.rb
119
118
  - app/libs/agilibox/initialize_with.rb
120
119
  - app/libs/agilibox/mini_model_serializer/serialize.rb
121
120
  - app/libs/agilibox/mini_model_serializer/serializer.rb
@@ -133,8 +132,10 @@ files:
133
132
  - app/models/concerns/agilibox/pluck_to_hash.rb
134
133
  - app/models/concerns/agilibox/polymorphic_id.rb
135
134
  - app/models/concerns/agilibox/search.rb
135
+ - app/models/concerns/agilibox/tap_methods.rb
136
136
  - app/models/concerns/agilibox/timestamp_helpers.rb
137
137
  - app/serializers/agilibox/serializers.rb
138
+ - app/serializers/agilibox/serializers/axlsx.rb
138
139
  - app/serializers/agilibox/serializers/base.rb
139
140
  - app/serializers/agilibox/serializers/xlsx.rb
140
141
  - app/services/agilibox/service.rb
@@ -1,55 +0,0 @@
1
- class Agilibox::GetHTTP < Agilibox::Service
2
- class Error < StandardError
3
- end
4
-
5
- EXCEPTIONS_TO_RERAISE = [
6
- IOError,
7
- Net::HTTPBadResponse,
8
- Net::HTTPExceptions,
9
- Net::HTTPHeaderSyntaxError,
10
- OpenSSL::SSL::SSLError,
11
- SocketError,
12
- SystemCallError,
13
- Timeout::Error,
14
- Zlib::Error,
15
- ]
16
-
17
- TIMEOUT = 10
18
-
19
- initialize_with :url
20
-
21
- def uri
22
- uri = URI(url.to_s)
23
- raise Error, "invalid URI type : #{uri.class}" unless uri.is_a?(URI::HTTP)
24
- uri
25
- end
26
-
27
- def response
28
- @response ||= fetch_response
29
- end
30
-
31
- def call
32
- response.body
33
- end
34
-
35
- private
36
-
37
- def fetch_response
38
- http_response = Timeout.timeout(TIMEOUT) do
39
- Net::HTTP.get_response(uri)
40
- end
41
-
42
- if http_response.code.start_with?("3")
43
- @url = http_response["Location"]
44
- return fetch_response
45
- end
46
-
47
- unless http_response.code.start_with?("2")
48
- raise Error, "invalid response code : #{http_response.code}"
49
- end
50
-
51
- http_response
52
- rescue *EXCEPTIONS_TO_RERAISE => e
53
- raise Error, e.message
54
- end
55
- end