speedflow-plugin-flowdock 0.2.1 → 0.3.0

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: 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