nexus_cqrs 0.0.2 → 0.0.7

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: 5ba1253220a5001fa661f26e56de987cd722c82e829de410db982b9a86ab5537
4
- data.tar.gz: d9975663c85d29129aa674a8992ed22500fe18f0ba6004ddedaf5bcf2a2c733b
3
+ metadata.gz: 23309f2a97f391f3a2862722c27c512f008253c52e42340286d1d5717d854520
4
+ data.tar.gz: f5af26755f89d08af6adc420e92488e634916992dc5723dbd1f1a83bed0b990c
5
5
  SHA512:
6
- metadata.gz: 0c75bdfe91634c238f50ac20925296cf6c44982ee97148d27c38753775ebc2766be459f61cb82a862af50a470b73c200ef2b47820d60dc0edb41215366f80033
7
- data.tar.gz: ac89b393e010c8f65fd371c5a467a4e2c2c6e5eec21ec98a1997a731b6f096f6f4a8a5b25ada653995da7064bd27506a586d0d16fd4f89a6c5690d19d60e147a
6
+ metadata.gz: 428a3c2707b17c1ff953fe50a90b2fc65b50500165bc502c7c8112dd78074093e95b75bcab6efb89da8c66fd7e7012cc78dfa206a114dcfae1ac8c088e3ea862
7
+ data.tar.gz: e5fe947c629472f7ac1078ea941ffebdcb8f03c4fdc8877f759c9507f0cb90e9f93c42df87b90d892a9c403b3e429efc1f826df23ca773003bda11ae69d5a8e7
@@ -0,0 +1,16 @@
1
+ image: "ruby:2.7"
2
+
3
+ before_script:
4
+ - sudo apt-get update -qq && sudo apt-get install -y -qq sqlite3 libsqlite3-dev nodejs
5
+ - ruby -v
6
+ - which ruby
7
+ - gem install bundler --no-document
8
+ - bundle install --jobs $(nproc) "${FLAGS[@]}"
9
+
10
+ rspec:
11
+ script:
12
+ - bundle exec rspec
13
+
14
+ rubocop:
15
+ script:
16
+ - bundle exec rubocop
@@ -0,0 +1,11 @@
1
+ inherit_gem:
2
+ rubocop-shopify: rubocop.yml
3
+
4
+ AllCops:
5
+ Exclude:
6
+ - 'lib/generators/nexus_cqrs/templates/**/*.rb'
7
+
8
+ Style/GlobalVars:
9
+ Enabled: false
10
+ Style/FrozenStringLiteralComment:
11
+ Enabled: false
data/Gemfile CHANGED
@@ -1,6 +1,11 @@
1
1
  source "https://rubygems.org"
2
+ source 'https://rubygems.org'
2
3
 
3
4
  # Specify your gem's dependencies in cqrs-core.gemspec
4
5
  gemspec
5
6
 
6
- gem "rake", "~> 12.0"
7
+ gem 'rubocop'
8
+ gem 'rubocop-shopify', "~> 1.0.4", require: false
9
+
10
+ gem 'rspec'
11
+ gem 'thread_safe'
@@ -0,0 +1,58 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ nexus_cqrs (0.0.6)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ ast (2.4.1)
10
+ diff-lcs (1.4.4)
11
+ parallel (1.19.2)
12
+ parser (2.7.1.4)
13
+ ast (~> 2.4.1)
14
+ rainbow (3.0.0)
15
+ regexp_parser (1.7.1)
16
+ rexml (3.2.4)
17
+ rspec (3.9.0)
18
+ rspec-core (~> 3.9.0)
19
+ rspec-expectations (~> 3.9.0)
20
+ rspec-mocks (~> 3.9.0)
21
+ rspec-core (3.9.2)
22
+ rspec-support (~> 3.9.3)
23
+ rspec-expectations (3.9.2)
24
+ diff-lcs (>= 1.2.0, < 2.0)
25
+ rspec-support (~> 3.9.0)
26
+ rspec-mocks (3.9.1)
27
+ diff-lcs (>= 1.2.0, < 2.0)
28
+ rspec-support (~> 3.9.0)
29
+ rspec-support (3.9.3)
30
+ rubocop (0.86.0)
31
+ parallel (~> 1.10)
32
+ parser (>= 2.7.0.1)
33
+ rainbow (>= 2.2.2, < 4.0)
34
+ regexp_parser (>= 1.7)
35
+ rexml
36
+ rubocop-ast (>= 0.0.3, < 1.0)
37
+ ruby-progressbar (~> 1.7)
38
+ unicode-display_width (>= 1.4.0, < 2.0)
39
+ rubocop-ast (0.3.0)
40
+ parser (>= 2.7.1.4)
41
+ rubocop-shopify (1.0.4)
42
+ rubocop (>= 0.85, < 0.87)
43
+ ruby-progressbar (1.10.1)
44
+ thread_safe (0.3.6)
45
+ unicode-display_width (1.7.0)
46
+
47
+ PLATFORMS
48
+ ruby
49
+
50
+ DEPENDENCIES
51
+ nexus_cqrs!
52
+ rspec
53
+ rubocop
54
+ rubocop-shopify (~> 1.0.4)
55
+ thread_safe
56
+
57
+ BUNDLED WITH
58
+ 2.1.4
data/README.md CHANGED
@@ -9,7 +9,7 @@ TODO: Delete this and the text above, and describe your gem
9
9
  Add this line to your application's Gemfile:
10
10
 
11
11
  ```ruby
12
- gem 'cqrs-core'
12
+ gem 'nexus_cqrs'
13
13
  ```
14
14
 
15
15
  And then execute:
@@ -18,23 +18,14 @@ And then execute:
18
18
 
19
19
  Or install it yourself as:
20
20
 
21
- $ gem install cqrs-core
21
+ $ gem install nexus_cqrs
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ Generators can be used to aide in the creation of Commands and Queries:
26
26
 
27
- ## Development
27
+ rails g nexus_cqrs:command CommandName
28
+ rails g nexus_cqrs:query QueryName
28
29
 
29
- After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+ Once installed, a CommandBus is required to control the flow of Commands and/or Queries:
30
31
 
31
- 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).
32
-
33
- ## Contributing
34
-
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/cqrs-core. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/cqrs-core/blob/master/CODE_OF_CONDUCT.md).
36
-
37
-
38
- ## Code of Conduct
39
-
40
- Everyone interacting in the Cqrs::Core project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/cqrs-core/blob/master/CODE_OF_CONDUCT.md).
data/Rakefile CHANGED
@@ -1,2 +1,3 @@
1
1
  require "bundler/gem_tasks"
2
- task :default => :spec
2
+ require 'bundler/gem_tasks'
3
+ task(default: :spec)
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "cqrs/core"
3
+ require 'bundler/setup'
4
+ require 'cqrs/core'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,5 @@ require "cqrs/core"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start(__FILE__)
@@ -5,8 +5,25 @@ module NexusCqrs
5
5
  source_root File.expand_path('templates', __dir__)
6
6
 
7
7
  def copy_command_file
8
- template "command.rb", "app/domain/commands/#{file_name}.rb"
9
- template "command_handler.rb", "app/domain/commands/#{file_name}_handler.rb"
8
+ # TODO: add namespace support
9
+ full_name = file_name
10
+
11
+ template('command.rb', "app/domain/commands/#{full_name}.rb")
12
+ template('command_handler.rb', "app/domain/commands/#{full_name}_handler.rb")
13
+
14
+ register_command(full_name)
15
+ end
16
+
17
+ def register_command(full_name)
18
+ handler_config = 'config/initializers/register_cqrs_handlers.rb'
19
+
20
+ unless File.exist?('config/initializers/register_cqrs_handlers.rb')
21
+ template('register_cqrs_handlers.rb', handler_config)
22
+ end
23
+
24
+ code_to_inject = "$QUERY_EXECUTOR.register_command(#{full_name}, #{full_name}Handler)"
25
+
26
+ inject_into_file(handler_config, code_to_inject, after: '# Register Commands')
10
27
  end
11
28
  end
12
29
  end
@@ -5,8 +5,8 @@ module NexusCqrs
5
5
  source_root File.expand_path('templates', __dir__)
6
6
 
7
7
  def copy_query_file
8
- template "query.rb", "app/domain/queries/#{file_name}.rb"
9
- template "query_handler.rb", "app/domain/queries/#{file_name}_handler.rb"
8
+ template('query.rb', "app/domain/queries/#{file_name}.rb")
9
+ template('query_handler.rb', "app/domain/queries/#{file_name}_handler.rb")
10
10
  end
11
11
  end
12
12
  end
@@ -1,5 +1,5 @@
1
1
  module Commands
2
- class <%= class_name %> < BaseCommand
2
+ class <%= class_name %> < NexusCqrs::BaseCommand
3
3
 
4
4
  # Define attributes for this command
5
5
  attr_accessor :id
@@ -1,5 +1,5 @@
1
1
  module Commands
2
- class <%= class_name %>Handler < BaseCommandHandler
2
+ class <%= class_name %>Handler < NexusCqrs::BaseCommandHandler
3
3
 
4
4
  # call is where the Command is executed
5
5
  def call(command)
@@ -1,5 +1,5 @@
1
1
  module Queries
2
- class <%= class_name %> < BaseQuery
2
+ class <%= class_name %> < NexusCqrs::BaseQuery
3
3
 
4
4
  # Define attributes for this query
5
5
  attr_accessor :id
@@ -1,5 +1,5 @@
1
1
  module Queries
2
- class <%= class_name %>Handler < BaseQueryHandler
2
+ class <%= class_name %>Handler < NexusCqrs::BaseQueryHandler
3
3
 
4
4
  # call is where the Query is executed
5
5
  def call(command)
@@ -0,0 +1,9 @@
1
+ command_bus = NexusCqrs::CommandBus.new
2
+ query_bus = NexusCqrs::CommandBus.new
3
+
4
+ $COMMAND_EXECUTOR = NexusCqrs::CommandExecutor.new command_bus
5
+ $QUERY_EXECUTOR = NexusCqrs::CommandExecutor.new query_bus
6
+
7
+ # Register Queries
8
+
9
+ # Register Commands
@@ -0,0 +1,11 @@
1
+ require 'nexus_cqrs/base_command'
2
+ require 'nexus_cqrs/base_command_handler'
3
+ require 'nexus_cqrs/base_query'
4
+ require 'nexus_cqrs/base_query_handler'
5
+ require 'nexus_cqrs/command_bus'
6
+ require 'nexus_cqrs/command_executor'
7
+ require 'nexus_cqrs/helpers'
8
+
9
+ module NexusCqrs
10
+ class Error < StandardError; end
11
+ end
@@ -1,5 +1,4 @@
1
1
  module NexusCqrs
2
2
  class BaseCommand
3
-
4
3
  end
5
- end
4
+ end
@@ -1,4 +1,6 @@
1
1
  module NexusCqrs
2
2
  class BaseCommandHandler
3
+ def call(command)
4
+ end
3
5
  end
4
- end
6
+ end
@@ -1,4 +1,4 @@
1
1
  module NexusCqrs
2
2
  class BaseQuery
3
3
  end
4
- end
4
+ end
@@ -1,4 +1,4 @@
1
1
  module NexusCqrs
2
2
  class BaseQueryHandler
3
3
  end
4
- end
4
+ end
@@ -7,21 +7,29 @@ module NexusCqrs
7
7
 
8
8
  def initialize
9
9
  @handlers =
10
- ThreadSafe::Cache.new
10
+ ThreadSafe::Cache.new
11
11
  end
12
12
 
13
13
  def register(klass, handler)
14
- raise MultipleHandlers.new("Multiple handlers not allowed for #{klass}") if handlers[klass]
14
+ raise MultipleHandlers, "Multiple handlers not allowed for #{klass}" if handlers[klass]
15
+
15
16
  handlers[klass] = handler
16
17
  end
17
18
 
18
19
  def call(command)
20
+ unregistered_handler = proc { raise UnregisteredHandler, "Missing handler for #{command.class}" }
21
+
22
+ handlers
23
+ .fetch(command.class, &unregistered_handler)
24
+ .call(command)
25
+ end
26
+
27
+ def registered_handlers
19
28
  handlers
20
- .fetch(command.class) { raise UnregisteredHandler.new("Missing handler for #{command.class}") }
21
- .(command)
22
29
  end
23
30
 
24
31
  private
32
+
25
33
  attr_reader :handlers
26
34
  end
27
- end
35
+ end
@@ -1,18 +1,24 @@
1
1
  module NexusCqrs
2
2
  class CommandExecutor
3
- def initialize
4
- @bus = CommandBus.new
3
+ def initialize(command_bus)
4
+ @bus = command_bus
5
5
 
6
6
  register_commands
7
7
  end
8
8
 
9
9
  def execute(command)
10
- @bus.(command)
10
+ @bus.call(command)
11
+ end
12
+
13
+ def register_command(klass, handler)
14
+ Rails.logger.debug("Registered #{klass} to #{handler}")
15
+ @bus.register(klass, handler)
11
16
  end
12
17
 
13
18
  private
14
- def register_commands
15
- # TODO, Register Commands/Queries
16
- end
19
+
20
+ def register_commands
21
+ # TODO, Register Commands/Queries
22
+ end
17
23
  end
18
- end
24
+ end
@@ -12,7 +12,7 @@ module NexusCqrs
12
12
 
13
13
  # Provide access to the CQRS executor
14
14
  def command_executor
15
- @command_executor ||= NexusCqrs::CommandExecutor.new
15
+ @command_executor ||= $COMMAND_EXECUTOR
16
16
  end
17
17
  end
18
- end
18
+ end
@@ -1,3 +1,3 @@
1
1
  module NexusCqrs
2
- VERSION = "0.0.2"
2
+ VERSION = '0.0.7'
3
3
  end
@@ -1,23 +1,20 @@
1
1
  require_relative 'lib/nexus_cqrs/version'
2
2
 
3
3
  Gem::Specification.new do |spec|
4
- spec.name = "nexus_cqrs"
4
+ spec.name = 'nexus_cqrs'
5
5
  spec.version = NexusCqrs::VERSION
6
- spec.authors = ["Dean Lovett"]
7
- spec.email = ["dean.lovett@nexusmods.com"]
6
+ spec.authors = ['Dean Lovett']
7
+ spec.email = ['dean.lovett@nexusmods.com']
8
8
 
9
- spec.summary = %q{Core package for the nexus cqrs gem}
10
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
9
+ spec.summary = 'Core package for the nexus cqrs gem'
10
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
11
11
 
12
12
  # Specify which files should be added to the gem when it is released.
13
13
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
14
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
15
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
14
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
15
+ %x(git ls-files -z).split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
16
  end
17
- spec.bindir = "exe"
17
+ spec.bindir = 'exe'
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
- spec.require_paths = ["lib"]
20
-
21
- spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rails", "~> 5"
19
+ spec.require_paths = ['lib']
23
20
  end
metadata CHANGED
@@ -1,43 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nexus_cqrs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dean Lovett
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-20 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.3'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.3'
27
- - !ruby/object:Gem::Dependency
28
- name: rails
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '5'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '5'
11
+ date: 2020-08-24 00:00:00.000000000 Z
12
+ dependencies: []
41
13
  description:
42
14
  email:
43
15
  - dean.lovett@nexusmods.com
@@ -46,8 +18,11 @@ extensions: []
46
18
  extra_rdoc_files: []
47
19
  files:
48
20
  - ".gitignore"
21
+ - ".gitlab-ci.yml"
22
+ - ".rubocop.yml"
49
23
  - CODE_OF_CONDUCT.md
50
24
  - Gemfile
25
+ - Gemfile.lock
51
26
  - README.md
52
27
  - Rakefile
53
28
  - bin/console
@@ -59,6 +34,8 @@ files:
59
34
  - lib/generators/nexus_cqrs/templates/command_handler.rb
60
35
  - lib/generators/nexus_cqrs/templates/query.rb
61
36
  - lib/generators/nexus_cqrs/templates/query_handler.rb
37
+ - lib/generators/nexus_cqrs/templates/register_cqrs_handlers.rb
38
+ - lib/nexus_cqrs.rb
62
39
  - lib/nexus_cqrs/base_command.rb
63
40
  - lib/nexus_cqrs/base_command_handler.rb
64
41
  - lib/nexus_cqrs/base_query.rb