jsonapi_publisher 0.1.3 → 0.2.3

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.
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