jsonapi_publisher 0.1.3 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ccc40614de80227d32e34b70e7e9353b4f3bf63a
4
- data.tar.gz: cfc985a234fcd14503a5b238553fdc9400ed1cd4
3
+ metadata.gz: a9429a3a332bf152085f217782f721725cf70efc
4
+ data.tar.gz: f1b3df5d3e68d7785604c6797c100c5d3f16afc9
5
5
  SHA512:
6
- metadata.gz: 3b2c9d15f141fbdac60abaa497fedf605e8e0a709da1a100915929b827c407b3bc106e6e981a20085564c01a0fb03b1b6bc49fdb3ec29eb768da82eeefdae05e
7
- data.tar.gz: 8b10093307e4919d58eb19566b287acb1131d266f52f4be335f5a0ac8e2b07f2802fee17586ad87e4957b96ebef26e86c8e1c7a4d4ef37009932150ce0b20387
6
+ metadata.gz: 0df4592bac40b2f5b56f4d950468b5825536b59738723d50c88292a9bde2ab8a2ba5d71fed23d079525b9248fd60bf3a8f2a04c27e7c4b48f8a6f3d6c7192db1
7
+ data.tar.gz: 73c17c9e43ef752cf9ffe699555c92c2ba6cefdb424e94c8f246d91a0041102291a9f78edfb59be4478c6021d614a8c277a1b9021a13375424eb676373c2eba9
data/README.md CHANGED
@@ -10,6 +10,11 @@ JsonapiPublisher.publish(routing_key, object, "CREATED")
10
10
  ```
11
11
 
12
12
  ## Installation
13
+ Choose `sqs` or `rabbit` mq with
14
+ `gem 'bunny', '~> 2.7'`
15
+ or
16
+ `gem 'aws-sdk', '~> 2'`
17
+
13
18
  Add this line to your application's Gemfile:
14
19
 
15
20
  ```ruby
@@ -25,6 +30,19 @@ Or install it yourself as:
25
30
  ```bash
26
31
  $ gem install jsonapi_publisher
27
32
  ```
33
+ ## Configuration
34
+ Inside `config\initializers\jsonapi_publisher.rb` put
35
+ ```ruby
36
+ JsonapiPublisher.configure do |config|
37
+ config.qservice = XXX # XXX can be 'sqs' or 'rmq'
38
+ end
39
+ ```
40
+
41
+ ## Testing
42
+ Run
43
+ `docker run -p 9324:9324 lightspeedretail/fake-sqs`
44
+ `docker run -d -p 5672:5672 rabbitmq:latest`
45
+ `rake test`
28
46
 
29
47
  ## License
30
48
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1,7 @@
1
+ class Configuration
2
+ attr_accessor :qservice, :avoid_send
3
+
4
+ def initialize
5
+ @qservice = nil
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module JsonapiPublisher
2
- VERSION = '0.1.3'.freeze
2
+ VERSION = '0.2.3'.freeze
3
3
  end
@@ -1,25 +1,66 @@
1
- require "bunny"
2
- require "active_record"
1
+ require 'active_record'
2
+ require 'configuration'
3
3
 
4
4
  module JsonapiPublisher
5
- def self.publish(routing_key, message = {}, event="")
5
+ class << self
6
+ attr_writer :configuration
7
+ attr_accessor :connection, :channel
8
+ end
9
+
10
+ def self.configuration
11
+ @configuration ||= Configuration.new
12
+ end
13
+
14
+ def self.configure
15
+ yield(configuration)
16
+ end
17
+
18
+ def self.publish(routing_key, message = {}, event = '')
6
19
  if message.is_a?(ActiveRecord::Base)
7
20
  message = ActiveModelSerializers::SerializableResource.new(message).as_json
8
21
  end
9
22
  if event.present?
10
- message = {event: event}.merge(message)
23
+ message = { event: event }.merge(message)
24
+ end
25
+ if configuration.qservice == 'rmq'
26
+ x = channel.topic(ENV['EVENT_TOPIC'] || 'events')
27
+ x.publish(message.to_json, routing_key: routing_key)
28
+ elsif configuration.qservice == 'sqs'
29
+ message_attributes = { routing_key: { string_value: routing_key, data_type: 'String' } }
30
+ if configuration.avoid_send
31
+ p; p "Requesting with queue_url: #{ENV['QUEUE_URL'] || channel.queue_url}, message_body: #{message.to_json}, message_attributes: #{message_attributes}"
32
+ else
33
+ connection.send_message(queue_url: ENV['QUEUE_URL'] || channel.queue_url, message_body: message.to_json, message_attributes: message_attributes)
34
+ end
11
35
  end
12
- x = channel.topic(ENV['EVENT_TOPIC'] || 'events')
13
- x.publish(message.to_json, routing_key: routing_key)
14
36
  end
15
37
 
16
38
  def self.channel
17
- @channel ||= connection.create_channel
39
+ if configuration.qservice == 'rmq'
40
+ @channel ||= connection.create_channel
41
+ elsif configuration.qservice == 'sqs'
42
+ @channel ||= connection.create_queue({
43
+ queue_name: ENV['EVENT_TOPIC'],
44
+ attributes: {
45
+ "FifoQueue" => "true"
46
+ }
47
+ })
48
+ end
18
49
  end
19
50
 
20
51
  def self.connection
21
- @connection ||= Bunny.new(host: ENV['RABBITMQ_HOST'] || 'localhost', user: ENV['RABBITMQ_USER'] || 'guest', pass: ENV['RABBITMQ_PASS'] || 'guest').tap do |c|
22
- c.start
52
+ if configuration.qservice == 'rmq'
53
+ @connection ||= Bunny.new(host: ENV['RABBITMQ_HOST'] || 'localhost', user: ENV['RABBITMQ_USER'] || 'guest', pass: ENV['RABBITMQ_PASS'] || 'guest').tap do |c|
54
+ c.start
55
+ end
56
+ elsif configuration.qservice == 'sqs'
57
+ @connection ||= Aws::SQS::Client.new(endpoint: ENV['AWS_SQS_ENDPOINT'], region: ENV['AWS_REGION'] || 'eu-west-1', secret_access_key: ENV['AWS_ACCESS_KEY_ID'], access_key_id: ENV['AWS_SECRET_ACCESS_KEY'])
23
58
  end
24
59
  end
60
+
61
+ def self.reset_connection
62
+ self.connection = nil
63
+ self.channel = nil
64
+ configuration.qservice = nil
65
+ end
25
66
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi_publisher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michele Finotto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-05 00:00:00.000000000 Z
11
+ date: 2017-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: active_model_serializers
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.10'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.10'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bunny
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -31,7 +45,7 @@ dependencies:
31
45
  - - ">="
32
46
  - !ruby/object:Gem::Version
33
47
  version: '0'
34
- type: :runtime
48
+ type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
@@ -39,19 +53,61 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: active_model_serializers
56
+ name: aws-sdk
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
- version: '0.10'
48
- type: :runtime
61
+ version: '0'
62
+ type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
- version: '0.10'
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest-hooks
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: pry
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
+ - !ruby/object:Gem::Dependency
98
+ name: faker
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
55
111
  description: Use this gem to publish JSON API events to RabbitMQ.
56
112
  email:
57
113
  - m@finotto.org
@@ -62,6 +118,7 @@ files:
62
118
  - MIT-LICENSE
63
119
  - README.md
64
120
  - Rakefile
121
+ - lib/configuration.rb
65
122
  - lib/jsonapi_publisher.rb
66
123
  - lib/jsonapi_publisher/version.rb
67
124
  - lib/tasks/jsonapi_publisher_tasks.rake