pathway 0.11.3 → 0.12.0

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
  SHA256:
3
- metadata.gz: f136383bd165f1ff88c16e5cb70fb16342b84e5b4e8b76bd49bf0fd91707e2ab
4
- data.tar.gz: b4b5cc55ea74d704c66976004e968f72d721c928af86bc8e5660ede8c8d61073
3
+ metadata.gz: a2a1f9207d8b2db81dbf655234010e4cb8c622299cb69c1dfaa9486f824a7e86
4
+ data.tar.gz: 25e380e764a1b1585b86ae847b2cbc107a83fa23f1a1205e4e1e5e1a2c021c50
5
5
  SHA512:
6
- metadata.gz: b83238e83c8f2835f5fa817b6c7e9bc91d68dd9362b97a371d2d22e5ff9a7f8695c26ac4a03fda5b23afebc4d6474744db85ad713c0f49eb2fec95b5696f206e
7
- data.tar.gz: b8fd39d4709179ecacd79c89741e6402610afad146117acc82eea7ba2f0376fefcfd5d990a848bd55c0acfdccd64b5313e2497893078818091d8c28b136dd8e2
6
+ metadata.gz: 393014838fece86b27409c08ef0f5ccb9d7dacf5f5012d956bbf0e7ca3869175e4090c6dd23cf6c8f61bfcecd15839a738b87afcf911c226a06ea36e8cb91dc3
7
+ data.tar.gz: 1dd63c594d299837fb1b595f14fd2056ac39f81fdd508254c331fb9ef4b3a67262e0f47683bb5e0296708076d88c12aef0dd981c8864391d43f0bc6083ad9422
@@ -0,0 +1,28 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ ruby-version: [2.6, 2.7, 3.0, 3.1]
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+ - name: Set up Ruby
18
+ uses: ruby/setup-ruby@v1
19
+ with:
20
+ ruby-version: ${{ matrix.ruby-version }}
21
+ bundler-cache: true
22
+ - name: Run tests
23
+ run: bundle exec rake
24
+ - name: Coveralls GitHub Action
25
+ if: matrix.ruby-version == '3.1'
26
+ uses: coverallsapp/github-action@1.1.3
27
+ with:
28
+ github-token: ${{ secrets.GITHUB_TOKEN }}
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## [0.12.0] - 2022-05-31
2
+ ### Changed
3
+ - Improve compatibility with Ruby 3.0
4
+ - Add plugin `:auto_deconstruct_state` to help migrating old apps to Ruby 3.0
5
+
1
6
  ## [0.11.3] - 2020-07-22
2
7
  ### Changed
3
8
  - Use default error message on `:fetch_model` step, at `:sequel_models` plugin, if model type cannot be determined
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Pathway
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/pathway.svg)](https://badge.fury.io/rb/pathway)
4
- [![CircleCI](https://circleci.com/gh/pabloh/pathway/tree/master.svg?style=shield)](https://circleci.com/gh/pabloh/pathway/tree/master)
4
+ [![Tests](https://github.com/pabloh/pathway/workflows/Tests/badge.svg)](https://github.com/oabloh/pathway/actions?query=workflow%3ATests)
5
5
  [![Coverage Status](https://coveralls.io/repos/github/pabloh/pathway/badge.svg?branch=master)](https://coveralls.io/github/pabloh/pathway?branch=master)
6
6
 
7
7
  Pathway encapsulates your business logic into simple operation objects (AKA application services on the [DDD](https://en.wikipedia.org/wiki/Domain-driven_design) lingo).
@@ -273,11 +273,11 @@ class CreateNugget < Pathway::Operation
273
273
 
274
274
  def create_nugget(:params, **)
275
275
  Nugget.create(owner: current_user, **params)
276
- def
276
+ end
277
277
 
278
278
  def notify(:nugget, **)
279
279
  Notifier.notify(:new_nugget, nugget)
280
- else
280
+ end
281
281
  end
282
282
  ```
283
283
 
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pathway
4
+ module Plugins
5
+ module AutoDeconstructState
6
+ module DSLMethods
7
+ private
8
+
9
+ def _callable(callable)
10
+ if callable.is_a?(Symbol) && @operation.respond_to?(callable, true) &&
11
+ @operation.method(callable).parameters.all? { _1 in [:key|:keyreq|:keyrest|:block,*] }
12
+
13
+ -> state { @operation.send(callable, **state) }
14
+ else
15
+ super
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ if RUBY_VERSION =~ /^3\./
4
+ require 'pathway/plugins/auto_deconstruct_state/ruby3'
5
+ end
6
+
7
+ module Pathway
8
+ module Plugins
9
+ module AutoDeconstructState
10
+ end
11
+ end
12
+ end
@@ -19,7 +19,7 @@ module Pathway
19
19
  end
20
20
  end
21
21
 
22
- def params(*args, &block)
22
+ ruby2_keywords def params(*args, &block)
23
23
  contract { params(*args, &block) }
24
24
  end
25
25
 
@@ -29,8 +29,8 @@ module Pathway
29
29
  @builded_contract = @contract_options.empty? && klass.schema ? klass.new : nil
30
30
  end
31
31
 
32
- def build_contract(opts = {})
33
- @builded_contract || contract_class.new(opts)
32
+ def build_contract(**opts)
33
+ @builded_contract || contract_class.new(**opts)
34
34
  end
35
35
 
36
36
  def inherited(subclass)
@@ -57,12 +57,12 @@ module Pathway
57
57
  with ||= contract_options.zip(contract_options).to_h
58
58
  end
59
59
  opts = Hash(with).map { |to, from| [to, state[from]] }.to_h
60
- validate_with(state[:input], opts)
60
+ validate_with(state[:input], **opts)
61
61
  .then { |params| state.update(params: params) }
62
62
  end
63
63
 
64
- def validate_with(input, opts = {})
65
- result = contract(opts).call(input)
64
+ def validate_with(input, **opts)
65
+ result = contract(**opts).call(input)
66
66
 
67
67
  result.success? ? wrap(result.values.to_h) : error(:validation, details: result.errors.to_h)
68
68
  end
@@ -4,8 +4,8 @@ module Pathway
4
4
  module Plugins
5
5
  module Responder
6
6
  module ClassMethods
7
- def call(ctx, *params, &bl)
8
- result = super(ctx, *params)
7
+ ruby2_keywords def call(*args, &bl)
8
+ result = super(*args)
9
9
  block_given? ? Responder.respond(result, &bl) : result
10
10
  end
11
11
  end
@@ -84,8 +84,8 @@ module Pathway
84
84
  end
85
85
  end
86
86
 
87
- def self.apply(operation, model: nil, **args)
88
- operation.model(model, args) if model
87
+ def self.apply(operation, model: nil, **kwargs)
88
+ operation.model(model, **kwargs) if model
89
89
  end
90
90
  end
91
91
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pathway
4
- VERSION = '0.11.3'
4
+ VERSION = '0.12.0'
5
5
  end
data/lib/pathway.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'ruby2_keywords'
3
4
  require 'forwardable'
4
5
  require 'dry/inflector'
5
6
  require 'contextualizer'
@@ -9,21 +10,23 @@ require 'pathway/result'
9
10
  module Pathway
10
11
  Inflector = Dry::Inflector.new
11
12
  class Operation
12
- def self.plugin(name, *args)
13
- require "pathway/plugins/#{Inflector.underscore(name)}" if name.is_a?(Symbol)
13
+ class << self
14
+ ruby2_keywords def plugin(name, *args)
15
+ require "pathway/plugins/#{Inflector.underscore(name)}" if name.is_a?(Symbol)
14
16
 
15
- plugin = name.is_a?(Module) ? name : Plugins.const_get(Inflector.camelize(name))
17
+ plugin = name.is_a?(Module) ? name : Plugins.const_get(Inflector.camelize(name))
16
18
 
17
- self.extend plugin::ClassMethods if plugin.const_defined? :ClassMethods
18
- self.include plugin::InstanceMethods if plugin.const_defined? :InstanceMethods
19
- self::DSL.include plugin::DSLMethods if plugin.const_defined? :DSLMethods
19
+ self.extend plugin::ClassMethods if plugin.const_defined? :ClassMethods
20
+ self.include plugin::InstanceMethods if plugin.const_defined? :InstanceMethods
21
+ self::DSL.include plugin::DSLMethods if plugin.const_defined? :DSLMethods
20
22
 
21
- plugin.apply(self, *args) if plugin.respond_to?(:apply)
22
- end
23
+ plugin.apply(self, *args) if plugin.respond_to?(:apply)
24
+ end
23
25
 
24
- def self.inherited(subclass)
25
- super
26
- subclass.const_set :DSL, Class.new(self::DSL)
26
+ def inherited(subclass)
27
+ super
28
+ subclass.const_set :DSL, Class.new(self::DSL)
29
+ end
27
30
  end
28
31
 
29
32
  class DSL
@@ -90,7 +93,7 @@ module Pathway
90
93
  end
91
94
  end
92
95
 
93
- def call(ctx, *params)
96
+ ruby2_keywords def call(ctx, *params)
94
97
  new(ctx).call(*params)
95
98
  end
96
99
 
@@ -137,7 +140,7 @@ module Pathway
137
140
  end
138
141
 
139
142
  # Execute step and preserve the former state
140
- def step(callable, *args)
143
+ ruby2_keywords def step(callable, *args)
141
144
  bl = _callable(callable)
142
145
 
143
146
  @result = @result.tee { |state| bl.call(state, *args) }
@@ -190,9 +193,9 @@ module Pathway
190
193
  def _callable(callable)
191
194
  case callable
192
195
  when Proc
193
- -> *args { @operation.instance_exec(*args, &callable) }
196
+ -> *args { @operation.instance_exec(*args, &callable) }.ruby2_keywords
194
197
  when Symbol
195
- -> *args { @operation.send(callable, *args) }
198
+ -> *args { @operation.send(callable, *args) }.ruby2_keywords
196
199
  else
197
200
  callable
198
201
  end
data/pathway.gemspec CHANGED
@@ -31,13 +31,15 @@ Gem::Specification.new do |spec|
31
31
 
32
32
  spec.add_dependency "dry-inflector", ">= 0.1.0"
33
33
  spec.add_dependency "contextualizer", "~> 0.0.4"
34
+ spec.add_dependency "ruby2_keywords"
34
35
 
35
36
  spec.add_development_dependency "dry-validation", ">= 0.11"
36
- spec.add_development_dependency "bundler", ">= 1.14.0"
37
- spec.add_development_dependency "sequel", "~> 5.25.0"
37
+ spec.add_development_dependency "bundler", "~> 2.3.7"
38
+ spec.add_development_dependency "sequel", "~> 5.0"
38
39
  spec.add_development_dependency "rake", "~> 13.0"
39
- spec.add_development_dependency "rspec", "~> 3.0"
40
- spec.add_development_dependency "coveralls"
40
+ spec.add_development_dependency "rspec", "~> 3.11"
41
+ spec.add_development_dependency "simplecov-lcov", '~> 0.8.0'
42
+ spec.add_development_dependency "simplecov"
41
43
  spec.add_development_dependency "pry"
42
44
  spec.add_development_dependency "pry-byebug"
43
45
  spec.add_development_dependency "pry-doc"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pathway
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.3
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Herrero
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-22 00:00:00.000000000 Z
11
+ date: 2022-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-inflector
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.0.4
41
+ - !ruby/object:Gem::Dependency
42
+ name: ruby2_keywords
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: dry-validation
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -56,30 +70,30 @@ dependencies:
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ">="
73
+ - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: 1.14.0
75
+ version: 2.3.7
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ">="
80
+ - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: 1.14.0
82
+ version: 2.3.7
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: sequel
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: 5.25.0
89
+ version: '5.0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: 5.25.0
96
+ version: '5.0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: rake
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -100,16 +114,30 @@ dependencies:
100
114
  requirements:
101
115
  - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: '3.0'
117
+ version: '3.11'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.11'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov-lcov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.8.0
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
- version: '3.0'
138
+ version: 0.8.0
111
139
  - !ruby/object:Gem::Dependency
112
- name: coveralls
140
+ name: simplecov
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
143
  - - ">="
@@ -171,7 +199,7 @@ executables: []
171
199
  extensions: []
172
200
  extra_rdoc_files: []
173
201
  files:
174
- - ".circleci/config.yml"
202
+ - ".github/workflows/tests.yml"
175
203
  - ".gitignore"
176
204
  - ".rspec"
177
205
  - CHANGELOG.md
@@ -185,6 +213,8 @@ files:
185
213
  - bin/rspec
186
214
  - bin/setup
187
215
  - lib/pathway.rb
216
+ - lib/pathway/plugins/auto_deconstruct_state.rb
217
+ - lib/pathway/plugins/auto_deconstruct_state/ruby3.rb
188
218
  - lib/pathway/plugins/dry_validation.rb
189
219
  - lib/pathway/plugins/dry_validation/v0_11.rb
190
220
  - lib/pathway/plugins/dry_validation/v0_12.rb
@@ -225,7 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
255
  - !ruby/object:Gem::Version
226
256
  version: '0'
227
257
  requirements: []
228
- rubygems_version: 3.0.8
258
+ rubygems_version: 3.3.7
229
259
  signing_key:
230
260
  specification_version: 4
231
261
  summary: Define your business logic in simple steps.
data/.circleci/config.yml DELETED
@@ -1,38 +0,0 @@
1
- version: 2.0
2
- shared: &shared
3
- steps:
4
- - checkout
5
- - run:
6
- name: Bundle gems
7
- command: |
8
- echo '--no-rdoc --no-ri' > '.gemrc'
9
- bundle install --jobs=4 --retry=3 --path vendor/bundle
10
- - run:
11
- name: Run tests
12
- command: bundle exec rspec --format documentation --color --format progress spec
13
-
14
- jobs:
15
- "ruby-2.4":
16
- <<: *shared
17
- docker:
18
- - image: circleci/ruby:2.4
19
-
20
- "ruby-2.5":
21
- <<: *shared
22
- docker:
23
- - image: circleci/ruby:2.5
24
-
25
- "ruby-2.6":
26
- <<: *shared
27
- docker:
28
- - image: circleci/ruby:2.6
29
- environment:
30
- REPORT_COVERAGE: 'true'
31
-
32
- workflows:
33
- version: 2
34
- build:
35
- jobs:
36
- - "ruby-2.4"
37
- - "ruby-2.5"
38
- - "ruby-2.6"