isimud 0.7.0 → 1.3.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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rspec +1 -2
  4. data/.ruby-version +1 -1
  5. data/.yardoc/checksums +10 -10
  6. data/.yardoc/object_types +0 -0
  7. data/.yardoc/objects/root.dat +0 -0
  8. data/Gemfile +2 -1
  9. data/Gemfile.lock +63 -73
  10. data/LICENSE.txt +19 -0
  11. data/README.md +51 -3
  12. data/Rakefile +5 -0
  13. data/doc/Isimud/BunnyClient.html +882 -179
  14. data/doc/Isimud/Client.html +236 -18
  15. data/doc/Isimud/Event.html +211 -95
  16. data/doc/Isimud/EventListener.html +325 -307
  17. data/doc/Isimud/EventObserver/ClassMethods.html +14 -14
  18. data/doc/Isimud/EventObserver.html +418 -36
  19. data/doc/Isimud/Generators/ConfigGenerator.html +2 -2
  20. data/doc/Isimud/Generators/InitializerGenerator.html +2 -2
  21. data/doc/Isimud/Generators.html +2 -2
  22. data/doc/Isimud/Logging.html +3 -3
  23. data/doc/Isimud/ModelWatcher/ClassMethods.html +3 -3
  24. data/doc/Isimud/ModelWatcher.html +2 -2
  25. data/doc/Isimud/Railtie.html +2 -2
  26. data/doc/Isimud/TestClient/Queue.html +374 -71
  27. data/doc/Isimud/TestClient.html +169 -161
  28. data/doc/Isimud.html +80 -76
  29. data/doc/_index.html +5 -2
  30. data/doc/file.LICENSE.html +73 -0
  31. data/doc/file.README.html +131 -7
  32. data/doc/file_list.html +3 -0
  33. data/doc/index.html +131 -7
  34. data/doc/method_list.html +183 -105
  35. data/doc/top-level-namespace.html +2 -2
  36. data/isimud.gemspec +18 -16
  37. data/lib/isimud/bunny_client.rb +85 -32
  38. data/lib/isimud/client.rb +23 -7
  39. data/lib/isimud/event.rb +11 -14
  40. data/lib/isimud/event_listener.rb +123 -65
  41. data/lib/isimud/event_observer.rb +70 -10
  42. data/lib/isimud/model_watcher.rb +1 -1
  43. data/lib/isimud/test_client.rb +54 -26
  44. data/lib/isimud/version.rb +1 -1
  45. data/lib/isimud.rb +1 -1
  46. data/spec/internal/app/models/company.rb +8 -10
  47. data/spec/internal/app/models/user.rb +11 -1
  48. data/spec/internal/db/schema.rb +5 -0
  49. data/spec/isimud/bunny_client_spec.rb +21 -9
  50. data/spec/isimud/client_spec.rb +40 -0
  51. data/spec/isimud/event_listener_spec.rb +50 -22
  52. data/spec/isimud/event_observer_spec.rb +107 -16
  53. data/spec/isimud/model_watcher_spec.rb +18 -23
  54. data/spec/isimud/test_client_spec.rb +43 -8
  55. data/spec/isimud_spec.rb +2 -2
  56. data/spec/spec_helper.rb +2 -0
  57. metadata +19 -35
  58. checksums.yaml.gz.sig +0 -0
  59. data/certs/gfeil.pem +0 -21
  60. data/release +0 -31
  61. data.tar.gz.sig +0 -0
  62. metadata.gz.sig +0 -2
@@ -2,6 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Isimud::ModelWatcher do
4
4
  let(:client) { Isimud.client }
5
+ let(:exchange) { Isimud.model_watcher_exchange }
5
6
 
6
7
  describe '.watch_attributes' do
7
8
  context 'default' do
@@ -35,7 +36,6 @@ describe Isimud::ModelWatcher do
35
36
 
36
37
 
37
38
  messages = Array.new
38
- exchange = Isimud::ModelWatcher::DEFAULT_EXCHANGE
39
39
  routing_key = 'test_schema.User.create'
40
40
 
41
41
  Isimud.client.bind('model_watcher_spec_create', exchange, routing_key) do |payload|
@@ -50,7 +50,6 @@ describe Isimud::ModelWatcher do
50
50
  context 'with default attributes' do
51
51
  it 'sends a create message with default attributes' do
52
52
  messages = Array.new
53
- exchange = Isimud::ModelWatcher::DEFAULT_EXCHANGE
54
53
  routing_key = 'test_schema.Company.create'
55
54
 
56
55
  Isimud.client.bind('model_watcher_spec_create_company', exchange, routing_key) do |payload|
@@ -59,7 +58,7 @@ describe Isimud::ModelWatcher do
59
58
  company = Company.new(name: 'Google', url: 'http://google.com')
60
59
  company.save!
61
60
  message = JSON.parse(messages.first)
62
- expect(message['attributes'].keys).to eql(%w(name description url user_count active created_at updated_at))
61
+ expect(message['attributes'].keys).to eql(%w(name description url user_count active exchange_routing_keys points_per_user total_points created_at updated_at))
63
62
  end
64
63
 
65
64
  end
@@ -71,7 +70,7 @@ describe Isimud::ModelWatcher do
71
70
  last_name: 'Feil',
72
71
  encrypted_password: "itsasecret",
73
72
  email: 'george.feil@keas.com')
74
- user.stub(:isimud_synchronize?).and_return(false)
73
+ expect(user).to receive(:isimud_synchronize?).and_return(false)
75
74
  messages = Array.new
76
75
  Isimud.client.bind('model_watcher_spec_create', Isimud::ModelWatcher::DEFAULT_EXCHANGE, '*') do |payload|
77
76
  messages << payload
@@ -107,7 +106,7 @@ describe Isimud::ModelWatcher do
107
106
  before(:all) do
108
107
  @messages = Array.new
109
108
  Isimud.client.bind('model_watcher_spec_update',
110
- Isimud::ModelWatcher::DEFAULT_EXCHANGE,
109
+ Isimud.model_watcher_exchange,
111
110
  'test_schema.User.update') do |payload|
112
111
  @messages << payload
113
112
  end
@@ -143,32 +142,28 @@ describe Isimud::ModelWatcher do
143
142
  end
144
143
 
145
144
  describe 'when destroying an instance' do
146
- before(:all) do
145
+ before(:each) do
147
146
  @messages = Array.new
147
+ @user = User.create!(first_name: 'Geo',
148
+ last_name: 'Feil',
149
+ encrypted_password: "itsasecret",
150
+ email: 'george.feil@keas.com')
148
151
  Isimud.client.bind('model_watcher_spec_destroy',
149
- Isimud::ModelWatcher::DEFAULT_EXCHANGE,
152
+ exchange,
150
153
  'test_schema.User.destroy') do |payload|
151
154
  @messages << payload
152
155
  end
153
156
  end
154
- before(:each) do
155
- @messages.clear
156
- end
157
157
 
158
- let!(:user) { User.create!(first_name: 'Geo',
159
- last_name: 'Feil',
160
- encrypted_password: "itsasecret",
161
- email: 'george.feil@keas.com') }
162
158
  it 'sends a destroy message' do
163
- Timecop.freeze do
164
- user.destroy
165
- expected_message = {schema: 'test_schema',
166
- type: 'User',
167
- action: :destroy,
168
- id: user.id,
169
- timestamp: Time.now.utc}.to_json
170
- expect(@messages).to include(expected_message)
171
- end
159
+ @user.destroy
160
+ expected_message = {schema: 'test_schema',
161
+ type: 'User',
162
+ action: :destroy,
163
+ id: @user.id,
164
+ timestamp: @user.updated_at.utc,
165
+ attributes: {:key => @user.key, :login_count => @user.login_count}}.to_json
166
+ expect(@messages).to include(expected_message)
172
167
  end
173
168
  end
174
169
 
@@ -1,28 +1,63 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Isimud::TestClient do
4
- let(:client) { Isimud::TestClient.new(url) }
4
+ let(:client) { Isimud::TestClient.new }
5
5
  let!(:connection) { client.connect }
6
+ let!(:keys) { %w(foo.bar baz.*.argle) }
7
+
8
+ before(:each) do
9
+ @called = false
10
+ @proc = Proc.new { @called = true }
11
+ end
6
12
 
7
13
  after(:each) do
8
14
  client.close
9
15
  end
10
16
 
11
17
  describe '#initialize' do
12
- it 'sets up new queues'
18
+ it 'sets up an empty set of queues' do
19
+ expect( client.queues ).to be_empty
20
+ end
13
21
  end
14
22
 
15
- describe '#bind' do
16
- let(:proc) { Proc.new { puts('hello') } }
17
- let(:keys) { %w(foo.bar baz.*) }
23
+ describe 'queues and bindings' do
24
+ before do
25
+ client.bind('queue_name', 'exchange_name', *keys, &@proc)
26
+ end
27
+ let!(:queue) { client.find_queue('queue_name') }
18
28
 
19
- it 'creates a new queue'
29
+ it 'binds routing keys to the queue' do
30
+ expect( queue.bindings ).to eql('exchange_name' => Set.new(keys))
31
+ end
32
+
33
+ it 'removes a binding from the queue' do
34
+ queue.unbind('exchange_name', routing_key: 'foo.bar')
35
+ expect( queue.bindings ).to eql('exchange_name' => Set.new(['baz.*.argle']))
36
+ end
37
+ end
20
38
 
21
- it 'binds specified routing keys and calls the specified method'
39
+ describe '#unbind' do
40
+ before do
41
+ client.bind('queue_name', 'exchange_name', *keys, &@proc)
42
+ end
22
43
  end
23
44
 
24
45
  describe '#publish' do
25
- it 'pushes the data to the appropriate queues'
46
+ before do
47
+ @dont_call = false
48
+ @dont_call_proc = Proc.new { @dont_call = true }
49
+ client.bind('queue_name', 'exchange_name', *keys, &@proc)
50
+ client.bind('other_queue', 'exchange_name', 'no.match.*', &@dont_call_proc)
51
+ client.publish('exchange_name', 'baz.1.argle', {abc: 'do re me'})
52
+ end
53
+
54
+ it 'calls proc for the matching queue' do
55
+ expect(@called).to be_truthy
56
+ end
57
+
58
+ it 'does not call proc for non matching queue' do
59
+ expect(@dont_call).to be_falsey
60
+ end
26
61
  end
27
62
 
28
63
  end
data/spec/isimud_spec.rb CHANGED
@@ -12,7 +12,7 @@ describe Isimud do
12
12
  end
13
13
 
14
14
  it 'creates a new TestClient client' do
15
- Isimud.client.should be_a Isimud::TestClient
15
+ expect( Isimud.client ).to be_a Isimud::TestClient
16
16
  end
17
17
  end
18
18
 
@@ -33,7 +33,7 @@ describe Isimud do
33
33
 
34
34
  describe '.model_watcher_enabled?' do
35
35
  it 'is true by default' do
36
- Isimud.should be_model_watcher_enabled
36
+ expect(Isimud).to be_model_watcher_enabled
37
37
  end
38
38
 
39
39
  it 'is true if enable_model_watcher is explicitly set' do
data/spec/spec_helper.rb CHANGED
@@ -12,7 +12,9 @@ Isimud.client_type = :test
12
12
  Isimud.logger = Logger.new(STDOUT)
13
13
  Isimud.logger.level = Logger::DEBUG
14
14
  Isimud.log_level = :debug
15
+ Isimud.listener_error_limit = 50
15
16
  Isimud.enable_model_watcher = true
17
+ Isimud.model_watcher_exchange = 'isimud.test.events'
16
18
  Isimud.model_watcher_schema = 'test_schema'
17
19
  Isimud::EventObserver.observed_models = Array.new
18
20
  Isimud::EventObserver.observed_mutex = Mutex.new
metadata CHANGED
@@ -1,37 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isimud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - George Feil
8
8
  - Brian Jenkins
9
9
  autorequire:
10
10
  bindir: bin
11
- cert_chain:
12
- - |
13
- -----BEGIN CERTIFICATE-----
14
- MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMRQwEgYDVQQDDAtnZW9y
15
- Z2UuZmVpbDEUMBIGCgmSJomT8ixkARkWBGtlYXMxEzARBgoJkiaJk/IsZAEZFgNj
16
- b20wHhcNMTYwODA5MjEwNDU1WhcNMTcwODA5MjEwNDU1WjBBMRQwEgYDVQQDDAtn
17
- ZW9yZ2UuZmVpbDEUMBIGCgmSJomT8ixkARkWBGtlYXMxEzARBgoJkiaJk/IsZAEZ
18
- FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDFBKCoLQgCUv1
19
- 86ykJOCtnWhQ12Eymfnu5btV3DKMMLxjUDG18vy1Clhw04afp36Rc+oMvP1VxYeH
20
- lRWdLtnWy2DAu2dxeFlWvacAegDcmQSw9vfyS7yD8zoLhJGeIflJ3eenTa+nRiQ2
21
- DBPL1qRdfSrBNBXVlTYvs/PGE0SLJPtil8oRsifqk7ETPCUx5gRSxzzp0JykjrUd
22
- cIu2u06Dv5GyDVwJu5/m4wLJSc2Bmore7rmOctBSNYtXTcMGVQOfskhncLNeE56V
23
- R7byYxJ92HQt4svMjbK0hN+27asFpXaVU9ZeNQeEOOsgq8ecdypAWjwlOaH580K5
24
- aH24zkstAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
25
- BBSXpvM46ec2Ds6ErCpZkXFZtsEh7TAfBgNVHREEGDAWgRRnZW9yZ2UuZmVpbEBr
26
- ZWFzLmNvbTAfBgNVHRIEGDAWgRRnZW9yZ2UuZmVpbEBrZWFzLmNvbTANBgkqhkiG
27
- 9w0BAQUFAAOCAQEAEXuMNAP35/nzBGj5aodPKIgH2Bvda9IF8OC4sDmQsRsUQzDw
28
- wRi3rWoNzUU+QexdZqhLXSwGuPNgMgmPKaOu09LjpKKbem9VDicUEhNDL27CYMJZ
29
- 1oO1kEqjbZW60HZcfDNrw8Q6ARBRhKXpPJsbYrR2QRzx1P0oVkFtmc9Qu4gvFy3c
30
- hIevyUPfcaBRWNfXCQnyFXZcHqcTywEgNyXTJZ6zUNZSHIQPzLOyzqa+muVO8Ob/
31
- wSKk31gq6KY7rgi11mcLvVzwSuwZFqnonAmu/uin3cbXcOUkqNsyzZ0LQLXNKiwi
32
- k0RgrsSNtQ8hcsVSQla0Ot+X3WpFI4ZuIfSLFA==
33
- -----END CERTIFICATE-----
34
- date: 2016-09-19 00:00:00.000000000 Z
11
+ cert_chain: []
12
+ date: 2016-01-14 00:00:00.000000000 Z
35
13
  dependencies:
36
14
  - !ruby/object:Gem::Dependency
37
15
  name: activerecord
@@ -39,28 +17,28 @@ dependencies:
39
17
  requirements:
40
18
  - - ">="
41
19
  - !ruby/object:Gem::Version
42
- version: 3.2.17
20
+ version: 4.1.4
43
21
  type: :runtime
44
22
  prerelease: false
45
23
  version_requirements: !ruby/object:Gem::Requirement
46
24
  requirements:
47
25
  - - ">="
48
26
  - !ruby/object:Gem::Version
49
- version: 3.2.17
27
+ version: 4.1.4
50
28
  - !ruby/object:Gem::Dependency
51
29
  name: activesupport
52
30
  requirement: !ruby/object:Gem::Requirement
53
31
  requirements:
54
32
  - - ">="
55
33
  - !ruby/object:Gem::Version
56
- version: 3.2.17
34
+ version: 4.1.4
57
35
  type: :runtime
58
36
  prerelease: false
59
37
  version_requirements: !ruby/object:Gem::Requirement
60
38
  requirements:
61
39
  - - ">="
62
40
  - !ruby/object:Gem::Version
63
- version: 3.2.17
41
+ version: 4.1.4
64
42
  - !ruby/object:Gem::Dependency
65
43
  name: bunny
66
44
  requirement: !ruby/object:Gem::Requirement
@@ -90,9 +68,13 @@ dependencies:
90
68
  - !ruby/object:Gem::Version
91
69
  version: 0.10.6
92
70
  description: |
93
- Isimud is an AMQP message publishing and consumption gem intended for Rails applications. You can use it to define
94
- message consumption queues for ActiveRecord instances, or synchronize model updates between processes. It also provides
95
- an event listener background process for managing queues that consume messages.
71
+ Isimud is an AMQP message publishing and consumption gem that is intended for managing asynchronous event queues in Rails applications. It consists of the following components:
72
+
73
+ * A [Bunny](http://rubybunny.info) based client interface for publishing and receiving messages using AMQP.
74
+ * A test client which mocks most client operations and allows for synchronous delivery and processing of messages for unit tests.
75
+ * A Model Watcher mixin for ActiveRecord that automatically sends messages whenever an ActiveRecord instance is created, modified, or destroyed.
76
+ * An Event Observer mixin for registering ActiveRecord models and instances with the EventListener for receiving messages.
77
+ * An Event Listener daemon process which manages queues and dispatches messages for Event Observers.
96
78
  email:
97
79
  - george.feil@keas.com
98
80
  - bonkydog@bonkydog.com
@@ -109,9 +91,9 @@ files:
109
91
  - ".yardoc/proxy_types"
110
92
  - Gemfile
111
93
  - Gemfile.lock
94
+ - LICENSE.txt
112
95
  - README.md
113
96
  - Rakefile
114
- - certs/gfeil.pem
115
97
  - config.ru
116
98
  - config/tddium.yml
117
99
  - doc/Isimud.html
@@ -135,6 +117,7 @@ files:
135
117
  - doc/css/common.css
136
118
  - doc/css/full_list.css
137
119
  - doc/css/style.css
120
+ - doc/file.LICENSE.html
138
121
  - doc/file.README.html
139
122
  - doc/file_list.html
140
123
  - doc/frames.html
@@ -161,7 +144,6 @@ files:
161
144
  - lib/rails/generators/isimud/initializer_generator.rb
162
145
  - lib/rails/generators/isimud/templates/initializer.rb
163
146
  - lib/rails/generators/isimud/templates/isimud.yml
164
- - release
165
147
  - spec/internal/app/models/admin.rb
166
148
  - spec/internal/app/models/company.rb
167
149
  - spec/internal/app/models/user.rb
@@ -171,6 +153,7 @@ files:
171
153
  - spec/internal/log/.gitignore
172
154
  - spec/internal/public/favicon.ico
173
155
  - spec/isimud/bunny_client_spec.rb
156
+ - spec/isimud/client_spec.rb
174
157
  - spec/isimud/event_listener_spec.rb
175
158
  - spec/isimud/event_observer_spec.rb
176
159
  - spec/isimud/event_spec.rb
@@ -198,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
198
181
  version: '0'
199
182
  requirements: []
200
183
  rubyforge_project:
201
- rubygems_version: 2.5.1
184
+ rubygems_version: 2.4.5.1
202
185
  signing_key:
203
186
  specification_version: 4
204
187
  summary: AMQP Messaging and Event Processing
@@ -212,6 +195,7 @@ test_files:
212
195
  - spec/internal/log/.gitignore
213
196
  - spec/internal/public/favicon.ico
214
197
  - spec/isimud/bunny_client_spec.rb
198
+ - spec/isimud/client_spec.rb
215
199
  - spec/isimud/event_listener_spec.rb
216
200
  - spec/isimud/event_observer_spec.rb
217
201
  - spec/isimud/event_spec.rb
checksums.yaml.gz.sig DELETED
Binary file
data/certs/gfeil.pem DELETED
@@ -1,21 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMRQwEgYDVQQDDAtnZW9y
3
- Z2UuZmVpbDEUMBIGCgmSJomT8ixkARkWBGtlYXMxEzARBgoJkiaJk/IsZAEZFgNj
4
- b20wHhcNMTYwODA5MjEwNDU1WhcNMTcwODA5MjEwNDU1WjBBMRQwEgYDVQQDDAtn
5
- ZW9yZ2UuZmVpbDEUMBIGCgmSJomT8ixkARkWBGtlYXMxEzARBgoJkiaJk/IsZAEZ
6
- FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDFBKCoLQgCUv1
7
- 86ykJOCtnWhQ12Eymfnu5btV3DKMMLxjUDG18vy1Clhw04afp36Rc+oMvP1VxYeH
8
- lRWdLtnWy2DAu2dxeFlWvacAegDcmQSw9vfyS7yD8zoLhJGeIflJ3eenTa+nRiQ2
9
- DBPL1qRdfSrBNBXVlTYvs/PGE0SLJPtil8oRsifqk7ETPCUx5gRSxzzp0JykjrUd
10
- cIu2u06Dv5GyDVwJu5/m4wLJSc2Bmore7rmOctBSNYtXTcMGVQOfskhncLNeE56V
11
- R7byYxJ92HQt4svMjbK0hN+27asFpXaVU9ZeNQeEOOsgq8ecdypAWjwlOaH580K5
12
- aH24zkstAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
13
- BBSXpvM46ec2Ds6ErCpZkXFZtsEh7TAfBgNVHREEGDAWgRRnZW9yZ2UuZmVpbEBr
14
- ZWFzLmNvbTAfBgNVHRIEGDAWgRRnZW9yZ2UuZmVpbEBrZWFzLmNvbTANBgkqhkiG
15
- 9w0BAQUFAAOCAQEAEXuMNAP35/nzBGj5aodPKIgH2Bvda9IF8OC4sDmQsRsUQzDw
16
- wRi3rWoNzUU+QexdZqhLXSwGuPNgMgmPKaOu09LjpKKbem9VDicUEhNDL27CYMJZ
17
- 1oO1kEqjbZW60HZcfDNrw8Q6ARBRhKXpPJsbYrR2QRzx1P0oVkFtmc9Qu4gvFy3c
18
- hIevyUPfcaBRWNfXCQnyFXZcHqcTywEgNyXTJZ6zUNZSHIQPzLOyzqa+muVO8Ob/
19
- wSKk31gq6KY7rgi11mcLvVzwSuwZFqnonAmu/uin3cbXcOUkqNsyzZ0LQLXNKiwi
20
- k0RgrsSNtQ8hcsVSQla0Ot+X3WpFI4ZuIfSLFA==
21
- -----END CERTIFICATE-----
data/release DELETED
@@ -1,31 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'colored'
4
- require 'digest/sha2'
5
- require File.expand_path('lib/isimud/version.rb')
6
-
7
- def run!(command)
8
- puts "running #{command}".yellow
9
- system(command) || abort("Command #{command} failed, terminating!")
10
- end
11
-
12
- gem_name = 'isimud'
13
- gem_version = "#{gem_name}-#{Isimud::VERSION}.gem"
14
- built_gem_path = "pkg/#{gem_version}"
15
- puts "Building #{gem_name} version #{Isimud::VERSION}".cyan
16
- run! "gem build #{gem_name}.gemspec"
17
- run! "mv #{gem_version} #{built_gem_path}"
18
-
19
- puts 'Adding and committing checksum'.cyan
20
- checksum = Digest::SHA512.new.hexdigest(File.read(built_gem_path))
21
- checksum_path = "checksum/#{gem_name}-#{Isimud::VERSION}.gem.sha512"
22
- File.open(checksum_path, 'w') { |f| f.write(checksum) }
23
- run! "git add #{checksum_path}"
24
- run! "git commit -m 'added checksum for #{gem_version}' && git push origin"
25
-
26
- puts 'Publishing to RubyGems'.cyan
27
- run! "gem push #{built_gem_path}"
28
-
29
- puts 'Testing install'.cyan
30
- run! "gem install #{gem_name} -v #{Isimud::VERSION} -P MediumSecurity"
31
- Contact GitHub API Training Shop Blog About
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
@@ -1,2 +0,0 @@
1
- �ޖb��=�ҖN?1��Ԉ]�~����e_{�/;��ަg9�L�L�)��!�>=z�@�O��ōV��{�^�|#LOg<��in̻��pI~�9�e;��L�mVDWh�"��Ľ�;
2
- B�(M�P�q�8i������ɲ�4���='(B���Y�E{Ez�xː de+*U֐!��D�i��Uu?��o�C�sX�1�UĂkW��x��f������E?gH�������i�h���wb�@