resty-generators 0.2.0 → 0.3.0
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.
- data/lib/generators/resty/base.rb +33 -5
- data/lib/generators/resty/controller/controller_generator.rb +2 -2
- data/lib/generators/resty/model/model_generator.rb +1 -1
- data/lib/generators/resty/scaffold/scaffold_generator.rb +76 -4
- data/lib/generators/resty/setup/setup_generator.rb +141 -4
- data/lib/generators/resty/setup/templates/ActivityFactory.java +12 -0
- data/lib/generators/resty/setup/templates/ActivityPlace.java +25 -0
- data/lib/generators/resty/setup/templates/ActivityPlaceActivityMapper.java +30 -0
- data/lib/generators/resty/setup/templates/BreadCrumbsPanel.java +80 -0
- data/lib/generators/resty/setup/templates/EntryPoint.java +75 -4
- data/lib/generators/resty/setup/templates/GinModule.java +40 -0
- data/lib/generators/resty/setup/templates/LoginActivity.java +59 -0
- data/lib/generators/resty/setup/templates/LoginPlace.java +20 -0
- data/lib/generators/resty/setup/templates/LoginView.ui.xml +18 -0
- data/lib/generators/resty/setup/templates/LoginViewImpl.java +21 -0
- data/lib/generators/resty/setup/templates/Mavenfile +7 -4
- data/lib/generators/resty/setup/templates/PlaceHistoryMapper.java +8 -0
- data/lib/generators/resty/setup/templates/RestfulPlace.java +24 -0
- data/lib/generators/resty/setup/templates/SessionActivityPlaceActivityMapper.java +71 -0
- data/lib/generators/resty/setup/templates/SessionRestService.java +23 -0
- data/lib/generators/resty/setup/templates/User.java +8 -0
- data/lib/generators/resty/setup/templates/authentication.rb +3 -0
- data/lib/generators/resty/setup/templates/empty.css +17 -0
- data/lib/generators/resty/setup/templates/gitignore +3 -0
- data/lib/generators/resty/setup/templates/group.rb +14 -0
- data/lib/generators/resty/setup/templates/gwt.css +17 -0
- data/lib/generators/resty/setup/templates/module.gwt.xml +9 -2
- data/lib/generators/resty/setup/templates/page.html +1 -1
- data/lib/generators/resty/setup/templates/session.rb +45 -0
- data/lib/generators/resty/setup/templates/sessions_controller.rb +29 -0
- data/lib/generators/resty/setup/templates/user.rb +28 -0
- data/lib/generators/resty/setup/templates/web.xml +50 -0
- data/lib/generators/resty/templates/Activity.java +140 -0
- data/lib/generators/resty/templates/ColumnDefinitionsImpl.java +24 -0
- data/lib/generators/resty/templates/Model.java +13 -7
- data/lib/generators/resty/templates/Place.java +27 -0
- data/lib/generators/resty/templates/PlaceTokenizer.java +25 -0
- data/lib/generators/resty/templates/{Controller.java → RestService.java} +16 -12
- data/lib/generators/resty/templates/View.java +35 -0
- data/lib/generators/resty/templates/View.ui.xml +47 -0
- data/lib/generators/resty/templates/ViewImpl.java +196 -0
- data/lib/resty-generators.rb +1 -0
- data/lib/resty/child_path.rb +17 -4
- data/lib/resty/resty_railtie.rb +4 -5
- metadata +70 -60
@@ -0,0 +1,17 @@
|
|
1
|
+
.notice
|
2
|
+
{
|
3
|
+
background-color:lightgoldenRodYellow;
|
4
|
+
border:1px solid darkgoldenrod;
|
5
|
+
color:darkgoldenrod;
|
6
|
+
margin-left:35%;
|
7
|
+
margin-right:35%;
|
8
|
+
padding-left:5%;
|
9
|
+
width:30%;
|
10
|
+
padding-right:5%;
|
11
|
+
padding-top:.5em;
|
12
|
+
padding-bottom:.5em;
|
13
|
+
overflow:auto;;
|
14
|
+
position:absolute;
|
15
|
+
top:3em;
|
16
|
+
opacity:.9;
|
17
|
+
}
|
@@ -1,9 +1,16 @@
|
|
1
1
|
<module rename-to='<%= application_name.underscore %>'>
|
2
|
-
|
2
|
+
|
3
3
|
<inherits name='com.google.gwt.user.User' />
|
4
|
+
<inherits name="com.google.gwt.activity.Activity"/>
|
5
|
+
<inherits name="com.google.gwt.place.Place"/>
|
6
|
+
|
7
|
+
<inherits name="com.google.gwt.inject.Inject"/>
|
8
|
+
|
4
9
|
<inherits name="org.fusesource.restygwt.RestyGWT" />
|
5
10
|
|
6
|
-
<
|
11
|
+
<inherits name="de.mkristian.gwt.RailsGWT" />
|
12
|
+
|
13
|
+
<entry-point class='<%= base_package %>.<%= application_name %>EntryPoint' />
|
7
14
|
|
8
15
|
<stylesheet src='../stylesheets/<%= application_name.underscore %>.css' />
|
9
16
|
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class Session
|
2
|
+
include ActiveModel::Serializers::JSON
|
3
|
+
include ActiveModel::Serializers::Xml
|
4
|
+
|
5
|
+
attr_accessor :permissions, :user
|
6
|
+
|
7
|
+
def self.create(params = {})
|
8
|
+
if Rails.application.config.respond_to? :remote_sso_url
|
9
|
+
begin
|
10
|
+
a = Authentication.create(:login => params[:login],
|
11
|
+
:password => params[:password])
|
12
|
+
result = new
|
13
|
+
user = User.new
|
14
|
+
user.login = a.login
|
15
|
+
user.name = a.name
|
16
|
+
user.groups = a.groups
|
17
|
+
result.user = user
|
18
|
+
result
|
19
|
+
rescue ActiveResource::ResourceNotFound
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
else
|
23
|
+
user = User.authenticate(params[:login], params[:password])
|
24
|
+
if user
|
25
|
+
result = new
|
26
|
+
result.user = user
|
27
|
+
result
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def idle_session_timeout
|
33
|
+
Rails.application.config.idle_session_timeout
|
34
|
+
end
|
35
|
+
|
36
|
+
def attributes
|
37
|
+
{'idle_session_timeout' => idle_session_timeout, 'permissions' => permissions, 'user' => user}
|
38
|
+
end
|
39
|
+
|
40
|
+
def id
|
41
|
+
""
|
42
|
+
end
|
43
|
+
end
|
44
|
+
Session.include_root_in_json = false
|
45
|
+
Session
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class SessionsController < ApplicationController
|
2
|
+
|
3
|
+
skip_before_filter :authorization
|
4
|
+
|
5
|
+
prepend_after_filter :reset_session, :only => :destroy
|
6
|
+
|
7
|
+
public
|
8
|
+
|
9
|
+
def create
|
10
|
+
@session = Session.create(params[:session])
|
11
|
+
|
12
|
+
if @session
|
13
|
+
current_user @session.user
|
14
|
+
@session.permissions = guard.permissions(self)
|
15
|
+
|
16
|
+
# TODO make all formats available
|
17
|
+
# TODO make html login
|
18
|
+
render :json => @session.to_json(:excludes => :groups)
|
19
|
+
else
|
20
|
+
head :not_found
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def destroy
|
25
|
+
# reset session happens in the after filter which allows for
|
26
|
+
# audit log with username which happens in another after filter
|
27
|
+
head :ok
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class User
|
2
|
+
include ActiveModel::Serializers::JSON
|
3
|
+
include ActiveModel::Serializers::Xml
|
4
|
+
|
5
|
+
attr_accessor :login, :name, :groups
|
6
|
+
|
7
|
+
def attributes
|
8
|
+
{'login' => login, 'name' => name, 'groups' => groups.collect { |g| g.attributes } }
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(attributes = {})
|
12
|
+
@login = attributes['login']
|
13
|
+
@name = attributes['name']
|
14
|
+
@groups = (attributes['groups'] || []).collect {|g| Group.new g }
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.authenticate(login, password)
|
18
|
+
if login.size > 0 && password == "behappy"
|
19
|
+
u = User.new
|
20
|
+
u.login = login
|
21
|
+
u.name = login.humanize
|
22
|
+
u.groups = [Group.new('name' => login)]
|
23
|
+
u
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
User.include_root_in_json = false
|
28
|
+
User
|
@@ -0,0 +1,50 @@
|
|
1
|
+
<!DOCTYPE web-app PUBLIC
|
2
|
+
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
|
3
|
+
"http://java.sun.com/dtd/web-app_2_3.dtd">
|
4
|
+
<web-app>
|
5
|
+
<welcome-file-list>
|
6
|
+
<welcome-file>/<%= application_name %>/<%= application_name %>.html</welcome-file>
|
7
|
+
</welcome-file-list>
|
8
|
+
|
9
|
+
<context-param>
|
10
|
+
<param-name>jruby.max.runtimes</param-name>
|
11
|
+
<param-value>1</param-value>
|
12
|
+
</context-param>
|
13
|
+
<context-param>
|
14
|
+
<param-name>jruby.min.runtimes</param-name>
|
15
|
+
<param-value>1</param-value>
|
16
|
+
</context-param>
|
17
|
+
<context-param>
|
18
|
+
<param-name>rails.root</param-name>
|
19
|
+
<param-value>.</param-value>
|
20
|
+
</context-param>
|
21
|
+
<context-param>
|
22
|
+
<param-name>gem.path</param-name>
|
23
|
+
<param-value>./target/rubygems</param-value>
|
24
|
+
</context-param>
|
25
|
+
<context-param>
|
26
|
+
<param-name>rails.env</param-name>
|
27
|
+
<param-value>development</param-value>
|
28
|
+
</context-param>
|
29
|
+
<context-param>
|
30
|
+
<param-name>jruby.rack.logging</param-name>
|
31
|
+
<param-value>stdout</param-value>
|
32
|
+
</context-param>
|
33
|
+
<context-param>
|
34
|
+
<param-name>jruby.rack.layout_class</param-name>
|
35
|
+
<param-value>JRuby::Rack::RailsFilesystemLayout</param-value>
|
36
|
+
</context-param>
|
37
|
+
|
38
|
+
<filter>
|
39
|
+
<filter-name>RackFilter</filter-name>
|
40
|
+
<filter-class>org.jruby.rack.RackFilter</filter-class>
|
41
|
+
</filter>
|
42
|
+
<filter-mapping>
|
43
|
+
<filter-name>RackFilter</filter-name>
|
44
|
+
<url-pattern>/*</url-pattern>
|
45
|
+
</filter-mapping>
|
46
|
+
|
47
|
+
<listener>
|
48
|
+
<listener-class>org.jruby.rack.rails.RailsServletContextListener</listener-class>
|
49
|
+
</listener>
|
50
|
+
</web-app>
|
@@ -0,0 +1,140 @@
|
|
1
|
+
package <%= activities_package %>;
|
2
|
+
|
3
|
+
|
4
|
+
import <%= models_package %>.<%= class_name %>;
|
5
|
+
import <%= places_package %>.<%= class_name %>Place;
|
6
|
+
import <%= restservices_package %>.<%= class_name.pluralize %>RestService;
|
7
|
+
import <%= views_package %>.<%= class_name %>View;
|
8
|
+
|
9
|
+
import <%= gwt_rails_package %>.Notice;
|
10
|
+
import <%= gwt_rails_package %>.RestfulActionEnum;
|
11
|
+
|
12
|
+
import org.fusesource.restygwt.client.Method;
|
13
|
+
import org.fusesource.restygwt.client.MethodCallback;
|
14
|
+
|
15
|
+
import com.google.gwt.activity.shared.AbstractActivity;
|
16
|
+
import com.google.gwt.event.shared.EventBus;
|
17
|
+
import com.google.gwt.place.shared.Place;
|
18
|
+
import com.google.gwt.place.shared.PlaceController;
|
19
|
+
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
20
|
+
import com.google.inject.Inject;
|
21
|
+
import com.google.inject.assistedinject.Assisted;
|
22
|
+
|
23
|
+
public class <%= class_name %>Activity extends AbstractActivity implements <%= class_name %>View.Presenter{
|
24
|
+
|
25
|
+
private final <%= class_name %>Place place;
|
26
|
+
private final <%= class_name.pluralize %>RestService service;
|
27
|
+
private final Notice notice;
|
28
|
+
private final PlaceController placeController;
|
29
|
+
private final <%= class_name %>View view;
|
30
|
+
|
31
|
+
@Inject
|
32
|
+
public <%= class_name %>Activity(@Assisted <%= class_name %>Place place, Notice notice, <%= class_name %>View view,
|
33
|
+
<%= class_name.pluralize %>RestService service, PlaceController placeController) {
|
34
|
+
this.place = place;
|
35
|
+
this.notice = notice;
|
36
|
+
this.view = view;
|
37
|
+
this.service = service;
|
38
|
+
this.placeController = placeController;
|
39
|
+
}
|
40
|
+
|
41
|
+
public void start(AcceptsOneWidget display, EventBus eventBus) {
|
42
|
+
display.setWidget(view.asWidget());
|
43
|
+
view.setPresenter(this);
|
44
|
+
<% if options[:singleton] -%>
|
45
|
+
load();
|
46
|
+
<% else -%>
|
47
|
+
switch(RestfulActionEnum.valueOf(place.action.name())){
|
48
|
+
case EDIT:
|
49
|
+
case SHOW:
|
50
|
+
load(place.id);
|
51
|
+
break;
|
52
|
+
case INDEX:
|
53
|
+
//TODO
|
54
|
+
default:
|
55
|
+
case NEW:
|
56
|
+
notice.setText(null);
|
57
|
+
view.reset(new <%= class_name %>());
|
58
|
+
break;
|
59
|
+
}
|
60
|
+
<% end -%>
|
61
|
+
view.reset(place.action);
|
62
|
+
}
|
63
|
+
|
64
|
+
public void goTo(Place place) {
|
65
|
+
placeController.goTo(place);
|
66
|
+
}
|
67
|
+
|
68
|
+
public void load(<% unless options[:singleton] -%>int id<% end -%>) {
|
69
|
+
view.setEnabled(false);
|
70
|
+
service.show(<% unless options[:singleton] -%>id, <% end -%>new MethodCallback<<%= class_name %>>() {
|
71
|
+
|
72
|
+
public void onFailure(Method method, Throwable exception) {
|
73
|
+
notice.setText("error loading <%= class_name.humanize %>: "
|
74
|
+
+ exception.getMessage());
|
75
|
+
}
|
76
|
+
|
77
|
+
public void onSuccess(Method method, <%= class_name %> response) {
|
78
|
+
view.reset(response);
|
79
|
+
notice.setText(null);
|
80
|
+
view.reset(place.action);
|
81
|
+
}
|
82
|
+
});
|
83
|
+
if(!notice.isVisible()){
|
84
|
+
notice.setText("loading <%= class_name.humanize %> . . .");
|
85
|
+
}
|
86
|
+
}
|
87
|
+
<% unless options[:singleton] -%>
|
88
|
+
public void create() {
|
89
|
+
<%= class_name %> model = view.retrieve<%= class_name %>();
|
90
|
+
view.setEnabled(false);
|
91
|
+
service.create(model, new MethodCallback<<%= class_name %>>() {
|
92
|
+
|
93
|
+
public void onFailure(Method method, Throwable exception) {
|
94
|
+
notice.setText("error creating <%= class_name.humanize %>: "
|
95
|
+
+ exception.getMessage());
|
96
|
+
}
|
97
|
+
|
98
|
+
public void onSuccess(Method method, <%= class_name %> response) {
|
99
|
+
goTo(new <%= class_name %>Place(response.id,
|
100
|
+
RestfulActionEnum.EDIT));
|
101
|
+
}
|
102
|
+
});
|
103
|
+
notice.setText("creating <%= class_name.humanize %> . . .");
|
104
|
+
}
|
105
|
+
|
106
|
+
public void delete() {
|
107
|
+
<%= class_name %> model = view.retrieve<%= class_name %>();
|
108
|
+
view.setEnabled(false);
|
109
|
+
service.destroy(model, new MethodCallback<Void>() {
|
110
|
+
|
111
|
+
public void onFailure(Method method, Throwable exception) {
|
112
|
+
notice.setText("error deleting <%= class_name.humanize %>: "
|
113
|
+
+ exception.getMessage());
|
114
|
+
}
|
115
|
+
|
116
|
+
public void onSuccess(Method method, Void response) {
|
117
|
+
goTo(new <%= class_name %>Place(RestfulActionEnum.INDEX));
|
118
|
+
}
|
119
|
+
});
|
120
|
+
notice.setText("deleting <%= class_name.humanize %> . . .");
|
121
|
+
}
|
122
|
+
<% end -%>
|
123
|
+
public void save() {
|
124
|
+
<%= class_name %> model = view.retrieve<%= class_name %>();
|
125
|
+
view.setEnabled(false);
|
126
|
+
service.update(model, new MethodCallback<<%= class_name %>>() {
|
127
|
+
|
128
|
+
public void onFailure(Method method, Throwable exception) {
|
129
|
+
notice.setText("error loading <%= class_name.humanize %>: "
|
130
|
+
+ exception.getMessage());
|
131
|
+
}
|
132
|
+
|
133
|
+
public void onSuccess(Method method, <%= class_name %> response) {
|
134
|
+
goTo(new <%= class_name %>Place(<% unless options[:singleton] -%>response.id,
|
135
|
+
<% end -%>RestfulActionEnum.EDIT));
|
136
|
+
}
|
137
|
+
});
|
138
|
+
notice.setText("saving <%= class_name.humanize %> . . .");
|
139
|
+
}
|
140
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
package <%= views_package %>;
|
2
|
+
|
3
|
+
import java.util.ArrayList;
|
4
|
+
|
5
|
+
import <%= gwt_rails_package %>.ColumnDefinition;
|
6
|
+
import <%= models_package %>.<%= class_name %>;
|
7
|
+
|
8
|
+
@SuppressWarnings("serial")
|
9
|
+
public class <%= class_name.pluralize %>ColumnDefinitionsImpl extends
|
10
|
+
ArrayList<ColumnDefinition<<%= class_name %>>> {
|
11
|
+
|
12
|
+
protected <%= class_name.pluralize %>ColumnDefinitionsImpl() {
|
13
|
+
|
14
|
+
this.add(new ColumnDefinition<<%= class_name %>>() {
|
15
|
+
public void render(<%= class_name %> c, StringBuilder sb) {
|
16
|
+
sb.append("<div id='" + c.id + "'>" + "TODO" + "</div>");
|
17
|
+
}
|
18
|
+
|
19
|
+
public boolean isClickable() {
|
20
|
+
return true;
|
21
|
+
}
|
22
|
+
});
|
23
|
+
}
|
24
|
+
}
|
@@ -1,23 +1,29 @@
|
|
1
|
-
package <%=
|
1
|
+
package <%= models_package %>;
|
2
|
+
|
3
|
+
<% if options[:timestamps] %>
|
4
|
+
import java.util.Date;
|
5
|
+
<% end -%>
|
2
6
|
|
3
7
|
public class <%= class_name %> {
|
4
8
|
|
9
|
+
<% unless options[:singleton] -%>
|
10
|
+
public int id;
|
11
|
+
|
12
|
+
<% end -%>
|
5
13
|
<% for attribute in attributes -%>
|
6
14
|
<% if attribute.type == :has_one -%>
|
7
15
|
<%= attribute.name.classify %> <%= attribute.name %>;
|
8
16
|
<% elsif attribute.type == :has_many -%>
|
9
17
|
public java.util.List<<%= attribute.name.classify %>> <%= attribute.name %>;
|
10
18
|
<% else -%>
|
11
|
-
public <%= type_map[attribute.type] || attribute.type.to_s.classify %> <%= attribute.name.classify.sub(/^(.)/){ $1
|
19
|
+
public <%= type_map[attribute.type] || attribute.type.to_s.classify %> <%= attribute.name.classify.underscore.sub(/^(.)/){ $1 } %>;
|
12
20
|
<% end -%>
|
13
|
-
|
14
21
|
<% end -%>
|
15
22
|
<% if options[:timestamps] %>
|
16
|
-
|
17
|
-
|
23
|
+
public Date created_at;
|
24
|
+
public Date updated_at;
|
18
25
|
<% end -%>
|
19
26
|
<% if options[:modified_by] %>
|
20
|
-
|
21
|
-
|
27
|
+
public options[:modified_by].classify.underscore modified_by
|
22
28
|
<% end -%>
|
23
29
|
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
package <%= places_package %>;
|
2
|
+
|
3
|
+
import <%= gwt_rails_package %>.RestfulAction;
|
4
|
+
|
5
|
+
import <%= managed_package %>.ActivityFactory;
|
6
|
+
import <%= base_package %>.ActivityPlace;
|
7
|
+
|
8
|
+
import com.google.gwt.activity.shared.Activity;
|
9
|
+
|
10
|
+
public class <%= class_name %>Place extends ActivityPlace {
|
11
|
+
|
12
|
+
public Activity create(ActivityFactory factory){
|
13
|
+
return factory.create(this);
|
14
|
+
}
|
15
|
+
|
16
|
+
public <%= class_name %>Place(RestfulAction restfulAction) {
|
17
|
+
super(restfulAction);
|
18
|
+
}
|
19
|
+
|
20
|
+
public <%= class_name %>Place(int id, RestfulAction restfulAction) {
|
21
|
+
super(id, restfulAction);
|
22
|
+
}
|
23
|
+
|
24
|
+
public <%= class_name %>Place(String id, RestfulAction restfulAction) {
|
25
|
+
super(id, restfulAction);
|
26
|
+
}
|
27
|
+
}
|