lolcommits-sample_plugin 0.0.1 → 0.0.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
- SHA1:
3
- metadata.gz: 7ffe2fc5bb37796e2caa83cdc405f1ab4808549f
4
- data.tar.gz: c619b4df32c1e19f25d3bbce19a7b84fd0ee549c
2
+ SHA256:
3
+ metadata.gz: 458f611a07c9da71c65f2158fa4d3c28882c9c9955666e08ae3ad3f80ca9eceb
4
+ data.tar.gz: 11ef71f56de73bc96d06f0e24fd0d20e2fe731c15ef23a6da495db50f15cfa9a
5
5
  SHA512:
6
- metadata.gz: d453e58648d7b88bd2a8d7b842ae99779b05a90ddc80405f3181b0c9f5c9a267f50509bfc770dad363e56dbcca22de8bec2190d29462e90d665fb881de67bb34
7
- data.tar.gz: 3bac9cf3fcd42827acac4ae7834b3f889d0cc21db2cbef0596a01de2e3c3bdd79c7d0ea5858f7aebaf606c72771b33d49e2566afb5b280149a4ce6132f1ad59f
6
+ metadata.gz: 3ede2aeb0f2b4d3ac198b0d0ed3d9ab39e9df9e4fd9a213df9fd0ea7900fcf43714a906fda0e83d66ab785fc918f9d8ea867ba941e895c22915460f27836cc9a
7
+ data.tar.gz: c5103c9f2e1272427d3e04a58c0fc74e2511d1703501063c62c5c43d850be66fb4b51e9970dd88519ca6d5b11e7575b00759708fecaa2f981c8e2e0bf086dc26
data/.travis.yml CHANGED
@@ -4,13 +4,14 @@ cache: bundler
4
4
  rvm:
5
5
  - 2.0.0
6
6
  - 2.1.10
7
- - 2.2.8
8
- - 2.3.5
9
- - 2.4.2
7
+ - 2.2.9
8
+ - 2.3.6
9
+ - 2.4.3
10
+ - 2.5.0
10
11
  - ruby-head
11
12
 
12
13
  before_install:
13
- - gem install bundler -v 1.13.7
14
+ - gem update --system
14
15
  - git --version
15
16
  - git config --global user.email "lol@commits.org"
16
17
  - git config --global user.name "Lolcommits"
@@ -5,17 +5,21 @@ module Lolcommits
5
5
  class SamplePlugin < Base
6
6
 
7
7
  ##
8
- # Returns the name of the plugin.
8
+ # Plugin initializer
9
+ #
10
+ # @param runner [Lolcommits::Runner] an instance of a lolcommits runner
11
+ # @param config [Hash] plugin config hash (parsed from saved config YAML)
9
12
  #
10
- # Identifies the plugin to lolcommits. This should be uniq and
11
- # descriptive.
13
+ # The default superclass method sets @runner and @configuration instance
14
+ # vars and @options to `[:enabled]`
12
15
  #
13
- # @return [String] the plugin name
16
+ # Override this method to change the default configurable option names
14
17
  #
15
- def self.name
16
- 'plugin-sample'
18
+ def initialize(runner: nil, config: nil)
19
+ super
17
20
  end
18
21
 
22
+ ##
19
23
  # Returns position(s) of when this plugin should run during the capture
20
24
  # process.
21
25
  #
@@ -31,24 +35,6 @@ module Lolcommits
31
35
  [:pre_capture, :post_capture, :capture_ready]
32
36
  end
33
37
 
34
- ##
35
- #
36
- # Plugin initializer
37
- #
38
- # @param runner [Lolcommits::Runner] a instance of a lolcommits runner
39
- # @param config [Lolcommits::Configuration] (optional)
40
- #
41
- # The default superclass method sets @runner and @config instance vars and
42
- # the default plugin option key `@options = ['enabled']`. `@runner.config`
43
- # is used if no `config` parameter is passed.
44
- #
45
- # Override this method to change the default options, or assign any useful
46
- # variables necessary for the plugin to run.
47
- #
48
- def initialize(runner: nil, config: nil)
49
- super
50
- end
51
-
52
38
  ##
53
39
  #
54
40
  # Pre-capture hook, runs before lolcommits captures a snapshot.
@@ -59,20 +45,21 @@ module Lolcommits
59
45
  # Prints a short (emoji themed) message to STDOUT
60
46
  #
61
47
  def run_pre_capture
62
- puts "✨ Say cheese 😁 !"
48
+ puts "✨ Say cheese 😁 !" if config_option(:ask_for_cheese)
63
49
  end
64
50
 
65
51
  ##
66
52
  #
67
53
  # Post-capture hook, run after lolcommits captures a snapshot.
68
54
  #
69
- # Override this method to execute plugin code after the lolcommit
70
- # snapshot is captured.
55
+ # Override this method to execute plugin code after the lolcommit snapshot
56
+ # is captured.
71
57
  #
72
58
  # Prints a short (emoji themed) message to STDOUT
73
59
  #
74
60
  def run_post_capture
75
- puts "📸 Snap "
61
+ return unless config_option(:camera_emoji, :enabled)
62
+ puts "#{"📸 " * config_option(:camera_emoji, :emoji_multiplier).to_i}Snap!"
76
63
  end
77
64
 
78
65
  ##
@@ -87,19 +74,24 @@ module Lolcommits
87
74
  # sha.
88
75
  #
89
76
  def run_capture_ready
90
- puts "✨ wow! #{self.runner.sha} is your best looking commit yet! 😘 💻"
77
+ if config_option(:always_a_great_commit?)
78
+ puts "✨ wow! #{self.runner.sha} is your best looking commit yet! 😘 💻"
79
+ end
91
80
  end
92
81
 
93
82
  ##
94
83
  # Returns true/false indicating if the plugin is enabled or not.
95
84
  #
96
- # The default superclass method will return true if the enabled option is
97
- # true e.g. configuration['enabled'] == true
85
+ # The default superclass method returns true if the enabled option is true
86
+ # i.e. configuration[:enabled] == true
98
87
  #
99
- # Override this method to define your own custom enabled logic. E.g. check
100
- # for valid or required configuration options to be set. If this method
101
- # always returns true, the only way to disable the plugin will be to
102
- # uninstall the gem.
88
+ # Override this method to define your own custom enabled logic. If this
89
+ # method always returns true, the only way to disable the plugin will be
90
+ # to uninstall the gem.
91
+ #
92
+ # Note: a `valid_configuration?` method also exists and is checked before
93
+ # any plugin hooks execute. Use that to check individual config option
94
+ # values.
103
95
  #
104
96
  # @return [Boolean] true/false indicating if plugin is enabled
105
97
  #
@@ -108,56 +100,67 @@ module Lolcommits
108
100
  end
109
101
 
110
102
  ##
111
- # Prompts the user to configure the plugin's options.
103
+ # Prompts the user to configure all plugin options.
104
+ #
105
+ # Available options can be defined in an Array (@options instance var)
106
+ # and/or a Hash (by overriding the `default_options` method).
112
107
  #
113
- # The default superclass method will iterate over the @options array and
114
- # build a configuration hash, prompting for user input on each option key.
108
+ # By default (on initialize), `@options` is set with `[:enabled]`. This is
109
+ # mandatory since `enabled?` checks this option is true before running any
110
+ # capture hooks.
115
111
  #
116
- # Lolcommits will save this configuration hash to its default config file
117
- # (YAML). This config Hash is loaded and parsed during the capturing
118
- # process and available in this plugin class via the configuration method.
112
+ # Using a Hash to define default options allows you to:
119
113
  #
120
- # Override this method to define your own configuration flow. A helpful
121
- # parse_user_input method is available to help parse strings from STDIN.
114
+ # - fall back to default values
115
+ # - define nested options, user is prompted for each nested option key
122
116
  #
123
- # @return [Hash] a hash of configured plugin options
117
+ # `configure_option_hash` will iterate over all options prompting the user
118
+ # for input and building the configuration Hash.
119
+ #
120
+ # Lolcommits will save this Hash to a YAML file. During the capture
121
+ # process the configuration is loaded, parsed and available in the plugin
122
+ # class as `@configuration`. Or if you want to fall back to default
123
+ # values, you should use `config_option` to dig the hash.
124
+ #
125
+ # Alternatively you can override this method entirely to customise the
126
+ # process. A helpful `parse_user_input` method is available to help parse
127
+ # strings from STDIN (into boolean, integer or nil values).
128
+ #
129
+ # @return [Hash] the configured plugin options
124
130
  #
125
131
  def configure_options!
126
132
  super
127
133
  end
128
134
 
135
+ def default_options
136
+ {
137
+ ask_for_cheese: true,
138
+ always_a_great_commit?: true,
139
+ camera_emoji: {
140
+ enabled: false,
141
+ emoji_multiplier: 2
142
+ }
143
+ }
144
+ end
145
+
129
146
  ##
130
147
  # Returns true/false indicating if the plugin has been correctly
131
148
  # configured.
132
149
  #
133
- # The default superclass method calls configured?. When false a message is
134
- # shown explaining the plugin has not yet been configured, with help on
135
- # how to configure it.
150
+ # The default superclass method simply checks if `@configuration` is
151
+ # present (not empty).
136
152
  #
137
- # Override this method to define your own configuration checks and
138
- # messaging.
153
+ # By default if this method returns false, plugin hooks will not execute
154
+ # and a warning message is shown prompting the user to re-configure the
155
+ # plugin.
139
156
  #
140
- # This method must return true for the plugin to execute. It is checked by
141
- # the lolcommits runner prior to running a pre or post capture hook.
157
+ # Override to define your own configuration checks and/or messaging.
142
158
  #
143
159
  # @return [Boolean] true/false indicating if plugin is correct configured
144
160
  #
145
161
  def valid_configuration?
146
162
  super
147
163
  end
148
-
149
- ##
150
- # Returns true/false indicating if the plugin has been configured.
151
- #
152
- # The default superclass method checks if the configuration hash is empty.
153
- # Override this method to define your own check on whether configuration
154
- # has taken place.
155
- #
156
- # @return [Boolean] true/false indicating if plugin has been configured
157
- #
158
- def configured?
159
- super
160
- end
161
164
  end
162
165
  end
163
166
  end
@@ -1,5 +1,5 @@
1
1
  module Lolcommits
2
2
  module SamplePlugin
3
- VERSION = "0.0.1".freeze
3
+ VERSION = "0.0.2".freeze
4
4
  end
5
5
  end
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
32
32
 
33
33
  spec.required_ruby_version = ">= 2.0.0"
34
34
 
35
- spec.add_development_dependency "lolcommits", ">= 0.9.8"
35
+ spec.add_development_dependency "lolcommits", ">= 0.10.0"
36
36
  spec.add_development_dependency "bundler"
37
37
  spec.add_development_dependency "rake"
38
38
  spec.add_development_dependency "minitest"
@@ -14,9 +14,7 @@ describe Lolcommits::Plugin::SamplePlugin do
14
14
  describe 'with a runner' do
15
15
  def runner
16
16
  # a simple lolcommits runner with an empty configuration Hash
17
- @runner ||= Lolcommits::Runner.new(
18
- config: OpenStruct.new(read_configuration: {})
19
- )
17
+ @runner ||= Lolcommits::Runner.new
20
18
  end
21
19
 
22
20
  def plugin
@@ -24,22 +22,18 @@ describe Lolcommits::Plugin::SamplePlugin do
24
22
  end
25
23
 
26
24
  def valid_enabled_config
27
- @config ||= OpenStruct.new(
28
- read_configuration: {
29
- plugin.class.name => { 'enabled' => true }
25
+ {
26
+ enabled: true,
27
+ ask_for_cheese: false,
28
+ always_a_great_commit?: true,
29
+ camera_emoji: {
30
+ enabled: true,
31
+ emoji_multiplier: 5
30
32
  }
31
- )
32
- end
33
-
34
- describe 'initalizing' do
35
- it 'should assign runner and an enabled option' do
36
- plugin.runner.must_equal runner
37
- plugin.options.must_equal ['enabled']
38
- end
33
+ }
39
34
  end
40
35
 
41
36
  describe '#run_pre_capture' do
42
-
43
37
  before { commit_repo_with_message }
44
38
 
45
39
  it 'should output a message to stdout' do
@@ -68,33 +62,24 @@ describe Lolcommits::Plugin::SamplePlugin do
68
62
 
69
63
  describe '#enabled?' do
70
64
  it 'should be false by default' do
71
- plugin.enabled?.must_equal false
65
+ assert_nil plugin.enabled?
72
66
  end
73
67
 
74
68
  it 'should true when configured' do
75
- plugin.config = valid_enabled_config
69
+ plugin.configuration = valid_enabled_config
76
70
  plugin.enabled?.must_equal true
77
71
  end
78
72
  end
79
73
 
80
74
  describe 'configuration' do
81
- it 'should not be configured by default' do
82
- plugin.configured?.must_equal false
83
- end
84
-
85
75
  it 'should allow plugin options to be configured' do
86
76
  configured_plugin_options = {}
87
77
 
88
- output = fake_io_capture(inputs: %w(true)) do
78
+ output = fake_io_capture(inputs: %w(true false true true 5)) do
89
79
  configured_plugin_options = plugin.configure_options!
90
80
  end
91
81
 
92
- configured_plugin_options.must_equal( { "enabled" => true })
93
- end
94
-
95
- it 'should indicate when configured' do
96
- plugin.config = valid_enabled_config
97
- plugin.configured?.must_equal true
82
+ configured_plugin_options.must_equal(valid_enabled_config)
98
83
  end
99
84
 
100
85
  describe '#valid_configuration?' do
@@ -103,7 +88,7 @@ describe Lolcommits::Plugin::SamplePlugin do
103
88
  end
104
89
 
105
90
  it 'should be true for a valid configuration' do
106
- plugin.config = valid_enabled_config
91
+ plugin.configuration = valid_enabled_config
107
92
  plugin.valid_configuration?.must_equal true
108
93
  end
109
94
  end
data/test/test_helper.rb CHANGED
@@ -2,9 +2,7 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
2
 
3
3
  # necessary libs from lolcommits (allowing plugin to run)
4
4
  require 'git'
5
- require 'lolcommits/runner'
6
- require 'lolcommits/vcs_info'
7
- require 'lolcommits/backends/git_info'
5
+ require 'lolcommits'
8
6
 
9
7
  # lolcommit test helpers
10
8
  require 'lolcommits/test_helpers/git_repo'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lolcommits-sample_plugin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Hutchinson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-23 00:00:00.000000000 Z
11
+ date: 2018-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lolcommits
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.9.8
19
+ version: 0.10.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.9.8
26
+ version: 0.10.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
140
  version: '0'
141
141
  requirements: []
142
142
  rubyforge_project:
143
- rubygems_version: 2.6.13
143
+ rubygems_version: 2.7.3
144
144
  signing_key:
145
145
  specification_version: 4
146
146
  summary: Example gem for lolcommits plugin development