pay_dirt 1.0.0 → 1.0.1
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/.gitignore +2 -0
- data/README.md +35 -44
- data/lib/pay_dirt/version.rb +1 -1
- data/pay_dirt.gemspec +1 -0
- data/pay_dirt.thor +86 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b0248574c00871f3ef6676055ad9fb7c48acd35
|
4
|
+
data.tar.gz: 8337f0b5fe6377dfaa00183b62465ecec055f17a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f21b11cf6ae2914e06fdc48c7ae2e7e3de1f6f4f6f47ea79ecbc22ea3ce6cb8e1325e380e7bb97ed4237333810b820cb6d9d1d017c3c51adda455dec8e5ff4d
|
7
|
+
data.tar.gz: bc92bbb77e64ad90bad2c5a0a521174d5b6f38c0e3ae827927f62f8d1698ca89f9d2d4a43d8b88557739e10c026123f95e23e3d26b0ebfd0de9c276aeb640283
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -4,62 +4,53 @@
|
|
4
4
|
|
5
5
|
Provides the basic building blocks of a pattern capable of reducing a towering codebase to modular rubble (or more Ruby gems)
|
6
6
|
|
7
|
-
There are two ways to employ the pattern:
|
7
|
+
There are two ways to employ the pattern:
|
8
8
|
|
9
9
|
1. use a class that inherits from [PayDirt::Base](https://github.com/rthbound/pay_dirt/blob/master/test/unit/pay_dirt/base_test.rb#L6-L24)
|
10
10
|
2. use a class or module that includes [PayDirt::UseCase](https://github.com/rthbound/pay_dirt/blob/master/test/unit/pay_dirt/use_case_test.rb#L6-L26)
|
11
11
|
|
12
|
-
###
|
13
|
-
Example class:
|
14
|
-
```ruby
|
15
|
-
class UseCase
|
16
|
-
include PayDirt::UseCase
|
12
|
+
### Generators
|
17
13
|
|
18
|
-
|
19
|
-
options = {
|
20
|
-
required_option_with_default_value: true
|
21
|
-
}.merge(options)
|
14
|
+
PayDirt now provides a service object generator, powered by [thor](https://github.com/erikhuda/thor). It takes a few options
|
22
15
|
|
23
|
-
|
24
|
-
end
|
16
|
+
`--dependencies` or `-d` : An array of required dependencies (this option is required)
|
25
17
|
|
26
|
-
|
27
|
-
if !@required_option_with_default_value
|
28
|
-
return PayDirt::Result.new(data: return_value, success: true)
|
29
|
-
else
|
30
|
-
return PayDirt::Result.new(data: return_value, success: false)
|
31
|
-
end
|
32
|
-
end
|
18
|
+
`--defaults` or `-D` : An optional hash of default values for dependencies
|
33
19
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
required_option2: @required_option
|
40
|
-
}
|
41
|
-
end
|
42
|
-
end
|
43
|
-
```
|
20
|
+
`--inherit` or `-i` : A boolean flag, raise it for an implementation that inherits from `PayDirt::Base` (this is default behavior)
|
21
|
+
|
22
|
+
`--include` or `-m` : A boolean flag, raise it for an implementation that includes `PayDirt::UseCase`
|
23
|
+
|
24
|
+
Example:
|
44
25
|
|
45
|
-
|
26
|
+
```
|
27
|
+
$ thor pay_dirt:service_object:new digit_check -d fingers toes -D fingers:10 toes:10
|
28
|
+
create lib/service_objects/digit_check.rb
|
29
|
+
```
|
46
30
|
|
31
|
+
Running the above generator will create the following file
|
47
32
|
```ruby
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
33
|
+
require 'pay_dirt'
|
34
|
+
|
35
|
+
module ServiceObjects
|
36
|
+
class DigitCheck < PayDirt::Base
|
37
|
+
def initialize(options = {})
|
38
|
+
options = {
|
39
|
+
fingers: 10,
|
40
|
+
toes: 10,
|
41
|
+
}.merge(options)
|
42
|
+
|
43
|
+
load_options(:fingers, :toes, options)
|
44
|
+
end
|
45
|
+
|
46
|
+
def execute!
|
47
|
+
return PayDirt::Result.new(success: true, data: nil)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
62
51
|
```
|
52
|
+
We can now call `ServiceObjects::DigitCheck.new(fingers: 10, toes: 10).execute!`
|
53
|
+
and see a successful return object. Where you take it from there is up to you.
|
63
54
|
|
64
55
|
### Other examples
|
65
56
|
1. [rubeuler](https://github.com/rthbound/rubeuler)
|
data/lib/pay_dirt/version.rb
CHANGED
data/pay_dirt.gemspec
CHANGED
data/pay_dirt.thor
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
module PayDirt
|
2
|
+
class ServiceObject < Thor
|
3
|
+
include Thor::Actions
|
4
|
+
|
5
|
+
desc "new FILE", "create a service object"
|
6
|
+
method_option :defaults,
|
7
|
+
type: :hash,
|
8
|
+
aliases: "-D",
|
9
|
+
desc: "Specify default dependencies"
|
10
|
+
|
11
|
+
method_option :dependencies,
|
12
|
+
type: :array,
|
13
|
+
aliases: "-d",
|
14
|
+
desc: "Specify required dependencies",
|
15
|
+
required: true
|
16
|
+
|
17
|
+
method_option :inherit,
|
18
|
+
type: :boolean,
|
19
|
+
desc: "Should inherit from PayDirt::Base (default)",
|
20
|
+
aliases: "-i",
|
21
|
+
default: true,
|
22
|
+
lazy_default: true
|
23
|
+
|
24
|
+
method_option :include,
|
25
|
+
type: :boolean,
|
26
|
+
desc: "Should include the PayDirt::UseCase module",
|
27
|
+
aliases: "-m",
|
28
|
+
lazy_default: true
|
29
|
+
|
30
|
+
def new(file)
|
31
|
+
rets = ""
|
32
|
+
class_names = file.split("/").map { |str| str.split("_").map{ |s| (s[0].upcase + s[1..-1]) }.join("") }
|
33
|
+
defaults = options[:defaults] || []
|
34
|
+
dependencies = options[:dependencies]
|
35
|
+
|
36
|
+
create_file "lib/service_objects/#{file}.rb" do
|
37
|
+
rets << "require 'pay_dirt'\n\n"
|
38
|
+
rets << "module ServiceObjects\n"
|
39
|
+
class_names[0..-2].each_with_index do |mod,i|
|
40
|
+
rets << (" " * ( (i+1) * 2 )) + "module #{mod}\n"
|
41
|
+
end
|
42
|
+
|
43
|
+
klass, klass_index = class_names[-1], class_names.length
|
44
|
+
|
45
|
+
if options[:include]
|
46
|
+
rets << (" " * ( klass_index * 2)) + "class #{class_names[-1]}\n"
|
47
|
+
rets << (" " * ((klass_index + 1) * 2)) + "include PayDirt::UseCase\n"
|
48
|
+
elsif options[:inherit]
|
49
|
+
rets << (" " * ( klass_index * 2)) + "class #{class_names[-1]} < PayDirt::Base\n"
|
50
|
+
end
|
51
|
+
|
52
|
+
inner_index = klass_index + 1
|
53
|
+
|
54
|
+
# The initialize method
|
55
|
+
rets << (" " * ( inner_index * 2 )) + "def initialize(options = {})\n"
|
56
|
+
|
57
|
+
# Configure dependencies' default values
|
58
|
+
if options[:defaults]
|
59
|
+
rets << (" " * ( (inner_index + 1) * 2 )) + "options = {\n"
|
60
|
+
|
61
|
+
defaults.each do |k,v|
|
62
|
+
rets << (" " * ( (inner_index + 2) * 2 )) + "#{k}: #{v}" + ",\n"
|
63
|
+
end
|
64
|
+
|
65
|
+
rets << (" " * ( (inner_index + 1) * 2 )) + "}.merge(options)\n\n"
|
66
|
+
end
|
67
|
+
|
68
|
+
rets << (" " * ( (inner_index + 1) * 2 )) + "load_options(:#{dependencies.join(', :')}, options)\n"
|
69
|
+
rets << (" " * ( inner_index * 2 )) + "end\n\n"
|
70
|
+
|
71
|
+
# The execute! method
|
72
|
+
rets << (" " * ( inner_index * 2 )) + "def execute!\n"
|
73
|
+
rets << (" " * ( (inner_index + 1) * 2 )) + "return PayDirt::Result.new(success: true, data: nil)\n"
|
74
|
+
rets << (" " * ( inner_index * 2 )) + "end\n"
|
75
|
+
|
76
|
+
rets << (" " * ( klass_index * 2)) + "end\n"
|
77
|
+
|
78
|
+
class_names[0..-1].each_with_index do |mod,i|
|
79
|
+
rets << (" " * ( (class_names.length - (i + 1)).abs * 2 )) + "end\n"
|
80
|
+
end
|
81
|
+
|
82
|
+
rets
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pay_dirt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tad Hosford
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: thor
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: coveralls
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -73,6 +87,7 @@ files:
|
|
73
87
|
- lib/pay_dirt/use_case.rb
|
74
88
|
- lib/pay_dirt/version.rb
|
75
89
|
- pay_dirt.gemspec
|
90
|
+
- pay_dirt.thor
|
76
91
|
- test/test_helper.rb
|
77
92
|
- test/unit/.gitkeep
|
78
93
|
- test/unit/pay_dirt/base_test.rb
|