mautic 2.3.1 → 2.3.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
  SHA256:
3
- metadata.gz: 50cf7b5fa5dcc376ddb8a7e50a37c521d00ffcab8cef1b17b2e1bac598eb70aa
4
- data.tar.gz: 6a6f4890c25207a24ac1eaa0b30834e8059fec5c0f14e0392e7e902016882688
3
+ metadata.gz: 4499d4f66adb74f89f363f1407b0cf917728eaba2e10f9a48183a12ad14d8514
4
+ data.tar.gz: 2165001c7af680d7f3c9929a1fff7f8d463d8396d9514370f50669d59ac5dcd1
5
5
  SHA512:
6
- metadata.gz: 37cd5dae4578a9bffa5f16a9ac4341b7f9c22bf1e1f0bdbd86aab0e7ac76932d5e1106c2c33f50214f8ec9e0f51102cb68d1c718d952c42cdbaf38e24c8b6b2e
7
- data.tar.gz: ee5be0217d9e2797778ab93ff29b9bc39a23e8c0bc92bbd7aa2df59ae46008a5eb60624d4743001ef4d2e1cbda15ddd7eb24c9c2a44b495d177ff8ea53235f7e
6
+ metadata.gz: 3a6de50ca1f0e1b51b0e7b4a547327351c0ac984e64dd23e48e7e55d20523fa6155b1d2aa0737110878e9af8dda916e17cb40ca9b0752d4b3d79033dbd1a76cf
7
+ data.tar.gz: 8bf7ba6cbe4fe3903b09b2083dda2a9204d49ac2b0187e0bd053259c57b21db29c2aeadcacdce4261f570cd37d9b10e8dc28f6500463a75335fda29ca116b875
data/README.md CHANGED
@@ -1,19 +1,66 @@
1
- # Mautic rails
1
+ # Mautic rails
2
+ [![Maintainability](https://api.codeclimate.com/v1/badges/c8cd605b5e021fb841d1/maintainability)](https://codeclimate.com/github/luk4s/mautic-rails/maintainability)
3
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/c8cd605b5e021fb841d1/test_coverage)](https://codeclimate.com/github/luk4s/mautic-rails/test_coverage)
4
+
2
5
  RoR helper / wrapper for Mautic API and forms
3
6
 
4
7
  *Rails 4.2.8+, 5.1+ compatible*
5
- ## Usage
6
- ### Gem provides API connection to your Mautic(s)
7
- 1. Create mautic connection
8
- 2. Authorize it
9
-
10
- In mautic you need add API oauth2 login.
11
- For URI callback allow:
12
- ```
13
- http://localhost:3000/mautic/connections/:ID/oauth2
14
- ```
15
- ID = is your Mautic::Connection ID
8
+
9
+ ## Installation
10
+ Add this line to your application's Gemfile:
11
+
12
+ ```ruby
13
+ gem 'mautic', '~> 2.3'
14
+ ```
15
+
16
+ And then execute:
17
+ ```bash
18
+ $ bundle
19
+ ```
20
+ Also you need migrate database:
21
+ ```bash
22
+ $ rails db:migrate
23
+ ```
24
+
25
+ ## Configuration
26
+
27
+ add to `config/initializers/mautic.rb`:
28
+ ```ruby
29
+ Mautic.configure do |config|
30
+ # This is for oauth handshake token url. I need to know where your app listen
31
+ config.base_url = "https://my-rails-app.com"
32
+ # OR it can be Proc
33
+ # *optional* This is your default mautic URL - used in form helper
34
+ config.mautic_url = "https://mautic.my.app"
35
+ end
36
+ ```
37
+
38
+ add to `config/routes.rb`
39
+ ```ruby
40
+ mount Mautic::Engine => "/mautic"
41
+ ```
42
+ ### Create mautic connection
16
43
 
44
+ 1. In your mautic, create new
45
+ 2. Got to `/your-mount-point/connections`
46
+ 3. Create new connection - enter URL to your mautic
47
+ 4. Copy `callback url` then go to you mautic
48
+
49
+ > In mautic you need add API oauth2 login.
50
+
51
+ > ```
52
+ > http://localhost:3000/mautic/connections/:ID/oauth2
53
+ > ```
54
+ > ID = is your Mautic::Connection ID
55
+
56
+ 5. Create new **Oauth2** API connections. Use `callback url` from previous step and copy `key` and `secret` to form in your app
57
+ 6. Update and use `Authorize` button for handshake
58
+
59
+ > For example of integration check https://github.com/luk4s/redmine_mautic
60
+
61
+
62
+ ## Usage
63
+
17
64
  Find connection which you want to use:
18
65
  ```ruby
19
66
  m = Mautic::Connection.last
@@ -72,43 +119,6 @@ Receive webhook from mautic, parse it and prepare for use.
72
119
 
73
120
  post "webhook/:mautic_id", action: "webhook", on: :collection
74
121
 
75
-
76
- ## Installation
77
- Add this line to your application's Gemfile:
78
-
79
- ```ruby
80
- gem 'mautic', '~>0.1'
81
- ```
82
-
83
- And then execute:
84
- ```bash
85
- $ bundle
86
- ```
87
-
88
- Or install it yourself as:
89
- ```bash
90
- $ gem install mautic
91
- ```
92
-
93
- ## Configuration
94
-
95
- add to `config/initializers/mautic.rb`:
96
- ```ruby
97
- Mautic.configure do |config|
98
- # This is for oauth handshake token url. I need to know where your app listen
99
- config.base_url = "https://my-rails-app.com"
100
- # OR it can be Proc
101
- # *optional* This is your default mautic URL - used in form helper
102
- config.mautic_url = "https://mautic.my.app"
103
- end
104
- ```
105
-
106
- add to `config/routes.rb`
107
- ```ruby
108
- mount Mautic::Engine => "/mautic"
109
-
110
- ```
111
-
112
122
  ## Contributing
113
123
  Ideas and pull requests are welcome!
114
124
 
@@ -66,34 +66,37 @@ module Mautic
66
66
  def parse_response(response)
67
67
  case response.status
68
68
  when 400
69
- raise Mautic::ValidationError.new(response)
69
+ raise Mautic::ValidationError, response
70
70
  when 401
71
- json = try_to_refresh_and_parse(response)
71
+ try_to_refresh_and_parse(response)
72
72
  when 404
73
- raise Mautic::RecordNotFound.new(response)
73
+ raise Mautic::RecordNotFound, response
74
74
  when 200, 201
75
- json = JSON.parse(response.body) rescue {}
76
- Array(json['errors']).each do |error|
77
- case error['code'].to_i
78
- when 401
79
- json = try_to_refresh_and_parse(response)
80
- when 404
81
- raise Mautic::RecordNotFound.new(response)
82
- else
83
- raise Mautic::RequestError.new(response)
84
- end
85
- end
75
+ handle_success_response response
86
76
  else
87
- raise Mautic::RequestError.new(response)
77
+ raise Mautic::RequestError, response
78
+ end
79
+ end
80
+
81
+ def handle_success_response(response)
82
+ json = JSON.parse(response.body) rescue {}
83
+ Array(json['errors']).each do |error|
84
+ case error['code'].to_i
85
+ when 401
86
+ json = try_to_refresh_and_parse(response)
87
+ when 404
88
+ raise Mautic::RecordNotFound, response
89
+ else
90
+ raise Mautic::RequestError, response
91
+ end
88
92
  end
89
93
 
90
94
  json
91
95
  end
92
96
 
93
- private
94
-
95
97
  def try_to_refresh_and_parse(response)
96
- raise Mautic::TokenExpiredError.new(response) if @try_to_refresh
98
+ raise Mautic::TokenExpiredError, response if @try_to_refresh
99
+
97
100
  @try_to_refresh = true
98
101
  refresh!
99
102
  request(*@last_request)
@@ -2,7 +2,7 @@ module Mautic
2
2
  class Form < Model
3
3
 
4
4
  def assign_attributes(source = nil)
5
- self.attributes = {name: source['name'], fields: source['fields']} if source.is_a? Hash
5
+ self.attributes = { name: source['name'], fields: source['fields'] } if source.is_a? Hash
6
6
  end
7
7
 
8
8
  end
@@ -1,13 +1,13 @@
1
- <%#= form_with(model: mautic_connection.becomes(Mautic::Connection), local: true) do |form| %>
2
1
  <%= form_for(mautic_connection.becomes(Mautic::Connection)) do |form| %>
3
2
  <% if mautic_connection.errors.any? %>
4
3
  <div id="error_explanation">
5
- <h2><%= pluralize(mautic_connection.errors.count, "error") %> prohibited this mautic_connection from being saved:</h2>
4
+ <h2><%= pluralize(mautic_connection.errors.count, "error") %> prohibited this mautic_connection from being
5
+ saved:</h2>
6
6
 
7
7
  <ul>
8
- <% mautic_connection.errors.full_messages.each do |message| %>
9
- <li><%= message %></li>
10
- <% end %>
8
+ <% mautic_connection.errors.full_messages.each do |message| %>
9
+ <li><%= message %></li>
10
+ <% end %>
11
11
  </ul>
12
12
  </div>
13
13
  <% end %>
@@ -21,17 +21,23 @@
21
21
  <%= form.label :url %>
22
22
  <%= form.text_field :url, id: :mautic_connection_url %>
23
23
  </div>
24
+ <% if form.object.persisted? %>
25
+ <div class="field">
26
+ <label>Now generate pair of tokens with this callback url:</label>
27
+ <pre><%= @mautic_connection.send :callback_url %></pre>
28
+ </div>
24
29
 
25
- <div class="field">
26
- <%= form.label :client_id %>
27
- <%= form.text_field :client_id, id: :mautic_connection_client_id %>
28
- </div>
30
+ <div class="field">
31
+ <%= form.label :client_id %>
32
+ <%= form.text_field :client_id, id: :mautic_connection_client_id %>
33
+ </div>
29
34
 
30
- <div class="field">
31
- <%= form.label :secret %>
32
- <%= form.text_field :secret, id: :mautic_connection_secret %>
33
- </div>
35
+ <div class="field">
36
+ <%= form.label :secret %>
37
+ <%= form.text_field :secret, id: :mautic_connection_secret %>
38
+ </div>
34
39
 
40
+ <% end %>
35
41
  <div class="actions">
36
42
  <%= form.submit %>
37
43
  </div>
@@ -1,4 +1,3 @@
1
1
  <h1>Editing Mautic Connection</h1>
2
2
 
3
3
  <%= render 'form', mautic_connection: @mautic_connection %>
4
- callback_url: <%= @mautic_connection.send :callback_url %>
@@ -40,7 +40,7 @@ module Mautic
40
40
  attr_reader :connection
41
41
 
42
42
  # @param [Mautic::Connection] connection
43
- def initialize(connection, hash=nil)
43
+ def initialize(connection, hash = nil)
44
44
  @connection = connection
45
45
  @table = MauticHash.new
46
46
  self.attributes = { id: hash['id'], created_at: hash['dateAdded']&.to_time, updated_at: hash['dateModified']&.to_time } if hash
@@ -59,7 +59,7 @@ module Mautic
59
59
  def update(force = false)
60
60
  return false if changes.blank?
61
61
  begin
62
- json = @connection.request((force && :put || :patch), "api/#{endpoint}/#{id}/edit", { body: to_h })
62
+ json = @connection.request((force && :put || :patch), "api/#{endpoint}/#{id}/edit", { body: to_mautic })
63
63
  self.attributes = json[endpoint.singularize]
64
64
  clear_changes
65
65
  rescue ValidationError => e
@@ -71,7 +71,7 @@ module Mautic
71
71
 
72
72
  def create
73
73
  begin
74
- json = @connection.request(:post, "api/#{endpoint}/#{id && "#{id}/"}new", { body: to_h })
74
+ json = @connection.request(:post, "api/#{endpoint}/#{id && "#{id}/"}new", { body: to_mautic })
75
75
  self.attributes = json[endpoint.singularize]
76
76
  clear_changes
77
77
  rescue ValidationError => e
@@ -106,6 +106,12 @@ module Mautic
106
106
  end
107
107
  end
108
108
 
109
+ def to_mautic
110
+ @table.each_with_object({}) do |(key,val), mem|
111
+ mem[key] = val.is_a?(Array) ? val.join("|") : val
112
+ end
113
+ end
114
+
109
115
  private
110
116
 
111
117
  def clear_changes
@@ -119,27 +125,34 @@ module Mautic
119
125
  def assign_attributes(source = nil)
120
126
  @mautic_attributes = []
121
127
  source ||= {}
128
+
129
+ data = if (fields = source['fields'])
130
+ attributes_from_fields(fields)
131
+ elsif source
132
+ source
133
+ end
134
+ self.attributes = data
135
+ end
136
+
137
+ def attributes_from_fields(fields)
122
138
  data = {}
139
+ if fields['all']
140
+ @mautic_attributes = fields['all'].collect do |key, value|
141
+ data[key] = value
142
+ Attribute.new(alias: key, value: value)
143
+ end
144
+ else
145
+ fields.each do |_group, pairs|
146
+ next unless pairs.is_a?(Hash)
123
147
 
124
- if (fields = source['fields'])
125
- if fields['all']
126
- @mautic_attributes = fields['all'].collect do |key, value|
127
- data[key] = value
128
- Attribute.new(alias: key, value: value)
129
- end
130
- else
131
- fields.each do |_group, pairs|
132
- next unless pairs.is_a?(Hash)
133
- pairs.each do |key, attrs|
134
- @mautic_attributes << (a = Attribute.new(attrs))
135
- data[key] = a.value
136
- end
148
+ pairs.each do |key, attrs|
149
+ @mautic_attributes << (a = Attribute.new(attrs))
150
+ data[key] = a.value
137
151
  end
138
152
  end
139
- elsif source
140
- data = source
141
153
  end
142
- self.attributes = data
154
+
155
+ data
143
156
  end
144
157
 
145
158
  end
@@ -29,9 +29,7 @@ module Mautic
29
29
  records = results = where(options)
30
30
  total = @last_response['total'].to_i
31
31
  while records.any?
32
- if block_given?
33
- records.each &block
34
- end
32
+ records.each(&block) if block_given?
35
33
  break if results.size >= total
36
34
 
37
35
  records = where(options.merge(start: records.size))
@@ -1,3 +1,3 @@
1
1
  module Mautic
2
- VERSION = '2.3.1'
2
+ VERSION = '2.3.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mautic
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukáš Pokorný
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-16 00:00:00.000000000 Z
11
+ date: 2019-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -58,84 +58,84 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.3.6
61
+ version: '1.4'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.3.6
68
+ version: '1.4'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec-rails
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '3.7'
75
+ version: '3.9'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '3.7'
82
+ version: '3.9'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: factory_bot_rails
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '4.8'
89
+ version: '5.1'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '4.8'
96
+ version: '5.1'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: database_cleaner
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '1.6'
103
+ version: '1.7'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '1.6'
110
+ version: '1.7'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: faker
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '1.8'
117
+ version: '2.7'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '1.8'
124
+ version: '2.7'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: webmock
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '3.4'
131
+ version: '3.7'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '3.4'
138
+ version: '3.7'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: pry-rails
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -205,7 +205,8 @@ files:
205
205
  homepage: https://github.com/luk4s/mautic-rails
206
206
  licenses:
207
207
  - MIT
208
- metadata: {}
208
+ metadata:
209
+ allowed_push_host: https://rubygems.org
209
210
  post_install_message:
210
211
  rdoc_options: []
211
212
  require_paths:
@@ -221,7 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
221
222
  - !ruby/object:Gem::Version
222
223
  version: '0'
223
224
  requirements: []
224
- rubygems_version: 3.0.2
225
+ rubygems_version: 3.0.4
225
226
  signing_key:
226
227
  specification_version: 4
227
228
  summary: Ruby on Rails Mautic integration