maestrano-connector-rails 1.2.1 → 1.2.2

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +41 -0
  3. data/.rubocop_todo.yml +180 -0
  4. data/.ruby-version +1 -1
  5. data/CODESHIP.md +3 -1
  6. data/Gemfile +16 -10
  7. data/Rakefile +12 -12
  8. data/VERSION +1 -1
  9. data/app/controllers/maestrano/account/group_users_controller.rb +5 -7
  10. data/app/controllers/maestrano/account/groups_controller.rb +5 -7
  11. data/app/controllers/maestrano/application_controller.rb +1 -1
  12. data/app/controllers/maestrano/auth/saml_controller.rb +5 -10
  13. data/app/controllers/maestrano/connec_controller.rb +12 -11
  14. data/app/controllers/maestrano/sessions_controller.rb +1 -1
  15. data/app/controllers/maestrano/synchronizations_controller.rb +7 -9
  16. data/app/controllers/version_controller.rb +9 -0
  17. data/app/helpers/maestrano/connector/rails/session_helper.rb +0 -2
  18. data/app/jobs/maestrano/connector/rails/all_synchronizations_job.rb +2 -2
  19. data/app/jobs/maestrano/connector/rails/push_to_connec_job.rb +8 -7
  20. data/app/jobs/maestrano/connector/rails/push_to_connec_worker.rb +6 -4
  21. data/app/jobs/maestrano/connector/rails/synchronization_job.rb +10 -9
  22. data/app/models/maestrano/connector/rails/complex_entity.rb +1 -1
  23. data/app/models/maestrano/connector/rails/concerns/complex_entity.rb +10 -12
  24. data/app/models/maestrano/connector/rails/concerns/connec_helper.rb +20 -25
  25. data/app/models/maestrano/connector/rails/concerns/connector_logger.rb +1 -1
  26. data/app/models/maestrano/connector/rails/concerns/entity.rb +63 -69
  27. data/app/models/maestrano/connector/rails/concerns/entity_base.rb +3 -3
  28. data/app/models/maestrano/connector/rails/concerns/external.rb +2 -2
  29. data/app/models/maestrano/connector/rails/concerns/sub_entity_base.rb +13 -15
  30. data/app/models/maestrano/connector/rails/connector_logger.rb +1 -1
  31. data/app/models/maestrano/connector/rails/entity.rb +1 -1
  32. data/app/models/maestrano/connector/rails/external.rb +1 -1
  33. data/app/models/maestrano/connector/rails/id_map.rb +1 -2
  34. data/app/models/maestrano/connector/rails/organization.rb +12 -14
  35. data/app/models/maestrano/connector/rails/sub_entity_base.rb +1 -1
  36. data/app/models/maestrano/connector/rails/synchronization.rb +17 -15
  37. data/app/models/maestrano/connector/rails/user.rb +1 -2
  38. data/app/models/maestrano/connector/rails/user_organization_rel.rb +1 -2
  39. data/config/routes.rb +4 -2
  40. data/lib/maestrano/connector/rails.rb +17 -2
  41. data/lib/maestrano_connector_rails.rb +1 -0
  42. data/maestrano-connector-rails.gemspec +32 -13
  43. data/release_notes.md +5 -0
  44. data/spec/controllers/version_controller_spec.rb +17 -0
  45. data/spec/dummy/config/application.rb +1 -1
  46. data/spec/jobs/push_to_connec_worker_spec.rb +16 -5
  47. data/spec/models/synchronization_spec.rb +9 -9
  48. data/spec/models/user_organization_rel_spec.rb +1 -1
  49. data/template/maestrano-connector-template.rb +2 -17
  50. metadata +90 -16
  51. data/lib/maestrano-connector-rails.rb +0 -1
@@ -1,7 +1,7 @@
1
1
  module Maestrano::Connector::Rails::Concerns::EntityBase
2
2
  extend ActiveSupport::Concern
3
3
 
4
- def initialize(organization, connec_client, external_client, opts={})
4
+ def initialize(organization, connec_client, external_client, opts = {})
5
5
  @organization = organization
6
6
  @connec_client = connec_client
7
7
  @external_client = external_client
@@ -22,7 +22,7 @@ module Maestrano::Connector::Rails::Concerns::EntityBase
22
22
 
23
23
  # This method is called during the webhook workflow only. It should return the hash of arrays of filtered entities
24
24
  # The aim is to have the same filtering as with the Connec! filters on API calls in the webhooks
25
- # input :
25
+ # input :
26
26
  # For non complex entities [unmapped_external_entity1, unmapped_external_entity2]
27
27
  # For complex entities {
28
28
  # external_entities_names[0]: [unmapped_external_entity1, unmapped_external_entity2],
@@ -31,4 +31,4 @@ module Maestrano::Connector::Rails::Concerns::EntityBase
31
31
  def filter_connec_entities(entities)
32
32
  entities
33
33
  end
34
- end
34
+ end
@@ -14,7 +14,7 @@ module Maestrano::Connector::Rails::Concerns::External
14
14
  # If you add new entities, you need to generate
15
15
  # a migration to add them to existing organizations
16
16
  def entities_list
17
- raise "Not implemented"
17
+ raise 'Not implemented'
18
18
  end
19
19
  end
20
- end
20
+ end
@@ -3,27 +3,21 @@ module Maestrano::Connector::Rails::Concerns::SubEntityBase
3
3
 
4
4
  module ClassMethods
5
5
  def external?
6
- raise "Not implemented"
6
+ raise 'Not implemented'
7
7
  end
8
8
 
9
9
  def entity_name
10
- raise "Not implemented"
10
+ raise 'Not implemented'
11
11
  end
12
12
 
13
13
  def external_entity_name
14
- if external?
15
- entity_name
16
- else
17
- raise "Forbidden call: cannot call external_entity_name for a connec entity"
18
- end
14
+ return entity_name if external?
15
+ raise 'Forbidden call: cannot call external_entity_name for a connec entity'
19
16
  end
20
17
 
21
18
  def connec_entity_name
22
- if external?
23
- raise "Forbidden call: cannot call connec_entity_name for an external entity"
24
- else
25
- entity_name
26
- end
19
+ return entity_name unless external?
20
+ raise 'Forbidden call: cannot call connec_entity_name for an external entity'
27
21
  end
28
22
 
29
23
  def names_hash
@@ -49,7 +43,6 @@ module Maestrano::Connector::Rails::Concerns::SubEntityBase
49
43
  end
50
44
  end
51
45
 
52
-
53
46
  def map_to(name, entity)
54
47
  mapper = self.class.mapper_classes[name]
55
48
  raise "Impossible mapping from #{self.class.entity_name} to #{name}" unless mapper
@@ -57,7 +50,12 @@ module Maestrano::Connector::Rails::Concerns::SubEntityBase
57
50
  if self.class.external?
58
51
  mapped_entity = mapper.denormalize(entity).merge(id: self.class.id_from_external_entity_hash(entity))
59
52
  folded_entity = Maestrano::Connector::Rails::ConnecHelper.fold_references(mapped_entity, self.class.references[name] || [], @organization)
60
- folded_entity.merge!(opts: (folded_entity[:opts] || {}).merge(matching_fields: self.class.connec_matching_fields)) if self.class.connec_matching_fields
53
+
54
+ if self.class.connec_matching_fields
55
+ folded_entity[:opts] ||= {}
56
+ folded_entity[:opts][:matching_fields] = self.class.connec_matching_fields
57
+ end
58
+
61
59
  folded_entity
62
60
  else
63
61
  connec_id = entity[:__connec_id]
@@ -73,4 +71,4 @@ module Maestrano::Connector::Rails::Concerns::SubEntityBase
73
71
  def map_external_entity_with_idmap(external_entity, connec_entity_name, idmap)
74
72
  {entity: map_to(connec_entity_name, external_entity), idmap: idmap}
75
73
  end
76
- end
74
+ end
@@ -2,4 +2,4 @@ module Maestrano::Connector::Rails
2
2
  class ConnectorLogger
3
3
  include Maestrano::Connector::Rails::Concerns::ConnectorLogger
4
4
  end
5
- end
5
+ end
@@ -2,4 +2,4 @@ module Maestrano::Connector::Rails
2
2
  class Entity < EntityBase
3
3
  include Maestrano::Connector::Rails::Concerns::Entity
4
4
  end
5
- end
5
+ end
@@ -2,4 +2,4 @@ module Maestrano::Connector::Rails
2
2
  class External
3
3
  include Maestrano::Connector::Rails::Concerns::External
4
4
  end
5
- end
5
+ end
@@ -1,6 +1,5 @@
1
1
  module Maestrano::Connector::Rails
2
2
  class IdMap < ActiveRecord::Base
3
-
4
3
  belongs_to :organization
5
4
  end
6
- end
5
+ end
@@ -2,11 +2,11 @@ module Maestrano::Connector::Rails
2
2
  class Organization < ActiveRecord::Base
3
3
  # Enable Maestrano for this group
4
4
  maestrano_group_via :provider, :uid, :tenant do |group, maestrano|
5
- group.name = (maestrano.name.blank? ? "Default Group name" : maestrano.name)
5
+ group.name = (maestrano.name.blank? ? 'Default Group name' : maestrano.name)
6
6
  group.tenant = 'default' # To be set from SSO parameter
7
- #group.country_alpha2 = maestrano.country
8
- #group.free_trial_end_at = maestrano.free_trial_end_at
9
- #group.some_required_field = 'some-appropriate-default-value'
7
+ # group.country_alpha2 = maestrano.country
8
+ # group.free_trial_end_at = maestrano.free_trial_end_at
9
+ # group.some_required_field = 'some-appropriate-default-value'
10
10
  end
11
11
 
12
12
  def initialize
@@ -20,7 +20,7 @@ module Maestrano::Connector::Rails
20
20
  #===================================
21
21
  # Encryptions
22
22
  #===================================
23
- attr_encrypted_options.merge!(:mode => :per_attribute_iv_and_salt)
23
+ attr_encrypted_options[:mode] = :per_attribute_iv_and_salt
24
24
  attr_encrypted :oauth_token, key: ::Settings.encryption_key1
25
25
  attr_encrypted :refresh_token, key: ::Settings.encryption_key2
26
26
 
@@ -45,17 +45,15 @@ module Maestrano::Connector::Rails
45
45
  serialize :synchronized_entities
46
46
 
47
47
  def add_member(user)
48
- if self.tenant == user.tenant && !self.member?(user)
49
- self.user_organization_rels.create(user:user)
50
- end
48
+ user_organization_rels.create(user: user) if tenant == user.tenant && !member?(user)
51
49
  end
52
50
 
53
51
  def member?(user)
54
- self.user_organization_rels.where(user_id:user.id).count > 0
52
+ user_organization_rels.where(user_id: user.id).count > 0
55
53
  end
56
54
 
57
55
  def remove_member(user)
58
- self.user_organization_rels.where(user_id:user.id).delete_all
56
+ user_organization_rels.where(user_id: user.id).delete_all
59
57
  end
60
58
 
61
59
  def from_omniauth(auth)
@@ -64,20 +62,20 @@ module Maestrano::Connector::Rails
64
62
  self.oauth_token = auth.credentials.token
65
63
  self.refresh_token = auth.credentials.refresh_token
66
64
  self.instance_url = auth.credentials.instance_url
67
- self.save!
65
+ save!
68
66
  end
69
67
 
70
68
  def last_three_synchronizations_failed?
71
- arr = self.synchronizations.last(3).map(&:is_error?)
69
+ arr = synchronizations.last(3).map(&:error?)
72
70
  arr.count == 3 && arr.uniq == [true]
73
71
  end
74
72
 
75
73
  def last_successful_synchronization
76
- self.synchronizations.where(status: 'SUCCESS', partial: false).order(updated_at: :desc).first
74
+ synchronizations.where(status: 'SUCCESS', partial: false).order(updated_at: :desc).first
77
75
  end
78
76
 
79
77
  def last_synchronization_date
80
78
  (last_successful_synchronization && last_successful_synchronization.updated_at) || date_filtering_limit
81
79
  end
82
80
  end
83
- end
81
+ end
@@ -2,4 +2,4 @@ module Maestrano::Connector::Rails
2
2
  class SubEntityBase < Entity
3
3
  include Maestrano::Connector::Rails::Concerns::SubEntityBase
4
4
  end
5
- end
5
+ end
@@ -3,6 +3,10 @@ module Maestrano::Connector::Rails
3
3
  # Keeping only 100 synchronizations per organization
4
4
  after_create :clean_synchronizations
5
5
 
6
+ RUNNING_STATUS = 'RUNNING'.freeze
7
+ ERROR_STATUS = 'ERROR'.freeze
8
+ SUCCESS_STATUS = 'SUCCESS'.freeze
9
+
6
10
  #===================================
7
11
  # Associations
8
12
  #===================================
@@ -10,39 +14,37 @@ module Maestrano::Connector::Rails
10
14
 
11
15
  validates :status, presence: true
12
16
 
13
- def is_running?
14
- self.status == 'RUNNING'
17
+ def running?
18
+ status == RUNNING_STATUS
15
19
  end
16
20
 
17
- def is_error?
18
- self.status == 'ERROR'
21
+ def error?
22
+ status == ERROR_STATUS
19
23
  end
20
24
 
21
- def is_success?
22
- self.status == 'SUCCESS'
25
+ def success?
26
+ status == SUCCESS_STATUS
23
27
  end
24
28
 
25
29
  def self.create_running(organization)
26
- Synchronization.create(organization_id: organization.id, status: 'RUNNING')
30
+ Synchronization.create(organization_id: organization.id, status: RUNNING_STATUS)
27
31
  end
28
32
 
29
33
  def set_success
30
- self.update_attributes(status: 'SUCCESS')
34
+ update_attributes(status: SUCCESS_STATUS)
31
35
  end
32
36
 
33
37
  def set_error(msg)
34
- self.update_attributes(status: 'ERROR', message: msg)
38
+ update_attributes(status: ERROR_STATUS, message: msg)
35
39
  end
36
40
 
37
41
  def set_partial
38
- self.update_attributes(partial: true)
42
+ update_attributes(partial: true)
39
43
  end
40
44
 
41
45
  def clean_synchronizations
42
- count = self.organization.synchronizations.count
43
- if count > 100
44
- self.organization.synchronizations.order('id ASC').limit(count - 100).destroy_all
45
- end
46
+ count = organization.synchronizations.count
47
+ organization.synchronizations.order('id ASC').limit(count - 100).destroy_all if count > 100
46
48
  end
47
49
  end
48
- end
50
+ end
@@ -1,6 +1,5 @@
1
1
  module Maestrano::Connector::Rails
2
2
  class User < ActiveRecord::Base
3
-
4
3
  # Enable Maestrano for this user
5
4
  maestrano_user_via :provider, :uid, :tenant do |user, maestrano|
6
5
  user.uid = maestrano.uid
@@ -23,4 +22,4 @@ module Maestrano::Connector::Rails
23
22
  validates :email, presence: true
24
23
  validates :tenant, presence: true
25
24
  end
26
- end
25
+ end
@@ -1,10 +1,9 @@
1
1
  module Maestrano::Connector::Rails
2
2
  class UserOrganizationRel < ActiveRecord::Base
3
-
4
3
  #===================================
5
4
  # Associations
6
5
  #===================================
7
6
  belongs_to :user
8
7
  belongs_to :organization
9
8
  end
10
- end
9
+ end
data/config/routes.rb CHANGED
@@ -1,8 +1,10 @@
1
1
  Maestrano::Connector::Rails::Engine.routes.draw do
2
2
  maestrano_routes
3
3
 
4
+ get 'version', to: 'version#index'
5
+
4
6
  namespace :maestrano do
5
- match 'signout', to: 'sessions#destroy', as: 'signout', via: [:get, :post]
7
+ match 'signout', to: 'sessions#destroy', as: 'signout', via: [:get, :post]
6
8
  post 'connec/notifications/:tenant' => 'connec#notifications'
7
9
 
8
10
  resources :synchronizations, only: [:show, :create] do
@@ -12,4 +14,4 @@ Maestrano::Connector::Rails::Engine.routes.draw do
12
14
  end
13
15
  resources :dependancies, only: [:index]
14
16
  end
15
- end
17
+ end
@@ -1,7 +1,22 @@
1
- require 'maestrano'
2
1
  require 'maestrano-rails'
2
+
3
+ require 'haml-rails'
4
+ require 'bootstrap-sass'
5
+ require 'autoprefixer-rails'
6
+
3
7
  require 'hash_mapper'
4
8
 
9
+ require 'config'
10
+ require 'figaro'
11
+
12
+ require 'attr_encrypted'
13
+
14
+ require 'sidekiq'
15
+ require 'sidekiq-cron'
16
+ require 'sidekiq-unique-jobs'
17
+ require 'sinatra'
18
+ require 'slim'
19
+
5
20
  module Maestrano
6
21
  module Connector
7
22
  module Rails
@@ -10,4 +25,4 @@ module Maestrano
10
25
  end
11
26
  end
12
27
  end
13
- end
28
+ end
@@ -0,0 +1 @@
1
+ require 'maestrano/connector/rails'
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: maestrano-connector-rails 1.2.1 ruby lib
5
+ # stub: maestrano-connector-rails 1.2.2 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "maestrano-connector-rails"
9
- s.version = "1.2.1"
9
+ s.version = "1.2.2"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Pierre Berard"]
14
- s.date = "2016-07-04"
14
+ s.date = "2016-07-05"
15
15
  s.description = "Maestrano is the next generation marketplace for SME applications. See https://maestrano.com for details."
16
16
  s.email = "pierre.berard@maestrano.com"
17
17
  s.executables = ["rails"]
@@ -21,6 +21,8 @@ Gem::Specification.new do |s|
21
21
  ]
22
22
  s.files = [
23
23
  ".rspec",
24
+ ".rubocop.yml",
25
+ ".rubocop_todo.yml",
24
26
  ".ruby-version",
25
27
  "CODESHIP.md",
26
28
  "DEVELOPER.md",
@@ -37,6 +39,7 @@ Gem::Specification.new do |s|
37
39
  "app/controllers/maestrano/dependancies_controller.rb",
38
40
  "app/controllers/maestrano/sessions_controller.rb",
39
41
  "app/controllers/maestrano/synchronizations_controller.rb",
42
+ "app/controllers/version_controller.rb",
40
43
  "app/helpers/maestrano/connector/rails/session_helper.rb",
41
44
  "app/jobs/maestrano/connector/rails/all_synchronizations_job.rb",
42
45
  "app/jobs/maestrano/connector/rails/push_to_connec_job.rb",
@@ -103,8 +106,8 @@ Gem::Specification.new do |s|
103
106
  "lib/generators/connector/templates/synchronizations_controller.rb",
104
107
  "lib/generators/connector/templates/synchronizations_controller_spec.rb",
105
108
  "lib/generators/connector/templates/synchronizations_index.haml",
106
- "lib/maestrano-connector-rails.rb",
107
109
  "lib/maestrano/connector/rails.rb",
110
+ "lib/maestrano_connector_rails.rb",
108
111
  "maestrano-connector-rails.gemspec",
109
112
  "maestrano.png",
110
113
  "release_notes.md",
@@ -113,6 +116,7 @@ Gem::Specification.new do |s|
113
116
  "spec/controllers/group_users_controller_spec.rb",
114
117
  "spec/controllers/groups_controller_spec.rb",
115
118
  "spec/controllers/synchronizations_controller_spec.rb",
119
+ "spec/controllers/version_controller_spec.rb",
116
120
  "spec/dummy/README.md",
117
121
  "spec/dummy/Rakefile",
118
122
  "spec/dummy/app/assets/images/.keep",
@@ -215,16 +219,20 @@ Gem::Specification.new do |s|
215
219
  s.specification_version = 4
216
220
 
217
221
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
218
- s.add_runtime_dependency(%q<rails>, ["~> 4.0"])
222
+ s.add_runtime_dependency(%q<rails>, ["~> 4.2"])
219
223
  s.add_runtime_dependency(%q<maestrano-rails>, [">= 0"])
220
224
  s.add_runtime_dependency(%q<hash_mapper>, [">= 0"])
221
- s.add_runtime_dependency(%q<sidekiq>, [">= 0"])
222
- s.add_runtime_dependency(%q<sidekiq-unique-jobs>, [">= 0"])
223
225
  s.add_runtime_dependency(%q<haml-rails>, [">= 0"])
224
226
  s.add_runtime_dependency(%q<bootstrap-sass>, [">= 0"])
225
227
  s.add_runtime_dependency(%q<autoprefixer-rails>, [">= 0"])
226
228
  s.add_runtime_dependency(%q<attr_encrypted>, ["~> 1.4.0"])
227
229
  s.add_runtime_dependency(%q<config>, [">= 0"])
230
+ s.add_runtime_dependency(%q<figaro>, [">= 0"])
231
+ s.add_runtime_dependency(%q<sidekiq>, [">= 0"])
232
+ s.add_runtime_dependency(%q<sidekiq-unique-jobs>, [">= 0"])
233
+ s.add_runtime_dependency(%q<sinatra>, [">= 0"])
234
+ s.add_runtime_dependency(%q<sidekiq-cron>, [">= 0"])
235
+ s.add_runtime_dependency(%q<slim>, [">= 0"])
228
236
  s.add_development_dependency(%q<shoulda>, [">= 0"])
229
237
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
230
238
  s.add_development_dependency(%q<bundler>, ["~> 1.0"])
@@ -234,18 +242,23 @@ Gem::Specification.new do |s|
234
242
  s.add_development_dependency(%q<factory_girl_rails>, [">= 0"])
235
243
  s.add_development_dependency(%q<sqlite3>, [">= 0"])
236
244
  s.add_development_dependency(%q<shoulda-matchers>, [">= 0"])
245
+ s.add_development_dependency(%q<rubocop>, [">= 0"])
237
246
  s.add_development_dependency(%q<timecop>, [">= 0"])
238
247
  else
239
- s.add_dependency(%q<rails>, ["~> 4.0"])
248
+ s.add_dependency(%q<rails>, ["~> 4.2"])
240
249
  s.add_dependency(%q<maestrano-rails>, [">= 0"])
241
250
  s.add_dependency(%q<hash_mapper>, [">= 0"])
242
- s.add_dependency(%q<sidekiq>, [">= 0"])
243
- s.add_dependency(%q<sidekiq-unique-jobs>, [">= 0"])
244
251
  s.add_dependency(%q<haml-rails>, [">= 0"])
245
252
  s.add_dependency(%q<bootstrap-sass>, [">= 0"])
246
253
  s.add_dependency(%q<autoprefixer-rails>, [">= 0"])
247
254
  s.add_dependency(%q<attr_encrypted>, ["~> 1.4.0"])
248
255
  s.add_dependency(%q<config>, [">= 0"])
256
+ s.add_dependency(%q<figaro>, [">= 0"])
257
+ s.add_dependency(%q<sidekiq>, [">= 0"])
258
+ s.add_dependency(%q<sidekiq-unique-jobs>, [">= 0"])
259
+ s.add_dependency(%q<sinatra>, [">= 0"])
260
+ s.add_dependency(%q<sidekiq-cron>, [">= 0"])
261
+ s.add_dependency(%q<slim>, [">= 0"])
249
262
  s.add_dependency(%q<shoulda>, [">= 0"])
250
263
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
251
264
  s.add_dependency(%q<bundler>, ["~> 1.0"])
@@ -255,19 +268,24 @@ Gem::Specification.new do |s|
255
268
  s.add_dependency(%q<factory_girl_rails>, [">= 0"])
256
269
  s.add_dependency(%q<sqlite3>, [">= 0"])
257
270
  s.add_dependency(%q<shoulda-matchers>, [">= 0"])
271
+ s.add_dependency(%q<rubocop>, [">= 0"])
258
272
  s.add_dependency(%q<timecop>, [">= 0"])
259
273
  end
260
274
  else
261
- s.add_dependency(%q<rails>, ["~> 4.0"])
275
+ s.add_dependency(%q<rails>, ["~> 4.2"])
262
276
  s.add_dependency(%q<maestrano-rails>, [">= 0"])
263
277
  s.add_dependency(%q<hash_mapper>, [">= 0"])
264
- s.add_dependency(%q<sidekiq>, [">= 0"])
265
- s.add_dependency(%q<sidekiq-unique-jobs>, [">= 0"])
266
278
  s.add_dependency(%q<haml-rails>, [">= 0"])
267
279
  s.add_dependency(%q<bootstrap-sass>, [">= 0"])
268
280
  s.add_dependency(%q<autoprefixer-rails>, [">= 0"])
269
281
  s.add_dependency(%q<attr_encrypted>, ["~> 1.4.0"])
270
282
  s.add_dependency(%q<config>, [">= 0"])
283
+ s.add_dependency(%q<figaro>, [">= 0"])
284
+ s.add_dependency(%q<sidekiq>, [">= 0"])
285
+ s.add_dependency(%q<sidekiq-unique-jobs>, [">= 0"])
286
+ s.add_dependency(%q<sinatra>, [">= 0"])
287
+ s.add_dependency(%q<sidekiq-cron>, [">= 0"])
288
+ s.add_dependency(%q<slim>, [">= 0"])
271
289
  s.add_dependency(%q<shoulda>, [">= 0"])
272
290
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
273
291
  s.add_dependency(%q<bundler>, ["~> 1.0"])
@@ -277,6 +295,7 @@ Gem::Specification.new do |s|
277
295
  s.add_dependency(%q<factory_girl_rails>, [">= 0"])
278
296
  s.add_dependency(%q<sqlite3>, [">= 0"])
279
297
  s.add_dependency(%q<shoulda-matchers>, [">= 0"])
298
+ s.add_dependency(%q<rubocop>, [">= 0"])
280
299
  s.add_dependency(%q<timecop>, [">= 0"])
281
300
  end
282
301
  end