billet 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/main.yml +18 -0
  3. data/.gitignore +11 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +10 -0
  6. data/CODE_OF_CONDUCT.md +84 -0
  7. data/Gemfile +10 -0
  8. data/Gemfile.lock +55 -0
  9. data/README.md +39 -0
  10. data/Rakefile +12 -0
  11. data/billet.gemspec +34 -0
  12. data/bin/console +15 -0
  13. data/bin/rspec +29 -0
  14. data/lib/billet/version.rb +5 -0
  15. data/lib/billet.rb +8 -0
  16. data/lib/generators/billet/namespace/USAGE +8 -0
  17. data/lib/generators/billet/namespace/namespace_generator.rb +165 -0
  18. data/lib/generators/billet/namespace/templates/Gemfile.erb +15 -0
  19. data/lib/generators/billet/namespace/templates/abilities/ability.rb.erb +14 -0
  20. data/lib/generators/billet/namespace/templates/assets/css.js.erb +4 -0
  21. data/lib/generators/billet/namespace/templates/assets/css.scss.erb +5 -0
  22. data/lib/generators/billet/namespace/templates/assets/js.js.erb +1 -0
  23. data/lib/generators/billet/namespace/templates/config/api_routes.rb.erb +13 -0
  24. data/lib/generators/billet/namespace/templates/config/locales/activerecord.yml.erb +12 -0
  25. data/lib/generators/billet/namespace/templates/config/locales/defaults.yml.erb +215 -0
  26. data/lib/generators/billet/namespace/templates/config/locales/module_name.yml.erb +5 -0
  27. data/lib/generators/billet/namespace/templates/config/locales/views.yml.erb +24 -0
  28. data/lib/generators/billet/namespace/templates/config/routes.rb.erb +3 -0
  29. data/lib/generators/billet/namespace/templates/controller_concerns/.keep +0 -0
  30. data/lib/generators/billet/namespace/templates/controller_concerns/api_current_identity.rb.erb +69 -0
  31. data/lib/generators/billet/namespace/templates/controller_concerns/current_identity.rb.erb +75 -0
  32. data/lib/generators/billet/namespace/templates/controllers/api_controllers/authorizations_controller.rb.erb +25 -0
  33. data/lib/generators/billet/namespace/templates/controllers/api_controllers/ping_controller.rb.erb +12 -0
  34. data/lib/generators/billet/namespace/templates/controllers/api_controllers/profiles_controller.rb.erb +14 -0
  35. data/lib/generators/billet/namespace/templates/controllers/api_controllers/projects_controller.rb.erb +35 -0
  36. data/lib/generators/billet/namespace/templates/controllers/api_controllers/user_identities_controller.rb.erb +14 -0
  37. data/lib/generators/billet/namespace/templates/controllers/crud_controllers/application_controller.rb.erb +93 -0
  38. data/lib/generators/billet/namespace/templates/controllers/crud_controllers/controller.rb.erb +1 -0
  39. data/lib/generators/billet/namespace/templates/controllers/crud_controllers/home_controller.rb.erb +11 -0
  40. data/lib/generators/billet/namespace/templates/drappers/application_drapper.rb.erb +25 -0
  41. data/lib/generators/billet/namespace/templates/drappers/concerns/display_name_glipper.rb.erb +32 -0
  42. data/lib/generators/billet/namespace/templates/drappers/concerns/timestamp_glipper.rb.erb +21 -0
  43. data/lib/generators/billet/namespace/templates/drappers/concerns/type_glipper.rb.erb +9 -0
  44. data/lib/generators/billet/namespace/templates/drappers/user_drapper.rb.erb +10 -0
  45. data/lib/generators/billet/namespace/templates/gemspec.erb +19 -0
  46. data/lib/generators/billet/namespace/templates/helpers/application_helper.rb.erb +27 -0
  47. data/lib/generators/billet/namespace/templates/lib/engine.rb.erb +13 -0
  48. data/lib/generators/billet/namespace/templates/lib/module.rb.erb +4 -0
  49. data/lib/generators/billet/namespace/templates/lib/version.rb.erb +3 -0
  50. data/lib/generators/billet/namespace/templates/views/api_views/application/index.json.jbuilder +6 -0
  51. data/lib/generators/billet/namespace/templates/views/api_views/application/show.json.jbuilder +1 -0
  52. data/lib/generators/billet/namespace/templates/views/api_views/authorizations/create.json.jbuilder +1 -0
  53. data/lib/generators/billet/namespace/templates/views/api_views/authorizations/failure.json.jbuilder +1 -0
  54. data/lib/generators/billet/namespace/templates/views/api_views/authorizations/index.json.jbuilder +4 -0
  55. data/lib/generators/billet/namespace/templates/views/api_views/ping/index.json.jbuilder +15 -0
  56. data/lib/generators/billet/namespace/templates/views/api_views/ping/secured.json.jbuilder +1 -0
  57. data/lib/generators/billet/namespace/templates/views/api_views/profiles/_detailed.json.jbuilder +6 -0
  58. data/lib/generators/billet/namespace/templates/views/api_views/projects/_show.json.jbuilder +6 -0
  59. data/lib/generators/billet/namespace/templates/views/api_views/user_identities/_short.json.jbuilder +6 -0
  60. data/lib/generators/billet/namespace/templates/views/crud_views/application/_analytics.html.haml +9 -0
  61. data/lib/generators/billet/namespace/templates/views/crud_views/application/_button_add.html.haml +2 -0
  62. data/lib/generators/billet/namespace/templates/views/crud_views/application/_button_destroy.html.haml +2 -0
  63. data/lib/generators/billet/namespace/templates/views/crud_views/application/_button_edit.html.haml +2 -0
  64. data/lib/generators/billet/namespace/templates/views/crud_views/application/_button_index.html.haml +2 -0
  65. data/lib/generators/billet/namespace/templates/views/crud_views/application/_button_show.html.haml +3 -0
  66. data/lib/generators/billet/namespace/templates/views/crud_views/application/_buttons_edit.html.haml +3 -0
  67. data/lib/generators/billet/namespace/templates/views/crud_views/application/_buttons_index.html.haml +2 -0
  68. data/lib/generators/billet/namespace/templates/views/crud_views/application/_buttons_new.html.haml +2 -0
  69. data/lib/generators/billet/namespace/templates/views/crud_views/application/_buttons_show.html.haml +3 -0
  70. data/lib/generators/billet/namespace/templates/views/crud_views/application/_container.html.haml +4 -0
  71. data/lib/generators/billet/namespace/templates/views/crud_views/application/_favicon.html.haml +15 -0
  72. data/lib/generators/billet/namespace/templates/views/crud_views/application/_flash.html.haml +4 -0
  73. data/lib/generators/billet/namespace/templates/views/crud_views/application/_footer.html.haml +4 -0
  74. data/lib/generators/billet/namespace/templates/views/crud_views/application/_form.html.haml +5 -0
  75. data/lib/generators/billet/namespace/templates/views/crud_views/application/_form_fields.html.haml +2 -0
  76. data/lib/generators/billet/namespace/templates/views/crud_views/application/_header.html.haml +11 -0
  77. data/lib/generators/billet/namespace/templates/views/crud_views/application/_header_edit.html.haml +2 -0
  78. data/lib/generators/billet/namespace/templates/views/crud_views/application/_header_index.html.haml +2 -0
  79. data/lib/generators/billet/namespace/templates/views/crud_views/application/_header_new.html.haml +2 -0
  80. data/lib/generators/billet/namespace/templates/views/crud_views/application/_header_show.html.haml +2 -0
  81. data/lib/generators/billet/namespace/templates/views/crud_views/application/_logo.html.haml +1 -0
  82. data/lib/generators/billet/namespace/templates/views/crud_views/application/_metas.html.haml +13 -0
  83. data/lib/generators/billet/namespace/templates/views/crud_views/application/_names.html.haml +7 -0
  84. data/lib/generators/billet/namespace/templates/views/crud_views/application/_primary_menu.html.haml +0 -0
  85. data/lib/generators/billet/namespace/templates/views/crud_views/application/_row.html.haml +2 -0
  86. data/lib/generators/billet/namespace/templates/views/crud_views/application/_row_header.html.haml +2 -0
  87. data/lib/generators/billet/namespace/templates/views/crud_views/application/_secondary_menu.html.haml +5 -0
  88. data/lib/generators/billet/namespace/templates/views/crud_views/application/_show.html.haml +14 -0
  89. data/lib/generators/billet/namespace/templates/views/crud_views/application/_states.html.haml +9 -0
  90. data/lib/generators/billet/namespace/templates/views/crud_views/application/edit.html.haml +5 -0
  91. data/lib/generators/billet/namespace/templates/views/crud_views/application/index.html.haml +16 -0
  92. data/lib/generators/billet/namespace/templates/views/crud_views/application/new.html.haml +5 -0
  93. data/lib/generators/billet/namespace/templates/views/crud_views/application/show.html.haml +5 -0
  94. data/lib/generators/billet/namespace/templates/views/crud_views/home/index.html.haml.erb +1 -0
  95. data/lib/generators/billet/namespace/templates/views/crud_views/layouts/application.html.haml.erb +23 -0
  96. metadata +139 -0
@@ -0,0 +1,215 @@
1
+ en:
2
+ date:
3
+ abbr_day_names:
4
+ - Sun
5
+ - Mon
6
+ - Tue
7
+ - Wed
8
+ - Thu
9
+ - Fri
10
+ - Sat
11
+ abbr_month_names:
12
+ -
13
+ - Jan
14
+ - Feb
15
+ - Mar
16
+ - Apr
17
+ - May
18
+ - Jun
19
+ - Jul
20
+ - Aug
21
+ - Sep
22
+ - Oct
23
+ - Nov
24
+ - Dec
25
+ day_names:
26
+ - Sunday
27
+ - Monday
28
+ - Tuesday
29
+ - Wednesday
30
+ - Thursday
31
+ - Friday
32
+ - Saturday
33
+ formats:
34
+ default: '%Y-%m-%d'
35
+ long: '%B %d, %Y'
36
+ short: '%b %d'
37
+ month_names:
38
+ -
39
+ - January
40
+ - February
41
+ - March
42
+ - April
43
+ - May
44
+ - June
45
+ - July
46
+ - August
47
+ - September
48
+ - October
49
+ - November
50
+ - December
51
+ order:
52
+ - :year
53
+ - :month
54
+ - :day
55
+ datetime:
56
+ distance_in_words:
57
+ about_x_hours:
58
+ one: 'about 1 hour'
59
+ other: 'about %{count} hours'
60
+ about_x_months:
61
+ one: 'about 1 month'
62
+ other: 'about %{count} months'
63
+ about_x_years:
64
+ one: 'about 1 year'
65
+ other: 'about %{count} years'
66
+ almost_x_years:
67
+ one: 'almost 1 year'
68
+ other: 'almost %{count} years'
69
+ half_a_minute: 'half a minute'
70
+ less_than_x_minutes:
71
+ one: 'less than a minute'
72
+ other: 'less than %{count} minutes'
73
+ less_than_x_seconds:
74
+ one: 'less than 1 second'
75
+ other: 'less than %{count} seconds'
76
+ over_x_years:
77
+ one: 'over 1 year'
78
+ other: 'over %{count} years'
79
+ x_days:
80
+ one: '1 day'
81
+ other: '%{count} days'
82
+ x_minutes:
83
+ one: '1 minute'
84
+ other: '%{count} minutes'
85
+ x_months:
86
+ one: '1 month'
87
+ other: '%{count} months'
88
+ x_seconds:
89
+ one: '1 second'
90
+ other: '%{count} seconds'
91
+ prompts:
92
+ day: Day
93
+ hour: Hour
94
+ minute: Minute
95
+ month: Month
96
+ second: Seconds
97
+ year: Year
98
+ errors: &errors
99
+ format: '%{attribute} %{message}'
100
+ messages:
101
+ accepted: must be accepted
102
+ blank: "can't be blank"
103
+ present: must be blank
104
+ confirmation: "doesn't match %{attribute}"
105
+ empty: can't be empty
106
+ equal_to: 'must be equal to %{count}'
107
+ even: 'must be even'
108
+ exclusion: 'is reserved'
109
+ greater_than: 'must be greater than %{count}'
110
+ greater_than_or_equal_to: must be greater than or equal to %{count}
111
+ inclusion: is not included in the list
112
+ invalid: is invalid
113
+ less_than: must be less than %{count}
114
+ less_than_or_equal_to: must be less than or equal to %{count}
115
+ not_a_number: is not a number
116
+ not_an_integer: must be an integer
117
+ odd: must be odd
118
+ record_invalid: 'Validation failed: %{errors}'
119
+ restrict_dependent_destroy:
120
+ one: "Cannot delete record because a dependent %{record} exists"
121
+ many: "Cannot delete record because dependent %{record} exist"
122
+ taken: has already been taken
123
+ too_long:
124
+ one: is too long (maximum is 1 character)
125
+ other: is too long (maximum is %{count} characters)
126
+ too_short:
127
+ one: is too short (minimum is 1 character)
128
+ other: is too short (minimum is %{count} characters)
129
+ wrong_length:
130
+ one: is the wrong length (should be 1 character)
131
+ other: is the wrong length (should be %{count} characters)
132
+ other_than: "must be other than %{count}"
133
+ template:
134
+ body: ! 'There were problems with the following fields:'
135
+ header:
136
+ one: 1 error prohibited this %{model} from being saved
137
+ other: '%{count} errors prohibited this %{model} from being saved'
138
+ helpers:
139
+ select:
140
+ prompt: Please select
141
+ submit:
142
+ create: Create
143
+ submit: Save %{model}
144
+ update: Update
145
+ number:
146
+ currency:
147
+ format:
148
+ delimiter: ','
149
+ format: '%u%n'
150
+ precision: 2
151
+ separator: .
152
+ significant: false
153
+ strip_insignificant_zeros: false
154
+ unit: $
155
+ format:
156
+ delimiter: ','
157
+ precision: 3
158
+ separator: .
159
+ significant: false
160
+ strip_insignificant_zeros: false
161
+ human:
162
+ decimal_units:
163
+ format: '%n %u'
164
+ units:
165
+ billion: Billion
166
+ million: Million
167
+ quadrillion: Quadrillion
168
+ thousand: Thousand
169
+ trillion: Trillion
170
+ unit: ''
171
+ format:
172
+ delimiter: ''
173
+ precision: 3
174
+ significant: true
175
+ strip_insignificant_zeros: true
176
+ storage_units:
177
+ format: '%n %u'
178
+ units:
179
+ byte:
180
+ one: Byte
181
+ other: Bytes
182
+ gb: GB
183
+ kb: KB
184
+ mb: MB
185
+ tb: TB
186
+ percentage:
187
+ format:
188
+ delimiter: ''
189
+ format: "%n%"
190
+ precision:
191
+ format:
192
+ delimiter: ''
193
+ support:
194
+ array:
195
+ last_word_connector: ', and '
196
+ two_words_connector: ' and '
197
+ words_connector: ', '
198
+ time:
199
+ am: am
200
+ formats:
201
+ default: '%a, %d %b %Y %H:%M:%S %z'
202
+ long: '%B %d, %Y %H:%M'
203
+ short: '%d %b %H:%M'
204
+ pm: pm
205
+ # remove these aliases after 'activemodel' and 'activerecord' namespaces are removed from Rails repository
206
+ activemodel:
207
+ errors:
208
+ <<: *errors
209
+ activerecord:
210
+ errors:
211
+ <<: *errors
212
+
213
+ time_ago_in_words:
214
+ ago: "%{sencence} ago"
215
+ since: "%{sencence} since"
@@ -0,0 +1,5 @@
1
+ en:
2
+ <%= singular_name %>:
3
+ application:
4
+ users:
5
+ menu: Users
@@ -0,0 +1,24 @@
1
+ en:
2
+ <%= singular_name %>:
3
+ application:
4
+ index:
5
+ header: "%{Models}"
6
+ button: "Back"
7
+ new:
8
+ button: "Add new one"
9
+ header: "%{display_name}"
10
+ create:
11
+ button: "Add %{model}"
12
+ edit:
13
+ button: "Edit"
14
+ header: "Edit %{display_name}"
15
+ update:
16
+ button: "Save Changes"
17
+ destroy:
18
+ button: "Destroy"
19
+ confirm: "Are you sure that you want to delete %{model}? It can't be restored!"
20
+ show:
21
+ html: "Go"
22
+ header: "%{Model} #%{id}"
23
+ home:
24
+ title: "Home title"
@@ -0,0 +1,3 @@
1
+ <%= class_name %>::Engine.routes.draw do
2
+ match "/", to: "home#index", via: :get, as: 'root'
3
+ end
@@ -0,0 +1,69 @@
1
+ module <%= class_name %>
2
+ module CurrentIdentity
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ helper_method :current_user, :signed_in?, :current_config
7
+
8
+ <%- if @access.cancan? -%>
9
+ rescue_from CanCan::AccessDenied do |exception|
10
+ render json: { error: exception.message }, status: 401
11
+ end
12
+ <%- end -%>
13
+ end
14
+
15
+ module ClassMethods
16
+ <%- if @access.cancan? -%>
17
+ def require_login!(options={}, &block)
18
+ block ||= Proc.new {
19
+ authorize!(:secured, :all)
20
+ authorize!(:anything, :all)
21
+ }
22
+ before_action(options, &block)
23
+ define_method(:begin_of_association_chain) { current_user }
24
+ end
25
+ <%- end -%>
26
+ end
27
+
28
+ protected
29
+
30
+ def current_user
31
+ return @user if @user
32
+ return nil unless header_token.present?
33
+ @user = user_application.try(:user)
34
+ end
35
+
36
+ def current_ability
37
+ @current_ability ||= <%= class_name %>::Ability.new(current_user)
38
+ end
39
+
40
+ def user_application
41
+ UserApplication.find_by!(token: header_token)
42
+ rescue ActiveRecord::RecordNotFound
43
+ nil
44
+ end
45
+
46
+ def sign_in(user_identity)
47
+ if user_identity.valid? && user_identity.user
48
+ @user = user_identity.user
49
+ end
50
+ end
51
+
52
+ def signed_in?
53
+ current_user.present?
54
+ end
55
+
56
+ def header_key
57
+ settings.header_key
58
+ end
59
+
60
+ def header_token
61
+ request.headers[header_key] || params[header_key]
62
+ end
63
+
64
+ def current_config
65
+ @current_config ||= ::Settings.default_user_config
66
+ end
67
+
68
+ end
69
+ end
@@ -0,0 +1,75 @@
1
+ module <%= class_name %>
2
+ module CurrentIdentity
3
+ extend ActiveSupport::Concern
4
+ HELPER_METHODS = [
5
+ :url_after_create,
6
+ :url_after_destroy,
7
+ :url_after_confirmation,
8
+ :provider_provided?,
9
+ :current_ability,
10
+ :current_config,
11
+ :current_user,
12
+ :signed_in?,
13
+ :user_active?,
14
+ :signed_out?
15
+ ]
16
+
17
+ included do
18
+ helper_method(*HELPER_METHODS)
19
+
20
+ rescue_from CanCan::AccessDenied do |exception|
21
+ redirect_to main_app.root_url, :alert => exception.message
22
+ end
23
+
24
+ end
25
+
26
+ def sign_out
27
+ session[:sign_out] = true
28
+ end
29
+
30
+ def provider_provided?(provider)
31
+ signed_in? && current_user.user_identities.provider_exists?(provider)
32
+ end
33
+
34
+ def current_ability
35
+ @current_ability ||= <%= class_name %>::Ability.new(current_user)
36
+ end
37
+
38
+ def current_config
39
+ @current_config ||= ::Settings.default_user_config
40
+ end
41
+
42
+ def current_user
43
+ authenticator['current_user']
44
+ end
45
+
46
+ def signed_in?
47
+ authenticator['signed_in?']
48
+ end
49
+
50
+ def user_active?
51
+ authenticator['user_active?']
52
+ end
53
+
54
+ def signed_out?
55
+ authenticator['signed_out?']
56
+ end
57
+
58
+ def url_after_create
59
+ auth_in_url
60
+ end
61
+
62
+ def url_after_destroy
63
+ root_url
64
+ end
65
+
66
+ def url_after_confirmation
67
+ root_url
68
+ end
69
+
70
+ private def authenticator
71
+ @authenticator ||= request.env.fetch('authenticator', {})
72
+ end
73
+
74
+ end
75
+ end
@@ -0,0 +1,25 @@
1
+ module <%= class_name %>
2
+ class AuthorizationsController < ::<%= class_name %>Controller
3
+
4
+ def index
5
+ end
6
+
7
+ def create
8
+ user_identity = UserIdentity.find_or_create_with_omniauth(permitted_params, current_user)
9
+ if signed_in?
10
+ @app = user_application
11
+ else
12
+ sign_in user_identity
13
+ render 'failure' and return unless signed_in?
14
+ @app = current_user.user_applications.create
15
+ end
16
+ end
17
+
18
+ protected
19
+
20
+ def permitted_params
21
+ params
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,12 @@
1
+ module <%= class_name %>
2
+ class PingController < ::<%= class_name %>Controller
3
+ require_login!(only: :secured)
4
+
5
+ def index
6
+ end
7
+
8
+ def secured
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ module <%= class_name %>
2
+ class ProfilesController < ::<%= class_name %>Controller
3
+ require_login!
4
+ before_filter(only: :show) { authorize!(:read, resource) }
5
+ before_filter(only: :update) { authorize!(:update, resource) }
6
+
7
+ unobtrusive resource_class: User,
8
+ resource: -> { current_user },
9
+ relationship_name: :users
10
+ def show
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,35 @@
1
+ module <%= class_name %>
2
+ class ProjectsController < ::<%= class_name %>Controller
3
+ require_login!
4
+ before_filter(only: :show) { authorize!(:read, resource) }
5
+ before_filter(only: :update) { authorize!(:update, resource) }
6
+ before_filter(only: :index) { authorize!(:read, resource_class) }
7
+ before_filter(only: :create) { authorize!(:create, resource_class) }
8
+
9
+ unobtrusive finder_method: :find_by_slug!,
10
+ resource_class: Project,
11
+ relationship_name: :projects,
12
+ permitted_params_key: :project,
13
+ permitted_params_create_value: [:name],
14
+ permitted_params_update_value: [:name]
15
+ paginate!
16
+
17
+ def index
18
+ end
19
+
20
+ def show
21
+ end
22
+
23
+ def create
24
+ build_resource
25
+ update_resource
26
+ respond_with resource
27
+ end
28
+
29
+ def update
30
+ update_resource
31
+ respond_with resource
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,14 @@
1
+ module <%= class_name %>
2
+ class UserIdentitiesController < ::<%= class_name %>Controller
3
+ require_login!
4
+
5
+ unobtrusive resource_class: UserIdentity,
6
+ relationship_name: :user_identities
7
+
8
+ def destroy
9
+ destroy_resource
10
+ respond_with resource
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,93 @@
1
+ module <%= class_name %>
2
+ class ApplicationController < ::ApplicationController
3
+ include ::Susanin
4
+ include ::MuteAction
5
+ include ::StateMachineAbilities
6
+ include ::Paginator
7
+ <%- if @kind.api? -%>
8
+ include ::<%= class_name %>::CurrentIdentity
9
+ <%- end -%>
10
+ <%- unless @access.cancan? -%>
11
+ include ::MockAuthorization
12
+ <%- end -%>
13
+ <%- if @access.cancan? -%>
14
+ include CanCan::ControllerAdditions
15
+ include <%= class_name %>::CurrentIdentity
16
+
17
+ <%- end -%>
18
+ meta_for(:title, :suffix, Settings.application.name)
19
+
20
+ <%- if @kind.api? -%>
21
+ respond_to :json
22
+ self.responder = <%= class_name %>::ApiResponder
23
+
24
+ <%- end -%>
25
+ susanin do
26
+ [
27
+ # [:root, ->(r) { [(signed_in? ? :client : :public), r] }]
28
+ ]
29
+ end
30
+
31
+ <%- if @access.cancan? && @begin_chain -%>
32
+ before_filter :authorize_<%= @begin_chain -%>!
33
+
34
+ <%- end -%>
35
+ <%- if @begin_chain -%>
36
+ helper_method :<%= @begin_chain -%>
37
+
38
+ <%- end -%>
39
+ <%- if @kind.api? -%>
40
+ rescue_from ActiveRecord::RecordNotFound do |exception|
41
+ render json: { error: exception.message }, status: 404
42
+ end
43
+
44
+ rescue_from ParamsConverter::ParamsConverterError do |exception|
45
+ render json: { error: exception.message }, status: 401
46
+ end
47
+
48
+ <%- end -%>
49
+ <%- if @access.cancan? -%>
50
+ check_authorization
51
+ rescue_from CanCan::AccessDenied do |exception|
52
+ redirect_to main_app.root_url, :alert => exception.message
53
+ end
54
+
55
+ <%- end -%>
56
+ <%- if @access.http? -%>
57
+ http_basic_authenticate_with name: Settings.admin.name, password: Settings.admin.password
58
+
59
+ <%- end -%>
60
+ protected
61
+
62
+ <%- if @begin_chain -%>
63
+ def title_prefix
64
+ <%= @begin_chain -%>.name
65
+ end
66
+
67
+ <%- end -%>
68
+ <%- if @begin_chain -%>
69
+ def <%= @begin_chain %>
70
+ @<%= @begin_chain %> ||= current_user.try(:company)
71
+ end
72
+
73
+ <%- end -%>
74
+ <%- if @begin_chain -%>
75
+ def begin_of_association_chain
76
+ <%= @begin_chain %>
77
+ end
78
+
79
+ <%- end -%>
80
+ <%- if @begin_chain -%>
81
+ def current_ability
82
+ @current_ability ||= <%= class_name %>::Ability.new(current_user, <%= @begin_chain -%>)
83
+ end
84
+
85
+ <%- end -%>
86
+ <%- if @access.cancan? && @begin_chain -%>
87
+ def authorize_<%= @begin_chain %>!
88
+ authorize! :login, <%= @begin_chain %>
89
+ end
90
+
91
+ <%- end -%>
92
+ end
93
+ end
@@ -0,0 +1 @@
1
+ <%= class_name %>Controller = <%= class_name %>::ApplicationController
@@ -0,0 +1,11 @@
1
+ module <%= class_name %>
2
+ class HomeController < ::<%= class_name %>Controller
3
+ meta_for(:title) { I18n.t('<%= singular_name %>.home.title') }
4
+
5
+ def index
6
+ <%- if @access.cancan? -%>
7
+ authorize! :show, :client_home
8
+ <%- end -%>
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ module <%= class_name %>
2
+ class ApplicationDrapper < Glipper::Base
3
+ decorates ActiveRecord::Base
4
+
5
+ class << self
6
+ def engine_root
7
+ <%= class_name %>::Engine.root
8
+ end
9
+
10
+ def root_classes
11
+ [ActiveRecord::Base, ActiveRecord::Relation, Array]
12
+ end
13
+ end
14
+
15
+ include <%= class_name %>::DisplayNameGlipper
16
+ include <%= class_name %>::TypeGlipper
17
+ include <%= class_name %>::ImageGlipper
18
+ include <%= class_name %>::TimestampGlipper
19
+
20
+ def decorate(another_resource)
21
+ <%= class_name %>::ApplicationDrapper.decorate(another_resource, self.helpers)
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,32 @@
1
+ module <%= class_name %>
2
+ module DisplayNameGlipper
3
+ extend ActiveSupport::Concern
4
+
5
+ def blank_display_name
6
+ self.blank_display_name_backward
7
+ end
8
+
9
+ def blank_display_name_backward
10
+ self.blank_display_name_assumption ? resource.public_send(self.blank_display_name_assumption) : self.blank_display_name_default
11
+ end
12
+
13
+ def blank_display_name_assumptions
14
+ %w{full_name name title subject}
15
+ end
16
+
17
+ def blank_display_name_assumption
18
+ Array.wrap(self.blank_display_name_assumptions).find do |method_name|
19
+ resource.respond_to?(method_name) && resource.public_send(method_name).presence
20
+ end
21
+ end
22
+
23
+ def blank_display_name_default
24
+ o.id ? "#{resource.class.model_name.human} #{resource.id}" : "New #{resource.class.model_name.human}"
25
+ end
26
+
27
+ def display_name(options={})
28
+ self.blank_display_name
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,21 @@
1
+ module <%= class_name %>
2
+ module TimestampGlipper
3
+
4
+ def timestamp(field=:created_at, format=:default, config=Veil.config)
5
+ h.content_tag :span, get_date(field),
6
+ data: { :toggle => "tooltip", :placement => "top", :timestamp => get_date(field), 'timestamp-format' => timestamp_format(field, format) },
7
+ class: 'timestamp',
8
+ title: get_date(field)
9
+ end
10
+
11
+ # possible values: fromNow, default
12
+ private def timestamp_format(field, format)
13
+ format
14
+ end
15
+
16
+ private def get_date(field)
17
+ o.public_send(field).try(:iso8601) || '-'
18
+ end
19
+
20
+ end
21
+ end