speedflow-plugin-flowdock 0.2.1 → 0.3.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 548e8eba2e01faa888d48cd50f1257572f232b03
4
- data.tar.gz: 2c3aec53775f4c77e3f784671637c7a3fd417551
3
+ metadata.gz: edecbbf442d178fe48d334e12d510ff87ec1a809
4
+ data.tar.gz: 1d0050478441ba631fce827003dc5db5b24c3b80
5
5
  SHA512:
6
- metadata.gz: 337ef2a56bb0ea50aa2780d318726ac276e14c696c5d22e1b0cb64a27250b96076ba327dc910641d167ec8b7adff58534cacb3e7007a5c2e7134dad3042bc1fd
7
- data.tar.gz: b01efd1fc443855263cc555db505bf3a4b12df89747d2ee541a7ab29a26c0f385ef0761c43f84e2d665fe41bc99b4e7b33aebbc677071d7d7ab12de216d6e977
6
+ metadata.gz: fa39046538e336e12d2422e2cde9a33e4ca4f59082d232df1c5d6a6d01bf1880bc3287034615775fce8a615a908aab6afb0541ea1af47f0fe5547656c2e66b23
7
+ data.tar.gz: 72dbe45465b420c08d47442115026c0382ea22f33146a716ffe0f3a4686f4daf80ebba0ae5b0f57bf4c0357902c3afed75f7e6b73904eb138e61ceb6ee762069
@@ -1,43 +1,5 @@
1
+ require 'speedflow'
2
+
1
3
  require 'speedflow/plugin/flowdock/version'
2
- require 'speedflow/plugin/flowdock/plugin_core'
3
- require 'speedflow/plugin/flowdock/prompt'
4
- require 'speedflow/plugin/flowdock/configuration'
4
+ require 'speedflow/plugin/flowdock/plugin'
5
5
  require 'speedflow/plugin/flowdock/client'
6
-
7
- # Speedflow GEM, help you to boost your flow and keep your time.
8
- module Speedflow
9
- module Plugin
10
- # Flowdock Speedflow plugin.
11
- module Flowdock
12
- # TODO: Move this system in the core Utils
13
- class << self
14
- ACTIONS = [
15
- :action_notify
16
- ].freeze
17
-
18
- # @return [Speedflow::Plugin::Flowdock.PluginCore] Plugin.
19
- attr_writer :plugin
20
-
21
- # Public: Magic method to route to action
22
- #
23
- # args - Some arguments :)
24
- #
25
- # Returns nothing.
26
- def method_missing(*args)
27
- action = args.first
28
-
29
- raise NoMethodError, action unless ACTIONS.include? action
30
-
31
- plugin.new(args.last).send(action)
32
- end
33
-
34
- # Public: Plugin.
35
- #
36
- # Returns Speedflow::Plugin::Flowdock.PluginCore instance.
37
- def plugin
38
- @plugin ||= PluginCore
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -5,20 +5,23 @@ module Speedflow
5
5
  module Flowdock
6
6
  # Flowdock client
7
7
  class Client
8
- # @return [Prompt] Prompt.
9
- attr_writer :prompt
8
+ # @return [Speedflow::Plugin::Configuration] Plugin configuration.
9
+ attr_reader :config
10
+
11
+ # @return [Speedflow::Plugin::Prompt] Plugin prompt.
12
+ attr_reader :prompt
10
13
 
11
14
  # @return [Flowdock::Client] Flowdock client.
12
15
  attr_writer :flowdock_client
13
16
 
14
17
  # Initialize.
15
18
  #
16
- # config - Speedflow::Plugin::Flowdock::Configuration instance.
17
- # prompt - Speedflow::Plugin::Flowdock::Prompt instance.
19
+ # config - <Speedflow::Plugin::Configuration> instance.
20
+ # prompt - <Speedflow::Plugin::Prompt> instance.
18
21
  #
19
22
  # Examples
20
23
  #
21
- # Client.new({}, Speedflow::Plugin::Flowdock::Prompt.new)
24
+ # Client.new({}, Speedflow::Plugin::Prompt.new)
22
25
  # # => <Speedflow::Plugin::Flowdock::Client>
23
26
  #
24
27
  # Returns nothing.
@@ -48,22 +51,16 @@ module Speedflow
48
51
  def safe
49
52
  yield
50
53
  rescue ::Flowdock::ApiError => exception
51
- prompt.errors exception
54
+ prompt.errors 'Flowdock', exception
52
55
  abort
53
56
  end
54
57
 
55
58
  # Public: Flowdock client.
56
59
  #
57
- # Returns ::Flowdock::Client instance.
60
+ # Returns <::Flowdock::Client> instance.
58
61
  def flowdock_client
59
- @flowdock_client ||= ::Flowdock::Client.new(@config.auth)
60
- end
61
-
62
- # Public: Prompt.
63
- #
64
- # Returns ::Speedflow::Plugin::Flowdock::Prompt instance.
65
- def prompt
66
- @prompt ||= ::Speedflow::Plugin::Flowdock::Prompt.new
62
+ config = { api_token: @config.by_config('token') }
63
+ @flowdock_client ||= ::Flowdock::Client.new(config)
67
64
  end
68
65
  end
69
66
  end
@@ -0,0 +1,36 @@
1
+ module Speedflow
2
+ module Plugin
3
+ module Flowdock
4
+ # Plugin core
5
+ class Plugin < Speedflow::Plugin::Abstract
6
+ # @return [<Speedflow::Flowdock::Client>] Plugin client.
7
+ attr_writer :client
8
+
9
+ # Public: Notify.
10
+ #
11
+ # Returns Hash of result.
12
+ def action_notify
13
+ flow_id_or_token = config.by_input('flow', config.by_config('flow'))
14
+
15
+ message = config.by_input('message')
16
+ tags = config.by_input('tags').split(',')
17
+
18
+ client.notify(flow_id_or_token, message, tags)
19
+
20
+ prompt.ok '[FLOWDOCK] Flow was notified'
21
+
22
+ # ACTION: action_notify
23
+ # OUTPUT: { 'message' => String, 'tags' => [] }
24
+ { 'message' => message, 'tags' => tags }
25
+ end
26
+
27
+ # Public: Plugin client.
28
+ #
29
+ # Returns <Speedflow::Flowdock::Client> instance.
30
+ def client
31
+ @client ||= Client.new(@config, @prompt)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,7 +1,7 @@
1
1
  module Speedflow
2
2
  module Plugin
3
3
  module Flowdock
4
- VERSION = '0.2.1'.freeze
4
+ VERSION = '0.3.0'.freeze
5
5
  end
6
6
  end
7
7
  end
@@ -2,13 +2,18 @@ require 'spec_helper'
2
2
 
3
3
  describe Speedflow::Plugin::Flowdock::Client do
4
4
  let(:client) do
5
- client = ::Speedflow::Plugin::Flowdock::Client.new(double, double)
5
+ client = Speedflow::Plugin::Flowdock::Client.new(double, double)
6
6
  client.flowdock_client = double
7
7
  client
8
8
  end
9
9
 
10
10
  it '.notify' do
11
- allow(client.flowdock_client).to receive(:chat_message)
11
+ allow(client.config)
12
+ .to receive(:by_config)
13
+ .with('token')
14
+ .and_return('XXX')
15
+ allow(client.flowdock_client)
16
+ .to receive(:chat_message)
12
17
 
13
18
  client.notify('XXX', 'Hello', %w(foo bar baz))
14
19
  end
@@ -1,15 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Speedflow::Plugin::Flowdock::PluginCore do
3
+ describe Speedflow::Plugin::Flowdock::Plugin do
4
4
  let(:plugin) do
5
- plugin = ::Speedflow::Plugin::Flowdock::PluginCore.new({})
6
- plugin.config = double
7
- plugin.prompt = double
5
+ plugin = ::Speedflow::Plugin::Flowdock::Plugin.new(double, double)
8
6
  plugin.client = double
9
7
  plugin
10
8
  end
11
9
 
12
- it '.action_create_issue' do
10
+ it '.action_notify' do
13
11
  allow(plugin.config)
14
12
  .to receive(:by_config)
15
13
  .with('flow')
@@ -26,7 +24,7 @@ describe Speedflow::Plugin::Flowdock::PluginCore do
26
24
  .to receive(:by_input)
27
25
  .with('tags')
28
26
  .and_return('foo,bar,baz')
29
-
27
+
30
28
  allow(plugin.prompt)
31
29
  .to receive(:ok)
32
30
  .with('[FLOWDOCK] Flow was notified')
@@ -35,6 +33,8 @@ describe Speedflow::Plugin::Flowdock::PluginCore do
35
33
  .to receive(:notify)
36
34
  .with('XXX', 'Hello', %w(foo bar baz))
37
35
 
38
- plugin.action_notify
36
+ expected_hash = { 'message' => 'Hello', 'tags' => %w(foo bar baz) }
37
+ expect(plugin.action_notify)
38
+ .to eq expected_hash
39
39
  end
40
40
  end
@@ -1,20 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Speedflow::Plugin::Flowdock do
4
- let(:plugin) do
5
- double(new: double(action_notify: nil))
6
- end
7
-
8
4
  it 'has a version number' do
9
5
  expect(Speedflow::Plugin::Flowdock::VERSION).not_to be nil
10
6
  end
11
-
12
- it 'has an action catcher' do
13
- expect { Speedflow::Plugin::Flowdock.action_lol }
14
- .to raise_error(NoMethodError)
15
-
16
- Speedflow::Plugin::Flowdock.plugin = plugin
17
-
18
- expect(Speedflow::Plugin::Flowdock.action_notify).to eq nil
19
- end
20
7
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: speedflow-plugin-flowdock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julien Breux
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-04 00:00:00.000000000 Z
11
+ date: 2016-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: flowdock
14
+ name: speedflow
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.7.1
19
+ version: '0.3'
20
20
  type: :runtime
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.7.1
26
+ version: '0.3'
27
27
  - !ruby/object:Gem::Dependency
28
- name: tty-prompt
28
+ name: flowdock
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.5.0
33
+ version: 0.7.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.5.0
40
+ version: 0.7.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -178,15 +178,11 @@ files:
178
178
  - lib/speedflow-plugin-flowdock.rb
179
179
  - lib/speedflow/plugin/flowdock.rb
180
180
  - lib/speedflow/plugin/flowdock/client.rb
181
- - lib/speedflow/plugin/flowdock/configuration.rb
182
- - lib/speedflow/plugin/flowdock/plugin_core.rb
183
- - lib/speedflow/plugin/flowdock/prompt.rb
181
+ - lib/speedflow/plugin/flowdock/plugin.rb
184
182
  - lib/speedflow/plugin/flowdock/version.rb
185
183
  - spec/spec_helper.rb
186
184
  - spec/speedflow/plugin/flowdock/client_spec.rb
187
- - spec/speedflow/plugin/flowdock/configuration_spec.rb
188
- - spec/speedflow/plugin/flowdock/plugin_core_spec.rb
189
- - spec/speedflow/plugin/flowdock/prompt_spec.rb
185
+ - spec/speedflow/plugin/flowdock/plugin_spec.rb
190
186
  - spec/speedflow/plugin/flowdock_spec.rb
191
187
  homepage: https://github.com/speedflow/speedflow-plugin-flowdock
192
188
  licenses:
@@ -1,79 +0,0 @@
1
- module Speedflow
2
- module Plugin
3
- module Flowdock
4
- # Flowdock Configuration
5
- class Configuration
6
- CONFIG_KEY = '_config'.freeze
7
- PLUGIN_KEY = 'flowdock'.freeze
8
-
9
- # Initialize.
10
- #
11
- # arguments - Hash of arguments.
12
- #
13
- # Examples
14
- #
15
- # Configuration.new({})
16
- # # => <Speedflow::Plugin::Flowdock::Configuration>
17
- #
18
- # Returns nothing.
19
- def initialize(arguments)
20
- @arguments = arguments
21
- end
22
-
23
- # Public: Auth configuration.
24
- #
25
- # Returns Hash of auth configuration.
26
- def auth
27
- {
28
- api_token: by_config('token')
29
- }
30
- end
31
-
32
- # Public: Get a specific config.
33
- #
34
- # key - Key of config.
35
- # default_value - Default value.
36
- #
37
- # Returns value of config key.
38
- def by_config(key, default_value = '')
39
- if @arguments.key?(CONFIG_KEY) &&
40
- @arguments[CONFIG_KEY].key?(PLUGIN_KEY)
41
- config = @arguments[CONFIG_KEY][PLUGIN_KEY]
42
- end
43
- config.key?(key) ? config[key] : default_value
44
- end
45
-
46
- # Public: Get an input config by key.
47
- #
48
- # key - Key of config.
49
- # default_value - Default value.
50
- #
51
- # Returns value of input config key.
52
- def by_input(key, default_value = '')
53
- if @arguments.key?(key)
54
- @arguments[key]['value']
55
- else
56
- default_value
57
- end
58
- end
59
-
60
- # Public: Get an input config by key but required.
61
- #
62
- # key - Key of config.
63
- # default_value - Default value.
64
- #
65
- # Returns value of input config key or Exception.
66
- def by_required_input(key, default_value = '')
67
- value = by_input(key, default_value)
68
-
69
- # TODO: Improve communication with core for errors
70
- if by_input(key).empty?
71
- raise Exception, "Required value for '#{key}'."
72
- end
73
-
74
- value
75
- end
76
- end
77
- end
78
- end
79
- end
@@ -1,66 +0,0 @@
1
- module Speedflow
2
- module Plugin
3
- module Flowdock
4
- # Plugin core
5
- class PluginCore
6
- # @return [Prompt] Plugin prompt.
7
- attr_writer :prompt
8
-
9
- # @return [Client] Plugin client.
10
- attr_writer :client
11
-
12
- # @return [Config] Plugin config.
13
- attr_writer :config
14
-
15
- # Initialize.
16
- #
17
- # arguments - Hash of arguments.
18
- #
19
- # Examples
20
- #
21
- # Plugin.new({})
22
- # # => <Speedflow::Plugin::Flowdock::PluginCore>
23
- #
24
- # Returns nothing.
25
- def initialize(arguments)
26
- @arguments = arguments
27
- end
28
-
29
- # Public: Notify.
30
- #
31
- # Returns nothing.
32
- def action_notify
33
- flow_id_or_token = config.by_input('flow', config.by_config('flow'))
34
-
35
- message = config.by_input('message')
36
- tags = config.by_input('tags').split(',')
37
-
38
- client.notify(flow_id_or_token, message, tags)
39
-
40
- prompt.ok '[FLOWDOCK] Flow was notified'
41
- end
42
-
43
- # Public: Plugin configuration.
44
- #
45
- # Returns Configuration instance.
46
- def config
47
- @config ||= Configuration.new(@arguments)
48
- end
49
-
50
- # Public: Plugin client.
51
- #
52
- # Returns Client instance.
53
- def client
54
- @client ||= Client.new(@config, @prompt)
55
- end
56
-
57
- # Public: Plugin prompt.
58
- #
59
- # Returns Prompt instance.
60
- def prompt
61
- @prompt ||= Prompt.new
62
- end
63
- end
64
- end
65
- end
66
- end
@@ -1,42 +0,0 @@
1
- require 'tty-prompt'
2
- require 'json'
3
-
4
- module Speedflow
5
- module Plugin
6
- module Flowdock
7
- # Plugin prompt
8
- class Prompt # < TTY::Prompt
9
- # @return [TTY::Prompt] TTY::Prompt.
10
- attr_writer :prompt
11
-
12
- # Public: Errors from Flowdock exception.
13
- #
14
- # exception - Flowdock::ApiError.
15
- #
16
- # Returns nothing.
17
- def errors(exception)
18
- prompt.error 'Flowdock errors'
19
- prompt.warn exception.message
20
- end
21
-
22
- # Delegate.
23
- #
24
- # method - Method.
25
- # args - Arguments.
26
- # block - Block.
27
- #
28
- # Returns wathever.
29
- def method_missing(method, *args, &block)
30
- prompt.send(method, *args, &block)
31
- end
32
-
33
- # Public: TTY prompt.
34
- #
35
- # Returns ::TTY::Prompt instance.
36
- def prompt
37
- @prompt ||= ::TTY::Prompt.new
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,48 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Speedflow::Plugin::Flowdock::Configuration do
4
- let(:config) do
5
- message = { 'value' => 'hello' }
6
- tags = { 'value' => 'foo,bar,baz' }
7
- fd_config = { 'token' => 'foo', 'flow' => 'bar' }
8
- config = { 'flowdock' => fd_config }
9
- args = { 'tags' => tags, 'message' => message, '_config' => config }
10
- Speedflow::Plugin::Flowdock::Configuration.new(args)
11
- end
12
-
13
- it '.by_config' do
14
- expect(config.by_config('token', 'default'))
15
- .to eq 'foo'
16
- end
17
-
18
- it '.by_input' do
19
- expect(config.by_input('message', 'default'))
20
- .to eq 'hello'
21
-
22
- expect(config.by_input('tags'))
23
- .to eq 'foo,bar,baz'
24
-
25
- expect(config.by_input('nomessage', 'default'))
26
- .to eq 'default'
27
- end
28
-
29
- it '.by_required_input' do
30
- expect(config.by_required_input('message', 'default'))
31
- .to eq 'hello'
32
-
33
- expect { config.by_required_input('nomessage') }
34
- .to raise_error(Exception)
35
-
36
- expect { config.by_required_input('nonomessage', 'default') }
37
- .to raise_error(Exception)
38
- end
39
-
40
- it '.auth' do
41
- returned_hash = {
42
- api_token: 'foo'
43
- }
44
-
45
- expect(config.auth)
46
- .to eq returned_hash
47
- end
48
- end
@@ -1,28 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Speedflow::Plugin::Flowdock::Prompt do
4
- let(:prompt) do
5
- prompt = ::Speedflow::Plugin::Flowdock::Prompt.new
6
- prompt.prompt = double
7
- prompt
8
- end
9
- let(:exception) do
10
- double(message: "Error\n")
11
- end
12
-
13
- it '.ok' do
14
- allow(prompt.prompt)
15
- .to receive(:ok).with('Test')
16
-
17
- expect(prompt.ok('Test'))
18
- end
19
-
20
- it '.errors' do
21
- allow(prompt.prompt)
22
- .to receive(:error).with('Flowdock errors')
23
- allow(prompt.prompt)
24
- .to receive(:warn).with("Error\n")
25
-
26
- expect(prompt.errors(exception))
27
- end
28
- end