nexus_cqrs 0.0.2 → 0.0.7

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: 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