duty 0.3 → 0.4.2

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
  SHA1:
3
- metadata.gz: 44ef3b279562acfd0f5516c02382a38a70778f0b
4
- data.tar.gz: fa24abb31a74a7baabcb08921377a3a1a77d3e6b
3
+ metadata.gz: 7a2fc971faafc1fa92c346f4deff2239c4ee96e9
4
+ data.tar.gz: be458adb95ddb3267909e23acba8af683c095ed7
5
5
  SHA512:
6
- metadata.gz: 07ab67f28397f6bb2457bbb0d2d665d1718800b3a4ad31a0ff302500a4c6c9511ec190d96c4c64cfc2febb557c0be3f7dc41038cc8425d8ed816cbcc40e5d310
7
- data.tar.gz: 86fe0d1b98c855524b1a962dd54f07607c70412aaf406be9fa0d4fd928ec3ded01690ec99ad21b39ed945be123d2329f0b14f1f15268f17dca2c38c03ed68e26
6
+ metadata.gz: 84c72963c7be12155cf302e81f69f3421d0eb2adbcfbac510e70ba6744a05ee06a2f1980a14f5bcbc9fbd162196be0393d8ca2b45f796406e276568b220128ac
7
+ data.tar.gz: 9383bef581a7f9630947b8788b991ba18d1a885ed3e8b1521094eb06a68fc37f96b92956c7dea046f534676a77769509a1278b3fdc7a2381b314cabb45601407
data/.duty.yml.sample CHANGED
@@ -1,4 +1,4 @@
1
1
  tasks:
2
- git: /path/to/duty-git/lib/duty/git.rb
3
- projectA: /path/to/projectA/tasks.rb
4
- projectB: /path/to/projectB/i_dont_care_about_naming.rb
2
+ - /path/to/duty-git/lib/duty/git.rb
3
+ - /path/to/projectA/tasks.rb
4
+ - /path/to/projectB/i_dont_care_about_naming.rb
data/README.md CHANGED
@@ -34,16 +34,37 @@ $ source duty.completion
34
34
  $ duty <task> [<args>]
35
35
  ```
36
36
 
37
- ## List of official duty plugins
37
+ ## Plugins
38
38
 
39
- * [duty-git](https://github.com/JanOwiesniak/duty-git)
39
+ Duty ships with a plugin mechanism.
40
+ You can define tasks by using existing duty plugins or writing your own.
41
+
42
+ ### Install a plugin
43
+
44
+ Install a plugin you want to use globally e.g.
45
+
46
+ ```
47
+ gem install duty-git
48
+ ```
40
49
 
41
- ## Extend duty with your own plugins
50
+ or add it to your `Gemfile` e.g.
42
51
 
43
- * Create a new file that implements the plugin behaviour
44
- * Create a .duty file e.g. in your project dir
52
+ ```
53
+ gem 'duty-git'
54
+ ```
45
55
 
46
- ### How does a duty plugin looks like?
56
+ Add it to your `.duty` file. e.g.
57
+
58
+ ```
59
+ tasks:
60
+ - duty/git
61
+ ```
62
+
63
+ ### List of existing duty plugins
64
+
65
+ * [duty-git](https://github.com/JanOwiesniak/duty-git)
66
+
67
+ ## Extend duty with your own plugin
47
68
 
48
69
  Example: `/path/to/your/duty-plugins/my_duty_plugin.rb`
49
70
 
@@ -51,6 +72,10 @@ Example: `/path/to/your/duty-plugins/my_duty_plugin.rb`
51
72
  require 'duty'
52
73
 
53
74
  module MyDutyPlugin
75
+ def self.namespace
76
+ 'i am special'
77
+ end
78
+
54
79
  def self.tasks
55
80
  [
56
81
  MyDutyTasks::MyFirstTask,
@@ -102,9 +127,7 @@ module MyDutyTasks
102
127
  end
103
128
  end
104
129
 
105
- # Return your duty module
106
-
107
- MyDutyPlugin
130
+ Duty::Registry.register(MyDutyPlugin)
108
131
  ```
109
132
 
110
133
  ## Task naming conventions
@@ -118,13 +141,11 @@ $ duty start-feature
118
141
 
119
142
  ### How to use my own tasks?
120
143
 
121
- Create a duty plugin and add it to your `.duty` file.
144
+ Deploy it as a gem and install it as described in the `Install a plugin` section above or link it against the absolute path in your `.duty` file.
122
145
 
123
146
  ```
124
147
  tasks:
125
- git: /path/to/duty-git/lib/duty/git.rb
126
- projectA: /path/to/projectA/my_duty_plugin.rb
127
- projectB: /path/to/projectB/i_dont_care_about_naming.rb
148
+ - /path/to/your/duty-plugins/my_duty_plugin
128
149
  ```
129
150
 
130
151
  Your new tasks will be immediately available from the CLI.
data/lib/duty/cli.rb CHANGED
@@ -12,7 +12,8 @@ module Duty
12
12
  def initialize(args)
13
13
  @input = Duty::IO::CLI::Input.new(args)
14
14
  @output = Duty::IO::CLI::Output.new($stdout, $stderr)
15
- @registry = Duty::Registry.register(Duty::Plugins.load(load_config))
15
+ @registry = Duty::Registry.instance
16
+ load_plugins
16
17
  end
17
18
 
18
19
  def exec
@@ -67,7 +68,11 @@ module Duty
67
68
  input.verbose?
68
69
  end
69
70
 
70
- def load_config
71
+ def load_plugins
72
+ Duty::Plugins.load(config)
73
+ end
74
+
75
+ def config
71
76
  Duty::ConfigLoader.new.load(Dir.pwd)
72
77
  end
73
78
  end
data/lib/duty/plugins.rb CHANGED
@@ -4,61 +4,10 @@ require 'yaml'
4
4
  module Duty
5
5
  module Plugins
6
6
  def self.load(config)
7
- Duty::Plugins::List.new.tap do |list|
8
- config["tasks"].each do |namespace, plugin_entry_point|
9
- list << Plugin.new(namespace, plugin_entry_point)
10
- end
11
- end
12
- end
13
-
14
- class List
15
- require 'forwardable'
16
- include Enumerable
17
- extend Forwardable
18
- def_delegators :@plugins, :each, :<<
19
- def initialize
20
- @plugins = []
21
- end
22
- end
23
-
24
- class Plugin
25
- def initialize(namespace, entry)
26
- @namespace = namespace
27
- @entry = entry
28
- @tasks = []
29
- end
30
-
31
- def namespace
32
- @namespace
33
- end
34
-
35
- def tasks
36
- @task_classes.select do |task_class|
37
- valid?(task_class)
38
- end
39
- end
40
-
41
- def load_tasks
42
- require_tasks
43
- expose_tasks
44
- end
45
-
46
- private
47
-
48
- def require_tasks
49
- path = @entry.gsub(/\.rb/,'')
7
+ config["tasks"].each do |plugin_entry_point|
8
+ path = plugin_entry_point.gsub(/\.rb/,'')
50
9
  require path
51
10
  end
52
-
53
- def expose_tasks
54
- @task_classes = eval(File.read(@entry)).tasks
55
- end
56
-
57
- private
58
-
59
- def valid?(task_class)
60
- task_class.ancestors.include? ::Duty::Tasks::Base
61
- end
62
11
  end
63
12
  end
64
13
  end
data/lib/duty/registry.rb CHANGED
@@ -1,16 +1,30 @@
1
1
  module Duty
2
2
  class Registry
3
- def self.register(plugins = [])
4
- new(plugins).tap {|registry| registry.load_tasks }
3
+ def self.instance
4
+ return @instance if @instance
5
+ @instance = new
5
6
  end
6
7
 
7
- attr_reader :plugins
8
- def initialize(plugins)
9
- @plugins = plugins
8
+ def self.register(plugin_class)
9
+ instance.send(:plugins) << Plugin.new(plugin_class)
10
10
  end
11
11
 
12
- def load_tasks
13
- plugins.each {|plugin| plugin.load_tasks }
12
+ def plugins
13
+ @plugins
14
+ end
15
+
16
+ private
17
+
18
+ class Plugin
19
+ attr_reader :namespace, :tasks
20
+ def initialize(plugin_class)
21
+ @namespace = plugin_class.namespace
22
+ @tasks = plugin_class.tasks
23
+ end
24
+ end
25
+
26
+ def initialize
27
+ @plugins = []
14
28
  end
15
29
  end
16
30
  end
data/lib/duty/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Duty
2
- VERSION = "0.3"
2
+ VERSION = "0.4.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: duty
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.3'
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Owiesniak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-30 00:00:00.000000000 Z
11
+ date: 2015-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake