crowdai_admin 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/LICENCE.txt +22 -0
  3. data/Readme.md +84 -0
  4. data/app/assets/fonts/Lato-Bold.eot +0 -0
  5. data/app/assets/fonts/Lato-Bold.ttf +0 -0
  6. data/app/assets/fonts/Lato-Bold.woff +0 -0
  7. data/app/assets/fonts/Lato-Bold.woff2 +0 -0
  8. data/app/assets/fonts/Lato-BoldItalic.eot +0 -0
  9. data/app/assets/fonts/Lato-BoldItalic.ttf +0 -0
  10. data/app/assets/fonts/Lato-BoldItalic.woff +0 -0
  11. data/app/assets/fonts/Lato-BoldItalic.woff2 +0 -0
  12. data/app/assets/fonts/Lato-Italic.eot +0 -0
  13. data/app/assets/fonts/Lato-Italic.ttf +0 -0
  14. data/app/assets/fonts/Lato-Italic.woff +0 -0
  15. data/app/assets/fonts/Lato-Italic.woff2 +0 -0
  16. data/app/assets/fonts/Lato-Regular.eot +0 -0
  17. data/app/assets/fonts/Lato-Regular.ttf +0 -0
  18. data/app/assets/fonts/Lato-Regular.woff +0 -0
  19. data/app/assets/fonts/Lato-Regular.woff2 +0 -0
  20. data/app/assets/javascripts/crowdai_admin/base.js +79 -0
  21. data/app/assets/stylesheets/crowdai_admin/_base.scss +42 -0
  22. data/app/assets/stylesheets/crowdai_admin/_common.scss +27 -0
  23. data/app/assets/stylesheets/crowdai_admin/_grid.scss +4 -0
  24. data/app/assets/stylesheets/crowdai_admin/_reset.scss +41 -0
  25. data/app/assets/stylesheets/crowdai_admin/components/_columns.scss +4 -0
  26. data/app/assets/stylesheets/crowdai_admin/components/_comments.scss +54 -0
  27. data/app/assets/stylesheets/crowdai_admin/components/_components.scss +13 -0
  28. data/app/assets/stylesheets/crowdai_admin/components/_date_picker.scss +38 -0
  29. data/app/assets/stylesheets/crowdai_admin/components/_dialogs.scss +23 -0
  30. data/app/assets/stylesheets/crowdai_admin/components/_flash.scss +27 -0
  31. data/app/assets/stylesheets/crowdai_admin/components/_form.scss +65 -0
  32. data/app/assets/stylesheets/crowdai_admin/components/_iframes.scss +27 -0
  33. data/app/assets/stylesheets/crowdai_admin/components/_inputs.scss +109 -0
  34. data/app/assets/stylesheets/crowdai_admin/components/_pagination.scss +25 -0
  35. data/app/assets/stylesheets/crowdai_admin/components/_panel_contents.scss +14 -0
  36. data/app/assets/stylesheets/crowdai_admin/components/_status_tag.scss +17 -0
  37. data/app/assets/stylesheets/crowdai_admin/components/_tables.scss +65 -0
  38. data/app/assets/stylesheets/crowdai_admin/components/_tabs.scss +33 -0
  39. data/app/assets/stylesheets/crowdai_admin/layouts/_filter.scss +64 -0
  40. data/app/assets/stylesheets/crowdai_admin/layouts/_footer.scss +4 -0
  41. data/app/assets/stylesheets/crowdai_admin/layouts/_header.scss +237 -0
  42. data/app/assets/stylesheets/crowdai_admin/layouts/_main_content.scss +44 -0
  43. data/app/assets/stylesheets/crowdai_admin/layouts/_sidebar.scss +104 -0
  44. data/app/assets/stylesheets/crowdai_admin/layouts/_wrapper.scss +8 -0
  45. data/app/assets/stylesheets/crowdai_admin/mixins/_buttons_mixins.scss +120 -0
  46. data/app/assets/stylesheets/crowdai_admin/mixins/_mixins.scss +3 -0
  47. data/app/assets/stylesheets/crowdai_admin/mixins/_prefix_mixins.scss +63 -0
  48. data/app/assets/stylesheets/crowdai_admin/mixins/_sidebar_mixins.scss +24 -0
  49. data/app/assets/stylesheets/crowdai_admin/pages/_form.scss +116 -0
  50. data/app/assets/stylesheets/crowdai_admin/pages/_index.scss +116 -0
  51. data/app/assets/stylesheets/crowdai_admin/pages/_login.scss +65 -0
  52. data/app/assets/stylesheets/crowdai_admin/pages/_show.scss +3 -0
  53. data/app/assets/stylesheets/crowdai_admin/variables/_colors.scss +49 -0
  54. data/app/assets/stylesheets/crowdai_admin/variables/_media_queries.scss +10 -0
  55. data/app/assets/stylesheets/crowdai_admin/variables/_size.scss +9 -0
  56. data/app/assets/stylesheets/crowdai_admin/variables/_variables.scss +5 -0
  57. data/lib/crowdai_admin/custom_builder.rb +65 -0
  58. data/lib/crowdai_admin/toggle_booleans.rb +41 -0
  59. data/lib/crowdai_admin/version.rb +3 -0
  60. data/lib/crowdai_admin.rb +11 -0
  61. metadata +178 -0
@@ -0,0 +1,8 @@
1
+ #wrapper {
2
+ display: flex;
3
+ flex-direction: column;
4
+
5
+ .flashes {
6
+ order: -1;
7
+ }
8
+ }
@@ -0,0 +1,120 @@
1
+ @mixin button() {
2
+ border-radius: $border-radius;
3
+ display: inline-block;
4
+ @include transition-button();
5
+ cursor: pointer;
6
+
7
+ &:active, &:focus {
8
+ outline: 0;
9
+ }
10
+
11
+ &.disabled, &:disabled {
12
+ opacity: 0.6;
13
+ cursor: no-drop;
14
+ }
15
+ }
16
+
17
+ @mixin primary-button($background-color, $color) {
18
+ background-color: $background-color;
19
+ color: $color;
20
+ border: none;
21
+ @include button();
22
+
23
+ &:hover {
24
+ background-color: lighten($background-color, 10%);
25
+ }
26
+
27
+ &:active, &:focus {
28
+ background-color: darken($background-color, 10%);
29
+ }
30
+
31
+ &:disabled {
32
+ background-color: $background-color;
33
+ }
34
+ }
35
+
36
+ @mixin secondary-button($color) {
37
+ background-color: #fff;
38
+ color: $color;
39
+ border: 1px solid $color;
40
+ @include button();
41
+
42
+ &:hover {
43
+ color: #fff;
44
+ background-color: $color;
45
+ }
46
+
47
+ &:active, &:focus {
48
+ background-color: darken($color, 10%);
49
+ color: #fff;
50
+ }
51
+ }
52
+
53
+ @mixin secondary-dropdown($color) {
54
+ @include secondary-button($color);
55
+ padding: 6px 25px 6px 10px;
56
+ position: relative;
57
+
58
+ &:after {
59
+ @include icon("\f0dd");
60
+ position: absolute;
61
+ right: 8px;
62
+ }
63
+
64
+ &:active, &:focus {
65
+ background-color: darken($color, 10%);
66
+ color: #fff;
67
+ }
68
+
69
+ &.disabled, &:disabled {
70
+ color: $grey;
71
+ background-color: #f3f7f9;
72
+ border-color: #f3f7f9;
73
+ @include box-shadow(none);
74
+ opacity: .65;
75
+ }
76
+ }
77
+
78
+ @mixin group-button($color) {
79
+ a {
80
+ display: inline-block;
81
+ color: $color;
82
+ border-top: 1px solid $color;
83
+ border-bottom: 1px solid $color;
84
+ float: left;
85
+ padding: 6px 10px;
86
+ border-right: 1px solid $color;
87
+ @include transition-button();
88
+ }
89
+
90
+ &:first-child a {
91
+ border-left: 1px solid $color;
92
+ border-top-left-radius: $border-radius;
93
+ border-bottom-left-radius: $border-radius;
94
+ }
95
+
96
+ &:last-child a {
97
+ border-top-right-radius: $border-radius;
98
+ border-bottom-right-radius: $border-radius;
99
+ }
100
+
101
+ &:hover {
102
+ a {
103
+ background-color: lighten($color, 10%);
104
+ border-color: lighten($color, 10%);
105
+ color: #fff;
106
+ }
107
+ }
108
+
109
+ &:active, &:focus, &.selected {
110
+ a {
111
+ background-color: darken($color, 10%);
112
+ border-color: darken($color, 10%);
113
+ color: #fff;
114
+ }
115
+ }
116
+ }
117
+
118
+ @mixin little-button() {
119
+ padding: 6px 12px;
120
+ }
@@ -0,0 +1,3 @@
1
+ @import "prefix_mixins";
2
+ @import "buttons_mixins";
3
+ @import "sidebar_mixins";
@@ -0,0 +1,63 @@
1
+ @mixin transform($var) {
2
+ -webkit-transform: $var;
3
+ -moz-transform: $var;
4
+ -ms-transform: $var;
5
+ -o-transform: $var;
6
+ transform: $var;
7
+ }
8
+
9
+ @mixin appearance($effect:none) {
10
+ -webkit-appearance: $effect;
11
+ -moz-appearance: $effect;
12
+ -ms-appearance: $effect;
13
+ -o-appearance: $effect;
14
+ appearance: $effect;
15
+ }
16
+
17
+ @mixin transition($args...) {
18
+ -webkit-transition: $args;
19
+ -o-transition: $args;
20
+ transition: $args;
21
+ }
22
+
23
+ @mixin transition-button() {
24
+ @include transition(border .2s linear,color .2s linear,width .2s linear,background-color .2s linear);
25
+ }
26
+
27
+ @mixin box-shadow($args...) {
28
+ -webkit-box-shadow: $args;
29
+ -moz-box-shadow: $args;
30
+ box-shadow: $args;
31
+ }
32
+
33
+ @mixin disable-user-select() {
34
+ -webkit-touch-callout: none;
35
+ -webkit-user-select: none;
36
+ -khtml-user-select: none;
37
+ -moz-user-select: none;
38
+ -ms-user-select: none;
39
+ user-select: none;
40
+ }
41
+
42
+ @mixin clear-fix() {
43
+ &:after {
44
+ content: '';
45
+ display: block;
46
+ clear: both;
47
+ }
48
+ }
49
+
50
+ @mixin outline() {
51
+ &:focus {
52
+ outline: 0;
53
+ }
54
+ }
55
+
56
+ @mixin icon($code-icon) {
57
+ font-size: inherit;
58
+ text-rendering: auto;
59
+ -webkit-font-smoothing: antialiased;
60
+ -moz-osx-font-smoothing: grayscale;
61
+ font: normal normal normal 14px/1 FontAwesome;
62
+ content: $code-icon;
63
+ }
@@ -0,0 +1,24 @@
1
+ @mixin sidebar-container() {
2
+ #active_admin_content.with_sidebar {
3
+ #main_content_wrapper {
4
+ width: $screen-filter-width;
5
+
6
+ @media screen and (min-width: $sm-width) {
7
+ padding-right: 10px;
8
+ }
9
+
10
+ @media screen and (min-width: $lg-width) {
11
+ padding-right: 0;
12
+ width: $lg-screen-filter-width;
13
+ }
14
+ }
15
+
16
+ #sidebar {
17
+ display: inline-block;
18
+
19
+ tr:hover {
20
+ background: rgba(243, 247, 249, 0.3);
21
+ }
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,116 @@
1
+ body.logged_in {
2
+ &.new, &.edit, &.create, &.update {
3
+ @include sidebar-container();
4
+
5
+ .formtastic legend {
6
+ font-weight: normal;
7
+ }
8
+
9
+ fieldset.inputs {
10
+ margin-bottom: 20px;
11
+ }
12
+
13
+ .input {
14
+ .label {
15
+ padding-bottom: 5px;
16
+ text-align: left;
17
+ margin: auto 0;
18
+ padding-top: 8px;
19
+ text-align: right;
20
+ font-size: 14px;
21
+
22
+ @media screen and (min-width: $sm-width) {
23
+ padding-bottom: 0;
24
+ height: 25px;
25
+ width: 25%;
26
+ float: left;
27
+ padding-right: 20px;
28
+ }
29
+ }
30
+ input, textarea {
31
+ @media screen and (min-width: $sm-width) {
32
+ width: 50%;
33
+ }
34
+
35
+ &[type='radio'] {
36
+ width: 15px;
37
+ float: left;
38
+ margin-top: 3px;
39
+ }
40
+
41
+ &[type='checkbox'] {
42
+ width: 15px;
43
+ margin: 0 5px -2px 0;
44
+ }
45
+ }
46
+
47
+ .select2-container {
48
+ @media screen and (min-width: $sm-width) {
49
+ width: 50% !important;
50
+ }
51
+
52
+ a {
53
+ height: 30px;
54
+ line-height: 30px;
55
+ }
56
+ }
57
+
58
+ select {
59
+ min-width: 50%;
60
+ height: 30px;
61
+ }
62
+
63
+ .fragment {
64
+ margin-right: 10px;
65
+
66
+ label {
67
+ padding-right: 5px;
68
+ }
69
+
70
+ select {
71
+ min-width: auto;
72
+ }
73
+ }
74
+
75
+ &.boolean {
76
+ margin-left: 25%;
77
+ @include disable-user-select();
78
+
79
+ input {
80
+ width: auto;
81
+ }
82
+
83
+ label {
84
+ font-size: 14px;
85
+ cursor: pointer;
86
+ padding: 5px 5px 5px 0;
87
+ }
88
+
89
+ input[type='checkbox'] {
90
+ width: 15px;
91
+ margin: 0 5px -2px 0;
92
+ }
93
+ }
94
+
95
+ li.fragment {
96
+ display: inline;
97
+ }
98
+
99
+ li.choice {
100
+ margin-left: 25%;
101
+
102
+ .field_with_errors {
103
+ float: left;
104
+ }
105
+ }
106
+
107
+ .inline-errors {
108
+ padding-left: 25%;
109
+ }
110
+ }
111
+
112
+ .actions {
113
+ padding-left: 25%;
114
+ }
115
+ }
116
+ }
@@ -0,0 +1,116 @@
1
+ body.index {
2
+
3
+ .resource_selection_toggle_cell, .resource_selection_cell {
4
+ display: flex;
5
+ }
6
+
7
+ .table_tools {
8
+ margin-bottom: 20px;
9
+ font-size: 14px;
10
+
11
+ &:after {
12
+ content: '';
13
+ display: block;
14
+ clear: both;
15
+ }
16
+
17
+ input[type='checkbox'] {
18
+ display: flex;
19
+ }
20
+
21
+ .collection_selection_toggle_all {
22
+ display: flex !important;
23
+ }
24
+
25
+ .batch_actions_selector {
26
+ display: inline-block;
27
+ }
28
+
29
+ .dropdown_menu_button{
30
+ @include secondary-dropdown($primary-color);
31
+ }
32
+
33
+ .dropdown_menu_list {
34
+ background-color: #fff;
35
+ padding: 10px 15px;
36
+ border-radius: $border-radius;
37
+ @include box-shadow($box-shadow);
38
+ display: inline-block;
39
+ position: absolute;
40
+ z-index: 1;
41
+ }
42
+ }
43
+
44
+ .paginated_collection_contents {
45
+ margin-bottom: 20px;
46
+ overflow-x: auto;
47
+ }
48
+
49
+ #index_footer {
50
+ font-size: 14px;
51
+ }
52
+
53
+ .sortable {
54
+ position: relative;
55
+
56
+ &:after {
57
+ @include icon("\f0dc");
58
+ font-size: 12px;
59
+ position: absolute;
60
+ top: 50%;
61
+ right: 5px;
62
+ @include transform(translateY(-50%));
63
+
64
+ @media screen and (min-width: $md-width) {
65
+ font-size: 14px/1;
66
+ }
67
+ }
68
+
69
+ &.sorted-desc:after {
70
+ content: "\f0dd";
71
+ }
72
+
73
+ &.sorted-asc:after {
74
+ content: "\f0de";
75
+ }
76
+ }
77
+
78
+ .table_actions {
79
+ .member_link {
80
+ @include primary-button($primary-color, white);
81
+ padding: 2px 9px;
82
+ margin-right: 4px;
83
+ }
84
+ }
85
+
86
+ .scopes {
87
+ .scope {
88
+ @include group-button($primary-color);
89
+ }
90
+ }
91
+
92
+ #sidebar {
93
+ position: fixed;
94
+ right: - $filter-width;
95
+
96
+ @media screen and (min-width: $x-lg-width) {
97
+ right: - $lg-filter-width;
98
+ }
99
+
100
+ &:before {
101
+ cursor: pointer;
102
+ position: absolute;
103
+ top: 30px;
104
+ left: -40px;
105
+ width: 40px;
106
+ height: 50px;
107
+ background-color: #fff;
108
+ @include box-shadow(-1px 0 4px 0 rgba(0,0,0,.04));
109
+ border-top-left-radius: $border-radius;
110
+ border-bottom-left-radius: $border-radius;
111
+ @include icon("\f0b0");
112
+ font-size: 20px;
113
+ padding: 15px 10px;
114
+ }
115
+ }
116
+ }
@@ -0,0 +1,65 @@
1
+ body.logged_out {
2
+ .flash {
3
+ position: fixed;
4
+ }
5
+
6
+ #active_admin_content {
7
+ height: 100vh;
8
+ width: 100%;
9
+ display: flex;
10
+ align-items: center;
11
+ }
12
+ }
13
+
14
+ #login {
15
+ width: 100%;
16
+ margin: auto;
17
+ background-color: white;
18
+ border-top: $border-radius solid $primary-color;
19
+ @include box-shadow($box-shadow);
20
+ color: $text-color;
21
+ padding: 20px;
22
+
23
+ @media screen and (min-width: 400px) {
24
+ border-radius: $border-radius;
25
+ width: 400px;
26
+ padding: 30px;
27
+ }
28
+
29
+ h2 {
30
+ text-align: center;
31
+ }
32
+
33
+ .label {
34
+ display: inline-block;
35
+ max-width: 100%;
36
+ margin-bottom: 5px;
37
+ }
38
+
39
+ .input.boolean {
40
+ @include disable-user-select();
41
+ label {
42
+ font-size: 15px;
43
+ cursor: pointer;
44
+ padding: 5px 5px 5px 0;
45
+ }
46
+
47
+ input[type='checkbox'] {
48
+ width: 15px;
49
+ margin: 0 5px -2px 0;
50
+ }
51
+ }
52
+
53
+ a {
54
+ margin-top: 10px;
55
+ display: inline-block;
56
+ }
57
+
58
+ .input_action {
59
+ min-width: 50%;
60
+ }
61
+
62
+ input[type="submit"] {
63
+ line-height: 43px;
64
+ }
65
+ }
@@ -0,0 +1,3 @@
1
+ body.show {
2
+ @include sidebar-container();
3
+ }
@@ -0,0 +1,49 @@
1
+ // BASIC COLOR
2
+ $red: #f0524d;
3
+ $green: #00897B;
4
+ $blue: #4bacfe;
5
+ $black: #36393D;
6
+ $grey: #76838f;
7
+
8
+ // flash
9
+ $error: #dc4747 !default;
10
+ $warning: #f2a654 !default;
11
+ $success: #46be8a !default;
12
+ $info: #57c7d4 !default;
13
+ $flash-text-color: #fff !default;
14
+ $flash-background-color: $grey !default;
15
+
16
+ // status_tag
17
+ $status-tag-text-color: #fff !default;
18
+ $status-tag-background-color: #cacaca !default;
19
+ $status-tag-background-valid-color: $success !default;
20
+ $status-tag-background-error-color: $error !default;
21
+
22
+ $border-color: #e4eaec;
23
+
24
+
25
+ // body
26
+ $body-background: #eee !default;
27
+
28
+ // header
29
+ $header-border-color: #e6e6e6 !default;
30
+ $header-background: #fff !default;
31
+
32
+ // nav action
33
+ $header-nav-action-hover-background: #f5f5f5 !default;
34
+ $header-nav-action-active-background: #f0f0f0 !default;
35
+
36
+ //sidebar
37
+ $sidebar-border-color: $header-border-color !default;
38
+ $sidebar-background: #f5f5f5 !default;
39
+
40
+ $sidebar-item-hover-background: #f0f0f0 !default;
41
+ $sidebar-nested-item-hover-background: #e7e7e7 !default;
42
+
43
+ // text
44
+ $text-color: #5a5a5a !default;
45
+ $text-color-important: #526069 !default;
46
+
47
+ $box-shadow: 0 0 4px 0 rgba(0,0,0,0.1) !default;
48
+
49
+ $primary-color: $red !default;
@@ -0,0 +1,10 @@
1
+ $sm-width: 576px !default;
2
+ $md-width: 768px !default;
3
+ $lg-width: 992px !default;
4
+ $x-lg-width: 1400px !default;
5
+
6
+ // <576px Extra small
7
+ // ≥576px Small
8
+ // ≥768px Medium
9
+ // ≥992px Large
10
+ // ≥1400px Extra large
@@ -0,0 +1,9 @@
1
+ $header-width: 200px !default;
2
+ $screen-header-width: calc(100% - 200px) !default;
3
+ $lg-header-width: 250px !default;
4
+ $lg-screen-header-width: calc(100% - 250px) !default;
5
+
6
+ $filter-width: 230px !default;
7
+ $screen-filter-width: calc(100% - 230px) !default;
8
+ $lg-filter-width: 270px !default;
9
+ $lg-screen-filter-width: calc(100% - 270px) !default;
@@ -0,0 +1,5 @@
1
+ @import "colors";
2
+ @import "size";
3
+ @import "media_queries";
4
+
5
+ $border-radius: 2px !default;
@@ -0,0 +1,65 @@
1
+ module CrowdaiAdmin
2
+ class CustomBuilder
3
+ attr_accessor :context, :model, :args, :block
4
+
5
+ def initialize(context, model, *args, &block)
6
+ @context = context
7
+ @model = model
8
+ @args = *args
9
+ @block = block
10
+ end
11
+
12
+ def render
13
+ raise NotImplementedError
14
+ end
15
+
16
+ def self.create_view_methods
17
+ builder_class = self
18
+ builder_name = builder_method_name
19
+
20
+ ::ActiveAdmin::Views::TableFor.class_eval do
21
+ define_method("#{builder_name}_column") do |*args, &block|
22
+ column(*args) { |model| builder_class.new(self, model, *args, &block).render }
23
+ end
24
+ end
25
+
26
+ ::ActiveAdmin::Views::AttributesTable.class_eval do
27
+ define_method("#{builder_name}_row") do |*args, &block|
28
+ row(*args) { |model| builder_class.new(self, model, *args, &block).render }
29
+ end
30
+ end
31
+ end
32
+
33
+ def self.builder_method_name
34
+ name.underscore.to_s.split("/").last.chomp("_builder")
35
+ end
36
+
37
+ protected
38
+
39
+ def data
40
+ @data ||= block ? block.call(model) : model.send(attribute)
41
+ end
42
+
43
+ def options
44
+ @options ||= has_opts? ? args.last : {}
45
+ end
46
+
47
+ def class_name
48
+ model.class.name.demodulize.underscore
49
+ end
50
+
51
+ def attribute
52
+ @attribute ||= has_label? ? args[1] : args[0]
53
+ end
54
+
55
+ def has_label?
56
+ has_opts? ? args.length == 3 : args.length == 2
57
+ end
58
+
59
+ def has_opts?
60
+ @has_opts ||= args.last.is_a?(Hash)
61
+ end
62
+
63
+ create_view_methods
64
+ end
65
+ end
@@ -0,0 +1,41 @@
1
+ module CrowdaiAdmin
2
+ class ToggleBooleans < CustomBuilder
3
+ def render
4
+ raise ArgumentError, 'Block should not be used in toggle bool columns' if block
5
+ return if conditional_eval_hide?
6
+ context.div class: 'toggle-bool-switches-container' do
7
+ context.span toggle
8
+ end
9
+ end
10
+
11
+ def toggle
12
+ toggle_classes = 'toggle-bool-switch'
13
+ toggle_classes += ' on' if data
14
+ toggle_classes += ' notify-success' if options[:success_message]
15
+
16
+ context.span(
17
+ '',
18
+ id: "toggle-#{class_name}-#{model.id}-#{attribute}",
19
+ class: toggle_classes,
20
+ 'data-model' => class_name,
21
+ 'data-object_id' => model.id,
22
+ 'data-field' => attribute,
23
+ 'data-value' => data,
24
+ 'data-url' => context.auto_url_for(model),
25
+ 'data-success_message' => options[:success_message]
26
+ )
27
+ end
28
+
29
+ def conditional_eval_hide?
30
+ [:if, :unless].any? do |cond|
31
+ if options[cond]
32
+ raise ArgumentError, "'#{cond}' option should be a proc" unless options[cond].is_a?(Proc)
33
+ result = options[cond].call(model)
34
+ cond == :if ? !result : result
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ CrowdaiAdmin::ToggleBooleans.create_view_methods
@@ -0,0 +1,3 @@
1
+ module CrowdaiAdmin
2
+ VERSION = "1.0.0"
3
+ end