simpler_command 0.1.0 → 0.1.1

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: 667240bb9109486b654cb65b71cec68f795d260883567c696e8fef2051dfe8f0
4
- data.tar.gz: 58899bb01b7775769a386432010de4044120a8b2ee2e6c84f5cff55783c2083a
3
+ metadata.gz: c3e58436c2fc52ade4f02eaa5b14e3f733b18862e362c3d1d63091b094e5646d
4
+ data.tar.gz: 8b86650fc4e3c88bd91ab2e2a4dafcef03ac3e20dc97eb7c90fd3da1f1426579
5
5
  SHA512:
6
- metadata.gz: a6561d0f75b6dbcde6a8246c32d5943f29fcd988eb81760c29d00f6f190b5ba121a371af2f75d2d3b6ff3b2d86d721aa9e2152694f105ab76a690d8b19251153
7
- data.tar.gz: 566d35c4e9c1bea2ace1f2f9f1cf9d47693013005ea4956143da4d424498a99e6a9a51d31fadf9976dc48b5cdff848e73e206285e03080bf93a11f31cea52b0c
6
+ metadata.gz: b7f3da130c71e7836afc642f2a675fc8eede194484e09fac52d3121b901bc93d16b70bd919c84cdfef326140ff23fa6b22befda1fdd2d65baf7d747875bf6f8c
7
+ data.tar.gz: 65516b45e517f4abfc25bcb5f8ede605c201ae29a7f75d8c7ee03fcbf9ba823780c2b862e5ca17cd48fb3a4b9cf4b54a2d20e6c19194ce1a5f34d9bb8e6ed0d1
@@ -0,0 +1,39 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ master ]
13
+ pull_request:
14
+ branches: [ master ]
15
+
16
+ jobs:
17
+ test:
18
+
19
+ runs-on: ubuntu-latest
20
+
21
+ steps:
22
+ - uses: actions/checkout@v2
23
+ - name: Set up Ruby
24
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
25
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
26
+ # uses: ruby/setup-ruby@v1
27
+ uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
28
+ with:
29
+ ruby-version: 2.6
30
+ - name: Install dependencies
31
+ run: bundle install
32
+ - name: Run tests
33
+ run: bundle exec rake
34
+ - name: Run tests with ActiveSupport
35
+ env:
36
+ ACTIVE_SUPPORT_ENABLED: 1
37
+ run: bundle exec rake
38
+ - name: Run Code Quality Metrics
39
+ run: bundle exec rubocop
@@ -4,8 +4,19 @@
4
4
 
5
5
  ### Added
6
6
 
7
- - Initial commit
8
-
9
7
  ### Changed
10
8
 
11
9
  ### Removed
10
+
11
+ ## [0.1.1] - 2020-09-14
12
+
13
+ ### Added
14
+
15
+ - Added simpler_command generator for Rails Applications
16
+ - Added rspec:simpler_command generator for testing SimplerCommand in Rails
17
+
18
+ ## [0.1.0] - 2020-09-11
19
+
20
+ ### Added
21
+
22
+ - Initial commit
data/README.md CHANGED
@@ -67,6 +67,16 @@ class Albums::UpdateDescriptionController < ApplicationController
67
67
  end
68
68
  ```
69
69
 
70
+ ### Rails generator
71
+
72
+ For any Rails application, the easiest way to get started is by using the simpler_command generator.
73
+
74
+ ```bash
75
+ bundle exec rails generator simpler_command AddSubscriptionToUser user subscription
76
+ ```
77
+
78
+ This will generate the basic structure of your command inside the `app/commands` directory.
79
+
70
80
  ### The result object
71
81
 
72
82
  Commands are Service Objects, built with the intent of following the principles of Command-query separation: every method should either be a command that performs an action, or a query that returns data to the caller, but not both.
@@ -0,0 +1,10 @@
1
+ Description:
2
+ Generates a spec for a Command (aka Service Object).
3
+
4
+ Provide additional command arguments for parameters used by the Command
5
+
6
+ Example:
7
+ rails generate rspec:simpler_command PublishArticle article
8
+
9
+ This will create:
10
+ spec/commands/publish_article_spec.rb
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "generators/rspec"
4
+
5
+ module Rspec
6
+ module Generators
7
+ # Rspec SimplerCommand Generator.
8
+ #
9
+ # Generates a spec for a command using SimplerCommand.
10
+ #
11
+ # Provide arguments to assist with boilerplate generation of your commands.
12
+ #
13
+ # == Examples
14
+ #
15
+ # rails generator rspec:simpler_command EnableMaintainance
16
+ # # => spec/commands/enable_maintainance_spec.rb
17
+ # rails generator rspec:simpler_command PublishArticle article
18
+ # # => spec/commands/publish_article_spec.rb
19
+ class SimplerCommand < Base
20
+ source_root File.expand_path("templates", __dir__)
21
+
22
+ argument :arguments, type: :array, default: [], banner: "command arguments"
23
+
24
+ def add_command_spec
25
+ template "command_spec.rb.erb", "spec/commands/#{file_name}_spec.rb"
26
+ end
27
+
28
+ private
29
+
30
+ def argument_parameters
31
+ arguments.map(&:parameterize)
32
+ end
33
+
34
+ def method_call(call_name, parameters)
35
+ [
36
+ call_name,
37
+ parameters.any? ? "(" : "",
38
+ parameters.join(", "),
39
+ parameters.any? ? ")" : ""
40
+ ].join
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,36 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe <%= class_name %> do
4
+ describe ".call" do
5
+ subject(:response) { described_class.<%= method_call("call", argument_parameters) %> }
6
+
7
+ context "with valid parameters" do
8
+ # TODO: setup valid parameters
9
+ <%- argument_parameters.each do |arg| -%>
10
+ let(:<%= arg %>) { instance_double(<%= arg.classify %>) }
11
+ <%- end -%>
12
+
13
+ it { is_expected.to be_success }
14
+ it { expect(response.result).to be_nil }
15
+ <%- argument_parameters.each do |arg| -%>
16
+
17
+ it "interacts with <%= arg %>" do
18
+ pending "add expectations for interacting with <%= arg %>"
19
+
20
+ response
21
+
22
+ expect(<%= arg %>).to have_received(:example)
23
+ end
24
+ <%- end -%>
25
+ end
26
+
27
+ context "with invalid parameters" do
28
+ # TODO: setup invalid parameters
29
+ <%- argument_parameters.each do |arg| -%>
30
+ let(:<%= arg %>) { instance_double(<%= arg.classify %>) }
31
+ <%- end -%>
32
+
33
+ it { is_expected.to be_failure }
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,11 @@
1
+ Description:
2
+ Generates a Command (aka Service Object) using SimplerCommand.
3
+
4
+ Provide additional command arguments for parameters used by the Command
5
+
6
+ Example:
7
+ rails generate simpler_command PublishArticle article
8
+
9
+ This will create:
10
+ app/commands/publish_article.rb
11
+ spec/commands/publish_article_spec.rb
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ # SimplerCommand Generator.
4
+ #
5
+ # Generates a command using SimplerCommand.
6
+ #
7
+ # Provide arguments to assist with boilerplate generation of your commands.
8
+ #
9
+ # == Examples
10
+ #
11
+ # rails generator simpler_command EnableMaintainance # => app/commands/enable_maintainance.rb
12
+ # rails generator simpler_command PublishArticle article # => app/commands/publish_article.rb
13
+ class SimplerCommandGenerator < Rails::Generators::NamedBase
14
+ source_root File.expand_path("templates", __dir__)
15
+
16
+ argument :arguments, type: :array, default: [], banner: "command arguments"
17
+
18
+ def add_command_template
19
+ template "command.rb.erb", "app/commands/#{file_name}.rb"
20
+ end
21
+
22
+ hook_for :test_framework
23
+
24
+ private
25
+
26
+ def argument_parameters
27
+ arguments.map(&:parameterize)
28
+ end
29
+
30
+ def method_call(call_name, parameters)
31
+ parameters ||= []
32
+ [call_name, parameters.any? ? "(" : "", parameters.join(", "), parameters.any? ? ")" : ""].join
33
+ end
34
+ end
@@ -0,0 +1,41 @@
1
+ # <%= class_name %> command.
2
+ #
3
+ # === Examples
4
+ #
5
+ # <%= class_name %>.<%= method_call "call", argument_parameters %> # => response object with success? and result, or failure?
6
+ # <%= class_name %>.<%= method_call "call!", argument_parameters %> # => result, or thrown SimpleCommand::Failure
7
+ class <%= class_name %>
8
+ # put SimplerCommand before the class' ancestors chain
9
+ prepend SimplerCommand
10
+
11
+ # Uncomment for Rails I18n Error Translations
12
+ # include ActiveModel::Validations
13
+
14
+ def <%= method_call "initialize", argument_parameters %>
15
+ <%- argument_parameters.each do |arg| -%>
16
+ @<%= arg %> = <%= arg %>
17
+ <%- end -%>
18
+ end
19
+
20
+ def call
21
+ # TODO: Implement <%= class_name %> command<%- if arguments.any? -%>, e.g. <% end %>
22
+ <%- if arguments.any? -%>
23
+ # unless [<%= argument_parameters.join(", ") %>].all?(&:valid?)
24
+ <%- argument_parameters.each do |arg| -%>
25
+ # errors.merge! <%= arg %>.errors
26
+ <%- end -%>
27
+ # return
28
+ # end
29
+ #
30
+ # # do something...
31
+ #
32
+ # nil
33
+ <%- end -%>
34
+ end
35
+ <%- if arguments.any? -%>
36
+
37
+ private
38
+
39
+ attr_reader <%= argument_parameters.map { |arg| ":#{arg}" }.join(", ") %>
40
+ <%- end -%>
41
+ end
@@ -4,6 +4,8 @@ require "simpler_command/version"
4
4
  require "simpler_command/string_utils"
5
5
  require "simpler_command/errors"
6
6
 
7
+ require "simpler_command/railtie" if defined? Rails::Railtie
8
+
7
9
  # Provides a simple structure for Commands (Services).
8
10
  #
9
11
  # Prepend SimplerCommand to your Command (Service) objects and implemente a call methods.
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SimplerCommand
4
+ # SimplerCommand Railtie.
5
+ class Railtie < ::Rails::Railtie
6
+ generators do
7
+ require "generators/simpler_command/simpler_command_generator"
8
+ require "generators/rspec/simpler_command/simpler_command_generator" if defined? RSpec::Rails
9
+ end
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SimplerCommand
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
@@ -8,7 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ["Ben Morrall"]
9
9
  spec.email = ["bemo56@hotmail.com"]
10
10
 
11
- spec.summary = "Yet another simple and standardized way to build and use Commands (aka Service Objects)"
11
+ spec.summary = "Yet another simple and standardized way to build and use Commands" \
12
+ " (aka Service Objects)"
12
13
  spec.homepage = "https://github.com/bmorrall/simpler_command"
13
14
  spec.license = "MIT"
14
15
  spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simpler_command
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Morrall
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-11 00:00:00.000000000 Z
11
+ date: 2020-09-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -17,6 +17,7 @@ executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
+ - ".github/workflows/ruby.yml"
20
21
  - ".gitignore"
21
22
  - ".rspec"
22
23
  - ".rubocop.yml"
@@ -29,8 +30,15 @@ files:
29
30
  - Rakefile
30
31
  - bin/console
31
32
  - bin/setup
33
+ - lib/generators/rspec/simpler_command/USAGE
34
+ - lib/generators/rspec/simpler_command/simpler_command_generator.rb
35
+ - lib/generators/rspec/simpler_command/templates/command_spec.rb.erb
36
+ - lib/generators/simpler_command/USAGE
37
+ - lib/generators/simpler_command/simpler_command_generator.rb
38
+ - lib/generators/simpler_command/templates/command.rb.erb
32
39
  - lib/simpler_command.rb
33
40
  - lib/simpler_command/errors.rb
41
+ - lib/simpler_command/railtie.rb
34
42
  - lib/simpler_command/string_utils.rb
35
43
  - lib/simpler_command/version.rb
36
44
  - simpler_command.gemspec