dry-core 0.4.7 → 0.4.9

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: 74e2816087ba373bcfd55f8e216ef6708e1e70b0930020d71518385190460537
4
- data.tar.gz: 19eb04ff0972c2b928e455ff7345c93caed587af56ea8089a5433eb471a624b3
3
+ metadata.gz: dfe5b98793bc0e200a3a226a60d8c0f5234de170f033c9c3f06fc779979a1f63
4
+ data.tar.gz: de24e4b5d0bead8d577c3594bea81986ea7e7cf8124f17ce471f734d143d7319
5
5
  SHA512:
6
- metadata.gz: c1949faf46146ee0bb734aec09350b864ba414105ad7ceef4dad476b3667f4d14c0474c84da28fdf293e651da9a7a26119501548d6512eeed42e5e1296270d12
7
- data.tar.gz: ffa845da4bf5da3f5b370f6093721d4c7689bde90da3b4a58f17954807fc9fe0f7065997b7bebee46e6eed2525bd181c042fe550ffa1b4557fa9cf95ee6eae47
6
+ metadata.gz: 46141cc708525532152db4c692b8d5ac413ded55ee6484d672c6974a41a6487776ef2aeba3bb3abde5e22fcf4c4d8ac42900a391dcd7a38a5ff95fd4c5d9b717
7
+ data.tar.gz: 4871d4b68086c1521424d2510b47ab0448fbe344beed3bc7fd1ee1f9115306d3893b751f882a942f9321183724c8aecea1b7e69b81cb2fe7794dbec07d5222a6
@@ -0,0 +1,15 @@
1
+ version: "2"
2
+
3
+ prepare:
4
+ fetch:
5
+ - url: "https://raw.githubusercontent.com/dry-rb/devtools/master/.rubocop.yml"
6
+ path: ".rubocop.yml"
7
+
8
+ exclude_patterns:
9
+ - "benchmarks/"
10
+ - "examples/"
11
+ - "spec/"
12
+
13
+ plugins:
14
+ rubocop:
15
+ enabled: true
data/.gitignore CHANGED
@@ -8,3 +8,4 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  spec/examples.txt
11
+ .rubocop.yml
@@ -5,22 +5,25 @@ cache: bundler
5
5
  bundler_args: --without benchmarks tools
6
6
  after_success:
7
7
  - '[ -d coverage ] && bundle exec codeclimate-test-reporter'
8
- script:
9
- - bundle exec rake
10
8
  before_install:
11
- - gem update --system
9
+ - gem install bundler
12
10
  after_success:
13
11
  - '[ -d coverage ] && bundle exec codeclimate-test-reporter'
14
12
  rvm:
15
- - 2.2.9
16
- - 2.3.6
17
- - 2.4.3
18
- - 2.5.0
19
- - jruby-9.1.15.0
13
+ - 2.4.6
14
+ - 2.5.5
15
+ - 2.6.3
16
+ - truffleruby
20
17
  env:
21
18
  global:
22
19
  - COVERAGE=true
23
20
  - JRUBY_OPTS='--dev -J-Xmx1024M'
21
+ matrix:
22
+ allow_failures:
23
+ - rvm: truffleruby
24
+ include:
25
+ - rvm: jruby-9.2.7.0
26
+ jdk: openjdk8
24
27
  notifications:
25
28
  email: false
26
29
  webhooks:
@@ -1,8 +1,38 @@
1
+ # v0.4.9
2
+
3
+ ### Added
4
+
5
+ - `Undefined.coalesce` takes a variable number of arguments and returns the first non-`Undefined` value (flash-gordon)
6
+ ```ruby
7
+ Undefined.coalesce(Undefined, Undefined, :foo) # => :foo
8
+ ```
9
+
10
+ ### Fixed
11
+
12
+ - `Undefined.{dup,clone}` returns `Undefined` back, `Undefined` is a singleton (flash-gordon)
13
+
14
+ [Compare v0.4.8...v0.4.9](https://github.com/dry-rb/dry-core/compare/v0.4.8...v0.4.9)
15
+
16
+ # v0.4.8 2019-06-23
17
+
18
+ ### Added
19
+
20
+ - `Undefined.map` for mapping non-undefined values (flash-gordon):
21
+
22
+ ```ruby
23
+ something = 1
24
+ Undefined.map(something) { |v| v + 1 } # => 2
25
+ something = Undefined
26
+ Undefined.map(something) { |v| v + 1 } # => Undefined
27
+ ```
28
+
29
+ [Compare v0.4.7...v0.4.8](https://github.com/dry-rb/dry-core/compare/v0.4.7...v0.4.8)
30
+
1
31
  # v0.4.7 2018-06-25
2
32
 
3
33
  ### Fixed
4
34
 
5
- * Fix default logger for deprecations, it now uses `$stderr` by default, as it should (flash-gordon)
35
+ - Fix default logger for deprecations, it now uses `$stderr` by default, as it should (flash-gordon)
6
36
 
7
37
  [Compare v0.4.6...v0.4.7](https://github.com/dry-rb/dry-core/compare/v0.4.6...v0.4.7)
8
38
 
@@ -10,7 +40,7 @@
10
40
 
11
41
  ### Changed
12
42
 
13
- * Trigger constant autoloading in the class builder (radar)
43
+ - Trigger constant autoloading in the class builder (radar)
14
44
 
15
45
  [Compare v0.4.5...v0.4.6](https://github.com/dry-rb/dry-core/compare/v0.4.5...v0.4.6)
16
46
 
@@ -18,7 +48,7 @@
18
48
 
19
49
  ### Added
20
50
 
21
- * `Dry::Core::Memoizable`, which provides a `memoize` macro for memoizing results of instance methods (timriley)
51
+ - `Dry::Core::Memoizable`, which provides a `memoize` macro for memoizing results of instance methods (timriley)
22
52
 
23
53
  [Compare v0.4.4...v0.4.5](https://github.com/dry-rb/dry-core/compare/v0.4.4...v0.4.5)
24
54
 
@@ -26,8 +56,8 @@
26
56
 
27
57
  ### Added
28
58
 
29
- * `deprecate_constant` overrides `Module#deprecate_constant` and issues a labeled message on accessing a deprecated constant (flash-gordon)
30
- * `Undefined.default` which accepts two arguments and returns the first if it's not `Undefined`; otherwise, returns the second one or yields a block (flash-gordon)
59
+ - `deprecate_constant` overrides `Module#deprecate_constant` and issues a labeled message on accessing a deprecated constant (flash-gordon)
60
+ - `Undefined.default` which accepts two arguments and returns the first if it's not `Undefined`; otherwise, returns the second one or yields a block (flash-gordon)
31
61
 
32
62
  [Compare v0.4.3...v0.4.4](https://github.com/dry-rb/dry-core/compare/v0.4.3...v0.4.4)
33
63
 
@@ -35,7 +65,7 @@
35
65
 
36
66
  ### Added
37
67
 
38
- * `Dry::Core::DescendantsTracker` which is a maintained version of the [`descendants_tracker`](https://github.com/dkubb/descendants_tracker) gem (flash-gordon)
68
+ - `Dry::Core::DescendantsTracker` which is a maintained version of the [`descendants_tracker`](https://github.com/dkubb/descendants_tracker) gem (flash-gordon)
39
69
 
40
70
  [Compare v0.4.2...v0.4.3](https://github.com/dry-rb/dry-core/compare/v0.4.2...0.4.3)
41
71
 
@@ -43,7 +73,7 @@
43
73
 
44
74
  ### Fixed
45
75
 
46
- * Class attributes now support private setters/getters (flash-gordon)
76
+ - Class attributes now support private setters/getters (flash-gordon)
47
77
 
48
78
  [Compare v0.4.1...v0.4.2](https://github.com/dry-rb/dry-core/compare/v0.4.1...v0.4.2)
49
79
 
@@ -51,7 +81,7 @@
51
81
 
52
82
  ### Changed
53
83
 
54
- * Improved error message on invalid attribute value (GustavoCaso)
84
+ - Improved error message on invalid attribute value (GustavoCaso)
55
85
 
56
86
  [Compare v0.4.0...v0.4.1](https://github.com/dry-rb/dry-core/compare/v0.4.0...v0.4.1)
57
87
 
@@ -59,7 +89,7 @@
59
89
 
60
90
  ### Added
61
91
 
62
- * Added the `:type` option to class attributes, you can now restrict attribute values with a type. You can either use plain ruby types (`Integer`, `String`, etc) or `dry-types` (GustavoCaso)
92
+ - Added the `:type` option to class attributes, you can now restrict attribute values with a type. You can either use plain ruby types (`Integer`, `String`, etc) or `dry-types` (GustavoCaso)
63
93
 
64
94
  ```ruby
65
95
  class Foo
@@ -76,7 +106,7 @@
76
106
 
77
107
  ### Fixed
78
108
 
79
- * `Deprecations` output is set to `$stderr` by default now (solnic)
109
+ - `Deprecations` output is set to `$stderr` by default now (solnic)
80
110
 
81
111
  [Compare v0.3.3...v0.3.4](https://github.com/dry-rb/dry-core/compare/v0.3.3...v0.3.4)
82
112
 
@@ -84,7 +114,7 @@
84
114
 
85
115
  ### Fixed
86
116
 
87
- * The Deprecations module now shows the right caller line (flash-gordon)
117
+ - The Deprecations module now shows the right caller line (flash-gordon)
88
118
 
89
119
  [Compare v0.3.2...v0.3.3](https://github.com/dry-rb/dry-core/compare/v0.3.2...v0.3.3)
90
120
 
@@ -92,7 +122,7 @@
92
122
 
93
123
  ### Added
94
124
 
95
- * Accept an existing logger object in `Dry::Core::Deprecations.set_logger!` (flash-gordon)
125
+ - Accept an existing logger object in `Dry::Core::Deprecations.set_logger!` (flash-gordon)
96
126
 
97
127
  [Compare v0.3.1...v0.3.2](https://github.com/dry-rb/dry-core/compare/v0.3.1...v0.3.2)
98
128
 
@@ -100,7 +130,7 @@
100
130
 
101
131
  ### Added
102
132
 
103
- * Support for building classes within an existing namespace (flash-gordon)
133
+ - Support for building classes within an existing namespace (flash-gordon)
104
134
 
105
135
  [Compare v0.3.0...v0.3.1](https://github.com/dry-rb/dry-core/compare/v0.3.0...v0.3.1)
106
136
 
@@ -108,7 +138,7 @@
108
138
 
109
139
  ### Changed
110
140
 
111
- * Class attributes are initialized _before_ running the `inherited` hook. It's slightly more convenient behavior and it's very unlikely anyone will be affected by this, but technically this is a breaking change (flash-gordon)
141
+ - Class attributes are initialized _before_ running the `inherited` hook. It's slightly more convenient behavior and it's very unlikely anyone will be affected by this, but technically this is a breaking change (flash-gordon)
112
142
 
113
143
  [Compare v0.2.4...v0.3.0](https://github.com/dry-rb/dry-core/compare/v0.2.4...v0.3.0)
114
144
 
@@ -116,7 +146,7 @@
116
146
 
117
147
  ### Fixed
118
148
 
119
- * Do not require deprecated method to be defined (flash-gordon)
149
+ - Do not require deprecated method to be defined (flash-gordon)
120
150
 
121
151
  [Compare v0.2.3...v0.2.4](https://github.com/dry-rb/dry-core/compare/v0.2.3...v0.2.4)
122
152
 
@@ -124,7 +154,7 @@
124
154
 
125
155
  ### Fixed
126
156
 
127
- * Fix warnings on using uninitialized class attributes (flash-gordon)
157
+ - Fix warnings on using uninitialized class attributes (flash-gordon)
128
158
 
129
159
  [Compare v0.2.2...v0.2.3](https://github.com/dry-rb/dry-core/compare/v0.2.2...v0.2.3)
130
160
 
@@ -132,7 +162,7 @@
132
162
 
133
163
  ### Added
134
164
 
135
- * `ClassAttributes` which provides `defines` method for defining get-or-set methods (flash-gordon)
165
+ - `ClassAttributes` which provides `defines` method for defining get-or-set methods (flash-gordon)
136
166
 
137
167
  [Compare v0.2.1...v0.2.2](https://github.com/dry-rb/dry-core/compare/v0.2.1...v0.2.2)
138
168
 
@@ -140,7 +170,7 @@
140
170
 
141
171
  ### Added
142
172
 
143
- * `Constants` are now available in nested scopes (flash-gordon)
173
+ - `Constants` are now available in nested scopes (flash-gordon)
144
174
 
145
175
  [Compare v0.2.0...v0.2.1](https://github.com/dry-rb/dry-core/compare/v0.2.0...v0.2.1)
146
176
 
data/Gemfile CHANGED
@@ -11,12 +11,11 @@ group :test do
11
11
  gem 'inflecto', '~> 0.0', '>= 0.0.2'
12
12
  gem 'codeclimate-test-reporter', require: false
13
13
  gem 'simplecov', require: false
14
- gem 'dry-types'
15
- gem 'dry-inflector', git: 'https://github.com/dry-rb/dry-inflector', branch: 'master'
14
+ gem 'dry-types', '~> 1.0'
15
+ gem 'dry-inflector'
16
16
  end
17
17
 
18
18
  group :tools do
19
19
  gem 'pry-byebug', platform: :mri
20
20
  gem 'pry', platform: :jruby
21
- gem 'rubocop'
22
21
  end
data/README.md CHANGED
@@ -3,8 +3,9 @@
3
3
  [travis]: https://travis-ci.org/dry-rb/dry-core
4
4
  [code_climate]: https://codeclimate.com/github/dry-rb/dry-core
5
5
  [inch]: http://inch-ci.org/github/dry-rb/dry-core
6
+ [chat]: https://dry-rb.zulipchat.com
6
7
 
7
- # dry-core
8
+ # dry-core [![Join the chat at https://dry-rb.zulipchat.com](https://img.shields.io/badge/dry--rb-join%20chat-%23346b7a.svg)][chat]
8
9
 
9
10
  [![Gem Version](https://img.shields.io/gem/v/dry-core.svg)][gem]
10
11
  [![Build Status](https://img.shields.io/travis/dry-rb/dry-core.svg)][travis]
@@ -15,6 +16,20 @@
15
16
 
16
17
  A collection of small modules used in the dry-rb ecosystem.
17
18
 
19
+ ## Links
20
+
21
+ * [User docs](https://dry-rb.org/gems/dry-core)
22
+ * [API docs](http://rubydoc.info/gems/dry-core)
23
+
24
+ ## Supported Ruby versions
25
+
26
+ This library officially supports following Ruby versions:
27
+
28
+ * MRI >= `2.4`
29
+ * jruby >= `9.2`
30
+
31
+ It **should** work on MRI `2.3.x` too, but there's no official support for this version.
32
+
18
33
  ## Installation
19
34
 
20
35
  Add this line to your application's Gemfile:
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path('../lib', __FILE__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'dry/core/version'
@@ -28,7 +30,7 @@ Gem::Specification.new do |spec|
28
30
  spec.required_ruby_version = '>= 2.1.0'
29
31
  spec.add_runtime_dependency 'concurrent-ruby', '~> 1.0'
30
32
 
31
- spec.add_development_dependency 'bundler', '~> 1.12'
33
+ spec.add_development_dependency 'bundler'
32
34
  spec.add_development_dependency 'rake', '~> 10.0'
33
35
  spec.add_development_dependency 'rspec', '~> 3.0'
34
36
  end
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/core'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/core/version'
2
4
 
3
5
  # :nodoc:
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'concurrent/map'
2
4
 
3
5
  module Dry
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/core/constants'
2
4
  require 'dry/core/errors'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Dry
2
4
  module Core
3
5
  # Class for generating more classes
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'set'
2
4
 
3
5
  module Dry
@@ -6,6 +8,7 @@ module Dry
6
8
  #
7
9
  # @example Just include this module to your class or module
8
10
  # class Foo
11
+ # include Dry::Core::Constants
9
12
  # def call(value = EMPTY_ARRAY)
10
13
  # value.map(&:to_s)
11
14
  # end
@@ -36,10 +39,15 @@ module Dry
36
39
  # end
37
40
  # end
38
41
  Undefined = Object.new.tap do |undefined|
42
+ # @api private
43
+ Self = -> { Undefined }
44
+
45
+ # @api public
39
46
  def undefined.to_s
40
47
  'Undefined'
41
48
  end
42
49
 
50
+ # @api public
43
51
  def undefined.inspect
44
52
  'Undefined'
45
53
  end
@@ -48,13 +56,13 @@ module Dry
48
56
  # otherwise return the second arg or yield the block.
49
57
  #
50
58
  # @example
51
- # def method(val = Undefined)
52
- # 1 + Undefined.default(val, 2)
53
- # end
59
+ # def method(val = Undefined)
60
+ # 1 + Undefined.default(val, 2)
61
+ # end
54
62
  #
55
63
  def undefined.default(x, y = self)
56
- if x.equal?(self)
57
- if y.equal?(self)
64
+ if equal?(x)
65
+ if equal?(y)
58
66
  yield
59
67
  else
60
68
  y
@@ -63,6 +71,36 @@ module Dry
63
71
  x
64
72
  end
65
73
  end
74
+
75
+ # Map a non-undefined value
76
+ #
77
+ # @example
78
+ # def add_five(val = Undefined)
79
+ # Undefined.map(val) { |x| x + 5 }
80
+ # end
81
+ #
82
+ def undefined.map(value)
83
+ if equal?(value)
84
+ self
85
+ else
86
+ yield(value)
87
+ end
88
+ end
89
+
90
+ # @api public
91
+ def undefined.dup
92
+ self
93
+ end
94
+
95
+ # @api public
96
+ def undefined.clone
97
+ self
98
+ end
99
+
100
+ # @api public
101
+ def undefined.coalesce(*args)
102
+ args.find(Self) { |x| !equal?(x) }
103
+ end
66
104
  end.freeze
67
105
 
68
106
  def self.included(base)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'logger'
2
4
 
3
5
  module Dry
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'concurrent/array'
2
4
 
3
5
  module Dry
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Dry
2
4
  module Core
3
5
  class InvalidClassAttributeValue < StandardError
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'set'
2
4
 
3
5
  module Dry
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Dry
2
4
  module Core
3
5
  # Helper module providing thin interface around an inflection backend.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Dry
2
4
  module Core
3
5
  module Memoizable
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Dry
2
4
  module Core
3
- VERSION = '0.4.7'.freeze
5
+ VERSION = '0.4.9'.freeze
4
6
  end
5
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.7
4
+ version: 0.4.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nikita Shilnikov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-06-25 00:00:00.000000000 Z
11
+ date: 2019-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.12'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.12'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -73,10 +73,10 @@ executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
+ - ".codeclimate.yml"
76
77
  - ".gitignore"
77
78
  - ".inch.yml"
78
79
  - ".rspec"
79
- - ".rubocop.yml"
80
80
  - ".travis.yml"
81
81
  - CHANGELOG.md
82
82
  - CONTRIBUTING.md
@@ -118,8 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
118
  - !ruby/object:Gem::Version
119
119
  version: '0'
120
120
  requirements: []
121
- rubyforge_project:
122
- rubygems_version: 2.7.6
121
+ rubygems_version: 3.0.3
123
122
  signing_key:
124
123
  specification_version: 4
125
124
  summary: A toolset of small support modules used throughout the dry-rb ecosystem.
@@ -1,31 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: 2.1
3
- Exclude:
4
- - 'dry-core.gemspec'
5
- - 'spec/spec_helper.rb'
6
-
7
- Style/SignalException:
8
- Exclude:
9
- - 'spec/**/*'
10
-
11
- Style/RedundantSelf:
12
- Exclude:
13
- - 'lib/dry/core/deprecations.rb'
14
-
15
- Metrics/LineLength:
16
- Max: 110
17
-
18
- Metrics/MethodLength:
19
- Enabled: false
20
-
21
- Style/FileName:
22
- Exclude:
23
- - 'lib/dry-core.rb'
24
-
25
- Lint/AmbiguousRegexpLiteral:
26
- Exclude:
27
- - 'spec/**/*'
28
-
29
- Style/BlockDelimiters:
30
- Exclude:
31
- - 'spec/**/*'