ecircle 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ecircle (0.1.3)
4
+ ecircle (0.1.4)
5
5
  activesupport
6
6
  i18n
7
7
  rake
@@ -10,7 +10,7 @@ PATH
10
10
  GEM
11
11
  remote: http://rubygems.org/
12
12
  specs:
13
- activesupport (3.1.1)
13
+ activesupport (3.1.3)
14
14
  multi_json (~> 1.0)
15
15
  akami (1.0.0)
16
16
  gyoku (>= 0.4.0)
@@ -25,6 +25,9 @@ GEM
25
25
  i18n (0.6.0)
26
26
  linecache19 (0.5.12)
27
27
  ruby_core_source (>= 0.1.4)
28
+ metaclass (0.0.1)
29
+ mocha (0.10.0)
30
+ metaclass (~> 0.0.1)
28
31
  multi_json (1.0.3)
29
32
  nokogiri (1.5.0)
30
33
  nori (1.0.2)
@@ -57,6 +60,10 @@ GEM
57
60
  nokogiri (>= 1.4.0)
58
61
  nori (~> 1.0)
59
62
  wasabi (~> 2.0)
63
+ savon_spec (0.1.6)
64
+ mocha (>= 0.9.8)
65
+ rspec (>= 2.0.0)
66
+ savon (>= 0.8.0)
60
67
  wasabi (2.0.0)
61
68
  nokogiri (>= 1.4.0)
62
69
  yard (0.7.3)
@@ -69,4 +76,5 @@ DEPENDENCIES
69
76
  random_data (= 1.5.2)
70
77
  rspec (= 2.6.0)
71
78
  ruby-debug19
79
+ savon_spec (~> 0.1.6)
72
80
  yard
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_dependency 'savon', '>=0.9.7'
25
25
  s.add_development_dependency 'random_data', '1.5.2'
26
26
  s.add_development_dependency 'rspec', '2.6.0'
27
+ s.add_development_dependency 'savon_spec', '~> 0.1.6'
27
28
  s.add_development_dependency 'yard'
28
29
  s.add_development_dependency 'ruby-debug19'
29
30
  end
@@ -11,39 +11,9 @@ module Ecircle
11
11
  !!!
12
12
  doc
13
13
 
14
-
15
- #@private
16
- def ensuring_logon &block
17
- begin
18
- @auth_token ||= logon
19
- rescue Savon::SOAP::Fault => e
20
- # If we are here this means that our login credentials are wrong.
21
- wrapped_response = WrappedResponse.new(e)
22
- if wrapped_response.not_authenticated? || wrapped_response.permission_problem?
23
- puts @@help
24
- raise InvalidLoginCredentials
25
- else
26
- raise
27
- end
28
- end
29
-
30
- first_try = true
31
- # -> In case the session token has expired (which means 'not_authenticated') retry once.
32
- # -> In case we can't get a token on second there's nothing we can do, so give up.
33
- # -> In all other cases (regardless if success? is true or false) return the response.
34
- loop do
35
- wrapped_response = block.call
36
- if first_try && wrapped_response.not_authenticated?
37
- first_try = false
38
- @auth_token = logon
39
- elsif wrapped_response.not_authenticated?
40
- puts "!!! Could not re-authenticate after session expired: #{wrapped_response.inspect} !!!"
41
- raise
42
- else
43
- return wrapped_response
44
- end
45
- end
46
- end
14
+ # According to http://developer.ecircle-ag.com/apiwiki/wiki/SynchronousSoapAPI#section-SynchronousSoapAPI-SampleProtocolExcerpt,
15
+ # a session expires after 10 minutes (600 seconds) of idleness. We give ourselves a 30-second margin.
16
+ AUTH_TOKEN_TIMEOUT = 570
47
17
 
48
18
  # @private
49
19
  def client
@@ -62,24 +32,19 @@ module Ecircle
62
32
  # @param [Boolean] send_message send a message by ecircle
63
33
  # @return [WrappedResponse]
64
34
  def create_member user_id, group_id, invite = false, send_message = false
65
- ensuring_logon do
66
- begin
67
- @response = client.request :createMember do
68
- soap.body = {
69
- :session => auth_token,
70
- :userId => user_id,
71
- :groupId => group_id,
72
- :invite => invite.to_s,
73
- :sendMessage => send_message.to_s
74
- }
75
- end
76
- rescue Savon::SOAP::Fault => e
77
- WrappedResponse.new(e)
78
- else
79
- WrappedResponse.new :success => true,
80
- :ecircle_id => @response.body[:create_member_response][:create_member_return].to_s
81
- end
35
+ response = client.request :createMember do
36
+ soap.body = {
37
+ :session => obtain_auth_token,
38
+ :userId => user_id,
39
+ :groupId => group_id,
40
+ :invite => invite.to_s,
41
+ :sendMessage => send_message.to_s
42
+ }
82
43
  end
44
+ WrappedResponse.new :success => true,
45
+ :ecircle_id => response.body[:create_member_response][:create_member_return].to_s
46
+ rescue Savon::SOAP::Fault => e
47
+ WrappedResponse.new(e)
83
48
  end
84
49
 
85
50
  # Create or update group
@@ -89,21 +54,16 @@ module Ecircle
89
54
  # @return [WrappedResponse]
90
55
  # Important note: `email` must be unique across all groups AND must be a subdomain of the system you registered at ecircle.
91
56
  def create_or_update_group group_attributes
92
- ensuring_logon do
93
- begin
94
- @response = client.request :createOrUpdateGroup do
95
- soap.body = {
96
- :session => auth_token,
97
- :groupXml => Helper.build_group_xml(group_attributes)
98
- }
99
- end
100
- rescue Savon::SOAP::Fault => e
101
- WrappedResponse.new(e)
102
- else
103
- WrappedResponse.new :success => true,
104
- :ecircle_id => @response[:create_or_update_group_response][:create_or_update_group_return].to_i
105
- end
57
+ response = client.request :createOrUpdateGroup do
58
+ soap.body = {
59
+ :session => obtain_auth_token,
60
+ :groupXml => Helper.build_group_xml(group_attributes)
61
+ }
106
62
  end
63
+ WrappedResponse.new :success => true,
64
+ :ecircle_id => response[:create_or_update_group_response][:create_or_update_group_return].to_i
65
+ rescue Savon::SOAP::Fault => e
66
+ WrappedResponse.new(e)
107
67
  end
108
68
 
109
69
  # Create or update user by email
@@ -112,22 +72,17 @@ module Ecircle
112
72
  # @param [Hash] user_xml, in it's most simple form a { :email => 'test@test.com' } is sufficient
113
73
  # @return [Integer] the user id
114
74
  def create_or_update_user_by_email user_attributes
115
- ensuring_logon do
116
- begin
117
- @response = client.request :createOrUpdateUserByEmail do
118
- soap.body = {
119
- :session => auth_token, # TODO We can't use @auth_token here cause then the session_id is nil. Why?
120
- :userXml => Helper.build_user_xml(user_attributes),
121
- :sendMessage => 0
122
- }
123
- end
124
- rescue Savon::SOAP::Fault => e
125
- WrappedResponse.new(e)
126
- else
127
- WrappedResponse.new :success => true,
128
- :ecircle_id => @response.body[:create_or_update_user_by_email_response][:create_or_update_user_by_email_return].to_i
129
- end
75
+ response = client.request :createOrUpdateUserByEmail do
76
+ soap.body = {
77
+ :session => obtain_auth_token,
78
+ :userXml => Helper.build_user_xml(user_attributes),
79
+ :sendMessage => 0
80
+ }
130
81
  end
82
+ WrappedResponse.new :success => true,
83
+ :ecircle_id => response.body[:create_or_update_user_by_email_response][:create_or_update_user_by_email_return].to_i
84
+ rescue Savon::SOAP::Fault => e
85
+ WrappedResponse.new(e)
131
86
  end
132
87
 
133
88
  # Delete a member.
@@ -135,20 +90,15 @@ module Ecircle
135
90
  # @param [Integer] group_id ecircle group id
136
91
  # @return [WrappedResponse]
137
92
  def delete_group group_id
138
- ensuring_logon do
139
- begin
140
- @response = client.request :deleteGroup do
141
- soap.body = {
142
- :session => auth_token,
143
- :memberId => group_id
144
- }
145
- end
146
- rescue Savon::SOAP::Fault => e
147
- WrappedResponse.new(e)
148
- else
149
- WrappedResponse.new(:success => true)
150
- end
93
+ response = client.request :deleteGroup do
94
+ soap.body = {
95
+ :session => obtain_auth_token,
96
+ :memberId => group_id
97
+ }
151
98
  end
99
+ WrappedResponse.new(:success => true)
100
+ rescue Savon::SOAP::Fault => e
101
+ WrappedResponse.new(e)
152
102
  end
153
103
 
154
104
  # Delete a member.
@@ -156,34 +106,37 @@ module Ecircle
156
106
  # @param [Integer] member_id ecircle member id
157
107
  # @return [WrappedResponse]
158
108
  def delete_member member_id
159
- ensuring_logon do
160
- begin
161
- @response = client.request :deleteMember do
162
- soap.body = {
163
- :session => auth_token,
164
- :memberId => member_id
165
- }
166
- end
167
- rescue Savon::SOAP::Fault => e
168
- WrappedResponse.new(e)
169
- else
170
- WrappedResponse.new(:success => true)
171
- end
109
+ client.request :deleteMember do
110
+ soap.body = {
111
+ :session => obtain_auth_token,
112
+ :memberId => member_id
113
+ }
172
114
  end
115
+ WrappedResponse.new(:success => true)
116
+ rescue Savon::SOAP::Fault => e
117
+ WrappedResponse.new(e)
173
118
  end
174
119
 
175
120
  # Logon. You don't need to call this explicitly but it's useful for debugging.
176
121
  #
177
122
  # @return [String] the session id
178
123
  def logon
179
- @response = client.request :logon do
124
+ response = client.request :logon do
180
125
  soap.body = {
181
126
  :user => Ecircle.configuration.user,
182
127
  :realm => Ecircle.configuration.sync_realm,
183
128
  :passwd => Ecircle.configuration.password
184
129
  }
185
130
  end
186
- @response.body[:logon_response][:logon_return].to_s
131
+ response.body[:logon_response][:logon_return].to_s
132
+ rescue Savon::SOAP::Fault => e
133
+ wrapped_response = WrappedResponse.new(e)
134
+ if wrapped_response.not_authenticated? || wrapped_response.permission_problem?
135
+ puts @@help
136
+ raise InvalidLoginCredentials
137
+ else
138
+ raise
139
+ end
187
140
  end
188
141
 
189
142
  # Log out. Uses the last session token.
@@ -206,23 +159,28 @@ module Ecircle
206
159
  # @param [Array] the values of the variables you want to interpolate in the template
207
160
  # @return [WrappedResponse]
208
161
  def send_parametrized_single_message_to_user user_id, message_id, names = [], values = []
209
- ensuring_logon do
210
- begin
211
- client.request :sendParametrizedSingleMessageToUser do
212
- soap.body = {
213
- :session => auth_token,
214
- :singleMessageId => message_id,
215
- :userId => user_id,
216
- :names => names,
217
- :values => values
218
- }
219
- end
220
- rescue Savon::SOAP::Fault => e
221
- WrappedResponse.new(e)
222
- else
223
- WrappedResponse.new(:success => true)
224
- end
162
+ client.request :sendParametrizedSingleMessageToUser do
163
+ soap.body = {
164
+ :session => obtain_auth_token,
165
+ :singleMessageId => message_id,
166
+ :userId => user_id,
167
+ :names => names,
168
+ :values => values
169
+ }
225
170
  end
171
+ WrappedResponse.new(:success => true)
172
+ rescue Savon::SOAP::Fault => e
173
+ WrappedResponse.new(e)
174
+ end
175
+
176
+ def obtain_auth_token
177
+ @auth_token = logon unless auth_token_valid?
178
+ @auth_token_last_used_at = Time.now
179
+ @auth_token
180
+ end
181
+
182
+ def auth_token_valid?
183
+ @auth_token_last_used_at && Time.now - @auth_token_last_used_at < AUTH_TOKEN_TIMEOUT
226
184
  end
227
185
  end
228
186
  end
@@ -1,3 +1,3 @@
1
1
  module Ecircle
2
- VERSION = '0.1.3'
2
+ VERSION = '0.1.4'
3
3
  end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ecircle::Api do
4
+ describe 'obtain_auth_token' do
5
+ it 'should obtain an auth token for the first time' do
6
+ savon.expects(:logon).returns(:success)
7
+ subject.obtain_auth_token
8
+ end
9
+
10
+ it 'should touch auth_token_last_used_at' do
11
+ savon.expects(:logon).returns(:success)
12
+ before_call = Time.now
13
+ subject.obtain_auth_token
14
+
15
+ auth_token_last_used_at = subject.instance_variable_get('@auth_token_last_used_at')
16
+ before_call.should <= auth_token_last_used_at
17
+ auth_token_last_used_at.should <= Time.now
18
+ end
19
+
20
+ it 'should return the token' do
21
+ savon.expects(:logon).returns(:success)
22
+ subject.obtain_auth_token.should eq('foo')
23
+ end
24
+
25
+ describe 'subsequent calls' do
26
+ before do
27
+ savon.expects(:logon).returns(:success)
28
+ @auth_token = subject.obtain_auth_token
29
+ end
30
+
31
+ it 'should re-use auth token' do
32
+ savon.expects(:logon).never
33
+ subject.obtain_auth_token.should eq(@auth_token)
34
+ end
35
+
36
+ it 'should touch auth_token_last_used_at' do
37
+ before_call = Time.now
38
+ subject.obtain_auth_token
39
+
40
+ auth_token_last_used_at = subject.instance_variable_get('@auth_token_last_used_at')
41
+ before_call.should <= auth_token_last_used_at
42
+ auth_token_last_used_at.should <= Time.now
43
+ end
44
+
45
+ it 'should request another auth token if current one expired' do
46
+ subject.instance_variable_set('@auth_token_last_used_at', Time.now - Ecircle::Api::AUTH_TOKEN_TIMEOUT - 1)
47
+ savon.expects(:logon).returns(:success)
48
+ subject.obtain_auth_token
49
+ end
50
+ end
51
+ end
52
+
53
+ describe 'create_member' do
54
+ it 'should obtain an auth token' do
55
+ savon.stubs(:createMember).returns(:success)
56
+ subject.expects(:obtain_auth_token)
57
+
58
+ subject.create_member(nil, nil)
59
+ end
60
+
61
+ it 'should pass proper parameters' do
62
+ savon.expects(:createMember).
63
+ with(:session => 'foo', :userId => 1, :groupId => 2,
64
+ :invite => 'false', :sendMessage => 'false').
65
+ returns(:success)
66
+ subject.stubs(:obtain_auth_token).returns('foo')
67
+
68
+ wrapped_response = subject.create_member(1, 2)
69
+ end
70
+
71
+ it 'should parse proper response segment' do
72
+ savon.stubs(:createMember).returns(:success)
73
+ subject.stubs(:obtain_auth_token)
74
+
75
+ wrapped_response = subject.create_member(nil, nil)
76
+
77
+ wrapped_response.ecircle_id.should eq('123456')
78
+ end
79
+ end
80
+ end
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><createMemberResponse xmlns="http://webservices.ecircleag.com/rpcns"><createMemberReturn>123456</createMemberReturn></createMemberResponse></soapenv:Body></soapenv:Envelope>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><logonResponse xmlns="http://webservices.ecircleag.com/rpcns"><logonReturn>foo</logonReturn></logonResponse></soapenv:Body></soapenv:Envelope>
@@ -1,7 +1,5 @@
1
- dir = File.dirname(__FILE__)
2
- require File.join(dir, '..', 'lib', 'ecircle')
3
-
4
- require 'random_data'
1
+ Bundler.require
2
+ require 'savon_spec'
5
3
 
6
4
  def random_group_email suffix
7
5
  "apitest#{Random.number(100000)}@#{suffix}"
@@ -17,3 +15,12 @@ end
17
15
  def test_user_id
18
16
  @ecircle_user_id ||= Ecircle.create_or_update_user_by_email(:email => 'apitest@apitest.com').ecircle_id
19
17
  end
18
+
19
+ Savon::Spec::Fixture.path = File.expand_path('../fixtures', __FILE__)
20
+
21
+ RSpec::configure do |c|
22
+ c.include Savon::Spec::Macros
23
+ c.treat_symbols_as_metadata_keys_with_true_values = true
24
+ c.filter_run :focus => true
25
+ c.run_all_when_everything_filtered = true
26
+ end
metadata CHANGED
@@ -1,112 +1,128 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ecircle
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.3
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: 0.1.4
6
6
  platform: ruby
7
- authors:
8
- - Timo Rößner
7
+ authors:
8
+ - "Timo R\xC3\xB6\xC3\x9Fner"
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-23 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
12
+
13
+ date: 2011-11-28 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
15
16
  name: activesupport
16
- requirement: &81840600 !ruby/object:Gem::Requirement
17
+ requirement: &id001 !ruby/object:Gem::Requirement
17
18
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
22
23
  type: :runtime
23
24
  prerelease: false
24
- version_requirements: *81840600
25
- - !ruby/object:Gem::Dependency
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
26
27
  name: i18n
27
- requirement: &81840390 !ruby/object:Gem::Requirement
28
+ requirement: &id002 !ruby/object:Gem::Requirement
28
29
  none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: '0'
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *81840390
36
- - !ruby/object:Gem::Dependency
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
37
38
  name: rake
38
- requirement: &81840180 !ruby/object:Gem::Requirement
39
+ requirement: &id003 !ruby/object:Gem::Requirement
39
40
  none: false
40
- requirements:
41
- - - ! '>='
42
- - !ruby/object:Gem::Version
43
- version: '0'
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
44
45
  type: :runtime
45
46
  prerelease: false
46
- version_requirements: *81840180
47
- - !ruby/object:Gem::Dependency
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
48
49
  name: savon
49
- requirement: &81839920 !ruby/object:Gem::Requirement
50
+ requirement: &id004 !ruby/object:Gem::Requirement
50
51
  none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
54
55
  version: 0.9.7
55
56
  type: :runtime
56
57
  prerelease: false
57
- version_requirements: *81839920
58
- - !ruby/object:Gem::Dependency
58
+ version_requirements: *id004
59
+ - !ruby/object:Gem::Dependency
59
60
  name: random_data
60
- requirement: &81839640 !ruby/object:Gem::Requirement
61
+ requirement: &id005 !ruby/object:Gem::Requirement
61
62
  none: false
62
- requirements:
63
- - - =
64
- - !ruby/object:Gem::Version
63
+ requirements:
64
+ - - "="
65
+ - !ruby/object:Gem::Version
65
66
  version: 1.5.2
66
67
  type: :development
67
68
  prerelease: false
68
- version_requirements: *81839640
69
- - !ruby/object:Gem::Dependency
69
+ version_requirements: *id005
70
+ - !ruby/object:Gem::Dependency
70
71
  name: rspec
71
- requirement: &81839350 !ruby/object:Gem::Requirement
72
+ requirement: &id006 !ruby/object:Gem::Requirement
72
73
  none: false
73
- requirements:
74
- - - =
75
- - !ruby/object:Gem::Version
74
+ requirements:
75
+ - - "="
76
+ - !ruby/object:Gem::Version
76
77
  version: 2.6.0
77
78
  type: :development
78
79
  prerelease: false
79
- version_requirements: *81839350
80
- - !ruby/object:Gem::Dependency
80
+ version_requirements: *id006
81
+ - !ruby/object:Gem::Dependency
82
+ name: savon_spec
83
+ requirement: &id007 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: 0.1.6
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: *id007
92
+ - !ruby/object:Gem::Dependency
81
93
  name: yard
82
- requirement: &81802840 !ruby/object:Gem::Requirement
94
+ requirement: &id008 !ruby/object:Gem::Requirement
83
95
  none: false
84
- requirements:
85
- - - ! '>='
86
- - !ruby/object:Gem::Version
87
- version: '0'
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: "0"
88
100
  type: :development
89
101
  prerelease: false
90
- version_requirements: *81802840
91
- - !ruby/object:Gem::Dependency
102
+ version_requirements: *id008
103
+ - !ruby/object:Gem::Dependency
92
104
  name: ruby-debug19
93
- requirement: &81802590 !ruby/object:Gem::Requirement
105
+ requirement: &id009 !ruby/object:Gem::Requirement
94
106
  none: false
95
- requirements:
96
- - - ! '>='
97
- - !ruby/object:Gem::Version
98
- version: '0'
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: "0"
99
111
  type: :development
100
112
  prerelease: false
101
- version_requirements: *81802590
113
+ version_requirements: *id009
102
114
  description: The ecircle gem aims to be a full-fledged client for all ecircle services.
103
- email:
115
+ email:
104
116
  - timo.roessner@googlemail.com
105
117
  executables: []
118
+
106
119
  extensions: []
120
+
107
121
  extra_rdoc_files: []
108
- files:
122
+
123
+ files:
109
124
  - .gitignore
125
+ - .rspec
110
126
  - .rvmrc
111
127
  - .travis.yml
112
128
  - .yardopts
@@ -123,37 +139,44 @@ files:
123
139
  - lib/ecircle/version.rb
124
140
  - lib/ecircle/wrapped_response.rb
125
141
  - spec/api_spec.rb.disabled
142
+ - spec/ecircle/api_spec.rb
143
+ - spec/fixtures/create_member/success.xml
144
+ - spec/fixtures/logon/success.xml
126
145
  - spec/job_package_spec.rb
127
146
  - spec/spec_helper.rb
128
- homepage: ''
147
+ homepage: ""
129
148
  licenses: []
149
+
130
150
  post_install_message:
131
151
  rdoc_options: []
132
- require_paths:
152
+
153
+ require_paths:
133
154
  - lib
134
- required_ruby_version: !ruby/object:Gem::Requirement
155
+ required_ruby_version: !ruby/object:Gem::Requirement
135
156
  none: false
136
- requirements:
137
- - - ! '>='
138
- - !ruby/object:Gem::Version
139
- version: '0'
140
- segments:
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ hash: -815952973
161
+ segments:
141
162
  - 0
142
- hash: 733065171
143
- required_rubygems_version: !ruby/object:Gem::Requirement
163
+ version: "0"
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
165
  none: false
145
- requirements:
146
- - - ! '>='
147
- - !ruby/object:Gem::Version
148
- version: '0'
149
- segments:
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ hash: -815952973
170
+ segments:
150
171
  - 0
151
- hash: 733065171
172
+ version: "0"
152
173
  requirements: []
174
+
153
175
  rubyforge_project: ecircle
154
- rubygems_version: 1.8.10
176
+ rubygems_version: 1.8.11
155
177
  signing_key:
156
178
  specification_version: 3
157
179
  summary: Ecircle gem
158
180
  test_files: []
181
+
159
182
  has_rdoc: