openfire 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e575931ddb539d8f73f44cee2efc0f7eb656935f
4
+ data.tar.gz: df8bf9de81ab90449faf5b4b810a5b9bd153679d
5
+ SHA512:
6
+ metadata.gz: ef8469f4d24e2d56c70cec34f715580b164901090ff966429c4bfffcab3a702dca94312ebcd20853136f43515885012daf5cfcf997f180bf829c3bedd3eaaa29
7
+ data.tar.gz: d004602e1309108aad83c618ee4d5c0d82a94ae38a64424030d80fd0ba05a125d8562ccfbc70203ea952c11010acfa46b5ee77d1a2097f2ae2daaba81824bbe0
@@ -0,0 +1,43 @@
1
+ # rcov generated
2
+ coverage
3
+
4
+ # rdoc generated
5
+ rdoc
6
+
7
+ # yard generated
8
+ doc
9
+ .yardoc
10
+ .rspec
11
+
12
+ # bundler
13
+ .bundle
14
+
15
+ # jeweler generated
16
+ pkg
17
+
18
+ # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
19
+ #
20
+ # * Create a file at ~/.gitignore
21
+ # * Include files you want ignored
22
+ # * Run: git config --global core.excludesfile ~/.gitignore
23
+ #
24
+ # After doing this, these files will be ignored in all your git projects,
25
+ # saving you from having to 'pollute' every project you touch with them
26
+ #
27
+ # Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
28
+ #
29
+ # For MacOS:
30
+ #
31
+ #.DS_Store
32
+ #
33
+ # For TextMate
34
+ #*.tmproj
35
+ #tmtags
36
+ #
37
+ # For emacs:
38
+ #*~
39
+ #\#*
40
+ #.\#*
41
+ #
42
+ # For vim:
43
+ #*.swp
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
4
+ </project>
5
+
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectRootManager" version="2" project-jdk-name="ruby-2.0.0-p247" project-jdk-type="RUBY_SDK" />
4
+ </project>
5
+
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/openfire_api.iml" filepath="$PROJECT_DIR$/.idea/openfire_api.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
9
+
@@ -0,0 +1,185 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="RUBY_MODULE" version="4">
3
+ <component name="FacetManager">
4
+ <facet type="gem" name="Gem">
5
+ <configuration>
6
+ <option name="GEM_APP_ROOT_PATH" value="$MODULE_DIR$/../openfire_api" />
7
+ <option name="GEM_APP_TEST_PATH" value="" />
8
+ <option name="GEM_APP_LIB_PATH" value="$MODULE_DIR$/../openfire_api/lib" />
9
+ </configuration>
10
+ </facet>
11
+ </component>
12
+ <component name="ModuleRunConfigurationManager">
13
+ <configuration default="false" name="All tests in openfire_api_ruby: openfire_api" type="TestUnitRunConfigurationType" factoryName="Test::Unit/Shoulda/Minitest" temporary="true">
14
+ <predefined_log_file id="RUBY_TESTUNIT" enabled="true" />
15
+ <module name="openfire_api" />
16
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
17
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$/lib/openfire_api_ruby" />
18
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
19
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
20
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
21
+ <envs>
22
+ <env name="JRUBY_OPTS" value="-X+O" />
23
+ </envs>
24
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
25
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
26
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
27
+ <COVERAGE_PATTERN ENABLED="true">
28
+ <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
29
+ </COVERAGE_PATTERN>
30
+ </EXTENSION>
31
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
32
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="$MODULE_DIR$/lib/openfire_api_ruby" />
33
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="" />
34
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="**/{*_test,test_*}.rb" />
35
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_METHOD_NAME" VALUE="" />
36
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="ALL_IN_FOLDER" />
37
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
38
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="ZEUS" VALUE="false" />
39
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_OPTIONS" VALUE="" />
40
+ <RunnerSettings RunnerId="RubyDebugRunner" />
41
+ <ConfigurationWrapper RunnerId="RubyDebugRunner" />
42
+ <method />
43
+ </configuration>
44
+ <configuration default="false" name="All tests in openfire_api_ruby: openfire_api (1)" type="TestUnitRunConfigurationType" factoryName="Test::Unit/Shoulda/Minitest" temporary="true">
45
+ <predefined_log_file id="RUBY_TESTUNIT" enabled="true" />
46
+ <module name="openfire_api" />
47
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
48
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$" />
49
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
50
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
51
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
52
+ <envs>
53
+ <env name="JRUBY_OPTS" value="-X+O" />
54
+ </envs>
55
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
56
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
57
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
58
+ <COVERAGE_PATTERN ENABLED="true">
59
+ <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
60
+ </COVERAGE_PATTERN>
61
+ </EXTENSION>
62
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
63
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="$MODULE_DIR$" />
64
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="" />
65
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="**/{*_test,test_*}.rb" />
66
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_METHOD_NAME" VALUE="" />
67
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="ALL_IN_FOLDER" />
68
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
69
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="ZEUS" VALUE="false" />
70
+ <RTEST_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_OPTIONS" VALUE="" />
71
+ <RunnerSettings RunnerId="RubyDebugRunner" />
72
+ <ConfigurationWrapper RunnerId="RubyDebugRunner" />
73
+ <method />
74
+ </configuration>
75
+ <configuration default="false" name="Run spec 'room_service_spec': openfire_api" type="RSpecRunConfigurationType" factoryName="RSpec" temporary="true">
76
+ <predefined_log_file id="RUBY_RSPEC" enabled="true" />
77
+ <module name="openfire_api" />
78
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
79
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$" />
80
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
81
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
82
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
83
+ <envs>
84
+ <env name="JRUBY_OPTS" value="-X+O" />
85
+ </envs>
86
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
87
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
88
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
89
+ <COVERAGE_PATTERN ENABLED="true">
90
+ <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
91
+ </COVERAGE_PATTERN>
92
+ </EXTENSION>
93
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
94
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
95
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="$MODULE_DIR$/spec/room_service_spec.rb" />
96
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_RUNNER_PATH" VALUE="" />
97
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="**/*_spec.rb" />
98
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_EXAMPLE_NAME" VALUE="" />
99
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="TEST_SCRIPT" />
100
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_ARGS" VALUE="" />
101
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_VERSION" VALUE="" />
102
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="USE_CUSTOM_SPEC_RUNNER" VALUE="false" />
103
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
104
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ZEUS" VALUE="false" />
105
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="FULL_BACKTRACE" VALUE="false" />
106
+ <RunnerSettings RunnerId="RubyRunner" />
107
+ <ConfigurationWrapper RunnerId="RubyRunner" />
108
+ <method />
109
+ </configuration>
110
+ <configuration default="false" name="spec_helper" type="RubyRunConfigurationType" factoryName="Ruby" temporary="true">
111
+ <module name="openfire_api" />
112
+ <RUBY_RUN_CONFIG NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
113
+ <RUBY_RUN_CONFIG NAME="WORK DIR" VALUE="$MODULE_DIR$/spec" />
114
+ <RUBY_RUN_CONFIG NAME="SHOULD_USE_SDK" VALUE="false" />
115
+ <RUBY_RUN_CONFIG NAME="ALTERN_SDK_NAME" VALUE="" />
116
+ <RUBY_RUN_CONFIG NAME="myPassParentEnvs" VALUE="true" />
117
+ <envs />
118
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
119
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
120
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
121
+ <COVERAGE_PATTERN ENABLED="true">
122
+ <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
123
+ </COVERAGE_PATTERN>
124
+ </EXTENSION>
125
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
126
+ <RUBY_RUN_CONFIG NAME="SCRIPT_PATH" VALUE="$MODULE_DIR$/spec/spec_helper.rb" />
127
+ <RUBY_RUN_CONFIG NAME="SCRIPT_ARGS" VALUE="" />
128
+ <RunnerSettings RunnerId="RubyRunner" />
129
+ <ConfigurationWrapper RunnerId="RubyRunner" />
130
+ <method />
131
+ </configuration>
132
+ <configuration default="false" name="Run spec 'user_service_spec': openfire_api" type="RSpecRunConfigurationType" factoryName="RSpec" temporary="true">
133
+ <predefined_log_file id="RUBY_RSPEC" enabled="true" />
134
+ <module name="openfire_api" />
135
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
136
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$" />
137
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
138
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
139
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
140
+ <envs>
141
+ <env name="JRUBY_OPTS" value="-X+O" />
142
+ </envs>
143
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
144
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
145
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
146
+ <COVERAGE_PATTERN ENABLED="true">
147
+ <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
148
+ </COVERAGE_PATTERN>
149
+ </EXTENSION>
150
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
151
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
152
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="$MODULE_DIR$/spec/user_service_spec.rb" />
153
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_RUNNER_PATH" VALUE="" />
154
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="**/*_spec.rb" />
155
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_EXAMPLE_NAME" VALUE="" />
156
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="TEST_SCRIPT" />
157
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_ARGS" VALUE="" />
158
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_VERSION" VALUE="" />
159
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="USE_CUSTOM_SPEC_RUNNER" VALUE="false" />
160
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
161
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ZEUS" VALUE="false" />
162
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="FULL_BACKTRACE" VALUE="false" />
163
+ <RunnerSettings RunnerId="RubyRunner" />
164
+ <ConfigurationWrapper RunnerId="RubyRunner" />
165
+ <method />
166
+ </configuration>
167
+ </component>
168
+ <component name="NewModuleRootManager">
169
+ <content url="file://$MODULE_DIR$" />
170
+ <orderEntry type="inheritedJdk" />
171
+ <orderEntry type="sourceFolder" forTests="false" />
172
+ <orderEntry type="library" scope="PROVIDED" name="bundler (v1.3.5, ruby-2.0.0-p247) [gem]" level="application" />
173
+ <orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.1.2, ruby-2.0.0-p247) [gem]" level="application" />
174
+ <orderEntry type="library" scope="PROVIDED" name="fakeweb (v1.3.0, ruby-2.0.0-p247) [gem]" level="application" />
175
+ <orderEntry type="library" scope="PROVIDED" name="git (v1.2.5, ruby-2.0.0-p247) [gem]" level="application" />
176
+ <orderEntry type="library" scope="PROVIDED" name="jeweler (v1.5.2, ruby-2.0.0-p247) [gem]" level="application" />
177
+ <orderEntry type="library" scope="PROVIDED" name="rake (v0.9.2, ruby-2.0.0-p247) [gem]" level="application" />
178
+ <orderEntry type="library" scope="PROVIDED" name="rspec (v2.6.0, ruby-2.0.0-p247) [gem]" level="application" />
179
+ <orderEntry type="library" scope="PROVIDED" name="rspec-core (v2.6.4, ruby-2.0.0-p247) [gem]" level="application" />
180
+ <orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v2.6.0, ruby-2.0.0-p247) [gem]" level="application" />
181
+ <orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v2.6.0, ruby-2.0.0-p247) [gem]" level="application" />
182
+ <orderEntry type="library" scope="PROVIDED" name="shoulda (v2.11.3, ruby-2.0.0-p247) [gem]" level="application" />
183
+ </component>
184
+ </module>
185
+
@@ -0,0 +1,5 @@
1
+ <component name="DependencyValidationManager">
2
+ <state>
3
+ <option name="SKIP_IMPORT_STATEMENTS" value="false" />
4
+ </state>
5
+ </component>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+ </component>
6
+ </project>
7
+
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,44 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ openfire (0.0.1)
5
+ activesupport (> 3)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ activesupport (4.1.4)
11
+ i18n (~> 0.6, >= 0.6.9)
12
+ json (~> 1.7, >= 1.7.7)
13
+ minitest (~> 5.1)
14
+ thread_safe (~> 0.1)
15
+ tzinfo (~> 1.1)
16
+ diff-lcs (1.1.2)
17
+ fakeweb (1.3.0)
18
+ i18n (0.6.11)
19
+ json (1.8.1)
20
+ minitest (5.4.0)
21
+ rake (10.3.2)
22
+ rspec (2.6.0)
23
+ rspec-core (~> 2.6.0)
24
+ rspec-expectations (~> 2.6.0)
25
+ rspec-mocks (~> 2.6.0)
26
+ rspec-core (2.6.4)
27
+ rspec-expectations (2.6.0)
28
+ diff-lcs (~> 1.1.2)
29
+ rspec-mocks (2.6.0)
30
+ shoulda (2.11.3)
31
+ thread_safe (0.3.4)
32
+ tzinfo (1.2.1)
33
+ thread_safe (~> 0.1)
34
+
35
+ PLATFORMS
36
+ ruby
37
+
38
+ DEPENDENCIES
39
+ bundler
40
+ fakeweb
41
+ openfire!
42
+ rake
43
+ rspec
44
+ shoulda
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Chris Bielinski
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,77 @@
1
+ # Openfire
2
+
3
+ A Ruby client for accessing Openfire's User, Room, and Group service API.
4
+
5
+ ## Installation
6
+
7
+ Add it to your Gemfile:
8
+
9
+ ```ruby
10
+ gem 'openfire'
11
+ ```
12
+
13
+ And `bundle install`.
14
+
15
+ ## Usage
16
+
17
+ Connect to the API by providing the endpoint URL and secret token:
18
+
19
+ ```ruby
20
+ client = Openfire::Client.new 'http://localhost:9090/', 'ABC123DEF456'
21
+ ```
22
+
23
+ ### Register a New User
24
+
25
+ ```ruby
26
+ client.add_user! username: 'john', password: 'sup3rs3cr3t!'
27
+ client.add_user! username: 'john', password: 'sup3rs3cr3t!', :name => ..., :email => ..., :groups => ...
28
+ ```
29
+
30
+ ### Update an Existing User
31
+
32
+ ```ruby
33
+ client.update_user! username: 'john', password: 'sup3rs3cr3t!'
34
+ client.update_user! username: 'john', password: 'sup3rs3cr3t!', :name => ..., :email => ..., :groups => ...
35
+ ```
36
+
37
+ ### Delete a User
38
+
39
+ ```ruby
40
+ client.delete_user! username: 'john'
41
+ ```
42
+
43
+ ### Lock a User
44
+
45
+ ```ruby
46
+ api.lock_user! username: 'john'
47
+ ```
48
+
49
+ ### Unlock a User
50
+
51
+ ```ruby
52
+ client.unlock_user! username: 'john'
53
+ ```
54
+
55
+ ### Create a Room
56
+
57
+ ```ruby
58
+ client.add_room! roomname: 'general', :jid => "jid", :subdomain => "generalchat"
59
+ ```
60
+
61
+ ### Delete a Room
62
+
63
+ ```ruby
64
+ client.delete_room! roomname: 'general', :subdomain => "generalchat"
65
+ ```
66
+
67
+ ### Create a MUC (multi-user chat) Service
68
+
69
+ ```ruby
70
+ client.add_muc_service! :subdomain => 'demo-service', :description => 'this is a demo muc service'
71
+ ```
72
+
73
+ ### Delete a MUC Service
74
+
75
+ ```ruby
76
+ client.delete_muc_service! :subdomain => 'demo-service'
77
+ ```
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ begin
5
+ Bundler.setup(:default, :development)
6
+ rescue Bundler::BundlerError => e
7
+ $stderr.puts e.message
8
+ $stderr.puts "Run `bundle install` to install missing gems"
9
+ exit e.status_code
10
+ end
11
+
12
+ require 'rspec/core/rake_task'
13
+
14
+ desc "Run all examples"
15
+ task RSpec::Core::RakeTask.new('spec')
16
+
17
+ task default: :spec
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.3.0
@@ -0,0 +1,14 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+
4
+ require 'active_support/configurable'
5
+ require 'active_support/inflector'
6
+
7
+ require 'openfire/client'
8
+ require 'openfire/service/base'
9
+ require 'openfire/service/user'
10
+ require 'openfire/service/room'
11
+ require 'openfire/service/group'
12
+
13
+ module Openfire
14
+ end
@@ -0,0 +1,28 @@
1
+ module Openfire
2
+ class Client
3
+ include ActiveSupport::Configurable
4
+
5
+ config.services = [ 'Group', 'Room', 'User' ]
6
+
7
+ def initialize(url,secret)
8
+ @services = config.services.map { |s| "Openfire::Service::#{s}".constantize.new url: url, secret: secret }
9
+ end
10
+
11
+ def get_service(service)
12
+ klass_name = "Openfire::Service::#{service.to_s.classify}"
13
+ klass = klass_name.constantize rescue nil
14
+ @services.each { |s| return s if s.is_a?(klass) }
15
+ raise "unknown service: #{service}"
16
+ end
17
+
18
+ def method_missing(meth, *args, &block)
19
+ @services.each do |service|
20
+ if service.respond_to?(meth)
21
+ return service.send meth, *args
22
+ end
23
+ end
24
+ super
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,56 @@
1
+ module Openfire
2
+ module Service
3
+ class Base
4
+ include ActiveSupport::Configurable
5
+
6
+ config.path = '/'
7
+ config.exceptions = []
8
+
9
+ def initialize(options={})
10
+ @options = { path: config.path }.merge(options)
11
+ end
12
+
13
+ private
14
+
15
+ def build_query(params)
16
+ "#{build_query_uri.to_s}?#{build_query_params(params)}"
17
+ end
18
+
19
+ def build_query_uri
20
+ uri = URI.parse(@options[:url])
21
+ uri.path = File.join(uri.path,config.path)
22
+ uri
23
+ end
24
+
25
+ def build_query_params(params)
26
+ params.merge!(:secret => @options[:secret])
27
+ params.to_a.map{ |p| "#{p[0]}=#{p[1]}" }.join('&')
28
+ end
29
+
30
+ def submit_request(params)
31
+ data = submit_http_request(build_query_uri, build_query_params(params))
32
+ parse_response(data)
33
+ end
34
+
35
+ def submit_http_request(uri, params_as_string)
36
+ uri.query = URI.encode(params_as_string)
37
+ res = Net::HTTP.get_response(uri)
38
+
39
+ return res.body
40
+ rescue Exception => e
41
+ raise HTTPException, e.to_s
42
+ end
43
+
44
+ def parse_response(data)
45
+ error = data.match(/<error>(.*)<\/error>/)
46
+ if error && config.exceptions.include?(error[1])
47
+ exception_klass = "#{self.class}::#{error[1].gsub('Exception', '')}Exception"
48
+ raise exception_klass.constantize
49
+ end
50
+ raise InvalidResponseException unless data.match(/<result>ok<\/result>/)
51
+ return true
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,44 @@
1
+ module Openfire
2
+ module Service
3
+ class Group < Base
4
+
5
+ config.path = 'plugins/groupService/groupservice'
6
+ config.exceptions = [
7
+ 'GroupServiceDisabled',
8
+ 'RequestNotAuthorised',
9
+ 'IllegalArgumentException',
10
+ 'GroupNotFoundException',
11
+ 'GroupAlreadyExistsException'
12
+ ]
13
+
14
+ class HTTPException < StandardError; end
15
+ class InvalidResponseException < StandardError; end
16
+ class GroupServiceDisabledException < StandardError; end
17
+ class RequestNotAuthorisedException < StandardError; end
18
+ class IllegalArgumentException < StandardError; end
19
+ class GroupNotFoundException < StandardError; end
20
+ class GroupAlreadyExistsException < StandardError; end
21
+
22
+ def add_group!(opts)
23
+ submit_request(opts.merge(:type => :add))
24
+ end
25
+
26
+ def delete_group!(opts)
27
+ submit_request(opts.merge(:type => :delete))
28
+ end
29
+
30
+ def update_group!(opts)
31
+ submit_request(opts.merge(:type => :update))
32
+ end
33
+
34
+ def lock_group!(opts)
35
+ submit_request(opts.merge(:type => :disable))
36
+ end
37
+
38
+ def unlock_group!(opts)
39
+ submit_request(opts.merge(:type => :enable))
40
+ end
41
+
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,46 @@
1
+ module Openfire
2
+ module Service
3
+ class Room < Base
4
+
5
+ config.path = 'plugins/roomService/roomservice'
6
+ config.exceptions = [
7
+ 'RoomServiceDisabled',
8
+ 'RequestNotAuthorised',
9
+ 'NotAllowedException',
10
+ 'IllegalArgumentException',
11
+ 'AlreadyExistsException',
12
+ 'NotFoundException'
13
+ ]
14
+
15
+ class HTTPException < StandardError; end
16
+ class InvalidResponseException < StandardError; end
17
+ class RoomServiceDisabledException < StandardError; end
18
+ class RequestNotAuthorisedException < StandardError; end
19
+ class NotAllowedException < StandardError; end
20
+ class IllegalArgumentException < StandardError; end
21
+ class AlreadyExistsException < StandardError; end
22
+ class NotFoundException < StandardError; end
23
+
24
+ def add_room!(opts)
25
+ submit_request(opts.merge(:type => :add))
26
+ end
27
+
28
+ def delete_room!(opts)
29
+ submit_request(opts.merge(:type => :delete))
30
+ end
31
+
32
+ def create_muc_service!(opts)
33
+ submit_request(opts.merge(:type => :createMultiUserChatService))
34
+ end
35
+
36
+ def rename_muc_service!(opts)
37
+ submit_request(opts.merge(:type => :updateMultiUserChatService))
38
+ end
39
+
40
+ def delete_muc_service!(opts)
41
+ submit_request(opts.merge(:type => :removeMultiUserChatService))
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,44 @@
1
+ module Openfire
2
+ module Service
3
+ class User < Base
4
+
5
+ config.path = 'plugins/userService/userservice'
6
+ config.exceptions = [
7
+ 'UserServiceDisabled',
8
+ 'RequestNotAuthorised',
9
+ 'IllegalArgumentException',
10
+ 'UserNotFoundException',
11
+ 'UserAlreadyExistsException'
12
+ ]
13
+
14
+ class HTTPException < StandardError; end
15
+ class InvalidResponseException < StandardError; end
16
+ class UserServiceDisabledException < StandardError; end
17
+ class RequestNotAuthorisedException < StandardError; end
18
+ class IllegalArgumentException < StandardError; end
19
+ class UserNotFoundException < StandardError; end
20
+ class UserAlreadyExistsException < StandardError; end
21
+
22
+ def add_user!(opts)
23
+ submit_request(opts.merge(:type => :add))
24
+ end
25
+
26
+ def delete_user!(opts)
27
+ submit_request(opts.merge(:type => :delete))
28
+ end
29
+
30
+ def update_user!(opts)
31
+ submit_request(opts.merge(:type => :update))
32
+ end
33
+
34
+ def lock_user!(opts)
35
+ submit_request(opts.merge(:type => :disable))
36
+ end
37
+
38
+ def unlock_user!(opts)
39
+ submit_request(opts.merge(:type => :enable))
40
+ end
41
+
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,3 @@
1
+ module Openfire
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "openfire/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = %q{openfire}
7
+
8
+ s.version = Openfire::VERSION
9
+ s.platform = Gem::Platform::RUBY
10
+
11
+ s.summary = %q{Ruby client for the Openfire API}
12
+ s.description = %q{Ruby client for the Openfire API. Provides access to Group, User, and Room service APIs.}
13
+
14
+ s.authors = [ 'Chris Bielinski' ]
15
+ s.email = [ 'chris@shadowreactor.com' ]
16
+ s.homepage = 'http://github.com/chrisb/openfire'
17
+
18
+ s.license = 'MIT'
19
+
20
+ s.add_dependency 'activesupport', '>3'
21
+
22
+ s.add_development_dependency 'rake'
23
+ s.add_development_dependency 'rspec'
24
+ s.add_development_dependency 'fakeweb'
25
+ s.add_development_dependency 'shoulda'
26
+ s.add_development_dependency 'bundler'
27
+
28
+ s.files = `git ls-files`.split("\n")
29
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
30
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
31
+ s.require_paths = [ 'lib' ]
32
+ end
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Room Service" do
4
+
5
+ before :all do
6
+ @client = Openfire::Client.new 'http://fakehost.int:2323/', 'bigsecret'
7
+ @room_service = @client.get_service :room
8
+ end
9
+
10
+ it "should build query urls" do
11
+ url = @room_service.send(:build_query_uri)
12
+ url.to_s.should == "http://fakehost.int:2323/plugins/roomService/roomservice"
13
+ end
14
+
15
+ it "should build query params" do
16
+ params = @room_service.send(:build_query_params, :type => :add, :roomname => "room", :subdomain => "groupchat")
17
+ params.should include("type=add")
18
+ params.should include("roomname=room")
19
+ params.should include("subdomain=groupchat")
20
+ params.should include("secret=bigsecret")
21
+ end
22
+
23
+ it "should build queries" do
24
+ url = @room_service.send(:build_query, :type => :add, :roomname => "room", :subdomain => "groupchat")
25
+ url.should include("http://fakehost.int:2323/plugins/roomService/roomservice?")
26
+ url.should include("type=add")
27
+ url.should include("roomname=room")
28
+ url.should include("subdomain=groupchat")
29
+ url.should include("secret=bigsecret")
30
+ end
31
+
32
+ it "should submit requests" do
33
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/roomService/roomservice?type=add&roomname=room&subdomain=groupchat&secret=bigsecret", :body => "<result>ok</result>")
34
+ @room_service.send(:submit_request, :type => :add, :roomname => "room", :subdomain => "groupchat").should == true
35
+ end
36
+
37
+ it "should add rooms" do
38
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/roomService/roomservice?type=add&roomname=room&subdomain=groupchat&secret=bigsecret", :body => "<result>ok</result>")
39
+ @room_service.add_room!(:roomname => "room", :subdomain => "groupchat").should == true
40
+ end
41
+
42
+ it "should delete rooms" do
43
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/roomService/roomservice?type=delete&roomname=room&subdomain=groupchat&secret=bigsecret", :body => "<result>ok</result>")
44
+ @room_service.delete_room!(:roomname => "room", :subdomain => "groupchat").should == true
45
+ end
46
+
47
+ it "should handle the error: room service disabled" do
48
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/roomService/roomservice?roomname=room1&type=add&secret=bigsecret", :body => "<error>RoomServiceDisabled</error>")
49
+ lambda{ @room_service.add_room!(:roomname => "room1") }.should raise_error(Openfire::Service::Room::RoomServiceDisabledException)
50
+ end
51
+
52
+ it "should handle the error: request not authorized" do
53
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/roomService/roomservice?roomname=room1&type=add&secret=bigsecret", :body => "<error>RequestNotAuthorised</error>")
54
+ lambda{ @room_service.add_room!(:roomname => "room1") }.should raise_error(Openfire::Service::Room::RequestNotAuthorisedException)
55
+ end
56
+
57
+ it "should handle the error: not allowed" do
58
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/roomService/roomservice?roomname=room1&type=add&secret=bigsecret", :body => "<error>NotAllowedException</error>")
59
+ lambda{ @room_service.add_room!(:roomname => "room1") }.should raise_error(Openfire::Service::Room::NotAllowedException)
60
+ end
61
+
62
+ it "should handle the error: illegal argument" do
63
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/roomService/roomservice?roomname=room1&type=add&secret=bigsecret", :body => "<error>IllegalArgumentException</error>")
64
+ lambda{ @room_service.add_room!(:roomname => "room1") }.should raise_error(Openfire::Service::Room::IllegalArgumentException)
65
+ end
66
+
67
+ end
@@ -0,0 +1,8 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+ require 'fakeweb'
4
+
5
+ FakeWeb.allow_net_connect = false
6
+
7
+ $: << ::File.expand_path('../../lib', __FILE__)
8
+ require 'openfire'
@@ -0,0 +1,88 @@
1
+ require ::File.expand_path('../spec_helper', __FILE__)
2
+
3
+ describe "User Service" do
4
+
5
+ before :all do
6
+ @client = Openfire::Client.new 'http://fakehost.int:2323/', 'bigsecret'
7
+ @user_service = @client.get_service :user
8
+ end
9
+
10
+ it "should build query urls" do
11
+ url = @user_service.send(:build_query_uri)
12
+ url.to_s.should == "http://fakehost.int:2323/plugins/userService/userservice"
13
+ end
14
+
15
+ it "should build query params" do
16
+ params = @user_service.send(:build_query_params, :type => :add, :username => "user", :password => "pw")
17
+ params.should include("type=add")
18
+ params.should include("username=user")
19
+ params.should include("password=pw")
20
+ params.should include("secret=bigsecret")
21
+ end
22
+
23
+ it "should build queries" do
24
+ url = @user_service.send(:build_query, :type => :add, :username => "user", :password => "pw")
25
+ url.should include("http://fakehost.int:2323/plugins/userService/userservice?")
26
+ url.should include("type=add")
27
+ url.should include("type=add")
28
+ url.should include("username=user")
29
+ url.should include("password=pw")
30
+ url.should include("secret=bigsecret")
31
+ end
32
+
33
+ it "should submit requests" do
34
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?type=add&username=user&password=pw&secret=bigsecret", :body => "<result>ok</result>")
35
+ @user_service.send(:submit_request, :type => :add, :username => "user", :password => "pw").should == true
36
+ end
37
+
38
+ it "should add users" do
39
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?type=add&username=user&password=pw&secret=bigsecret", :body => "<result>ok</result>")
40
+ @user_service.add_user!(:username => "user", :password => "pw").should == true
41
+ end
42
+
43
+ it "should delete users" do
44
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?type=delete&username=user&secret=bigsecret", :body => "<result>ok</result>")
45
+ @user_service.delete_user!(:username => "user").should == true
46
+ end
47
+
48
+ it "should update users" do
49
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?type=update&username=user&password=pw&name=horst&secret=bigsecret", :body => "<result>ok</result>")
50
+ @user_service.update_user!(:username => "user", :password => "pw", :name => "horst").should == true
51
+ end
52
+
53
+ it "should lock users" do
54
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?type=disable&username=user&secret=bigsecret", :body => "<result>ok</result>")
55
+ @user_service.lock_user!(:username => "user").should == true
56
+ end
57
+
58
+ it "should unlock users" do
59
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?type=enable&username=user&secret=bigsecret", :body => "<result>ok</result>")
60
+ @user_service.unlock_user!(:username => "user").should == true
61
+ end
62
+
63
+ it "should handle the error: user service disabled" do
64
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?username=user1&type=disable&secret=bigsecret", :body => "<error>UserServiceDisabled</error>")
65
+ lambda{ @user_service.lock_user!(:username => "user1") }.should raise_error(Openfire::Service::User::UserServiceDisabledException)
66
+ end
67
+
68
+ it "should handle the error: request not authorized" do
69
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?username=user1&type=disable&secret=bigsecret", :body => "<error>RequestNotAuthorised</error>")
70
+ lambda{ @user_service.lock_user!(:username => "user1") }.should raise_error(Openfire::Service::User::RequestNotAuthorisedException)
71
+ end
72
+
73
+ it "should handle the error: illegal argument" do
74
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?username=user1&type=disable&secret=bigsecret", :body => "<error>IllegalArgumentException</error>")
75
+ lambda{ @user_service.lock_user!(:username => "user1") }.should raise_error(Openfire::Service::User::IllegalArgumentException)
76
+ end
77
+
78
+ it "should handle the error: user not found" do
79
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?username=user1&type=disable&secret=bigsecret", :body => "<error>UserNotFoundException</error>")
80
+ lambda{ @user_service.lock_user!(:username => "user1") }.should raise_error(Openfire::Service::User::UserNotFoundException)
81
+ end
82
+
83
+ it "should handle the error: user already exists" do
84
+ FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?username=user1&type=disable&secret=bigsecret", :body => "<error>UserAlreadyExistsException</error>")
85
+ lambda{ @user_service.lock_user!(:username => "user1") }.should raise_error(Openfire::Service::User::UserAlreadyExistsException)
86
+ end
87
+
88
+ end
metadata ADDED
@@ -0,0 +1,156 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: openfire
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Chris Bielinski
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">"
18
+ - !ruby/object:Gem::Version
19
+ version: '3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">"
25
+ - !ruby/object:Gem::Version
26
+ version: '3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
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: fakeweb
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: shoulda
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: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Ruby client for the Openfire API. Provides access to Group, User, and
98
+ Room service APIs.
99
+ email:
100
+ - chris@shadowreactor.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - ".idea/encodings.xml"
107
+ - ".idea/misc.xml"
108
+ - ".idea/modules.xml"
109
+ - ".idea/openfire_api.iml"
110
+ - ".idea/scopes/scope_settings.xml"
111
+ - ".idea/vcs.xml"
112
+ - Gemfile
113
+ - Gemfile.lock
114
+ - LICENSE
115
+ - README.md
116
+ - Rakefile
117
+ - VERSION
118
+ - lib/openfire.rb
119
+ - lib/openfire/client.rb
120
+ - lib/openfire/service/base.rb
121
+ - lib/openfire/service/group.rb
122
+ - lib/openfire/service/room.rb
123
+ - lib/openfire/service/user.rb
124
+ - lib/openfire/version.rb
125
+ - openfire.gemspec
126
+ - spec/room_service_spec.rb
127
+ - spec/spec_helper.rb
128
+ - spec/user_service_spec.rb
129
+ homepage: http://github.com/chrisb/openfire
130
+ licenses:
131
+ - MIT
132
+ metadata: {}
133
+ post_install_message:
134
+ rdoc_options: []
135
+ require_paths:
136
+ - lib
137
+ required_ruby_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ required_rubygems_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ requirements: []
148
+ rubyforge_project:
149
+ rubygems_version: 2.2.2
150
+ signing_key:
151
+ specification_version: 4
152
+ summary: Ruby client for the Openfire API
153
+ test_files:
154
+ - spec/room_service_spec.rb
155
+ - spec/spec_helper.rb
156
+ - spec/user_service_spec.rb