cinch-convert 0.0.1 → 1.0.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.
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ before_install:
6
+ - sudo apt-get install units
data/README.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Cinch::Plugins::Convert
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/cinch-convert.png)](http://badge.fury.io/rb/cinch-convert)
4
+ [![Dependency Status](https://gemnasium.com/canonical-hackers/cinch-convert.png)](https://gemnasium.com/canonical-hackers/cinch-convert)
5
+ [![Build Status](https://travis-ci.org/canonical-hackers/cinch-convert.png?branch=master)](https://travis-ci.org/canonical-hackers/cinch-convert)
6
+ [![Coverage Status](https://coveralls.io/repos/canonical-hackers/cinch-convert/badge.png?branch=master)](https://coveralls.io/r/canonical-hackers/cinch-convert?branch=master)
7
+ [![Code Climate](https://codeclimate.com/github/canonical-hackers/cinch-convert.png)](https://codeclimate.com/github/canonical-hackers/cinch-convert)
8
+
3
9
  Cinch Plugin to allow users to convert units.
4
10
 
5
11
  ## Installation
data/Rakefile CHANGED
@@ -1 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task :test => :spec
@@ -16,4 +16,11 @@ Gem::Specification.new do |gem|
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
+
20
+ gem.add_development_dependency 'rake'
21
+ gem.add_development_dependency 'rspec'
22
+ gem.add_development_dependency 'coveralls'
23
+ gem.add_development_dependency 'cinch-test'
24
+
25
+ gem.add_dependency 'cinch', '~> 2.0.5'
19
26
  end
@@ -1,53 +1,49 @@
1
+ require 'cinch'
2
+
1
3
  module Cinch::Plugins
2
4
  class Convert
3
5
  include Cinch::Plugin
4
6
 
5
7
  self.help = "Use .convert <thing 1> to <thing 2> to do a unit conversion. (e.g. .convert 5 feet to meters)"
6
8
 
7
- match /convert (.+)/
9
+ match /convert (.+) to (.+)/
8
10
 
9
11
  def initialize(*args)
10
12
  super
11
13
  @units_path = config[:units_path] || '/usr/bin/units'
12
14
  end
13
15
 
14
- def execute(m, conversion_string)
15
- m.reply convert(conversion_string), true
16
+ def execute(m, from, to)
17
+ m.reply convert(from, to), true
16
18
  end
17
19
 
18
20
  private
19
21
 
20
- def convert(conversion)
21
- unless File.exist? @units_path
22
- debug "Cinch can't find the unit conversion binary."
23
- return "Sorry I can't convert that."
24
- end
25
-
26
- match = conversion.match(/([+\d\.-]+)\s*([\/*\s\w]+) to ([\/*\s\w]+)$/)
22
+ def convert(from, to)
23
+ return "Sorry, there's a configuration issue." unless units_binary_exists?
27
24
 
28
- unless match.nil?
29
- num = match[1]
30
- units_from = match[2]
31
- units_to = match[3]
32
-
33
- units_output = IO.popen([@units_path, "-t", "#{num} #{units_from}", units_to])
25
+ unless from.nil? || to.nil?
26
+ units_output = IO.popen([@units_path, "-t", from, to])
34
27
 
35
28
  # we only take one line here because the first line of output is
36
29
  # either an error message or the part of the conversion output we
37
30
  # want.
38
- units_line = units_output.readline
39
- units_line.chomp!
31
+ units_line = units_output.readline.chomp!
40
32
 
41
- if units_line =~ /Unknown unit/
33
+ if units_line.match(/Unknown unit/)
42
34
  "Sorry, #{units_line.downcase}."
43
- elsif units_line =~ /conformability error/
35
+ elsif units_line.match(/conformability error/)
44
36
  "Sorry, there was a conformability error when making that conversion."
45
37
  else
46
- "#{num} #{units_from} is #{units_line} #{units_to}."
38
+ "#{from} is #{units_line} #{to}."
47
39
  end
48
- else
49
- "Sorry, I don't understand, please use `.convert X unitname to unitname`."
50
40
  end
51
41
  end
42
+
43
+ def units_binary_exists?
44
+ return true if File.exist? @units_path
45
+ debug "Cinch can't find the unit conversion binary."
46
+ false
47
+ end
52
48
  end
53
49
  end
@@ -1,7 +1,7 @@
1
1
  module Cinch
2
2
  module Plugins
3
3
  class Convert
4
- VERSION = "0.0.1"
4
+ VERSION = "1.0.0"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cinch::Plugins::Convert do
4
+
5
+ include Cinch::Test
6
+
7
+ before(:each) do
8
+ @bot = make_bot(Cinch::Plugins::Convert)
9
+ end
10
+
11
+ describe 'configuration' do
12
+ it 'should handle the units binary\'s absence with grace' do
13
+ @bot = make_bot(Cinch::Plugins::Convert, { :units_path => '/usr/baddir/units' })
14
+ msg = make_message(@bot, '!convert 3 foo to bar')
15
+ get_replies(msg).last.chomp.
16
+ should == 'test: Sorry, there\'s a configuration issue.'
17
+ end
18
+ end
19
+
20
+ describe 'conversions' do
21
+ it 'should alow users to convert units' do
22
+ msg = make_message(@bot, '!convert 2 inches to feet')
23
+ get_replies(msg).last.chomp.
24
+ should == 'test: 2 inches is 0.16666667 feet.'
25
+ end
26
+
27
+ it 'should allow users to convert temps' do
28
+ msg = make_message(@bot, '!convert tempF(32) to tempC')
29
+ get_replies(msg).last.chomp.
30
+ should == 'test: tempF(32) is 0 tempC.'
31
+ end
32
+
33
+ it 'should return an error on conformability issues' do
34
+ msg = make_message(@bot, '!convert 15 minutes to gallons')
35
+ get_replies(msg).last.chomp.
36
+ should == 'test: Sorry, there was a conformability error when making that conversion.'
37
+ end
38
+
39
+ it 'should return an error on invalid units' do
40
+ msg = make_message(@bot, '!convert 15 foo to bar')
41
+ get_replies(msg).last.chomp.
42
+ should == 'test: Sorry, unknown unit \'foo\'.'
43
+ end
44
+
45
+ it 'shouldn\'t return anything on invalid conversions' do
46
+ msg = make_message(@bot, '!convert foo 15 foo baz bar')
47
+ get_replies(msg).
48
+ should be_empty
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,5 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+ require 'cinch-convert'
4
+ require 'cinch/test'
5
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cinch-convert
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,8 +10,88 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-05-07 00:00:00.000000000 Z
14
- dependencies: []
13
+ date: 2013-07-01 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rake
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: rspec
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: coveralls
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: cinch-test
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: cinch
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ~>
85
+ - !ruby/object:Gem::Version
86
+ version: 2.0.5
87
+ type: :runtime
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ version: 2.0.5
15
95
  description: Cinch Plugin for Coverting Units via the units binary
16
96
  email:
17
97
  - bhaberer@gmail.com
@@ -20,6 +100,7 @@ extensions: []
20
100
  extra_rdoc_files: []
21
101
  files:
22
102
  - .gitignore
103
+ - .travis.yml
23
104
  - Gemfile
24
105
  - LICENSE.txt
25
106
  - README.md
@@ -28,6 +109,8 @@ files:
28
109
  - lib/cinch-convert.rb
29
110
  - lib/cinch/plugins/convert/convert.rb
30
111
  - lib/cinch/plugins/convert/version.rb
112
+ - spec/cinch-convert_spec.rb
113
+ - spec/spec_helper.rb
31
114
  homepage: https://github.com/canonical-hackers/cinch-convert
32
115
  licenses: []
33
116
  post_install_message:
@@ -52,4 +135,7 @@ rubygems_version: 1.8.24
52
135
  signing_key:
53
136
  specification_version: 3
54
137
  summary: Cinch Plugin for converting units
55
- test_files: []
138
+ test_files:
139
+ - spec/cinch-convert_spec.rb
140
+ - spec/spec_helper.rb
141
+ has_rdoc: