cmdx 1.7.5 → 1.8.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.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/.cursor/prompts/docs.md +1 -1
  3. data/.cursor/prompts/rspec.md +1 -1
  4. data/CHANGELOG.md +20 -0
  5. data/LLM.md +53 -25
  6. data/docs/attributes/coercions.md +7 -5
  7. data/docs/attributes/definitions.md +13 -9
  8. data/docs/attributes/validations.md +9 -7
  9. data/docs/interruptions/halt.md +25 -4
  10. data/lib/cmdx/attribute.rb +7 -1
  11. data/lib/cmdx/coercions/hash.rb +4 -1
  12. data/lib/cmdx/errors.rb +1 -1
  13. data/lib/cmdx/executor.rb +4 -2
  14. data/lib/cmdx/log_formatters/logstash.rb +4 -4
  15. data/lib/cmdx/version.rb +1 -1
  16. data/lib/locales/af.yml +2 -2
  17. data/lib/locales/ar.yml +2 -2
  18. data/lib/locales/az.yml +2 -2
  19. data/lib/locales/be.yml +2 -2
  20. data/lib/locales/bg.yml +2 -2
  21. data/lib/locales/bn.yml +2 -2
  22. data/lib/locales/bs.yml +2 -2
  23. data/lib/locales/ca.yml +2 -2
  24. data/lib/locales/cnr.yml +2 -2
  25. data/lib/locales/cs.yml +2 -2
  26. data/lib/locales/cy.yml +2 -2
  27. data/lib/locales/da.yml +2 -2
  28. data/lib/locales/de.yml +2 -2
  29. data/lib/locales/dz.yml +2 -2
  30. data/lib/locales/el.yml +2 -2
  31. data/lib/locales/en.yml +2 -2
  32. data/lib/locales/eo.yml +2 -2
  33. data/lib/locales/es.yml +2 -2
  34. data/lib/locales/et.yml +2 -2
  35. data/lib/locales/eu.yml +2 -2
  36. data/lib/locales/fa.yml +2 -2
  37. data/lib/locales/fi.yml +2 -2
  38. data/lib/locales/fr.yml +2 -2
  39. data/lib/locales/fy.yml +2 -2
  40. data/lib/locales/gd.yml +2 -2
  41. data/lib/locales/gl.yml +2 -2
  42. data/lib/locales/he.yml +2 -2
  43. data/lib/locales/hi.yml +2 -2
  44. data/lib/locales/hr.yml +2 -2
  45. data/lib/locales/hu.yml +2 -2
  46. data/lib/locales/hy.yml +2 -2
  47. data/lib/locales/id.yml +2 -2
  48. data/lib/locales/is.yml +2 -2
  49. data/lib/locales/it.yml +2 -2
  50. data/lib/locales/ja.yml +2 -2
  51. data/lib/locales/ka.yml +2 -2
  52. data/lib/locales/kk.yml +2 -2
  53. data/lib/locales/km.yml +2 -2
  54. data/lib/locales/kn.yml +2 -2
  55. data/lib/locales/ko.yml +2 -2
  56. data/lib/locales/lb.yml +2 -2
  57. data/lib/locales/lo.yml +2 -2
  58. data/lib/locales/lt.yml +2 -2
  59. data/lib/locales/lv.yml +2 -2
  60. data/lib/locales/mg.yml +2 -2
  61. data/lib/locales/mk.yml +2 -2
  62. data/lib/locales/ml.yml +2 -2
  63. data/lib/locales/mn.yml +2 -2
  64. data/lib/locales/mr-IN.yml +2 -2
  65. data/lib/locales/ms.yml +2 -2
  66. data/lib/locales/nb.yml +2 -2
  67. data/lib/locales/ne.yml +2 -2
  68. data/lib/locales/nl.yml +2 -2
  69. data/lib/locales/nn.yml +2 -2
  70. data/lib/locales/oc.yml +2 -2
  71. data/lib/locales/or.yml +2 -2
  72. data/lib/locales/pa.yml +2 -2
  73. data/lib/locales/pl.yml +2 -2
  74. data/lib/locales/pt.yml +2 -2
  75. data/lib/locales/rm.yml +2 -2
  76. data/lib/locales/ro.yml +2 -2
  77. data/lib/locales/ru.yml +2 -2
  78. data/lib/locales/sc.yml +2 -2
  79. data/lib/locales/sk.yml +2 -2
  80. data/lib/locales/sl.yml +2 -2
  81. data/lib/locales/sq.yml +2 -2
  82. data/lib/locales/sr.yml +2 -2
  83. data/lib/locales/st.yml +2 -2
  84. data/lib/locales/sv.yml +2 -2
  85. data/lib/locales/sw.yml +2 -2
  86. data/lib/locales/ta.yml +2 -2
  87. data/lib/locales/te.yml +2 -2
  88. data/lib/locales/th.yml +2 -2
  89. data/lib/locales/tl.yml +2 -2
  90. data/lib/locales/tr.yml +2 -2
  91. data/lib/locales/tt.yml +2 -2
  92. data/lib/locales/ug.yml +2 -2
  93. data/lib/locales/uk.yml +2 -2
  94. data/lib/locales/ur.yml +2 -2
  95. data/lib/locales/uz.yml +2 -2
  96. data/lib/locales/vi.yml +2 -2
  97. data/lib/locales/wo.yml +2 -2
  98. data/lib/locales/zh-CN.yml +2 -2
  99. data/lib/locales/zh-HK.yml +2 -2
  100. data/lib/locales/zh-TW.yml +2 -2
  101. data/lib/locales/zh-YUE.yml +2 -2
  102. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0238294eeb6dd614280c7c386832d6780ea4005879c1162e7cacc4f97c54d5fd'
4
- data.tar.gz: 50c49904dbc84ffa7451a585e443c061b71576498ad00504ee87ae2efff07945
3
+ metadata.gz: 85aac46372133bca5764f5bfe14b1809e5a910aed2c449660d2d1123d79540f1
4
+ data.tar.gz: 4e377e2bd36936a83f8f244ddea45e2af05277daecbf5e49db76f4cb38fe46fd
5
5
  SHA512:
6
- metadata.gz: 7bac1596b901e86412d241f81c2c5fa331d2bf05b63c0ef3ee3691dd832c30fa8a187e6d8d4788fe9f3d1760bb8f7b1da62c2701a9a86bac6d9a4b5116f3e490
7
- data.tar.gz: 8794c3049d206178d68a4e9446d001668ee8b3a7902569dd1f66d05fe10b67f9cbc59e5264286ebfb075681415f430a3d69c40f181fdbe6f541caf4ec7fb4e56
6
+ metadata.gz: 38fec1c99ea4cb1cdd7639f65d85c76aeeac37fa1be3410344a2dda709e2a1f34cdf26d3b50cc7c7309a7234c756def0db8e2feb083972783018f6f4fc2fade1
7
+ data.tar.gz: d08526598534fddb102297b1312304696bb4ffd6783d3549f7b4332cd83c8895cda84faeb1d427b14c8f60ae8a30839e983c1a649dcace3da1ec6a6978ab079d
@@ -7,6 +7,6 @@ Update the active tab using the following guidelines:
7
7
  - Examples should be concise, non-repetitive, and realistic
8
8
  - Update any pre-existing documentation to match stated rules
9
9
  - Examples should not cross boundaries or focus
10
- - Docs must cover both typical use cases, including invalid inputs and error conditions
10
+ - Docs must cover both typical use cases, including Invalid and error conditions
11
11
  - Use GitHub flavored markdown, including alerts to emphasize critical information (https://github.com/orgs/community/discussions/16925)
12
12
  - Optimize for LLM's including coding and AI agents
@@ -18,7 +18,7 @@ Add tests for the active tab using the following guidelines:
18
18
  - Use clear and descriptive names for describe, context, and it blocks
19
19
  - Prefer the expect syntax for assertions to improve readability
20
20
  - Keep test code concise; avoid unnecessary complexity or duplication
21
- - Tests must cover both typical cases and edge cases, including invalid inputs and error conditions
21
+ - Tests must cover both typical cases and edge cases, including Invalid and error conditions
22
22
  - Consider all possible scenarios for each method or behavior and ensure they are tested
23
23
  - Do NOT include integration or real world examples
24
24
  - Verify all specs are passing
data/CHANGELOG.md CHANGED
@@ -4,8 +4,28 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [TODO]
8
+ - Update exceptions with more info on how to fix the issue
9
+ - Add trnasform option to attributes
10
+ - Add option to output failure backtraces
11
+ - Add durability (retries) to execution
12
+ - N-retries (3 default)
13
+ - Backoff strategy
14
+ - On specific errors
15
+
7
16
  ## [UNRELEASED]
8
17
 
18
+ - N/A
19
+
20
+ ## [1.8.0] - 2025-09-22
21
+
22
+ ### Changes
23
+ - Generalize locale values for fault `invalid` and `unspecified`
24
+ - Nest attribute error messages under `error` key within metadata
25
+ - Reordered logstash formatter keys
26
+ - Improved already defined error message
27
+ - Hash coercion for `nil` returns `{}`
28
+
9
29
  ## [1.7.5] - 2025-09-10
10
30
 
11
31
  ### Added
data/LLM.md CHANGED
@@ -783,7 +783,7 @@ result = ProcessInventory.execute(inventory_id: 456)
783
783
  result.status #=> "skipped"
784
784
 
785
785
  # Without a reason
786
- result.reason #=> "No reason given"
786
+ result.reason #=> "Unspecified"
787
787
 
788
788
  # With a reason
789
789
  result.reason #=> "Warehouse closed"
@@ -818,7 +818,7 @@ result = ProcessRefund.execute(refund_id: 789)
818
818
  result.status #=> "failed"
819
819
 
820
820
  # Without a reason
821
- result.reason #=> "No reason given"
821
+ result.reason #=> "Unspecified"
822
822
 
823
823
  # With a reason
824
824
  result.reason #=> "Refund period has expired"
@@ -938,8 +938,28 @@ skip!("Paused")
938
938
  fail!("Unsupported")
939
939
 
940
940
  # Bad: Default, cannot determine reason
941
- skip! #=> "No reason given"
942
- fail! #=> "No reason given"
941
+ skip! #=> "Unspecified"
942
+ fail! #=> "Unspecified"
943
+ ```
944
+
945
+ ## Manual Errors
946
+
947
+ There are rare cases where you need to manually assign errors.
948
+
949
+ > [!IMPORTANT]
950
+ > Keep in mind you will still need to initiate a fault if a stoppage of work is required.
951
+
952
+ ```ruby
953
+ class ProcessRenewal < CMDx::Task
954
+ def work
955
+ if document.nonrenewable?
956
+ errors.add(:document, "not renewable")
957
+ fail!("document could not be renewed")
958
+ else
959
+ document.renew!
960
+ end
961
+ end
962
+ end
943
963
  ```
944
964
 
945
965
  ---
@@ -1754,12 +1774,14 @@ result = ConfigureServer.execute(server_id: "srv-001")
1754
1774
 
1755
1775
  result.state #=> "interrupted"
1756
1776
  result.status #=> "failed"
1757
- result.reason #=> "Invalid inputs"
1777
+ result.reason #=> "Invalid"
1758
1778
  result.metadata #=> {
1759
- # full_message: "environment is required. network_config is required.",
1760
- # messages: {
1761
- # environment: ["is required"],
1762
- # network_config: ["is required"]
1779
+ # errors: {
1780
+ # full_message: "environment is required. network_config is required.",
1781
+ # messages: {
1782
+ # environment: ["is required"],
1783
+ # network_config: ["is required"]
1784
+ # }
1763
1785
  # }
1764
1786
  # }
1765
1787
 
@@ -1772,11 +1794,13 @@ result = ConfigureServer.execute(
1772
1794
 
1773
1795
  result.state #=> "interrupted"
1774
1796
  result.status #=> "failed"
1775
- result.reason #=> "Invalid inputs"
1797
+ result.reason #=> "Invalid"
1776
1798
  result.metadata #=> {
1777
- # full_message: "port is required.",
1778
- # messages: {
1779
- # port: ["is required"]
1799
+ # errors: {
1800
+ # full_message: "port is required.",
1801
+ # messages: {
1802
+ # port: ["is required"]
1803
+ # }
1780
1804
  # }
1781
1805
  # }
1782
1806
  ```
@@ -2000,12 +2024,14 @@ result = AnalyzePerformance.execute(
2000
2024
 
2001
2025
  result.state #=> "interrupted"
2002
2026
  result.status #=> "failed"
2003
- result.reason #=> "Invalid inputs"
2027
+ result.reason #=> "Invalid"
2004
2028
  result.metadata #=> {
2005
- # full_message: "iterations could not coerce into an integer. score could not coerce into one of: float, big_decimal.",
2006
- # messages: {
2007
- # iterations: ["could not coerce into an integer"],
2008
- # score: ["could not coerce into one of: float, big_decimal"]
2029
+ # errors: {
2030
+ # full_message: "iterations could not coerce into an integer. score could not coerce into one of: float, big_decimal.",
2031
+ # messages: {
2032
+ # iterations: ["could not coerce into an integer"],
2033
+ # score: ["could not coerce into one of: float, big_decimal"]
2034
+ # }
2009
2035
  # }
2010
2036
  # }
2011
2037
  ```
@@ -2294,14 +2320,16 @@ result = CreateProject.execute(
2294
2320
 
2295
2321
  result.state #=> "interrupted"
2296
2322
  result.status #=> "failed"
2297
- result.reason #=> "Invalid inputs"
2323
+ result.reason #=> "Invalid"
2298
2324
  result.metadata #=> {
2299
- # full_message: "project_name is too short (minimum is 3 characters). budget must be greater than 1000. priority is not included in the list. contact_email is invalid.",
2300
- # messages: {
2301
- # project_name: ["is too short (minimum is 3 characters)"],
2302
- # budget: ["must be greater than 1000"],
2303
- # priority: ["is not included in the list"],
2304
- # contact_email: ["is invalid"]
2325
+ # errors: {
2326
+ # full_message: "project_name is too short (minimum is 3 characters). budget must be greater than 1000. priority is not included in the list. contact_email is invalid.",
2327
+ # messages: {
2328
+ # project_name: ["is too short (minimum is 3 characters)"],
2329
+ # budget: ["must be greater than 1000"],
2330
+ # priority: ["is not included in the list"],
2331
+ # contact_email: ["is invalid"]
2332
+ # }
2305
2333
  # }
2306
2334
  # }
2307
2335
  ```
@@ -149,12 +149,14 @@ result = AnalyzePerformance.execute(
149
149
 
150
150
  result.state #=> "interrupted"
151
151
  result.status #=> "failed"
152
- result.reason #=> "Invalid inputs"
152
+ result.reason #=> "Invalid"
153
153
  result.metadata #=> {
154
- # full_message: "iterations could not coerce into an integer. score could not coerce into one of: float, big_decimal.",
155
- # messages: {
156
- # iterations: ["could not coerce into an integer"],
157
- # score: ["could not coerce into one of: float, big_decimal"]
154
+ # errors: {
155
+ # full_message: "iterations could not coerce into an integer. score could not coerce into one of: float, big_decimal.",
156
+ # messages: {
157
+ # iterations: ["could not coerce into an integer"],
158
+ # score: ["could not coerce into one of: float, big_decimal"]
159
+ # }
158
160
  # }
159
161
  # }
160
162
  ```
@@ -250,12 +250,14 @@ result = ConfigureServer.execute(server_id: "srv-001")
250
250
 
251
251
  result.state #=> "interrupted"
252
252
  result.status #=> "failed"
253
- result.reason #=> "Invalid inputs"
253
+ result.reason #=> "Invalid"
254
254
  result.metadata #=> {
255
- # full_message: "environment is required. network_config is required.",
256
- # messages: {
257
- # environment: ["is required"],
258
- # network_config: ["is required"]
255
+ # errors: {
256
+ # full_message: "environment is required. network_config is required.",
257
+ # messages: {
258
+ # environment: ["is required"],
259
+ # network_config: ["is required"]
260
+ # }
259
261
  # }
260
262
  # }
261
263
 
@@ -268,11 +270,13 @@ result = ConfigureServer.execute(
268
270
 
269
271
  result.state #=> "interrupted"
270
272
  result.status #=> "failed"
271
- result.reason #=> "Invalid inputs"
273
+ result.reason #=> "Invalid"
272
274
  result.metadata #=> {
273
- # full_message: "port is required.",
274
- # messages: {
275
- # port: ["is required"]
275
+ # errors: {
276
+ # full_message: "port is required.",
277
+ # messages: {
278
+ # port: ["is required"]
279
+ # }
276
280
  # }
277
281
  # }
278
282
  ```
@@ -294,14 +294,16 @@ result = CreateProject.execute(
294
294
 
295
295
  result.state #=> "interrupted"
296
296
  result.status #=> "failed"
297
- result.reason #=> "Invalid inputs"
297
+ result.reason #=> "Invalid"
298
298
  result.metadata #=> {
299
- # full_message: "project_name is too short (minimum is 3 characters). budget must be greater than 1000. priority is not included in the list. contact_email is invalid.",
300
- # messages: {
301
- # project_name: ["is too short (minimum is 3 characters)"],
302
- # budget: ["must be greater than 1000"],
303
- # priority: ["is not included in the list"],
304
- # contact_email: ["is invalid"]
299
+ # errors: {
300
+ # full_message: "project_name is too short (minimum is 3 characters). budget must be greater than 1000. priority is not included in the list. contact_email is invalid.",
301
+ # messages: {
302
+ # project_name: ["is too short (minimum is 3 characters)"],
303
+ # budget: ["must be greater than 1000"],
304
+ # priority: ["is not included in the list"],
305
+ # contact_email: ["is invalid"]
306
+ # }
305
307
  # }
306
308
  # }
307
309
  ```
@@ -12,6 +12,7 @@ Halting stops task execution with explicit intent signaling. Tasks provide two p
12
12
  - [Non-bang execution](#non-bang-execution)
13
13
  - [Bang execution](#bang-execution)
14
14
  - [Best Practices](#best-practices)
15
+ - [Manual Errors](#manual-errors)
15
16
 
16
17
  ## Skipping
17
18
 
@@ -45,7 +46,7 @@ result = ProcessInventory.execute(inventory_id: 456)
45
46
  result.status #=> "skipped"
46
47
 
47
48
  # Without a reason
48
- result.reason #=> "No reason given"
49
+ result.reason #=> "Unspecified"
49
50
 
50
51
  # With a reason
51
52
  result.reason #=> "Warehouse closed"
@@ -80,7 +81,7 @@ result = ProcessRefund.execute(refund_id: 789)
80
81
  result.status #=> "failed"
81
82
 
82
83
  # Without a reason
83
- result.reason #=> "No reason given"
84
+ result.reason #=> "Unspecified"
84
85
 
85
86
  # With a reason
86
87
  result.reason #=> "Refund period has expired"
@@ -200,8 +201,28 @@ skip!("Paused")
200
201
  fail!("Unsupported")
201
202
 
202
203
  # Bad: Default, cannot determine reason
203
- skip! #=> "No reason given"
204
- fail! #=> "No reason given"
204
+ skip! #=> "Unspecified"
205
+ fail! #=> "Unspecified"
206
+ ```
207
+
208
+ ## Manual Errors
209
+
210
+ There are rare cases where you need to manually assign errors.
211
+
212
+ > [!IMPORTANT]
213
+ > Keep in mind you will still need to initiate a fault if a stoppage of work is required.
214
+
215
+ ```ruby
216
+ class ProcessRenewal < CMDx::Task
217
+ def work
218
+ if document.nonrenewable?
219
+ errors.add(:document, "not renewable")
220
+ fail!("document could not be renewed")
221
+ else
222
+ document.renew!
223
+ end
224
+ end
225
+ end
205
226
  ```
206
227
 
207
228
  ---
@@ -212,7 +212,13 @@ module CMDx
212
212
  #
213
213
  # @raise [RuntimeError] When the method name is already defined on the task
214
214
  def define_and_verify
215
- raise "#{task.class.name}##{method_name} already defined" if task.respond_to?(method_name, true)
215
+ if task.respond_to?(method_name, true)
216
+ raise <<~MESSAGE.gsub!(/[[:space:]]+/, " ").strip!
217
+ #{task.class.name}##{method_name} already defined.
218
+ Use :as, :prefix, or :suffix option to avoid
219
+ conflicts with existing methods
220
+ MESSAGE
221
+ end
216
222
 
217
223
  attribute_value = AttributeValue.new(self)
218
224
  attribute_value.generate
@@ -5,6 +5,7 @@ module CMDx
5
5
  # Coerces various input types into Hash objects
6
6
  #
7
7
  # Supports conversion from:
8
+ # - Nil values (converted to empty Hash)
8
9
  # - Hash objects (returned as-is)
9
10
  # - Array objects (converted using Hash[*array])
10
11
  # - JSON strings starting with "{" (parsed into Hash)
@@ -30,7 +31,9 @@ module CMDx
30
31
  # @example Coerce from JSON string
31
32
  # Hash.call('{"key": "value"}') # => {"key" => "value"}
32
33
  def call(value, options = {})
33
- if value.is_a?(::Hash)
34
+ if value.nil?
35
+ {}
36
+ elsif value.is_a?(::Hash)
34
37
  value
35
38
  elsif value.is_a?(::Array)
36
39
  ::Hash[*value]
data/lib/cmdx/errors.rb CHANGED
@@ -48,7 +48,7 @@ module CMDx
48
48
  !messages[attribute].empty?
49
49
  end
50
50
 
51
- # Convert errors to a hash format with arrays of fullmessages.
51
+ # Convert errors to a hash format with arrays of full messages.
52
52
  #
53
53
  # @return [Hash{Symbol => Array<String>}] Hash with attribute keys and message arrays
54
54
  #
data/lib/cmdx/executor.rb CHANGED
@@ -144,8 +144,10 @@ module CMDx
144
144
 
145
145
  task.result.fail!(
146
146
  Locale.t("cmdx.faults.invalid"),
147
- full_message: task.errors.to_s,
148
- messages: task.errors.to_h
147
+ errors: {
148
+ full_message: task.errors.to_s,
149
+ messages: task.errors.to_h
150
+ }
149
151
  )
150
152
  end
151
153
 
@@ -21,15 +21,15 @@ module CMDx
21
21
  #
22
22
  # @example Basic usage
23
23
  # logger_formatter.call("INFO", Time.now, "MyApp", "User logged in")
24
- # # => '{"@version":"1","@timestamp":"2024-01-15T10:30:45.123456Z","severity":"INFO","progname":"MyApp","pid":12345,"message":"User logged in"}\n'
24
+ # # => '{"severity":"INFO","progname":"MyApp","pid":12345,"message":"User logged in","@version":"1","@timestamp":"2024-01-15T10:30:45.123456Z"}\n'
25
25
  def call(severity, time, progname, message)
26
26
  hash = {
27
- "@version" => "1",
28
- "@timestamp" => time.utc.iso8601(6),
29
27
  severity:,
30
28
  progname:,
31
29
  pid: Process.pid,
32
- message: Utils::Format.to_log(message)
30
+ message: Utils::Format.to_log(message),
31
+ "@version" => "1",
32
+ "@timestamp" => time.utc.iso8601(6)
33
33
  }
34
34
 
35
35
  ::JSON.dump(hash) << "\n"
data/lib/cmdx/version.rb CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  module CMDx
4
4
 
5
- VERSION = "1.7.5"
5
+ VERSION = "1.8.0"
6
6
 
7
7
  end
data/lib/locales/af.yml CHANGED
@@ -9,8 +9,8 @@ af:
9
9
  into_any: "kon nie na een van: %{types} omskep word nie"
10
10
  unknown: "onbekende %{type} omskep tipe"
11
11
  faults:
12
- invalid: "Ongeldige insette"
13
- unspecified: "Geen rede gegee nie"
12
+ invalid: "Ongeldig"
13
+ unspecified: "Ongespesifiseer"
14
14
  types:
15
15
  array: "skikking"
16
16
  big_decimal: "groot desimale"
data/lib/locales/ar.yml CHANGED
@@ -9,8 +9,8 @@ ar:
9
9
  into_any: "لا يمكن تحويله إلى واحد من: %{types}"
10
10
  unknown: "نوع تحويل %{type} غير معروف"
11
11
  faults:
12
- invalid: "مدخلات غير صالحة"
13
- unspecified: "لم يتم تقديم سبب"
12
+ invalid: "غير صالح"
13
+ unspecified: "غير محدد"
14
14
  types:
15
15
  array: "مصفوفة"
16
16
  big_decimal: "عدد عشري كبير"
data/lib/locales/az.yml CHANGED
@@ -9,8 +9,8 @@ az:
9
9
  into_any: "aşağıdakılardan birinə çevrilə bilmədi: %{types}"
10
10
  unknown: "naməlum %{type} çevrilmə tipi"
11
11
  faults:
12
- invalid: "Etibarsız girişlər"
13
- unspecified: "Səbəb göstərilməyib"
12
+ invalid: "Etibarsız"
13
+ unspecified: "Göstərilməyib"
14
14
  types:
15
15
  array: "massiv"
16
16
  big_decimal: "böyük onluq"
data/lib/locales/be.yml CHANGED
@@ -9,8 +9,8 @@ be:
9
9
  into_any: "не ўдалося пераўтварыць у адзін з: %{types}"
10
10
  unknown: "невядомы тып пераўтварэння %{type}"
11
11
  faults:
12
- invalid: "Няправільныя ўваходныя даныя"
13
- unspecified: "Прычына не паказана"
12
+ invalid: "Няправільныя"
13
+ unspecified: "Не паказана"
14
14
  types:
15
15
  array: "масіў"
16
16
  big_decimal: "вялікае дзесятковае лік"
data/lib/locales/bg.yml CHANGED
@@ -9,8 +9,8 @@ bg:
9
9
  into_any: "не може да бъде преобразуван в един от: %{types}"
10
10
  unknown: "неизвестен тип преобразуване %{type}"
11
11
  faults:
12
- invalid: "Невалидни входни данни"
13
- unspecified: "Не е посочена причина"
12
+ invalid: "Невалидни"
13
+ unspecified: "Не е посочена"
14
14
  types:
15
15
  array: "масив"
16
16
  big_decimal: "голямо десетично число"
data/lib/locales/bn.yml CHANGED
@@ -9,8 +9,8 @@ bn:
9
9
  into_any: "নিম্নলিখিতগুলির মধ্যে একটিতে রূপান্তর করা যায়নি: %{types}"
10
10
  unknown: "অজানা %{type} রূপান্তর প্রকার"
11
11
  faults:
12
- invalid: "অবৈধ ইনপুট"
13
- unspecified: "কোন কারণ দেওয়া হয়নি"
12
+ invalid: "অবৈধ"
13
+ unspecified: "অনির্দিষ্ট"
14
14
  types:
15
15
  array: "অ্যারে"
16
16
  big_decimal: "বড় দশমিক"
data/lib/locales/bs.yml CHANGED
@@ -9,8 +9,8 @@ bs:
9
9
  into_any: "nije mogao biti pretvoren u jedan od: %{types}"
10
10
  unknown: "nepoznati tip pretvorbe %{type}"
11
11
  faults:
12
- invalid: "Neispravni ulazi"
13
- unspecified: "Nije naveden razlog"
12
+ invalid: "Neispravni"
13
+ unspecified: "Nije naveden"
14
14
  types:
15
15
  array: "niz"
16
16
  big_decimal: "veliki decimalni broj"
data/lib/locales/ca.yml CHANGED
@@ -9,8 +9,8 @@ ca:
9
9
  into_any: "no es va poder convertir a un de: %{types}"
10
10
  unknown: "tipus de conversió %{type} desconegut"
11
11
  faults:
12
- invalid: "Entrades no vàlides"
13
- unspecified: "No s'ha donat cap raó"
12
+ invalid: "No vàlides"
13
+ unspecified: "No especificat"
14
14
  types:
15
15
  array: "array"
16
16
  big_decimal: "decimal gran"
data/lib/locales/cnr.yml CHANGED
@@ -9,8 +9,8 @@ cnr:
9
9
  into_any: "nije mogao konvertovati u jedan od: %{types}"
10
10
  unknown: "nepoznati %{type} tip konverzije"
11
11
  faults:
12
- invalid: "Neispravni ulazi"
13
- unspecified: "Nije dat razlog"
12
+ invalid: "Neispravni"
13
+ unspecified: "Nije dat"
14
14
  types:
15
15
  array: "niz"
16
16
  big_decimal: "veliki decimalni"
data/lib/locales/cs.yml CHANGED
@@ -9,8 +9,8 @@ cs:
9
9
  into_any: "nelze převést na jeden z: %{types}"
10
10
  unknown: "neznámý typ převodu %{type}"
11
11
  faults:
12
- invalid: "Neplatné vstupy"
13
- unspecified: "Není uveden důvod"
12
+ invalid: "Neplatné"
13
+ unspecified: "Neurčeno"
14
14
  types:
15
15
  array: "pole"
16
16
  big_decimal: "velké desetinné číslo"
data/lib/locales/cy.yml CHANGED
@@ -9,8 +9,8 @@ cy:
9
9
  into_any: "ni allwyd ei drawsnewid i un o: %{types}"
10
10
  unknown: "math anhysbys o drawsnewid %{type}"
11
11
  faults:
12
- invalid: "Mewnbynnau annilys"
13
- unspecified: "Dim rheswm wedi'i roi"
12
+ invalid: "Annilys"
13
+ unspecified: "Anhebgor"
14
14
  types:
15
15
  array: "arae"
16
16
  big_decimal: "degol mawr"
data/lib/locales/da.yml CHANGED
@@ -9,8 +9,8 @@ da:
9
9
  into_any: "kunne ikke konverteres til en af: %{types}"
10
10
  unknown: "ukendt %{type} konverteringstype"
11
11
  faults:
12
- invalid: "Ugyldige input"
13
- unspecified: "Ingen grund givet"
12
+ invalid: "Ugyldige"
13
+ unspecified: "Uspecificeret"
14
14
  types:
15
15
  array: "array"
16
16
  big_decimal: "stort decimaltal"
data/lib/locales/de.yml CHANGED
@@ -9,8 +9,8 @@ de:
9
9
  into_any: "konnte nicht in einen von: %{types} umgewandelt werden"
10
10
  unknown: "unbekannter %{type} Umwandlungstyp"
11
11
  faults:
12
- invalid: "Ungültige Eingaben"
13
- unspecified: "Kein Grund angegeben"
12
+ invalid: "Ungültig"
13
+ unspecified: "Nicht angegeben"
14
14
  types:
15
15
  array: "Array"
16
16
  big_decimal: "große Dezimalzahl"
data/lib/locales/dz.yml CHANGED
@@ -9,8 +9,8 @@ dz:
9
9
  into_any: "འདི་ཚོའི་ནང་ནས་གཅིག་ལ་བསྒྱུར་མ་ཐུབ། %{types}"
10
10
  unknown: "མ་ཤེས་པའི་ %{type} བསྒྱུར་པའི་རིགས།"
11
11
  faults:
12
- invalid: "ཆ་རྐྱེན་མི་ཆོག་པའི་འཇུག་ཆོག"
13
- unspecified: "རྒྱུ་མཚན་མ་བཟུང་།"
12
+ invalid: "ཆ་རྐྱེན་མི་ཆོག"
13
+ unspecified: "མ་བཟུང་།"
14
14
  types:
15
15
  array: "ཐིག་ཕྲེང་།"
16
16
  big_decimal: "ཆེ་བའི་བཅུ་ཆ།"
data/lib/locales/el.yml CHANGED
@@ -9,8 +9,8 @@ el:
9
9
  into_any: "δεν μπόρεσε να μετατραπεί σε ένα από: %{types}"
10
10
  unknown: "άγνωστος τύπος μετατροπής %{type}"
11
11
  faults:
12
- invalid: "Μη έγκυρες εισόδους"
13
- unspecified: "Δεν δόθηκε λόγος"
12
+ invalid: "Μη έγκυρες"
13
+ unspecified: "Απροσδιόριστο"
14
14
  types:
15
15
  array: "πίνακας"
16
16
  big_decimal: "μεγάλος δεκαδικός"
data/lib/locales/en.yml CHANGED
@@ -9,8 +9,8 @@ en:
9
9
  into_any: "could not coerce into one of: %{types}"
10
10
  unknown: "unknown %{type} coercion type"
11
11
  faults:
12
- invalid: "Invalid inputs"
13
- unspecified: "No reason given"
12
+ invalid: "Invalid"
13
+ unspecified: "Unspecified"
14
14
  types:
15
15
  array: "array"
16
16
  big_decimal: "big decimal"
data/lib/locales/eo.yml CHANGED
@@ -9,8 +9,8 @@ eo:
9
9
  into_any: "ne povis esti konvertita al unu el: %{types}"
10
10
  unknown: "nekonata %{type} konverta tipo"
11
11
  faults:
12
- invalid: "Nevalidaj enigoj"
13
- unspecified: "Neniu kialo donita"
12
+ invalid: "Nevalidaj"
13
+ unspecified: "Nespecifita"
14
14
  types:
15
15
  array: "tabelo"
16
16
  big_decimal: "granda dekuma"
data/lib/locales/es.yml CHANGED
@@ -9,8 +9,8 @@ es:
9
9
  into_any: "no se pudo convertir en uno de: %{types}"
10
10
  unknown: "tipo de conversión %{type} desconocido"
11
11
  faults:
12
- invalid: "Entradas inválidas"
13
- unspecified: "Sin razón especificada"
12
+ invalid: "Inválidas"
13
+ unspecified: "No especificada"
14
14
  types:
15
15
  array: "array"
16
16
  big_decimal: "decimal grande"