marty 0.5.27 → 0.5.28

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: 7a3336670f870920df522354766443beb74444a6
4
- data.tar.gz: 024d51ba48f744d2f79cf94c944aba5738bfb162
3
+ metadata.gz: b6599f34a4823efc8be3d05feef0d3fc937219e6
4
+ data.tar.gz: 41c960a54860d1c94d2138148725fdc5575c33f0
5
5
  SHA512:
6
- metadata.gz: 1943c8292da687d88f7d005fef66476b384a2172022c35dcef00b5ad0bbea0da2f215d7d7ff72464f2f114cd7441fbec51792c2d84454e52f6129a596ed604fe
7
- data.tar.gz: 75eb4fef14e9c12212ff5aed7a70d7d9d3c042f3d335a53494a8b9e07554a3ac38bbee77124170b2cfb281e2daa7da18c9f1221eeccd2e32a1103c2fc758585e
6
+ metadata.gz: a7b66c7ca4c79c298aae4a82f38a20d856c83c94800575328062aba071aeb4f21f2f63b81a1af77a6ae2106eac838e694c1a9fcf0041b27922d03b3715afb88b
7
+ data.tar.gz: 6394925740fc4739765409d35205a57b6fc20fafa6089686b5438b35a49839c0c2c013eb8ccf843c7b45cff6639f55b5288b68dc6b94044f88e789f08bed1586
@@ -1,7 +1,3 @@
1
- require 'netzke-basepack'
2
- require 'netzke/basepack/grid'
3
- require 'marty/permissions'
4
-
5
1
  class Marty::Grid < ::Netzke::Basepack::Grid
6
2
  extend ::Marty::Permissions
7
3
 
@@ -19,6 +19,14 @@ class Marty::ImportType < Marty::Base
19
19
  end
20
20
  end
21
21
 
22
+ before_validation do
23
+ # Fix issue with blank strings in popup edit form or grid
24
+ # being interpreted as a function
25
+ self.cleaner_function = nil if self.cleaner_function.blank?
26
+ self.validation_function = nil if self.validation_function.blank?
27
+ self.preprocess_function = nil if self.preprocess_function.blank?
28
+ end
29
+
22
30
  belongs_to :role
23
31
 
24
32
  validates_presence_of :name, :db_model_name, :role_id
@@ -26,7 +34,7 @@ class Marty::ImportType < Marty::Base
26
34
  validates_with ImportTypeValidator
27
35
 
28
36
  def get_model_class
29
- db_model_name.constantize
37
+ db_model_name.constantize if db_model_name
30
38
  end
31
39
 
32
40
  def allow_import?
@@ -1,64 +1,62 @@
1
- module Marty
2
- module Permissions
3
- # Make sure there are admin and user_manager roles,
4
- # even if hosting app doesn't define them
5
- REQ_ROLES = [:admin, :user_manager]
6
- ALL_ROLES = Rails.configuration.marty.roles.to_set.merge(REQ_ROLES)
7
-
8
- # Call using following format
9
- # has_marty_permissions create: [:dev, :admin],
10
- # read: :any,
11
- # update: :admin,
12
- # delete: []
13
- #
14
- # :any gives permission to the action if user belongs to at least 1 role
15
- def has_marty_permissions(attrs)
16
- raise "bad attrs" unless attrs.is_a?(Hash)
17
- raise "unknown role" unless
18
- attrs.values.flatten.to_set.subset? (ALL_ROLES << :any)
1
+ module Marty::Permissions
2
+ # Make sure there are admin and user_manager roles,
3
+ # even if hosting app doesn't define them
4
+ REQ_ROLES = [:admin, :user_manager]
5
+ ALL_ROLES = Rails.configuration.marty.roles.to_set.merge(REQ_ROLES)
6
+
7
+ # Call using following format
8
+ # has_marty_permissions create: [:dev, :admin],
9
+ # read: :any,
10
+ # update: :admin,
11
+ # delete: []
12
+ #
13
+ # :any gives permission to the action if user belongs to at least 1 role
14
+ def has_marty_permissions(attrs)
15
+ raise "bad attrs" unless attrs.is_a?(Hash)
16
+ raise "unknown role" unless
17
+ attrs.values.flatten.to_set.subset? (ALL_ROLES << :any)
18
+
19
+ self.define_singleton_method(:marty_permissions) { attrs }
20
+ end
19
21
 
20
- self.define_singleton_method(:marty_permissions) { attrs }
21
- end
22
+ def current_user_roles
23
+ roles = Mcfly.whodunnit.roles rescue []
24
+ roles.map {|r| r.name.to_sym}.to_set
25
+ end
22
26
 
23
- def current_user_roles
24
- roles = Mcfly.whodunnit.roles rescue []
25
- roles.map {|r| r.name.to_sym}.to_set
26
- end
27
+ def can_perform_action?(action)
28
+ return false unless self.respond_to?(:marty_permissions)
27
29
 
28
- def can_perform_action?(action)
29
- return false unless self.respond_to?(:marty_permissions)
30
+ roles = self.current_user_roles
31
+ roles = roles << :any if self.has_any_perm?
30
32
 
31
- roles = self.current_user_roles
32
- roles = roles << :any if self.has_any_perm?
33
+ aroles = self.marty_permissions[action.to_sym] || []
34
+ # TODO: Use code below when switching to Ruby 2.1
35
+ # Set[ *aroles].intersect? roles.to_set
36
+ (Set[ *aroles] & roles.to_set).length > 0
37
+ end
33
38
 
34
- aroles = self.marty_permissions[action.to_sym] || []
35
- # TODO: Use code below when switching to Ruby 2.1
36
- # Set[ *aroles].intersect? roles.to_set
37
- (Set[ *aroles] & roles.to_set).length > 0
38
- end
39
+ def can_perform_actions
40
+ return [] unless self.respond_to?(:marty_permissions)
39
41
 
40
- def can_perform_actions
41
- return [] unless self.respond_to?(:marty_permissions)
42
+ roles = self.current_user_roles
43
+ roles = roles << :any if self.has_any_perm?
42
44
 
43
- roles = self.current_user_roles
44
- roles = roles << :any if self.has_any_perm?
45
+ self.marty_permissions.map { |action, aroles|
46
+ # TODO: Use code below when switching to Ruby 2.1
47
+ #action if Set[ *aroles].intersect? roles.to_set
48
+ action if (Set[ *aroles] & roles.to_set).length > 0
49
+ }.compact
50
+ end
45
51
 
46
- self.marty_permissions.map { |action, aroles|
47
- # TODO: Use code below when switching to Ruby 2.1
48
- #action if Set[ *aroles].intersect? roles.to_set
49
- action if (Set[ *aroles] & roles.to_set).length > 0
50
- }.compact
52
+ # generate has_xxx_perm? methods for all permissions.
53
+ Rails.configuration.marty.roles.each { |role|
54
+ define_method("has_#{role}_perm?") do
55
+ current_user_roles.member? role
51
56
  end
57
+ }
52
58
 
53
- # generate has_xxx_perm? methods for all permissions.
54
- Rails.configuration.marty.roles.each { |role|
55
- define_method("has_#{role}_perm?") do
56
- current_user_roles.member? role
57
- end
58
- }
59
-
60
- def has_any_perm?
61
- !(current_user_roles & ALL_ROLES).empty?
62
- end
59
+ def has_any_perm?
60
+ !(current_user_roles & ALL_ROLES).empty?
63
61
  end
64
62
  end
data/lib/marty/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Marty
2
- VERSION = "0.5.27"
2
+ VERSION = "0.5.28"
3
3
  end
@@ -0,0 +1,77 @@
1
+ require 'spec_helper'
2
+
3
+ module Marty
4
+ class Marty::ARTestModel < ActiveRecord::Base
5
+ def self.import_cleaner
6
+ end
7
+
8
+ def self.import_validator
9
+ end
10
+ end
11
+
12
+ class Marty::TestModel
13
+ end
14
+
15
+ describe ImportType do
16
+ let(:role_id) { Marty::Role.first.id }
17
+
18
+ before(:each) do
19
+ @import = ImportType.new
20
+ @import.name = "Test1"
21
+ @import.db_model_name = "Marty::ARTestModel"
22
+ @import.role_id = role_id
23
+ @import.save!
24
+ end
25
+
26
+ describe "validations" do
27
+ it "require name, db_model and role" do
28
+ it = ImportType.new
29
+ expect(it).to_not be_valid
30
+ expect(it.errors[:name].any?).to be true
31
+ expect(it.errors[:db_model_name].any?).to be true
32
+ expect(it.errors[:role_id].any?).to be true
33
+ end
34
+
35
+ it "require a unique name" do
36
+ it = ImportType.new
37
+ it.name = "Test1"
38
+ it.db_model_name = "Marty::ARTestModel"
39
+ it.role_id = role_id
40
+ expect(it).to_not be_valid
41
+ expect(it.errors[:name].any?).to be true
42
+ end
43
+
44
+ it "require an ActiveRecord model for the db_model_name" do
45
+ it = ImportType.new
46
+ it.name = "Test1"
47
+ it.db_model_name = "Marty::TestModel"
48
+ it.role_id = role_id
49
+ expect(it).to_not be_valid
50
+ expect(it.errors[:base][0]).to eq "bad model name"
51
+ end
52
+
53
+ it "do not fail on blank strings for functions" do
54
+ @import.cleaner_function = ""
55
+ @import.validation_function = " "
56
+ @import.preprocess_function = " "
57
+
58
+ expect(@import).to be_valid
59
+ @import.save!
60
+ expect(@import.cleaner_function).to be nil
61
+ expect(@import.validation_function).to be nil
62
+ expect(@import.preprocess_function).to be nil
63
+ end
64
+
65
+ it "require valid functions for cleaner/validation/preprocess" do
66
+ @import.cleaner_function = "import_cleaner"
67
+ @import.validation_function = "import_validator"
68
+ expect(@import).to be_valid
69
+
70
+ @import.preprocess_function = "missing_func"
71
+ expect(@import).to_not be_valid
72
+ expect(@import.errors[:base][0]).
73
+ to eq "unknown class method missing_func"
74
+ end
75
+ end
76
+ end
77
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: marty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.27
4
+ version: 0.5.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arman Bostani
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2016-02-01 00:00:00.000000000 Z
17
+ date: 2016-02-09 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: pg
@@ -541,6 +541,7 @@ files:
541
541
  - spec/lib/xl_styles_spec.rb
542
542
  - spec/models/api_auth_spec.rb
543
543
  - spec/models/config_spec.rb
544
+ - spec/models/import_type_spec.rb
544
545
  - spec/models/posting_spec.rb
545
546
  - spec/models/promise_spec.rb
546
547
  - spec/models/script_spec.rb