hanami-utils 1.0.0.beta2 → 1.0.0.beta3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0dea1058f5a2e36476b0cce2df0003d62e5b1d59
4
- data.tar.gz: 604c338783e3894f7f858b405591690ec29fbac0
3
+ metadata.gz: 627e0486c780c11f9ce000f6d80b2a8b691b5e45
4
+ data.tar.gz: 033e15d05ac40fb8ad76174108a4b54b0aeb21ca
5
5
  SHA512:
6
- metadata.gz: b3044e152c6c5ddafb61facaa9a684f6490cf84c607612ad9c17e3e342b71003a3c734dfb455629548f531cf4a738ac08941c053c1d0439f5ff391661385b08e
7
- data.tar.gz: 4f8dc8490e07396d49dbba0655df548e6ce617a7c0414b834235ce99a53ccaec9bcc3461db79201c1b2615296eebb3103c8c0c2e33cf20224e0abef71d84ae9d
6
+ metadata.gz: 8bc330a6116872fb4a8d072d74fe99d8b961b1c78cdb4e9237b4153283148e704fa3a0d60369b23cb3b733076b7e200fe4ddaafa908a928cc12c3e6e3d1f92e5
7
+ data.tar.gz: 68670773d3fa4ef2b4d30030fdeb08f52d752a46366c94dd9f8abf0713d95ed91fc33b524ef7c3998bc274bee677a18fe32944f56b34e70dcc431a7a00d0766b
@@ -1,6 +1,15 @@
1
1
  # Hanami::Utils
2
2
  Ruby core extentions and class utilities for Hanami
3
3
 
4
+ ## v1.0.0.beta3 - 2017-03-17
5
+ ### Fixed
6
+ - [Luca Guidi] Use `$stdout` instead of `STDOUT` as default stream for `Hanami::Logger`
7
+
8
+ ### Changed
9
+ - [Luca Guidi] Removed `Utils::Attributes`
10
+ - [Luca Guidi] Removed deprecated `Hanami::Interactor::Result#failing?`
11
+ - [Luca Guidi] Removed deprecated `Utils::Json.load` and `.dump`
12
+
4
13
  ## v1.0.0.beta2 - 2017-03-02
5
14
  ### Changed
6
15
  - [Anton Davydov] Made `Utils::Blank` private API
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright © 2014-2016 Luca Guidi
1
+ Copyright © 2014-2017 Luca Guidi
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -55,10 +55,6 @@ Standardized Service Object with small interface and rich returning result. [[AP
55
55
 
56
56
  Enhanced version of Ruby's `Logger`. [[API doc](http://www.rubydoc.info/gems/hanami-utils/Hanami/Logger)]
57
57
 
58
- ### Hanami::Utils::Attributes
59
-
60
- Set of attributes with indifferent access. [[API doc](http://www.rubydoc.info/gems/hanami-utils/Hanami/Utils/Attributes)]
61
-
62
58
  ### Hanami::Utils::BasicObject
63
59
 
64
60
  Enhanced version of Ruby's `BasicObject`. [[API doc](http://www.rubydoc.info/gems/hanami-utils/Hanami/Utils/BasicObject)]
@@ -134,6 +130,6 @@ __Hanami::Utils__ uses [Semantic Versioning 2.0.0](http://semver.org)
134
130
 
135
131
  ## Copyright
136
132
 
137
- Copyright © 2014-2016 Luca Guidi – Released under MIT License
133
+ Copyright © 2014-2017 Luca Guidi – Released under MIT License
138
134
 
139
135
  This project was formerly known as Lotus (`lotus-utils`).
@@ -1,7 +1,6 @@
1
1
  require 'hanami/utils/basic_object'
2
2
  require 'hanami/utils/class_attribute'
3
3
  require 'hanami/utils/hash'
4
- require 'hanami/utils/deprecation'
5
4
 
6
5
  module Hanami
7
6
  # Hanami Interactor
@@ -54,18 +53,6 @@ module Hanami
54
53
  # @since 0.3.5
55
54
  alias success? successful?
56
55
 
57
- # Check if the current status is not successful
58
- #
59
- # @return [TrueClass,FalseClass] the result of the check
60
- #
61
- # @since 0.9.2
62
- #
63
- # @deprecated Use {#failure?} instead
64
- def failing?
65
- Utils::Deprecation.new("`Hanami::Interactor::Result#failing?' is deprecated, please use `Hanami::Interactor::Result#failure?'")
66
- failure?
67
- end
68
-
69
56
  # Check if the current status is not successful
70
57
  #
71
58
  # @return [TrueClass,FalseClass] the result of the check
@@ -39,12 +39,12 @@ module Hanami
39
39
  # And if you want to use custom formatter you need create new class inherited from
40
40
  # `Formatter` class and define `_format` private method like this:
41
41
  #
42
- # class CustomFormatter < Formatter
43
- # private
44
- # def _format(hash)
45
- # # ...
42
+ # class CustomFormatter < Formatter
43
+ # private
44
+ # def _format(hash)
45
+ # # ...
46
+ # end
46
47
  # end
47
- # end
48
48
  #
49
49
  # @since 0.5.0
50
50
  #
@@ -128,11 +128,13 @@ module Hanami
128
128
  end.tap { |f| f.application_name = application_name }
129
129
  end
130
130
 
131
+ # @api private
131
132
  def self.inherited(subclass)
132
133
  super
133
134
  subclasses << subclass
134
135
  end
135
136
 
137
+ # @api private
136
138
  def self.eligible?(name)
137
139
  name == :default
138
140
  end
@@ -192,6 +194,7 @@ module Hanami
192
194
  result
193
195
  end
194
196
 
197
+ # @api private
195
198
  def _format_error(result, hash)
196
199
  result << " #{hash[:error]}:" if hash.key?(:error)
197
200
  result << " #{hash[:message]}#{NEW_LINE}"
@@ -211,6 +214,7 @@ module Hanami
211
214
  # @since 0.5.0
212
215
  # @api private
213
216
  class JSONFormatter < Formatter
217
+ # @api private
214
218
  def self.eligible?(name)
215
219
  name == :json
216
220
  end
@@ -253,10 +257,10 @@ module Hanami
253
257
  # tagging purposes
254
258
  #
255
259
  # @param stream [String, IO, StringIO, Pathname] an optional log stream. This is a filename
256
- # (String) or IO object (typically STDOUT, STDERR, or an open file).
260
+ # (String) or IO object (typically `$stdout`, `$stderr`, or an open file).
257
261
  #
258
262
  # @since 0.5.0
259
- def initialize(application_name = nil, stream: STDOUT, level: DEBUG, formatter: nil)
263
+ def initialize(application_name = nil, stream: $stdout, level: DEBUG, formatter: nil)
260
264
  super(stream)
261
265
 
262
266
  @level = _level(level)
@@ -1,6 +1,7 @@
1
1
  module Hanami
2
2
  module Utils
3
3
  # Checks for blank
4
+ #
4
5
  # @since 0.8.0
5
6
  # @api private
6
7
  class Blank
@@ -170,6 +170,7 @@ module Hanami
170
170
 
171
171
  private
172
172
 
173
+ # @api private
173
174
  def callables(callbacks, block)
174
175
  callbacks.push(block) if block
175
176
  callbacks.map { |c| Factory.fabricate(c) }
@@ -179,7 +180,7 @@ module Hanami
179
180
  # Callback factory
180
181
  #
181
182
  # @since 0.1.0
182
- # @private
183
+ # @api private
183
184
  class Factory
184
185
  # Instantiates a `Callback` according to if it responds to #call.
185
186
  #
@@ -213,8 +214,9 @@ module Hanami
213
214
  # It wraps an object that responds to #call
214
215
  #
215
216
  # @since 0.1.0
216
- # @private
217
+ # @api private
217
218
  class Callback
219
+ # @api private
218
220
  attr_reader :callback
219
221
 
220
222
  # Initialize by wrapping the given callback
@@ -224,7 +226,7 @@ module Hanami
224
226
  # @return [Callback] self
225
227
  #
226
228
  # @since 0.1.0
227
- #
229
+ # @api private
228
230
  def initialize(callback)
229
231
  @callback = callback
230
232
  end
@@ -237,6 +239,7 @@ module Hanami
237
239
  # @return [void, Object] It may return a value, it depends on the callback.
238
240
  #
239
241
  # @since 0.1.0
242
+ # @api private
240
243
  #
241
244
  # @see Hanami::Utils::Callbacks::Chain#run
242
245
  def call(context, *args)
@@ -248,7 +251,7 @@ module Hanami
248
251
  # It wraps a symbol or a string representing a method name that is implemented by the context within it will be called.
249
252
  #
250
253
  # @since 0.1.0
251
- # @private
254
+ # @api private
252
255
  class MethodCallback < Callback
253
256
  # Executes the callback within the given context and eventually passing the given arguments.
254
257
  # Those arguments will be passed according to the arity of the target method.
@@ -259,6 +262,7 @@ module Hanami
259
262
  # @return [void, Object] It may return a value, it depends on the callback.
260
263
  #
261
264
  # @since 0.1.0
265
+ # @api private
262
266
  #
263
267
  # @see Hanami::Utils::Callbacks::Chain#run
264
268
  def call(context, *args)
@@ -271,10 +275,12 @@ module Hanami
271
275
  end
272
276
  end
273
277
 
278
+ # @api private
274
279
  def hash
275
280
  callback.hash
276
281
  end
277
282
 
283
+ # @api private
278
284
  def eql?(other)
279
285
  hash == other.hash
280
286
  end
@@ -8,6 +8,7 @@ module Hanami
8
8
  #
9
9
  # @see Hanami::Utils::ClassAttribute::ClassMethods
10
10
  module ClassAttribute
11
+ # @api private
11
12
  def self.included(base)
12
13
  base.extend ClassMethods
13
14
  end
@@ -75,6 +76,7 @@ module Hanami
75
76
  protected
76
77
 
77
78
  # @see Class#inherited
79
+ # @api private
78
80
  def inherited(subclass)
79
81
  class_attributes.each do |attr|
80
82
  value = send(attr)
@@ -89,7 +91,7 @@ module Hanami
89
91
  private
90
92
 
91
93
  # Class accessor for class attributes.
92
- # @private
94
+ # @api private
93
95
  def class_attributes
94
96
  @class_attributes ||= Set.new
95
97
  end
@@ -63,6 +63,7 @@ module Hanami
63
63
 
64
64
  private
65
65
 
66
+ # @api private
66
67
  def caller_index
67
68
  Utils.jruby? || Utils.rubinius? ? 1 : 2
68
69
  end
@@ -415,7 +415,7 @@ module Hanami
415
415
  # <div>&lt;script&gt;alert(1);&lt;&#x2F;script&gt;</div>
416
416
  #
417
417
  # @example Bad practice
418
- # # WRONG Use Escape.html_attribute
418
+ # # WRONG Use Escape.html_attribute instead
419
419
  # <a title="<%= Hanami::Utils::Escape.html('...') %>">link</a>
420
420
  def self.html(input)
421
421
  input = encode(input)
@@ -6,8 +6,6 @@ module Hanami
6
6
  # String inflector
7
7
  #
8
8
  # @since 0.4.1
9
- #
10
- # rubocop:disable Style/PerlBackrefs
11
9
  module Inflector # rubocop:disable Metrics/ModuleLength
12
10
  # Rules for irregular plurals
13
11
  #
@@ -347,6 +345,7 @@ module Hanami
347
345
  # rubocop:disable Metrics/AbcSize
348
346
  # rubocop:disable Metrics/CyclomaticComplexity
349
347
  # rubocop:disable Metrics/MethodLength
348
+ # rubocop:disable Style/PerlBackrefs
350
349
  def self.pluralize(string)
351
350
  return string if string.nil? || string =~ Utils::Blank::STRING_MATCHER
352
351
 
@@ -385,6 +384,7 @@ module Hanami
385
384
  string + S
386
385
  end
387
386
  end
387
+ # rubocop:enable Style/PerlBackrefs
388
388
  # rubocop:enable Metrics/AbcSize
389
389
  # rubocop:enable Metrics/CyclomaticComplexity
390
390
  # rubocop:enable Metrics/MethodLength
@@ -402,6 +402,7 @@ module Hanami
402
402
  # rubocop:disable Metrics/CyclomaticComplexity
403
403
  # rubocop:disable Metrics/MethodLength
404
404
  # rubocop:disable Metrics/PerceivedComplexity
405
+ # rubocop:disable Style/PerlBackrefs
405
406
  def self.singularize(string)
406
407
  return string if string.nil? || string =~ Utils::Blank::STRING_MATCHER
407
408
 
@@ -448,11 +449,11 @@ module Hanami
448
449
  string.chop
449
450
  end
450
451
  end
452
+ # rubocop:enable Style/PerlBackrefs
451
453
  # rubocop:enable Metrics/AbcSize
452
454
  # rubocop:enable Metrics/CyclomaticComplexity
453
455
  # rubocop:enable Metrics/MethodLength
454
456
  # rubocop:enable Metrics/PerceivedComplexity
455
457
  end
456
- # rubocop:enable Style/PerlBackrefs
457
458
  end
458
459
  end
@@ -4,8 +4,6 @@ rescue LoadError
4
4
  require 'json'
5
5
  end
6
6
 
7
- require 'hanami/utils/deprecation'
8
-
9
7
  module Hanami
10
8
  module Utils
11
9
  # JSON wrapper
@@ -26,20 +24,6 @@ module Hanami
26
24
  MultiJson.load(payload)
27
25
  end
28
26
 
29
- # FIXME: remove this alias, when Hanami::Utils::Json.load will be removed
30
- #
31
- # @since 0.9.1
32
- # @api private
33
- alias load parse
34
-
35
- # FIXME: remove this method, when Hanami::Utils::Json.dump will be removed
36
- #
37
- # @since 0.9.1
38
- # @api private
39
- def dump(object)
40
- generate(object)
41
- end
42
-
43
27
  # @since 0.9.1
44
28
  # @api private
45
29
  def generate(object)
@@ -57,22 +41,6 @@ module Hanami
57
41
  end
58
42
  # rubocop:enable Style/ClassVars
59
43
 
60
- # Load the given JSON payload into Ruby objects.
61
- #
62
- # @param payload [String] a JSON payload
63
- #
64
- # @return [Object] the result of the loading process
65
- #
66
- # @raise [Hanami::Utils::Json::ParserError] if the paylod is invalid
67
- #
68
- # @since 0.8.0
69
- #
70
- # @deprecated Use {.parse} instead
71
- def self.load(payload)
72
- Hanami::Utils::Deprecation.new("`Hanami::Utils::Json.load' is deprecated, please use `Hanami::Utils::Json.parse'")
73
- @@engine.load(payload)
74
- end
75
-
76
44
  # Parse the given JSON paylod
77
45
  #
78
46
  # @param payload [String] a JSON payload
@@ -86,20 +54,6 @@ module Hanami
86
54
  @@engine.parse(payload)
87
55
  end
88
56
 
89
- # Dump the given object into a JSON payload
90
- #
91
- # @param object [Object] any object
92
- #
93
- # @return [String] the result of the dumping process
94
- #
95
- # @since 0.8.0
96
- #
97
- # @deprecated Use {.generate} instead
98
- def self.dump(object)
99
- Hanami::Utils::Deprecation.new("`Hanami::Utils::Json.dump' is deprecated, please use `Hanami::Utils::Json.generate'")
100
- @@engine.dump(object)
101
- end
102
-
103
57
  # Generate a JSON document from the given object
104
58
  #
105
59
  # @param object [Object] any object
@@ -6,11 +6,11 @@ require 'bigdecimal'
6
6
  require 'hanami/utils'
7
7
  require 'hanami/utils/string'
8
8
 
9
- # Define top level constant Boolean, so it can be easily used by other libraries
10
- # in coercions DSLs
11
- #
12
- # @since 0.3.0
13
9
  unless defined?(Boolean)
10
+ # Define top level constant Boolean, so it can be easily used by other libraries
11
+ # in coercions DSLs
12
+ #
13
+ # @since 0.3.0
14
14
  class Boolean
15
15
  end
16
16
  end
@@ -19,10 +19,7 @@ module Hanami
19
19
  module Utils
20
20
  # Kernel utilities
21
21
  # @since 0.1.1
22
- #
23
- # rubocop:disable Style/MethodName
24
- # rubocop:disable Metrics/ModuleLength
25
- module Kernel
22
+ module Kernel # rubocop:disable Metrics/ModuleLength
26
23
  # Matcher for numeric values
27
24
  #
28
25
  # @since 0.3.3
@@ -3,6 +3,6 @@ module Hanami
3
3
  # Defines the version
4
4
  #
5
5
  # @since 0.1.0
6
- VERSION = '1.0.0.beta2'.freeze
6
+ VERSION = '1.0.0.beta3'.freeze
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta2
4
+ version: 1.0.0.beta3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-03-02 00:00:00.000000000 Z
13
+ date: 2017-03-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -57,7 +57,6 @@ files:
57
57
  - lib/hanami/interactor.rb
58
58
  - lib/hanami/logger.rb
59
59
  - lib/hanami/utils.rb
60
- - lib/hanami/utils/attributes.rb
61
60
  - lib/hanami/utils/basic_object.rb
62
61
  - lib/hanami/utils/blank.rb
63
62
  - lib/hanami/utils/callbacks.rb
@@ -1,141 +0,0 @@
1
- require 'hanami/utils/hash'
2
-
3
- module Hanami
4
- module Utils
5
- # A set of attributes.
6
- #
7
- # It internally stores the data as a Hash.
8
- #
9
- # All the operations convert keys to strings.
10
- # This strategy avoids memory attacks due to Symbol abuses when parsing
11
- # untrusted input.
12
- #
13
- # At the same time, this allows to get/set data with the original key or
14
- # with the string representation. See the examples below.
15
- #
16
- # @since 0.3.2
17
- class Attributes
18
- # Initialize a set of attributes
19
- # All the keys of the given Hash are recursively converted to strings.
20
- #
21
- # @param hash [#to_h] a Hash or any object that implements #to_h
22
- #
23
- # @return [Hanami::Utils::Attributes] self
24
- #
25
- # @since 0.3.2
26
- #
27
- # @example
28
- # require 'hanami/utils/attributes'
29
- #
30
- # attributes = Hanami::Utils::Attributes.new(a: 1, b: { 2 => [3, 4] })
31
- # attributes.to_h # => { "a" => 1, "b" => { "2" => [3, 4] } }
32
- def initialize(hash = {})
33
- @attributes = Utils::Hash.new(hash, &nil).stringify!
34
- end
35
-
36
- # Get the value associated with the given attribute
37
- #
38
- # @param attribute [#to_s] a String or any object that implements #to_s
39
- #
40
- # @return [Object,NilClass] the associated value, if present
41
- #
42
- # @since 0.3.2
43
- #
44
- # @example
45
- # require 'hanami/utils/attributes'
46
- #
47
- # attributes = Hanami::Utils::Attributes.new(a: 1, 'b' => 2, 23 => 'foo')
48
- #
49
- # attributes.get(:a) # => 1
50
- # attributes.get('a') # => 1
51
- # attributes[:a] # => 1
52
- # attributes['a'] # => 1
53
- #
54
- # attributes.get(:b) # => 2
55
- # attributes.get('b') # => 2
56
- # attributes[:b] # => 2
57
- # attributes['b'] # => 2
58
- #
59
- # attributes.get(23) # => "foo"
60
- # attributes.get('23') # => "foo"
61
- # attributes[23] # => "foo"
62
- # attributes['23'] # => "foo"
63
- #
64
- # attributes.get(:unknown) # => nil
65
- # attributes.get('unknown') # => nil
66
- # attributes[:unknown] # => nil
67
- # attributes['unknown'] # => nil
68
- def get(attribute)
69
- value = @attributes
70
-
71
- keys = attribute.to_s.split('.')
72
- keys.each do |key|
73
- break unless value
74
-
75
- value = value[key]
76
- end
77
-
78
- value.is_a?(Hash) ? self.class.new(value) : value
79
- end
80
-
81
- # @since 0.3.4
82
- alias [] get
83
-
84
- # Set the given value for the given attribute
85
- #
86
- # @param attribute [#to_s] a String or any object that implements #to_s
87
- # @param value [Object] any value
88
- #
89
- # @return [NilClass]
90
- #
91
- # @since 0.3.2
92
- #
93
- # @example
94
- # require 'hanami/utils/attributes'
95
- #
96
- # attributes = Hanami::Utils::Attributes.new
97
- #
98
- # attributes.set(:a, 1)
99
- # attributes.get(:a) # => 1
100
- # attributes.get('a') # => 1
101
- #
102
- # attributes.set('b', 2)
103
- # attributes.get(:b) # => 2
104
- # attributes.get('b') # => 2
105
- #
106
- # attributes.set(23, 'foo')
107
- # attributes.get(23) # => "foo"
108
- # attributes.get('23') # => "foo"
109
- def set(attribute, value)
110
- @attributes[attribute.to_s] = value
111
- nil
112
- end
113
-
114
- # Returns a deep duplicated copy of the attributes as a Hash
115
- #
116
- # @return [::Hash]
117
- #
118
- # @since 0.3.2
119
- def to_h
120
- ::Hash[].tap do |result|
121
- @attributes.each do |k, v|
122
- result[k] = _read_value(v)
123
- end
124
- end
125
- end
126
-
127
- private
128
-
129
- # @since 0.4.1
130
- # @api private
131
- def _read_value(value)
132
- case val = value
133
- when ::Hash, ::Hanami::Utils::Hash, ->(v) { v.respond_to?(:hanami_nested_attributes?) }
134
- val.to_h
135
- else
136
- val
137
- end
138
- end
139
- end
140
- end
141
- end