lita-lunch-order 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7624b7738ef86083727ce1122cb4547ba9144e0a
4
+ data.tar.gz: 5cf1c5b9f5d4ad77496abbe9e8c1fdb0ab6b000c
5
+ SHA512:
6
+ metadata.gz: b395e2c5fea267d40d90dae4575b7126645cbac0f6f0df70a6b401867fc27e36488fb64b2875c874ec5026034fe6f8028c22da591fc66b194f7772e6b48c01ad
7
+ data.tar.gz: 0f1da60688746fd22b69b2f1a131c81116138d530f311ca289a46c283e14d7595a3942807de83267c64c417ee37462ad7da08b909d798ef105c9abf1a8dd32cd
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ script: bundle exec rake
5
+ before_install:
6
+ - gem update --system
7
+ services:
8
+ - redis-server
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,53 @@
1
+ # lita-lunch-order
2
+
3
+ [![Build Status](https://travis-ci.org/alexinslc/lita-lunch-order.png?branch=master)](https://travis-ci.org/alexinslc/lita-lunch-order)
4
+
5
+ A lita handler to help you take lunch orders.
6
+
7
+ Populate Lita with a list of your coworker's lunch orders so when you're ready to email / call you have them all ready for you.
8
+
9
+ ## Installation
10
+
11
+ Add lita-lunch-order to your Lita instance's Gemfile:
12
+
13
+ ``` ruby
14
+ gem "lita-lunch-order"
15
+ ```
16
+
17
+ ## Configuration
18
+
19
+ There is no additional configuration.
20
+
21
+ ## Usage
22
+
23
+ First someone *might* say something like: `Let (me|us) know what (you|you all) (want|would like) for lunch`
24
+
25
+ This should reply with: *Now taking orders! To submit an order, please use `lunch-order add ORDER`. Thank You.*
26
+
27
+ Adding an Order:
28
+ ```
29
+ You: lunch-order add Chicken Salad w/ black beans and tomatillo dressing
30
+ Lita: Chicken Salad w/ black beans and tomatillo dressing has been added.
31
+ ```
32
+ Removing an Order:
33
+ ```
34
+ You: lunch-order remove Chicken Salad w/ black beans and tomatillo dressing
35
+ Lita: Chicken Salad w/ black beans and tomatillo dressing has been removed.
36
+ ```
37
+
38
+ Listing all Orders:
39
+ ```
40
+ You: lunch-order list
41
+ Lita:
42
+ Chicken Salad w/ black beans and tomatillo dressing
43
+ Beef Burrito w/ cheese
44
+ Cake
45
+ ```
46
+
47
+ Resetting or Removing all Orders:
48
+ ```
49
+ You: lunch-order reset
50
+ OR
51
+ You: lunch-order expire
52
+ Lita: All orders have been removed.
53
+ ```
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -0,0 +1,12 @@
1
+ require "lita"
2
+
3
+ Lita.load_locales Dir[File.expand_path(
4
+ File.join("..", "..", "locales", "*.yml"), __FILE__
5
+ )]
6
+
7
+ require "lita/handlers/lunch_order"
8
+
9
+ Lita::Handlers::LunchOrder.template_root File.expand_path(
10
+ File.join("..", "..", "templates"),
11
+ __FILE__
12
+ )
@@ -0,0 +1,63 @@
1
+ module Lita
2
+ module Handlers
3
+ class LunchOrder < Handler
4
+ REDIS_KEY = 'lunch-order'
5
+
6
+ # Configure Routes
7
+
8
+ # Add an Order (lita lunch-order add ORDER)
9
+ route(/^lunch-order (?:orders?\s+)?add\s+(.+)$/i, :add_order, command: true, help: { 'lunch-order add ORDER' => 'Add a lunch order' })
10
+ # Remove an Order (lita lunch-order remove ORDER)
11
+ route(/^lunch-order (?:orders?\s+)?(?:remove|delete)\s+(.+)$/i, :remove_order, command: true, help: { 'lunch-order remove ORDER' => 'Remove a lunch order' })
12
+ # List all Orders (lita lunch-order list)
13
+ route(/^lunch-order (list|show)/i, :list_orders, command: true, help: { 'lunch-order list' => 'List all the known lunch orders' })
14
+ # Expire orders (remove all orders)
15
+ route(/^lunch-order (expire|reset)/i, :expire_orders, command: true, help: { 'lunch-order expire' => 'Expire lunch orders (remove all)' })
16
+ # Tell everyone to begin entering orders
17
+ route(/let (me|us) know what (you|you all) (want|would like) for lunch/i, :take_orders, command: false)
18
+
19
+ def take_orders(response)
20
+ # Code to notify people to enter orders!
21
+ response.reply ":fork_and_knife: Now taking orders! To submit an order, please use `lunch-order add ORDER`. Thank You."
22
+ end
23
+
24
+ def list_orders(response)
25
+ values = redis.smembers(REDIS_KEY)
26
+ response.reply values.size > 0 ? values.sort.join("\n") : t('.empty')
27
+ end
28
+
29
+ def add_order(response)
30
+ #response.user + ", " +
31
+ order = response.matches[0][0].strip
32
+ return if order.empty?
33
+ result = redis.sadd(REDIS_KEY, order)
34
+ response.reply result ? t('.added', order: order) : t('.duplicate', order: order)
35
+ end
36
+
37
+ def remove_order(response)
38
+ #response.user +
39
+ order = response.matches[0][0].strip
40
+ return if order.empty?
41
+ result = redis.srem(REDIS_KEY, order)
42
+ response.reply result ? t('.removed', order: order) : t('.unfound')
43
+ end
44
+
45
+ def change_order(response)
46
+ order = response.matches[0][0].strip
47
+ return if order.empty?
48
+ # make sure to allow this.
49
+ end
50
+
51
+ def expire_orders(response)
52
+ redis.del(REDIS_KEY)
53
+ response.reply "All orders have been removed!"
54
+ end
55
+
56
+ def reset!
57
+ redis.del(REDIS_KEY)
58
+ end
59
+
60
+ Lita.register_handler(self)
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,24 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = "lita-lunch-order"
3
+ spec.version = "0.1.0"
4
+ spec.authors = ["Alex Lutz"]
5
+ spec.email = ["alexinslc@gmail.com"]
6
+ spec.description = "Lita Handler that can take lunch orders."
7
+ spec.summary = "Lita Handler that takes lunch orders."
8
+ spec.homepage = ""
9
+ spec.license = "MIT"
10
+ spec.metadata = { "lita_plugin_type" => "handler" }
11
+
12
+ spec.files = `git ls-files`.split($/)
13
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
14
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
+ spec.require_paths = ["lib"]
16
+
17
+ spec.add_runtime_dependency "lita", ">= 4.6"
18
+
19
+ spec.add_development_dependency "bundler", "~> 1.3"
20
+ spec.add_development_dependency "pry-byebug"
21
+ spec.add_development_dependency "rake"
22
+ spec.add_development_dependency "rack-test"
23
+ spec.add_development_dependency "rspec", ">= 3.0.0"
24
+ end
data/locales/en.yml ADDED
@@ -0,0 +1,10 @@
1
+ en:
2
+ lita:
3
+ handlers:
4
+ lunch_order:
5
+ fallback: "????"
6
+ empty: "No orders added yet."
7
+ added: "%{order} has been added"
8
+ duplicate: "I already know about %{order}"
9
+ removed: "%{order} has been removed"
10
+ unfound: "You will need to be more specific"
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+
3
+ describe Lita::Handlers::LunchOrder, lita_handler: true do
4
+ before do
5
+ subject.reset!
6
+ end
7
+
8
+ describe 'list all orders' do
9
+ it { is_expected.to route_command('lunch-order list').to(:list_orders) }
10
+ it { is_expected.to route_command('lunch-order show').to(:list_orders) }
11
+
12
+ it 'tells you if there are no orders' do
13
+ send_command('lunch-order list')
14
+ expect(replies.last).to eq 'No orders added yet.'
15
+ end
16
+
17
+ it 'lists all the known orders' do
18
+ send_command('lunch-order add bar')
19
+ send_command('lunch-order add foo')
20
+ send_command('lunch-order list')
21
+ expect(replies.last).to eq "bar\nfoo"
22
+ end
23
+
24
+ it 'sorts the orders it knows' do
25
+ send_command('lunch-order add Zoo')
26
+ send_command('lunch-order add Avec')
27
+ send_command('lunch-order add Longs')
28
+ send_command('lunch-order list')
29
+ expect(replies.last).to eq "Avec\nLongs\nZoo"
30
+ end
31
+ end
32
+
33
+ describe 'adding an order' do
34
+ it { is_expected.to route_command('lunch-order add ORDER').to(:add_order) }
35
+ it { is_expected.to route_command('lunch-order add ORDER').to(:add_order) }
36
+ it { is_expected.to route_command('lunch-order add ORDER').to(:add_order) }
37
+
38
+ it 'will confirm order added' do
39
+ send_command('lunch-order order add blah')
40
+ expect(replies.last).to eq 'blah has been added'
41
+ end
42
+
43
+ it 'will not add an empty order' do
44
+ send_command('lunch-order order add ')
45
+ expect(replies.last).to eq nil
46
+ end
47
+
48
+ it 'will not add a duplicate order' do
49
+ send_command('lunch-order order add BurgerCzar')
50
+ send_command('lunch-order order add BurgerCzar')
51
+ expect(replies.last).to eq 'I already know about BurgerCzar'
52
+ end
53
+ end
54
+
55
+ describe 'removing an order' do
56
+ it { is_expected.to route_command('lunch-order remove ORDER').to(:remove_order) }
57
+ it { is_expected.to route_command('lunch-order delete ORDER').to(:remove_order) }
58
+ it { is_expected.to route_command('lunch-order remove ORDER').to(:remove_order) }
59
+ it { is_expected.to route_command('lunch-order delete ORDER').to(:remove_order) }
60
+ it { is_expected.to route_command('lunch-order remove ORDER').to(:remove_order) }
61
+ it { is_expected.to route_command('lunch-order delete ORDER').to(:remove_order) }
62
+
63
+ it 'will confirm order removed' do
64
+ send_command('lunch-order add blah')
65
+ send_command('lunch-order remove blah')
66
+ expect(replies.last).to eq 'blah has been removed'
67
+ end
68
+
69
+ it 'will confirm if order cannot be found' do
70
+ send_command('lunch-order order remove yolo')
71
+ expect(replies.last).to eq 'You will need to be more specific'
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,6 @@
1
+ require "lita-lunch-order"
2
+ require "lita/rspec"
3
+
4
+ # A compatibility mode is provided for older plugins upgrading from Lita 3. Since this plugin
5
+ # was generated with Lita 4, the compatibility mode should be left disabled.
6
+ Lita.version_3_compatibility_mode = false
File without changes
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lita-lunch-order
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Alex Lutz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-11-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: lita
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry-byebug
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack-test
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 3.0.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 3.0.0
97
+ description: Lita Handler that can take lunch orders.
98
+ email:
99
+ - alexinslc@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - ".travis.yml"
106
+ - Gemfile
107
+ - README.md
108
+ - Rakefile
109
+ - lib/lita-lunch-order.rb
110
+ - lib/lita/handlers/lunch_order.rb
111
+ - lita-lunch-order.gemspec
112
+ - locales/en.yml
113
+ - spec/lita/handlers/lunch_order_spec.rb
114
+ - spec/spec_helper.rb
115
+ - templates/.gitkeep
116
+ homepage: ''
117
+ licenses:
118
+ - MIT
119
+ metadata:
120
+ lita_plugin_type: handler
121
+ post_install_message:
122
+ rdoc_options: []
123
+ require_paths:
124
+ - lib
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ requirements: []
136
+ rubyforge_project:
137
+ rubygems_version: 2.4.8
138
+ signing_key:
139
+ specification_version: 4
140
+ summary: Lita Handler that takes lunch orders.
141
+ test_files:
142
+ - spec/lita/handlers/lunch_order_spec.rb
143
+ - spec/spec_helper.rb