lita 3.3.1 → 4.0.0.rc1

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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/.travis.yml +3 -0
  4. data/lib/lita.rb +45 -97
  5. data/lib/lita/adapter.rb +38 -17
  6. data/lib/lita/adapters/shell.rb +5 -3
  7. data/lib/lita/authorization.rb +109 -60
  8. data/lib/lita/builder.rb +38 -0
  9. data/lib/lita/callback.rb +37 -0
  10. data/lib/lita/cli.rb +2 -0
  11. data/lib/lita/config.rb +1 -18
  12. data/lib/lita/configurable.rb +29 -0
  13. data/lib/lita/configuration.rb +179 -0
  14. data/lib/lita/configuration_validator.rb +66 -0
  15. data/lib/lita/daemon.rb +4 -11
  16. data/lib/lita/default_configuration.rb +146 -0
  17. data/lib/lita/errors.rb +9 -0
  18. data/lib/lita/handler.rb +5 -264
  19. data/lib/lita/handler/chat_router.rb +130 -0
  20. data/lib/lita/handler/common.rb +114 -0
  21. data/lib/lita/handler/event_router.rb +77 -0
  22. data/lib/lita/handler/http_router.rb +26 -0
  23. data/lib/lita/handlers/authorization.rb +13 -18
  24. data/lib/lita/handlers/deprecation_check.rb +24 -0
  25. data/lib/lita/handlers/help.rb +5 -3
  26. data/lib/lita/handlers/info.rb +2 -2
  27. data/lib/lita/http_callback.rb +29 -0
  28. data/lib/lita/http_route.rb +41 -26
  29. data/lib/lita/namespace.rb +23 -0
  30. data/lib/lita/rack_app.rb +29 -2
  31. data/lib/lita/registry.rb +133 -0
  32. data/lib/lita/robot.rb +58 -20
  33. data/lib/lita/route_validator.rb +12 -4
  34. data/lib/lita/rspec.rb +23 -14
  35. data/lib/lita/rspec/handler.rb +93 -23
  36. data/lib/lita/rspec/matchers/chat_route_matcher.rb +48 -0
  37. data/lib/lita/rspec/matchers/deprecated.rb +36 -0
  38. data/lib/lita/rspec/matchers/event_route_matcher.rb +27 -0
  39. data/lib/lita/rspec/matchers/http_route_matcher.rb +18 -60
  40. data/lib/lita/user.rb +0 -6
  41. data/lib/lita/util.rb +1 -8
  42. data/lib/lita/version.rb +1 -1
  43. data/lita.gemspec +1 -0
  44. data/spec/lita/adapter_spec.rb +25 -7
  45. data/spec/lita/adapters/shell_spec.rb +24 -4
  46. data/spec/lita/authorization_spec.rb +57 -38
  47. data/spec/lita/builder_spec.rb +39 -0
  48. data/spec/lita/config_spec.rb +0 -24
  49. data/spec/lita/configuration_spec.rb +222 -0
  50. data/spec/lita/configuration_validator_spec.rb +112 -0
  51. data/spec/lita/daemon_spec.rb +2 -2
  52. data/spec/lita/default_configuration_spec.rb +254 -0
  53. data/spec/lita/handler/chat_router_spec.rb +192 -0
  54. data/spec/lita/handler/common_spec.rb +272 -0
  55. data/spec/lita/handler/event_router_spec.rb +54 -0
  56. data/spec/lita/handler/http_router_spec.rb +106 -0
  57. data/spec/lita/handler_spec.rb +20 -291
  58. data/spec/lita/handlers/authorization_spec.rb +9 -11
  59. data/spec/lita/handlers/deprecation_check_spec.rb +21 -0
  60. data/spec/lita/handlers/help_spec.rb +31 -9
  61. data/spec/lita/handlers/info_spec.rb +2 -2
  62. data/spec/lita/handlers/room_spec.rb +5 -3
  63. data/spec/lita/robot_spec.rb +30 -11
  64. data/spec/lita/rspec_spec.rb +71 -31
  65. data/spec/lita/user_spec.rb +2 -2
  66. data/spec/lita_spec.rb +62 -4
  67. data/spec/spec_helper.rb +7 -0
  68. data/templates/locales/en.yml +56 -4
  69. data/templates/plugin/gemspec.tt +1 -0
  70. data/templates/plugin/spec/spec_helper.tt +4 -0
  71. metadata +54 -8
  72. data/lib/lita/rspec/matchers/event_subscription_matcher.rb +0 -67
  73. data/lib/lita/rspec/matchers/route_matcher.rb +0 -69
  74. data/spec/lita/rack_app_spec.rb +0 -92
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a3fb362ba4822b42cb6cd4a6b662d39fd23d94da
4
- data.tar.gz: 98201ad5cf62ba5a964ce1ea80b93e298fad4b02
3
+ metadata.gz: 6aba9ae845dbe0d8fcbeedca12735d4cde375b44
4
+ data.tar.gz: 7afcedf903295c434f39390884c7f7fe8465c181
5
5
  SHA512:
6
- metadata.gz: d4afd73a337dcf17183156546037c762d8e7c7d27870c55532f98d9228c83f4c11608352f1ccc71947e7ec072e9a6e523351eaf321a7a25f2540d432e34758ca
7
- data.tar.gz: 3629b9e414f35a09444017aff288126ec737adc9d64695bf520497f7e59bbb43e757e56e3c40bde26f35caf40a260253404870fff3ad86c89263af0c51762eb9
6
+ metadata.gz: 174c6be0c949ee3fd83753348d65c862b6313b5f77164b6c6b928946524e1913adbd07c886f352ce9daedc19e8243a5016bb623e352701e8bfdc369ac1f9aa26
7
+ data.tar.gz: ce15b54ce11d9efcb90b6b6db82a246625d6b38154db75fdac127629ef1a60892e60e0a607d31d1853a539538d781285d89fbd22557ac1fef8d5dc67e623b823
@@ -31,4 +31,4 @@ StringLiterals:
31
31
  TrailingComma:
32
32
  Enabled: false
33
33
  TrivialAccessors:
34
- AllowPredicates: true
34
+ Enabled: false
@@ -6,6 +6,9 @@ before_install:
6
6
  - gem update --system
7
7
  services:
8
8
  - redis-server
9
+ branches:
10
+ except:
11
+ - /^v[0-9]/
9
12
  notifications:
10
13
  webhooks:
11
14
  urls:
@@ -14,6 +14,8 @@ require "puma"
14
14
  require "rack"
15
15
  require "redis-namespace"
16
16
 
17
+ require_relative "lita/registry"
18
+
17
19
  # The main namespace for Lita. Provides a global registry of adapters and
18
20
  # handlers, as well as global configuration, logger, and Redis store.
19
21
  module Lita
@@ -21,43 +23,24 @@ module Lita
21
23
  REDIS_NAMESPACE = "lita"
22
24
 
23
25
  class << self
24
- # The global registry of adapters.
25
- # @return [Hash] A map of adapter keys to adapter classes.
26
- def adapters
27
- @adapters ||= {}
28
- end
26
+ include Registry::Mixins
29
27
 
30
- # The global configuration object. Provides user settings for the robot.
31
- # @return [Lita::Config] The Lita configuration object.
32
- def config
33
- @config ||= Config.default_config
34
- end
28
+ # A special mode to ensure that tests written for Lita 3 plugins continue to work.
29
+ # @return [Boolean] Whether or not version 3 compatibility mode is active.
30
+ # @since 4.0.0
31
+ attr_accessor :version_3_compatibility_mode
32
+ alias_method :version_3_compatibility_mode?, :version_3_compatibility_mode
35
33
 
36
- # Yields the global configuration object. Called by the user in a
37
- # lita_config.rb file.
38
- # @yieldparam [Lita::Configuration] config The global configuration object.
39
- # @return [void]
40
- def configure
41
- yield config
42
- end
43
-
44
- # The global registry of handlers.
45
- # @return [Set] The set of handlers.
46
- def handlers
47
- @handlers ||= Set.new
48
- end
49
-
50
- # The global registry of hook handler objects.
51
- # @return [Hash] A hash mapping hook names to sets of objects that handle them.
52
- # @since 3.2.0
53
- def hooks
54
- @hooks ||= Hash.new { |h, k| h[k] = Set.new }
55
- end
34
+ # A mode that makes minor changes to the Lita runtime to improve testability.
35
+ # @return [Boolean] Whether or not test mode is active.
36
+ # @since 4.0.0
37
+ attr_accessor :test_mode
38
+ alias_method :test_mode?, :test_mode
56
39
 
57
40
  # The global Logger object.
58
41
  # @return [::Logger] The global Logger object.
59
42
  def logger
60
- @logger ||= Logger.get_logger(Lita.config.robot.log_level)
43
+ @logger ||= Logger.get_logger(config.robot.log_level)
61
44
  end
62
45
 
63
46
  # The root Redis object.
@@ -65,79 +48,30 @@ module Lita
65
48
  def redis
66
49
  @redis ||= begin
67
50
  redis = Redis.new(config.redis)
68
- Redis::Namespace.new(REDIS_NAMESPACE, redis: redis)
51
+ Redis::Namespace.new(REDIS_NAMESPACE, redis: redis).tap do |client|
52
+ begin
53
+ client.ping
54
+ rescue Redis::BaseError => e
55
+ Lita.logger.fatal I18n.t(
56
+ "lita.redis.exception",
57
+ message: e.message,
58
+ backtrace: e.backtrace.join("\n")
59
+ )
60
+ abort
61
+ end
62
+ end
69
63
  end
70
64
  end
71
65
 
72
- # Adds an adapter to the global registry under the provided key.
73
- # @param key [String, Symbol] The key that identifies the adapter.
74
- # @param adapter [Lita::Adapter] The adapter class.
75
- # @return [void]
76
- def register_adapter(key, adapter)
77
- adapters[key.to_sym] = adapter
78
- end
79
-
80
- # Adds a handler to the global registry.
81
- # @param handler [Lita::Handler] The handler class.
82
- # @return [void]
83
- def register_handler(handler)
84
- handlers << handler
85
- end
86
-
87
- # Adds a hook handler object to the global registry for the given hook.
88
- # @return [void]
89
- # @since 3.2.0
90
- def register_hook(name, hook)
91
- hooks[name.to_s.downcase.strip.to_sym] << hook
92
- end
93
-
94
- # Clears the global configuration object and the global adapter, handler, and hook registries.
95
- # @return [void]
96
- # @since 3.2.0
97
- def reset
98
- reset_adapters
99
- reset_config
100
- reset_handlers
101
- reset_hooks
102
- end
103
-
104
- # Resets the global adapter registry, removing all registered adapters.
105
- # @return [void]
106
- # @since 3.2.0
107
- def reset_adapters
108
- @adapters = nil
109
- end
110
-
111
- # Resets the global configuration object. The next call to {Lita.config}
112
- # will create a fresh config object.
113
- # @return [void]
114
- def reset_config
115
- @config = nil
116
- end
117
- alias_method :clear_config, :reset_config
118
-
119
- # Resets the global handler registry, removing all registered handlers.
120
- # @return [void]
121
- # @since 3.2.0
122
- def reset_handlers
123
- @handlers = nil
124
- end
125
-
126
- # Resets the global hooks registry, removing all registered hook handlers.
127
- # @return [void]
128
- # @since 3.2.0
129
- def reset_hooks
130
- @hooks = nil
131
- end
132
-
133
66
  # Loads user configuration and starts the robot.
134
67
  # @param config_path [String] The path to the user configuration file.
135
68
  # @return [void]
136
69
  def run(config_path = nil)
137
70
  hooks[:before_run].each { |hook| hook.call(config_path: config_path) }
138
- Config.load_user_config(config_path)
139
- Lita.config.finalize
140
- self.locale = Lita.config.robot.locale
71
+ Configuration.load_user_config(config_path)
72
+ Configuration.freeze_config(config)
73
+ ConfigurationValidator.new(self).call
74
+ self.locale = config.robot.locale
141
75
  Robot.new.run
142
76
  end
143
77
  end
@@ -145,23 +79,37 @@ end
145
79
 
146
80
  require_relative "lita/version"
147
81
  require_relative "lita/common"
82
+ require_relative "lita/errors"
148
83
  require_relative "lita/config"
84
+ require_relative "lita/configuration"
85
+ require_relative "lita/default_configuration"
86
+ require_relative "lita/configuration_validator"
149
87
  require_relative "lita/util"
150
88
  require_relative "lita/logger"
89
+ require_relative "lita/callback"
90
+ require_relative "lita/configurable"
91
+ require_relative "lita/namespace"
92
+ require_relative "lita/handler/common"
93
+ require_relative "lita/handler/chat_router"
94
+ require_relative "lita/handler/http_router"
95
+ require_relative "lita/handler/event_router"
96
+ require_relative "lita/handler"
151
97
  require_relative "lita/user"
152
98
  require_relative "lita/source"
153
99
  require_relative "lita/authorization"
154
100
  require_relative "lita/message"
155
101
  require_relative "lita/response"
102
+ require_relative "lita/http_callback"
156
103
  require_relative "lita/http_route"
157
104
  require_relative "lita/rack_app"
158
105
  require_relative "lita/timer"
159
106
  require_relative "lita/robot"
160
107
  require_relative "lita/adapter"
161
108
  require_relative "lita/adapters/shell"
162
- require_relative "lita/handler"
109
+ require_relative "lita/builder"
163
110
  require_relative "lita/route_validator"
164
111
  require_relative "lita/handlers/authorization"
165
112
  require_relative "lita/handlers/help"
166
113
  require_relative "lita/handlers/info"
167
114
  require_relative "lita/handlers/room"
115
+ require_relative "lita/handlers/deprecation_check"
@@ -1,30 +1,27 @@
1
1
  module Lita
2
2
  # Adapters are the glue between Lita's API and a chat service.
3
3
  class Adapter
4
+ extend Namespace
5
+ extend Configurable
6
+
4
7
  # The instance of {Lita::Robot}.
5
8
  # @return [Lita::Robot]
6
9
  attr_reader :robot
7
10
 
8
11
  class << self
12
+ # @!attribute [r] required_configs
9
13
  # A list of configuration keys that are required for the adapter to boot.
10
14
  # @return [Array]
11
- attr_reader :required_configs
12
-
13
- # The namespace for the adapter, used for registry and for I18n. If the handler is an
14
- # anonymous class, it must explicitly define +self.name+.
15
- # @return [String] The adapter's namespace.
16
- # @raise [RuntimeError] If +self.name+ is not defined.
17
- def namespace
18
- if name
19
- Util.underscore(name.split("::").last)
20
- else
21
- raise I18n.t("lita.adapter.name_required")
22
- end
15
+ # @deprecated Will be removed in Lita 5.0. Use {Lita::Adapter#configuration} instead.
16
+ def required_configs
17
+ Lita.logger.warn(I18n.t("lita.adapter.required_configs_deprecated"))
18
+ @required_configs
23
19
  end
24
20
 
25
21
  # Defines configuration keys that are requried for the adapter to boot.
26
22
  # @param keys [String, Symbol] The required keys.
27
23
  # @return [void]
24
+ # @deprecated Will be removed in Lita 5.0. Use {Lita::Adapter#config} instead.
28
25
  def require_config(*keys)
29
26
  @required_configs ||= []
30
27
  @required_configs.concat(keys.flatten.map(&:to_sym))
@@ -48,6 +45,13 @@ module Lita
48
45
  @robot = robot
49
46
  ensure_required_configs
50
47
  end
48
+ #
49
+ # The handler's config object.
50
+ # @return [Lita::Configuration] The adapter's configuration object.
51
+ # @since 4.0.0
52
+ def config
53
+ robot.config.adapters.public_send(self.class.namespace)
54
+ end
51
55
 
52
56
  # @!method join
53
57
  # Joins the room with the specified ID.
@@ -113,21 +117,38 @@ module Lita
113
117
 
114
118
  private
115
119
 
120
+ # Returns the object used for the adapter's config.
121
+ def adapter_config
122
+ if Lita.version_3_compatibility_mode?
123
+ Lita.config.adapter
124
+ else
125
+ robot.config.adapter
126
+ end
127
+ end
128
+
116
129
  # Logs a fatal message and aborts if a required config key is not set.
117
130
  def ensure_required_configs
118
- required_configs = self.class.required_configs
119
131
  return if required_configs.nil?
120
132
 
121
- missing_keys = []
133
+ Lita.logger.warn(I18n.t("lita.adapter.require_config_deprecated"))
122
134
 
123
- required_configs.each do |key|
124
- missing_keys << key unless Lita.config.adapter[key]
125
- end
135
+ missing_keys = missing_config_keys
126
136
 
127
137
  unless missing_keys.empty?
128
138
  Lita.logger.fatal(I18n.t("lita.adapter.missing_configs", configs: missing_keys.join(", ")))
129
139
  abort
130
140
  end
131
141
  end
142
+
143
+ # Finds all missing config keys.
144
+ def missing_config_keys
145
+ required_configs.select do |key|
146
+ key unless adapter_config[key]
147
+ end
148
+ end
149
+
150
+ def required_configs
151
+ self.class.instance_variable_get(:@required_configs)
152
+ end
132
153
  end
133
154
  end
@@ -3,6 +3,8 @@ module Lita
3
3
  module Adapters
4
4
  # An adapter that runs Lita in a UNIX shell.
5
5
  class Shell < Adapter
6
+ config :private_chat, default: false
7
+
6
8
  # Creates a "Shell User" and then loops a prompt and input, passing the
7
9
  # incoming messages to the robot.
8
10
  # @return [void]
@@ -16,7 +18,7 @@ module Lita
16
18
  end
17
19
 
18
20
  # Outputs outgoing messages to the shell.
19
- # @param target [Lita::Source] Unused, since there is only one user in the
21
+ # @param _target [Lita::Source] Unused, since there is only one user in the
20
22
  # shell environment.
21
23
  # @param strings [Array<String>] An array of strings to output.
22
24
  # @return [void]
@@ -39,7 +41,7 @@ module Lita
39
41
 
40
42
  def build_message(input, source)
41
43
  message = Message.new(robot, input, source)
42
- message.command! if Lita.config.adapter.private_chat
44
+ message.command! if robot.config.adapters.shell.private_chat
43
45
  message
44
46
  end
45
47
 
@@ -57,7 +59,7 @@ module Lita
57
59
  input = Readline.readline("#{robot.name} > ", true)
58
60
  # Input read via rb-readline will always be encoded as US-ASCII.
59
61
  # @see https://github.com/luislavena/rb-readline/blob/master/lib/readline.rb#L1
60
- input.force_encoding(Encoding.default_external)
62
+ input.force_encoding(Encoding.default_external) if input
61
63
  end
62
64
 
63
65
  def run_loop
@@ -1,76 +1,125 @@
1
1
  module Lita
2
2
  # Methods for querying and manipulating authorization groups.
3
- module Authorization
4
- class << self
5
- # Adds a user to an authorization group.
6
- # @param requesting_user [Lita::User] The user who sent the command.
7
- # @param user [Lita::User] The user to add to the group.
8
- # @param group [Symbol, String] The name of the group.
9
- # @return [Symbol] :unauthorized if the requesting user is not authorized.
10
- # @return [Boolean] true if the user was added. false if the user was
11
- # already in the group.
12
- def add_user_to_group(requesting_user, user, group)
13
- return :unauthorized unless user_is_admin?(requesting_user)
14
- redis.sadd(normalize_group(group), user.id)
15
- end
3
+ class Authorization
4
+ # @param config [Object] The finalized configuration object for the currently running robot.
5
+ def initialize(config)
6
+ @config = config
7
+ end
16
8
 
17
- # Removes a user from an authorization group.
18
- # @param requesting_user [Lita::User] The user who sent the command.
19
- # @param user [Lita::User] The user to remove from the group.
20
- # @param group [Symbol, String] The name of the group.
21
- # @return [Symbol] :unauthorized if the requesting user is not authorized.
22
- # @return [Boolean] true if the user was removed. false if the user was
23
- # not in the group.
24
- def remove_user_from_group(requesting_user, user, group)
25
- return :unauthorized unless user_is_admin?(requesting_user)
26
- redis.srem(normalize_group(group), user.id)
27
- end
9
+ # Adds a user to an authorization group.
10
+ # @param requesting_user [Lita::User] The user who sent the command.
11
+ # @param user [Lita::User] The user to add to the group.
12
+ # @param group [Symbol, String] The name of the group.
13
+ # @return [Symbol] :unauthorized if the requesting user is not authorized.
14
+ # @return [Boolean] true if the user was added. false if the user was
15
+ # already in the group.
16
+ def add_user_to_group(requesting_user, user, group)
17
+ return :unauthorized unless user_is_admin?(requesting_user)
18
+ add_user_to_group!(user, group)
19
+ end
28
20
 
29
- # Checks if a user is in an authorization group.
30
- # @param user [Lita::User] The user.
31
- # @param group [Symbol, String] The name of the group.
32
- # @return [Boolean] Whether or not the user is in the group.
33
- def user_in_group?(user, group)
34
- group = normalize_group(group)
35
- return user_is_admin?(user) if group == "admins"
36
- redis.sismember(group, user.id)
37
- end
21
+ # Adds a user to an authorization group without validating the permissions
22
+ # of the requesting user.
23
+ # @param user [Lita::User] The user to add to the group.
24
+ # @param group [Symbol, String] The name of the group.
25
+ # @return [Boolean] true if the user was added. false if the user was
26
+ # already in the group.
27
+ # @since 4.0.0
28
+ def add_user_to_group!(user, group)
29
+ redis.sadd(normalize_group(group), user.id)
30
+ end
38
31
 
39
- # Checks if a user is an administrator.
40
- # @param user [Lita::User] The user.
41
- # @return [Boolean] Whether or not the user is an administrator.
42
- def user_is_admin?(user)
43
- Array(Lita.config.robot.admins).include?(user.id)
44
- end
32
+ # Removes a user from an authorization group.
33
+ # @param requesting_user [Lita::User] The user who sent the command.
34
+ # @param user [Lita::User] The user to remove from the group.
35
+ # @param group [Symbol, String] The name of the group.
36
+ # @return [Symbol] :unauthorized if the requesting user is not authorized.
37
+ # @return [Boolean] true if the user was removed. false if the user was
38
+ # not in the group.
39
+ def remove_user_from_group(requesting_user, user, group)
40
+ return :unauthorized unless user_is_admin?(requesting_user)
41
+ remove_user_from_group!(user, group)
42
+ end
45
43
 
46
- # Returns a list of all authorization groups.
47
- # @return [Array<Symbol>] The names of all authorization groups.
48
- def groups
49
- redis.keys("*").map(&:to_sym)
50
- end
44
+ # Removes a suer from an authorization group without validating the
45
+ # permissions of the requesting user.
46
+ # @param user [Lita::User] The user to remove from the group.
47
+ # @param group [Symbol, String] The name of the group.
48
+ # @return [Boolean] true if the user was removed. false if the user was
49
+ # not in the group.
50
+ # @since 4.0.0
51
+ def remove_user_from_group!(user, group)
52
+ redis.srem(normalize_group(group), user.id)
53
+ end
51
54
 
52
- # Returns a hash of authorization group names and the users in them.
53
- # @return [Hash] A map of +Symbol+ group names to +Lita::User+ objects.
54
- def groups_with_users
55
- groups.reduce({}) do |list, group|
56
- list[group] = redis.smembers(group).map do |user_id|
57
- User.find_by_id(user_id)
58
- end
59
- list
55
+ # Checks if a user is in an authorization group.
56
+ # @param user [Lita::User] The user.
57
+ # @param group [Symbol, String] The name of the group.
58
+ # @return [Boolean] Whether or not the user is in the group.
59
+ def user_in_group?(user, group)
60
+ group = normalize_group(group)
61
+ return user_is_admin?(user) if group == "admins"
62
+ redis.sismember(group, user.id)
63
+ end
64
+
65
+ # Checks if a user is an administrator.
66
+ # @param user [Lita::User] The user.
67
+ # @return [Boolean] Whether or not the user is an administrator.
68
+ def user_is_admin?(user)
69
+ Array(@config.robot.admins).include?(user.id)
70
+ end
71
+
72
+ # Returns a list of all authorization groups.
73
+ # @return [Array<Symbol>] The names of all authorization groups.
74
+ def groups
75
+ redis.keys("*").map(&:to_sym)
76
+ end
77
+
78
+ # Returns a hash of authorization group names and the users in them.
79
+ # @return [Hash] A map of +Symbol+ group names to +Lita::User+ objects.
80
+ def groups_with_users
81
+ groups.reduce({}) do |list, group|
82
+ list[group] = redis.smembers(group).map do |user_id|
83
+ User.find_by_id(user_id)
60
84
  end
85
+ list
61
86
  end
87
+ end
62
88
 
63
- private
89
+ private
64
90
 
65
- # Ensures that group names are stored consistently in Redis.
66
- def normalize_group(group)
67
- group.to_s.downcase.strip
68
- end
91
+ # Ensures that group names are stored consistently in Redis.
92
+ def normalize_group(group)
93
+ group.to_s.downcase.strip
94
+ end
69
95
 
70
- # A Redis::Namespace for authorization data.
71
- def redis
72
- @redis ||= Redis::Namespace.new("auth", redis: Lita.redis)
96
+ # A Redis::Namespace for authorization data.
97
+ def redis
98
+ @redis ||= Redis::Namespace.new("auth", redis: Lita.redis)
99
+ end
100
+
101
+ class << self
102
+ class << self
103
+ private
104
+
105
+ # @!macro define_deprecated_class_method
106
+ # @method $1(*args)
107
+ # @see #$1
108
+ # @deprecated Will be removed in Lita 5.0 Use #$1 instead.
109
+ def define_deprecated_class_method(deprecated_method)
110
+ define_method(deprecated_method) do |*args|
111
+ Lita.logger.warn(I18n.t("lita.auth.class_method_deprecated", method: deprecated_method))
112
+ new(Lita.config).public_send(deprecated_method, *args)
113
+ end
114
+ end
73
115
  end
116
+
117
+ define_deprecated_class_method :add_user_to_group
118
+ define_deprecated_class_method :remove_user_from_group
119
+ define_deprecated_class_method :user_in_group?
120
+ define_deprecated_class_method :user_is_admin?
121
+ define_deprecated_class_method :groups
122
+ define_deprecated_class_method :groups_with_users
74
123
  end
75
124
  end
76
125
  end