navigable 1.3.0 → 1.4.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 +4 -4
- data/README.md +3 -17
- data/lib/navigable.rb +1 -0
- data/lib/navigable/command.rb +16 -13
- data/lib/navigable/dispatcher.rb +2 -2
- data/lib/navigable/executor.rb +9 -0
- data/lib/navigable/observable.rb +13 -23
- data/lib/navigable/observer.rb +17 -15
- data/lib/navigable/observer_interface.rb +5 -7
- data/lib/navigable/observer_map.rb +15 -0
- data/lib/navigable/resolver.rb +13 -11
- data/lib/navigable/version.rb +1 -1
- data/navigable.gemspec +1 -0
- metadata +18 -3
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb34750833af0f6d8cd1acbd902c18aac498d4f4ccc7395aaec1013f9a558b99
|
4
|
+
data.tar.gz: b7724f9edac3d02dd90c7f26b8a3713b2449700a3e89a68d43e439927d954571
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 202e9957715004b886d76be87d2b6c856809b4ca04b2f9a62432f460dc2c3f28f8cd31a13bd2cf85bfed329765c6082fb40ccee3ee0c666b930c499517c818ec
|
7
|
+
data.tar.gz: e7dfad712e84d3c7339ba71749c4525e36e1b087cccaaca074e6967b509fb192f70b750460881cbc7ba194955cde4dd687e21eb4bac3b3cefb2cb6e2e74f14af
|
data/README.md
CHANGED
@@ -32,22 +32,13 @@ A simple, highly-performant, Rack-based router.
|
|
32
32
|
**[Navigable Server][server]** *(coming soon)*<br>
|
33
33
|
A Rack-based server for building Ruby and Navigable web applications.
|
34
34
|
|
35
|
-
</td>
|
36
|
-
</tr>
|
37
|
-
<tr height="140">
|
38
|
-
<td width="130"><img alt="Telescope" src="https://raw.githubusercontent.com/first-try-software/navigable/main/assets/telescope.png"></td>
|
39
|
-
<td>
|
40
|
-
|
41
|
-
**Navigable API** *(coming soon)*<br>
|
42
|
-
An extension of Navigable Server for building restful JSON APIs.
|
43
|
-
|
44
35
|
</td>
|
45
36
|
</tr>
|
46
37
|
<tr height="140">
|
47
38
|
<td width="130"><img alt="Map" src="https://raw.githubusercontent.com/first-try-software/navigable/main/assets/map.png"></td>
|
48
39
|
<td>
|
49
40
|
|
50
|
-
**Navigable GraphQL** *(coming soon)*<br>
|
41
|
+
**[Navigable GraphQL][graphql]** *(coming soon)*<br>
|
51
42
|
An extension of Navigable Server for building GraphQL APIs.
|
52
43
|
|
53
44
|
</td>
|
@@ -195,12 +186,6 @@ Or install it yourself as:
|
|
195
186
|
|
196
187
|
$ gem install navigable
|
197
188
|
|
198
|
-
## Development
|
199
|
-
|
200
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
201
|
-
|
202
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
203
|
-
|
204
189
|
## Contributing
|
205
190
|
|
206
191
|
Bug reports and pull requests are welcome on GitHub at https://github.com/first-try-software/navigable.
|
@@ -222,4 +207,5 @@ Everyone interacting in the Navigable project's codebases, issue trackers, chat
|
|
222
207
|
[wiki]: https://github.com/first-try-software/navigable/wiki
|
223
208
|
[navigable]: https://github.com/first-try-software/navigable
|
224
209
|
[router]: https://github.com/first-try-software/navigable-router
|
225
|
-
[server]: https://github.com/first-try-software/navigable-server
|
210
|
+
[server]: https://github.com/first-try-software/navigable-server
|
211
|
+
[graphql]: https://github.com/first-try-software/navigable-graphql
|
data/lib/navigable.rb
CHANGED
data/lib/navigable/command.rb
CHANGED
@@ -11,25 +11,28 @@ module Navigable
|
|
11
11
|
|
12
12
|
def self.extended(base)
|
13
13
|
base.extend(Manufacturable::Item)
|
14
|
+
base.extend(ClassMethods)
|
14
15
|
base.include(Observable)
|
16
|
+
base.include(InstanceMethods)
|
17
|
+
end
|
15
18
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
19
|
+
module ClassMethods
|
20
|
+
def corresponds_to(key)
|
21
|
+
super(key, TYPE)
|
20
22
|
end
|
23
|
+
end
|
21
24
|
|
22
|
-
|
23
|
-
|
25
|
+
module InstanceMethods
|
26
|
+
attr_reader :params, :observers, :resolver
|
24
27
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
28
|
+
def inject(params: {}, observers: [], resolver: NullResolver.new)
|
29
|
+
@params = params
|
30
|
+
@observers = observers
|
31
|
+
@resolver = resolver
|
32
|
+
end
|
29
33
|
|
30
|
-
|
31
|
-
|
32
|
-
end
|
34
|
+
def execute
|
35
|
+
raise NotImplementedError.new(EXECUTE_NOT_IMPLEMENTED_MESSAGE)
|
33
36
|
end
|
34
37
|
end
|
35
38
|
end
|
data/lib/navigable/dispatcher.rb
CHANGED
@@ -25,7 +25,7 @@ module Navigable
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def observers
|
28
|
-
Manufacturable.build_all(Observer::TYPE, key) { |observer| observer.inject(params: params) }
|
28
|
+
Manufacturable.build_all(Observer::TYPE, key) { |observer| observer.inject(params: params) }
|
29
29
|
end
|
30
30
|
|
31
31
|
def command
|
@@ -33,7 +33,7 @@ module Navigable
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def build_command
|
36
|
-
Manufacturable.build_one(Command::TYPE, key) { |command| command.inject(params: params, observers: observers) }
|
36
|
+
Manufacturable.build_one(Command::TYPE, key) { |command| command.inject(params: params, observers: observers, resolver: resolver) }
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
data/lib/navigable/observable.rb
CHANGED
@@ -1,39 +1,29 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
|
+
require 'navigable/observer_map'
|
4
|
+
require 'navigable/executor'
|
5
|
+
|
3
6
|
module Navigable
|
4
7
|
module Observable
|
5
8
|
OBSERVERS_NOT_IMPLEMENTED_MESSAGE = 'Class must implement `observers` method.'
|
9
|
+
RESOLVER_NOT_IMPLEMENTED_MESSAGE = 'Class must implement `resolver` method.'
|
6
10
|
|
7
11
|
def observers
|
8
12
|
raise NotImplementedError.new(OBSERVERS_NOT_IMPLEMENTED_MESSAGE)
|
9
13
|
end
|
10
14
|
|
11
|
-
def
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
def failed_to_validate(*args)
|
16
|
-
observers.each { |observer| observer.on_failure_to_validate(*args) }
|
17
|
-
end
|
18
|
-
|
19
|
-
def failed_to_find(*args)
|
20
|
-
observers.each { |observer| observer.on_failure_to_find(*args) }
|
15
|
+
def resolver
|
16
|
+
raise NotImplementedError.new(RESOLVER_NOT_IMPLEMENTED_MESSAGE)
|
21
17
|
end
|
22
18
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
observers.each { |observer| observer.on_failure_to_update(*args) }
|
29
|
-
end
|
30
|
-
|
31
|
-
def failed_to_delete(*args)
|
32
|
-
observers.each { |observer| observer.on_failure_to_delete(*args) }
|
33
|
-
end
|
19
|
+
ObserverMap::METHODS.each_pair do |observable_method, observer_method|
|
20
|
+
define_method(observable_method) do |*args, **kwargs|
|
21
|
+
observers.each do |observer|
|
22
|
+
Navigable::Executor.execute { observer.send(observer_method, *args, **kwargs) }
|
23
|
+
end
|
34
24
|
|
35
|
-
|
36
|
-
|
25
|
+
resolver.send(observer_method, *args, **kwargs)
|
26
|
+
end
|
37
27
|
end
|
38
28
|
end
|
39
29
|
end
|
data/lib/navigable/observer.rb
CHANGED
@@ -8,28 +8,30 @@ module Navigable
|
|
8
8
|
|
9
9
|
def self.extended(base)
|
10
10
|
base.extend(Manufacturable::Item)
|
11
|
+
base.extend(ClassMethods)
|
11
12
|
base.include(ObserverInterface)
|
13
|
+
base.include(InstanceMethods)
|
14
|
+
end
|
12
15
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
16
|
+
module ClassMethods
|
17
|
+
def observes_all_commands
|
18
|
+
corresponds_to_all(TYPE)
|
19
|
+
end
|
17
20
|
|
18
|
-
|
19
|
-
|
20
|
-
end
|
21
|
+
def observes(key)
|
22
|
+
corresponds_to(key, TYPE)
|
21
23
|
end
|
24
|
+
end
|
22
25
|
|
23
|
-
|
24
|
-
|
26
|
+
module InstanceMethods
|
27
|
+
attr_reader :params
|
25
28
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
+
def inject(params: {})
|
30
|
+
@params = params
|
31
|
+
end
|
29
32
|
|
30
|
-
|
31
|
-
|
32
|
-
end
|
33
|
+
def observed_command_key
|
34
|
+
manufacturable_item_key
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|
@@ -1,13 +1,11 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
|
+
require 'navigable/observer_map'
|
4
|
+
|
3
5
|
module Navigable
|
4
6
|
module ObserverInterface
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
def on_failure_to_create(*args, **kwargs); end
|
9
|
-
def on_failure_to_update(*args, **kwargs); end
|
10
|
-
def on_failure_to_delete(*args, **kwargs); end
|
11
|
-
def on_failure(*args, **kwargs); end
|
7
|
+
ObserverMap::METHODS.values.each do |observer_method|
|
8
|
+
define_method(observer_method) { |*args, **kwargs| }
|
9
|
+
end
|
12
10
|
end
|
13
11
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
3
|
+
module Navigable
|
4
|
+
class ObserverMap
|
5
|
+
METHODS = {
|
6
|
+
successfully: :on_success,
|
7
|
+
failed_to_validate: :on_failure_to_validate,
|
8
|
+
failed_to_find: :on_failure_to_find,
|
9
|
+
failed_to_create: :on_failure_to_create,
|
10
|
+
failed_to_update: :on_failure_to_update,
|
11
|
+
failed_to_delete: :on_failure_to_delete,
|
12
|
+
failed: :on_failure
|
13
|
+
}.freeze
|
14
|
+
end
|
15
|
+
end
|
data/lib/navigable/resolver.rb
CHANGED
@@ -9,22 +9,24 @@ module Navigable
|
|
9
9
|
|
10
10
|
def self.extended(base)
|
11
11
|
base.extend(Manufacturable::Item)
|
12
|
+
base.extend(ClassMethods)
|
12
13
|
base.include(ObserverInterface)
|
14
|
+
base.include(InstanceMethods)
|
15
|
+
end
|
13
16
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
17
|
+
module ClassMethods
|
18
|
+
def default_resolver
|
19
|
+
default_manufacturable(TYPE)
|
20
|
+
end
|
18
21
|
|
19
|
-
|
20
|
-
|
21
|
-
end
|
22
|
+
def resolves(key)
|
23
|
+
corresponds_to(key, TYPE)
|
22
24
|
end
|
25
|
+
end
|
23
26
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
27
|
+
module InstanceMethods
|
28
|
+
def resolve
|
29
|
+
raise NotImplementedError.new(RESOLVE_NOT_IMPLEMENTED_MESSAGE)
|
28
30
|
end
|
29
31
|
end
|
30
32
|
end
|
data/lib/navigable/version.rb
CHANGED
data/navigable.gemspec
CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
25
|
spec.require_paths = ["lib"]
|
26
26
|
|
27
|
+
spec.add_dependency "concurrent-ruby", "~> 1.1.7"
|
27
28
|
spec.add_dependency "manufacturable", "~> 1.5"
|
28
29
|
|
29
30
|
spec.add_development_dependency "bundler", "~> 2.0"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: navigable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alan Ridlehoover
|
@@ -9,8 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-10-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: concurrent-ruby
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 1.1.7
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 1.1.7
|
14
28
|
- !ruby/object:Gem::Dependency
|
15
29
|
name: manufacturable
|
16
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,7 +122,6 @@ extra_rdoc_files: []
|
|
108
122
|
files:
|
109
123
|
- ".gitignore"
|
110
124
|
- ".rspec"
|
111
|
-
- ".ruby-version"
|
112
125
|
- ".travis.yml"
|
113
126
|
- CODE_OF_CONDUCT.md
|
114
127
|
- Gemfile
|
@@ -120,10 +133,12 @@ files:
|
|
120
133
|
- lib/navigable.rb
|
121
134
|
- lib/navigable/command.rb
|
122
135
|
- lib/navigable/dispatcher.rb
|
136
|
+
- lib/navigable/executor.rb
|
123
137
|
- lib/navigable/null_resolver.rb
|
124
138
|
- lib/navigable/observable.rb
|
125
139
|
- lib/navigable/observer.rb
|
126
140
|
- lib/navigable/observer_interface.rb
|
141
|
+
- lib/navigable/observer_map.rb
|
127
142
|
- lib/navigable/resolver.rb
|
128
143
|
- lib/navigable/version.rb
|
129
144
|
- navigable.gemspec
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.7.1
|