sws 0.4
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/doc/DOC.otl +34 -0
- data/doc/Makefile +13 -0
- data/doc/architecture.dia +0 -0
- data/doc/docbook/architecture.png +0 -0
- data/doc/docbook/concepts.docbook +474 -0
- data/doc/docbook/installation.docbook +57 -0
- data/doc/docbook/introduction.docbook +130 -0
- data/doc/docbook/sws_manual.docbook +35 -0
- data/doc/docbook/todo.docbook +38 -0
- data/doc/docbook/tutorial.docbook +594 -0
- data/examples/README +1 -0
- data/examples/addressbook/CardBrowse/CardBrowse.html +43 -0
- data/examples/addressbook/CardBrowse/CardBrowse.rb +65 -0
- data/examples/addressbook/CardBrowse/CardBrowse.sws +92 -0
- data/examples/addressbook/Login/LoginPage.html +12 -0
- data/examples/addressbook/Login/LoginPage.rb +19 -0
- data/examples/addressbook/Login/LoginPage.sws +15 -0
- data/examples/addressbook/README +1 -0
- data/examples/addressbook/addressbook.rb +70 -0
- data/examples/addressbook/application.yaml +8 -0
- data/examples/addressbook/db.yaml +7 -0
- data/examples/component_demo/CheckBoxDemo/CheckBoxDemo.html +11 -0
- data/examples/component_demo/CheckBoxDemo/CheckBoxDemo.rb +21 -0
- data/examples/component_demo/CheckBoxDemo/CheckBoxDemo.sws +25 -0
- data/examples/component_demo/ComponentDemo.rb +21 -0
- data/examples/component_demo/ConditionalDemo/ConditionalDemo.html +18 -0
- data/examples/component_demo/ConditionalDemo/ConditionalDemo.rb +2 -0
- data/examples/component_demo/ConditionalDemo/ConditionalDemo.sws +22 -0
- data/examples/component_demo/FileUploadDemo/FileUploadDemo.html +10 -0
- data/examples/component_demo/FileUploadDemo/FileUploadDemo.rb +9 -0
- data/examples/component_demo/FileUploadDemo/FileUploadDemo.sws +33 -0
- data/examples/component_demo/FormFieldsDemo/FormFieldsDemo.html +12 -0
- data/examples/component_demo/FormFieldsDemo/FormFieldsDemo.rb +21 -0
- data/examples/component_demo/FormFieldsDemo/FormFieldsDemo.sws +40 -0
- data/examples/component_demo/FormListsDemo/FormListsDemo.html +11 -0
- data/examples/component_demo/FormListsDemo/FormListsDemo.rb +37 -0
- data/examples/component_demo/FormListsDemo/FormListsDemo.sws +47 -0
- data/examples/component_demo/GenericDemo/GenericDemo.html +4 -0
- data/examples/component_demo/GenericDemo/GenericDemo.rb +2 -0
- data/examples/component_demo/GenericDemo/GenericDemo.sws +10 -0
- data/examples/component_demo/HyperlinkDemo/HyperlinkDemo.html +8 -0
- data/examples/component_demo/HyperlinkDemo/HyperlinkDemo.rb +20 -0
- data/examples/component_demo/HyperlinkDemo/HyperlinkDemo.sws +19 -0
- data/examples/component_demo/ImageLinkDemo/ImageLinkDemo.html +11 -0
- data/examples/component_demo/ImageLinkDemo/ImageLinkDemo.rb +2 -0
- data/examples/component_demo/ImageLinkDemo/ImageLinkDemo.sws +14 -0
- data/examples/component_demo/PageWrapper/PageWrapper.html +23 -0
- data/examples/component_demo/PageWrapper/PageWrapper.rb +2 -0
- data/examples/component_demo/PageWrapper/PageWrapper.sws +42 -0
- data/examples/component_demo/README +1 -0
- data/examples/component_demo/RepetitionDemo/RepetitionDemo.html +13 -0
- data/examples/component_demo/RepetitionDemo/RepetitionDemo.rb +19 -0
- data/examples/component_demo/RepetitionDemo/RepetitionDemo.sws +20 -0
- data/examples/component_demo/StringDemo/StringDemo.html +5 -0
- data/examples/component_demo/StringDemo/StringDemo.rb +16 -0
- data/examples/component_demo/StringDemo/StringDemo.sws +14 -0
- data/examples/component_demo/application.yaml +28 -0
- data/examples/component_demo/poweredby.jpg +0 -0
- data/examples/component_demo/style.css +1 -0
- data/examples/movies/Menu/Menu.html +3 -0
- data/examples/movies/Menu/Menu.rb +7 -0
- data/examples/movies/Menu/Menu.sws +7 -0
- data/examples/movies/MovieBrowse/MovieBrowse.html +68 -0
- data/examples/movies/MovieBrowse/MovieBrowse.rb +178 -0
- data/examples/movies/MovieBrowse/MovieBrowse.sws +127 -0
- data/examples/movies/README +1 -0
- data/examples/movies/UserBrowse/UserBrowse.html +50 -0
- data/examples/movies/UserBrowse/UserBrowse.rb +69 -0
- data/examples/movies/UserBrowse/UserBrowse.sws +49 -0
- data/examples/movies/application.yaml +11 -0
- data/examples/movies/da.rb +36 -0
- data/examples/movies/dbmovies.rb +44 -0
- data/examples/movies/frameworks/TestFramework/framework.yaml +4 -0
- data/examples/movies/frameworks/TestFramework/resources/im1.jpg +0 -0
- data/examples/movies/images/pbr1b.jpg +0 -0
- data/examples/movies/movies.rb +28 -0
- data/examples/movies/movies.sds +119 -0
- data/examples/movies/movies.sqlite +0 -0
- data/examples/movies/movies_mysql.sql +28 -0
- data/examples/movies/movies_postgres.sql +27 -0
- data/examples/movies/movies_sqlite.sql +28 -0
- data/lib/sws.rb +89 -0
- data/lib/sws/Core/components/CheckBox/CheckBox.api +5 -0
- data/lib/sws/Core/components/CheckBox/CheckBox.rb +45 -0
- data/lib/sws/Core/components/CheckBoxList/CheckBoxList.api +13 -0
- data/lib/sws/Core/components/CheckBoxList/CheckBoxList.rb +54 -0
- data/lib/sws/Core/components/Conditional/Conditional.api +3 -0
- data/lib/sws/Core/components/Conditional/Conditional.html +1 -0
- data/lib/sws/Core/components/Conditional/Conditional.rb +39 -0
- data/lib/sws/Core/components/Conditional/Conditional.sws +2 -0
- data/lib/sws/Core/components/Content/Content.rb +18 -0
- data/lib/sws/Core/components/ExceptionPage/ExceptionPage.html +13 -0
- data/lib/sws/Core/components/ExceptionPage/ExceptionPage.rb +18 -0
- data/lib/sws/Core/components/ExceptionPage/ExceptionPage.sws +16 -0
- data/lib/sws/Core/components/FileUpload/FileUpload.api +16 -0
- data/lib/sws/Core/components/FileUpload/FileUpload.rb +62 -0
- data/lib/sws/Core/components/Form/Form.api +9 -0
- data/lib/sws/Core/components/Form/Form.html +3 -0
- data/lib/sws/Core/components/Form/Form.rb +55 -0
- data/lib/sws/Core/components/Form/Form.sws +12 -0
- data/lib/sws/Core/components/GenericContainer/GenericContainer.api +10 -0
- data/lib/sws/Core/components/GenericContainer/GenericContainer.html +1 -0
- data/lib/sws/Core/components/GenericContainer/GenericContainer.rb +39 -0
- data/lib/sws/Core/components/GenericContainer/GenericContainer.sws +12 -0
- data/lib/sws/Core/components/GenericElement/GenericElement.api +10 -0
- data/lib/sws/Core/components/GenericElement/GenericElement.rb +34 -0
- data/lib/sws/Core/components/HiddenField/HiddenField.api +7 -0
- data/lib/sws/Core/components/HiddenField/HiddenField.rb +37 -0
- data/lib/sws/Core/components/Hyperlink/Hyperlink.api +13 -0
- data/lib/sws/Core/components/Hyperlink/Hyperlink.html +1 -0
- data/lib/sws/Core/components/Hyperlink/Hyperlink.rb +102 -0
- data/lib/sws/Core/components/Hyperlink/Hyperlink.sws +12 -0
- data/lib/sws/Core/components/Image/Image.api +11 -0
- data/lib/sws/Core/components/Image/Image.rb +49 -0
- data/lib/sws/Core/components/ImageButton/ImageButton.api +16 -0
- data/lib/sws/Core/components/ImageButton/ImageButton.rb +76 -0
- data/lib/sws/Core/components/Link/Link.api +11 -0
- data/lib/sws/Core/components/Link/Link.rb +39 -0
- data/lib/sws/Core/components/PasswordField/PasswordField.api +7 -0
- data/lib/sws/Core/components/PasswordField/PasswordField.rb +41 -0
- data/lib/sws/Core/components/RadioButton/RadioButton.api +7 -0
- data/lib/sws/Core/components/RadioButton/RadioButton.rb +44 -0
- data/lib/sws/Core/components/RadioButtonList/RadioButtonList.api +20 -0
- data/lib/sws/Core/components/RadioButtonList/RadioButtonList.rb +76 -0
- data/lib/sws/Core/components/Repetition/Repetition.api +10 -0
- data/lib/sws/Core/components/Repetition/Repetition.html +1 -0
- data/lib/sws/Core/components/Repetition/Repetition.rb +137 -0
- data/lib/sws/Core/components/Repetition/Repetition.sws +2 -0
- data/lib/sws/Core/components/ResetButton/ResetButton.api +5 -0
- data/lib/sws/Core/components/ResetButton/ResetButton.rb +28 -0
- data/lib/sws/Core/components/Select/Select.api +24 -0
- data/lib/sws/Core/components/Select/Select.rb +57 -0
- data/lib/sws/Core/components/String/String.api +5 -0
- data/lib/sws/Core/components/String/String.rb +28 -0
- data/lib/sws/Core/components/SubmitButton/SubmitButton.api +6 -0
- data/lib/sws/Core/components/SubmitButton/SubmitButton.rb +53 -0
- data/lib/sws/Core/components/TextArea/TextArea.api +9 -0
- data/lib/sws/Core/components/TextArea/TextArea.rb +28 -0
- data/lib/sws/Core/components/TextField/TextField.api +9 -0
- data/lib/sws/Core/components/TextField/TextField.rb +46 -0
- data/lib/sws/Core/framework.yaml +25 -0
- data/lib/sws/JSComponents/components/JSMenu/JSMenu.api +5 -0
- data/lib/sws/JSComponents/components/JSMenu/JSMenu.html +58 -0
- data/lib/sws/JSComponents/components/JSMenu/JSMenu.rb +34 -0
- data/lib/sws/JSComponents/components/JSMenu/JSMenu.sws +37 -0
- data/lib/sws/JSComponents/framework.yaml +3 -0
- data/lib/sws/adaptor.rb +334 -0
- data/lib/sws/application.rb +604 -0
- data/lib/sws/component.rb +656 -0
- data/lib/sws/cookie.rb +27 -0
- data/lib/sws/direct_action.rb +38 -0
- data/lib/sws/extensions.rb +49 -0
- data/lib/sws/parsers.rb +374 -0
- data/lib/sws/request.rb +308 -0
- data/lib/sws/response.rb +70 -0
- data/lib/sws/session.rb +195 -0
- data/lib/sws/slot.rb +198 -0
- metadata +263 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Component = Struct.new( :name, :attributes )
|
|
2
|
+
Attribute = Struct.new( :name )
|
|
3
|
+
|
|
4
|
+
class RepetitionDemo < SWS::Component
|
|
5
|
+
|
|
6
|
+
attr_reader :components
|
|
7
|
+
attr_accessor :component_cursor, :attribute_cursor
|
|
8
|
+
|
|
9
|
+
def initialize ( *args )
|
|
10
|
+
|
|
11
|
+
super( *args )
|
|
12
|
+
@components = Array.new
|
|
13
|
+
@components << Component.new( "Repetition", [ Attribute.new( "list" ), Attribute.new( "item" )])
|
|
14
|
+
@components << Component.new( "TextField", [ Attribute.new( "value" ), Attribute.new( "name" )])
|
|
15
|
+
@components << Component.new( "String", [ Attribute.new( "value" ) ] )
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
component_repetition:
|
|
2
|
+
_class: SWS::Repetition
|
|
3
|
+
list: components
|
|
4
|
+
item: component_cursor
|
|
5
|
+
|
|
6
|
+
component_name_string:
|
|
7
|
+
_class: SWS::String
|
|
8
|
+
value: component_cursor.name
|
|
9
|
+
|
|
10
|
+
attribute_repetition:
|
|
11
|
+
_class: SWS::Repetition
|
|
12
|
+
list: component_cursor.attributes
|
|
13
|
+
item: attribute_cursor
|
|
14
|
+
|
|
15
|
+
attribute_name_textfield:
|
|
16
|
+
_class: SWS::TextField
|
|
17
|
+
value: attribute_cursor.name
|
|
18
|
+
|
|
19
|
+
page_wrapper:
|
|
20
|
+
_class: PageWrapper
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class StringDemo < SWS::Component
|
|
2
|
+
|
|
3
|
+
attr_reader :some_attribute
|
|
4
|
+
|
|
5
|
+
def initialize (*args)
|
|
6
|
+
|
|
7
|
+
super( *args )
|
|
8
|
+
@some_attribute = "This is a SWS::String created using component attribute"
|
|
9
|
+
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def some_method ()
|
|
13
|
+
return "This is a SWS::String created using return value of a method"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
page_wrapper:
|
|
2
|
+
_class: PageWrapper
|
|
3
|
+
|
|
4
|
+
literal_string:
|
|
5
|
+
_class: SWS::String
|
|
6
|
+
value: "'This is a SWS::String using literal string'"
|
|
7
|
+
|
|
8
|
+
attribute_string:
|
|
9
|
+
_class: SWS::String
|
|
10
|
+
value: some_attribute
|
|
11
|
+
|
|
12
|
+
method_string:
|
|
13
|
+
_class: SWS::String
|
|
14
|
+
value: some_method
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
components:
|
|
2
|
+
PageWrapper: PageWrapper
|
|
3
|
+
RepetitionDemo: RepetitionDemo
|
|
4
|
+
StringDemo: StringDemo
|
|
5
|
+
ConditionalDemo: ConditionalDemo
|
|
6
|
+
CheckBoxDemo: CheckBoxDemo
|
|
7
|
+
FormListsDemo: FormListsDemo
|
|
8
|
+
FileUploadDemo: FileUploadDemo
|
|
9
|
+
GenericDemo: GenericDemo
|
|
10
|
+
FormFieldsDemo: FormFieldsDemo
|
|
11
|
+
HyperlinkDemo: HyperlinkDemo
|
|
12
|
+
ImageLinkDemo: ImageLinkDemo
|
|
13
|
+
|
|
14
|
+
resources:
|
|
15
|
+
poweredby.jpg:
|
|
16
|
+
filename: poweredby.jpg
|
|
17
|
+
mime-type: image/jpg
|
|
18
|
+
style.css:
|
|
19
|
+
filename: style.css
|
|
20
|
+
mime-type: text/css
|
|
21
|
+
|
|
22
|
+
frameworks:
|
|
23
|
+
Core: SYSTEM/sws/Core
|
|
24
|
+
|
|
25
|
+
adaptor_class: SWS::Adaptor::Standalone
|
|
26
|
+
session_class: Session
|
|
27
|
+
default_component_class: StringDemo
|
|
28
|
+
default_encoding: iso-8859-2
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.bold { font-weight: bold }
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<html>
|
|
2
|
+
<head>
|
|
3
|
+
<title>Movie browsing</title>
|
|
4
|
+
</head>
|
|
5
|
+
<body>
|
|
6
|
+
<!-- Menu component -->
|
|
7
|
+
<span sws="menu">
|
|
8
|
+
<!-- Main table with movies displayed -->
|
|
9
|
+
<form sws="browse_form">
|
|
10
|
+
<table align="center" border="1">
|
|
11
|
+
<!-- header row with sorting links-->
|
|
12
|
+
<tr>
|
|
13
|
+
<th><a sws="link_sort_polish_title">Polish title</a></th>
|
|
14
|
+
<th><a sws="link_sort_english_title">English title</a></th>
|
|
15
|
+
<th><a sws="link_sort_cd_count">CD count</a></th>
|
|
16
|
+
<th><a sws="link_sort_description">Description</a></th>
|
|
17
|
+
<th>Rent movie</th>
|
|
18
|
+
<th>Actions</th>
|
|
19
|
+
</tr>
|
|
20
|
+
<!-- data row - wrapped in repetition, so it will be displayed multiple times -->
|
|
21
|
+
<span sws="movie_repetition">
|
|
22
|
+
<tr>
|
|
23
|
+
<td><span sws="cursor_polish_title"></span></td>
|
|
24
|
+
<td><span sws="cursor_english_title"></span></td>
|
|
25
|
+
<td><span sws="cursor_cd_count"></span></td>
|
|
26
|
+
<td><span sws="cursor_description"></span></td>
|
|
27
|
+
<td>
|
|
28
|
+
<span sws="conditional_rented">
|
|
29
|
+
<span sws="cursor_rental_state"></span>
|
|
30
|
+
</span>
|
|
31
|
+
<span sws="conditional_not_rented">
|
|
32
|
+
<select sws="select_rentee">
|
|
33
|
+
</span>
|
|
34
|
+
</td>
|
|
35
|
+
<td>
|
|
36
|
+
<span sws="conditional_rented2">
|
|
37
|
+
<input type="submit" sws="submit_return">
|
|
38
|
+
</span>
|
|
39
|
+
<span sws="conditional_not_rented2">
|
|
40
|
+
<input type="submit" sws="submit_rent">
|
|
41
|
+
</span>
|
|
42
|
+
<input type="submit" sws="submit_delete">
|
|
43
|
+
<input type="submit" sws="submit_edit">
|
|
44
|
+
</td>
|
|
45
|
+
</tr>
|
|
46
|
+
</span>
|
|
47
|
+
<tr><td colspan="6" align="center"><input type="submit" sws="submit_add"></td></tr>
|
|
48
|
+
</table>
|
|
49
|
+
|
|
50
|
+
</form>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
<!-- edit table - displayed only if current_movie is set -->
|
|
54
|
+
<span sws="conditional_current">
|
|
55
|
+
<form sws="edit_form">
|
|
56
|
+
<table align="center" border="1">
|
|
57
|
+
|
|
58
|
+
<tr><th>Polish title</th><td><input type="text" sws="current_polish_title"></td></tr>
|
|
59
|
+
<tr><th>English title</th><td><input type="text" sws="current_english_title"></td></tr>
|
|
60
|
+
<tr><th>CD count</th><td><input type="text" sws="current_cd_count"></td></tr>
|
|
61
|
+
<tr><th>Description</th><td><span sws="current_description"></td></tr>
|
|
62
|
+
<tr><th></th><td><input type="submit" sws="submit_confirm"></td></tr>
|
|
63
|
+
</table>
|
|
64
|
+
</form>
|
|
65
|
+
</span>
|
|
66
|
+
|
|
67
|
+
</body>
|
|
68
|
+
</html>
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# This component is a page displaying movies matching selected criteria.
|
|
2
|
+
# You can also perform some basic operations on the movies - edit, delete, new and rent.
|
|
3
|
+
class MovieBrowse < SWS::Component
|
|
4
|
+
|
|
5
|
+
attr_accessor :movies, :movie_cursor, :users, :user_cursor, :selected_users, :current_movie
|
|
6
|
+
|
|
7
|
+
# Constructor for component. SWS::Component constructor takes several arguments, so
|
|
8
|
+
# you should always call super with *args.
|
|
9
|
+
def initialize (*args)
|
|
10
|
+
|
|
11
|
+
super( *args )
|
|
12
|
+
|
|
13
|
+
# Create new context for store (defined in application class)
|
|
14
|
+
@context = SDS::Context.new( app().store )
|
|
15
|
+
|
|
16
|
+
# Fetch all users and movies into the context
|
|
17
|
+
qualifier = "id_movie > 100 or cd_count > 2 or polish_title LIKE 'film%'"
|
|
18
|
+
orders = [ ["cd_count", :asc], ["id_movie", :desc] ]
|
|
19
|
+
@movies = @context.fetch( "Movie", qualifier, orders )
|
|
20
|
+
@users = @context.fetch( "User" )
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# append_to_response is the method that actually renders HTML page after
|
|
26
|
+
# receiving the request and calling the appropiate method. In this case
|
|
27
|
+
# we just nullify @selected_user (so that in the select_rentee combo box
|
|
28
|
+
# the selected user is always the first one). Note the super must be called -
|
|
29
|
+
# otherwise no HTML will be rendered!
|
|
30
|
+
def append_to_response (response)
|
|
31
|
+
|
|
32
|
+
@selected_users = nil
|
|
33
|
+
super
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# Returns movie (completes the rental). Uses @movie_cursor - it is automatically
|
|
39
|
+
# set to the movie in the line where the user clicked the "Return" button. The method
|
|
40
|
+
# returns self, so the same component will serve the next request in this session.
|
|
41
|
+
def return_movie ()
|
|
42
|
+
|
|
43
|
+
puts "Returning movie #{@movie_cursor.english_title}"
|
|
44
|
+
rental = @movie_cursor.rentals.last
|
|
45
|
+
puts "Rental: #{rental.return_date}"
|
|
46
|
+
rental.return_date = Date.today()
|
|
47
|
+
puts "Rental: #{rental.return_date}"
|
|
48
|
+
@movie_cursor.rented = 0
|
|
49
|
+
@context.save()
|
|
50
|
+
return self
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
# Rents a movie. Takes @selected_movie (the movie in the line where the "Rent" button
|
|
56
|
+
# was clicked and @selected_user (the user selected in combo box). Returns self, so the
|
|
57
|
+
# same component will serve the next request in this session.
|
|
58
|
+
def rent_movie ()
|
|
59
|
+
|
|
60
|
+
puts "Renting movie #{@movie_cursor.english_title} to user #{@selected_users[0].name}"
|
|
61
|
+
rental = Rental.create( @context )
|
|
62
|
+
rental.add_object_to_relationship( "movie", @movie_cursor )
|
|
63
|
+
rental.add_object_to_relationship( "user", @selected_users[0] )
|
|
64
|
+
rental.rental_date = Date.today()
|
|
65
|
+
@movie_cursor.rented = 1
|
|
66
|
+
@context.save()
|
|
67
|
+
return self
|
|
68
|
+
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
# Deletes a movie. Returns self (for known reasons :)
|
|
73
|
+
def delete_movie ()
|
|
74
|
+
|
|
75
|
+
puts( "Deleting movie #{@movie_cursor}\n\n\n" )
|
|
76
|
+
@context.delete( @movie_cursor )
|
|
77
|
+
@movies.delete( @movie_cursor )
|
|
78
|
+
@context.save()
|
|
79
|
+
return self
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
# Schedules the movie for editing. Causes the HTML table with fields with attributes
|
|
85
|
+
# of this movie to appear near the bottom of the page.
|
|
86
|
+
def edit_movie ()
|
|
87
|
+
|
|
88
|
+
@current_movie = @movie_cursor
|
|
89
|
+
return self
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
# Creates new movie. Note that this movie is not immediately saved.
|
|
95
|
+
def add_movie ()
|
|
96
|
+
|
|
97
|
+
@current_movie = Movie.create( @context )
|
|
98
|
+
@current_movie.rented = 0
|
|
99
|
+
return self
|
|
100
|
+
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
# Sorts the movies according to polish_title
|
|
105
|
+
def sort_by_polish_title ()
|
|
106
|
+
|
|
107
|
+
@movies.sort! { |movie1,movie2| movie1.polish_title <=> movie2.polish_title }
|
|
108
|
+
return self
|
|
109
|
+
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
# Sorts the movies according to english_title
|
|
114
|
+
def sort_by_english_title ()
|
|
115
|
+
|
|
116
|
+
@movies.sort! { |movie1,movie2| movie1.english_title <=> movie2.english_title }
|
|
117
|
+
return self
|
|
118
|
+
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
# Sorts the movies according to cd_count
|
|
123
|
+
def sort_by_cd_count ()
|
|
124
|
+
|
|
125
|
+
@movies.sort! { |movie1,movie2| movie1.cd_count <=> movie2.cd_count }
|
|
126
|
+
return self
|
|
127
|
+
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
# Sort the movies according to description
|
|
132
|
+
def sort_by_description ()
|
|
133
|
+
|
|
134
|
+
@movies.sort! { |movie1,movie2|
|
|
135
|
+
unless ( movie1.description && movie2.description )
|
|
136
|
+
-1
|
|
137
|
+
else
|
|
138
|
+
movie1.description <=> movie2.description
|
|
139
|
+
end
|
|
140
|
+
}
|
|
141
|
+
return self
|
|
142
|
+
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
# Returns true if any movie was selected for editing or adding. If not,
|
|
147
|
+
# the edit table won't be rendered
|
|
148
|
+
def has_current? ()
|
|
149
|
+
return @current_movie != nil
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
# Return cd count of current movie or 0 if current movie not present
|
|
154
|
+
def current_cd_count ()
|
|
155
|
+
return has_current? ? @current_movie.cd_count : 0;
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def current_cd_count= ( cd_count )
|
|
160
|
+
@current_movie.cd_count = cd_count.to_i
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
# Confirm the changes and saves the current movie
|
|
165
|
+
def confirm_changes ()
|
|
166
|
+
|
|
167
|
+
puts "pol: #{current_movie.polish_title}"
|
|
168
|
+
puts "eng: #{current_movie.english_title}"
|
|
169
|
+
puts "CD: #{current_movie.cd_count}"
|
|
170
|
+
puts "Desc: #{current_movie.description}"
|
|
171
|
+
@context.save()
|
|
172
|
+
@movies = @context.fetch( "Movie" )
|
|
173
|
+
@current_movie = nil
|
|
174
|
+
return self
|
|
175
|
+
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
end
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
menu:
|
|
2
|
+
_class: Menu
|
|
3
|
+
|
|
4
|
+
browse_form:
|
|
5
|
+
_class: SWS::Form
|
|
6
|
+
enctype: "'multipart/form-data'"
|
|
7
|
+
|
|
8
|
+
link_sort_polish_title:
|
|
9
|
+
_class: SWS::Hyperlink
|
|
10
|
+
action: sort_by_polish_title
|
|
11
|
+
|
|
12
|
+
link_sort_english_title:
|
|
13
|
+
_class: SWS::Hyperlink
|
|
14
|
+
action: sort_by_english_title
|
|
15
|
+
|
|
16
|
+
link_sort_cd_count:
|
|
17
|
+
_class: SWS::Hyperlink
|
|
18
|
+
action: sort_by_cd_count
|
|
19
|
+
|
|
20
|
+
link_sort_description:
|
|
21
|
+
_class: SWS::Hyperlink
|
|
22
|
+
action: sort_by_description
|
|
23
|
+
|
|
24
|
+
movie_repetition:
|
|
25
|
+
_class: SWS::Repetition
|
|
26
|
+
list: movies
|
|
27
|
+
item: movie_cursor
|
|
28
|
+
|
|
29
|
+
cursor_polish_title:
|
|
30
|
+
_class: SWS::String
|
|
31
|
+
value: movie_cursor.polish_title
|
|
32
|
+
|
|
33
|
+
cursor_english_title:
|
|
34
|
+
_class: SWS::String
|
|
35
|
+
value: movie_cursor.english_title
|
|
36
|
+
|
|
37
|
+
cursor_cd_count:
|
|
38
|
+
_class: SWS::String
|
|
39
|
+
value: movie_cursor.cd_count
|
|
40
|
+
|
|
41
|
+
cursor_description:
|
|
42
|
+
_class: SWS::String
|
|
43
|
+
value: movie_cursor.description
|
|
44
|
+
|
|
45
|
+
conditional_rented:
|
|
46
|
+
_class: SWS::Conditional
|
|
47
|
+
condition: movie_cursor.rented?
|
|
48
|
+
|
|
49
|
+
conditional_not_rented:
|
|
50
|
+
_class: SWS::Conditional
|
|
51
|
+
condition: movie_cursor.rented?
|
|
52
|
+
negate: true
|
|
53
|
+
|
|
54
|
+
conditional_rented2:
|
|
55
|
+
_class: SWS::Conditional
|
|
56
|
+
condition: movie_cursor.rented?
|
|
57
|
+
|
|
58
|
+
conditional_not_rented2:
|
|
59
|
+
_class: SWS::Conditional
|
|
60
|
+
condition: movie_cursor.rented?
|
|
61
|
+
negate: true
|
|
62
|
+
|
|
63
|
+
cursor_rental_state:
|
|
64
|
+
_class: SWS::String
|
|
65
|
+
value: movie_cursor.rental_state
|
|
66
|
+
|
|
67
|
+
select_rentee:
|
|
68
|
+
_class: SWS::Select
|
|
69
|
+
list: users
|
|
70
|
+
item: user_cursor
|
|
71
|
+
display_string: user_cursor.name
|
|
72
|
+
multiple: false
|
|
73
|
+
size: 1
|
|
74
|
+
selections: selected_users
|
|
75
|
+
|
|
76
|
+
submit_return:
|
|
77
|
+
_class: SWS::SubmitButton
|
|
78
|
+
value: "'Return'"
|
|
79
|
+
action: return_movie
|
|
80
|
+
|
|
81
|
+
submit_rent:
|
|
82
|
+
_class: SWS::SubmitButton
|
|
83
|
+
value: "'Rent'"
|
|
84
|
+
action: rent_movie
|
|
85
|
+
|
|
86
|
+
submit_delete:
|
|
87
|
+
_class: SWS::SubmitButton
|
|
88
|
+
value: "'Delete'"
|
|
89
|
+
action: delete_movie
|
|
90
|
+
|
|
91
|
+
submit_edit:
|
|
92
|
+
_class: SWS::SubmitButton
|
|
93
|
+
value: "'Edit'"
|
|
94
|
+
action: edit_movie
|
|
95
|
+
|
|
96
|
+
submit_add:
|
|
97
|
+
_class: SWS::SubmitButton
|
|
98
|
+
value: "'New movie'"
|
|
99
|
+
action: add_movie
|
|
100
|
+
|
|
101
|
+
conditional_current:
|
|
102
|
+
_class: SWS::Conditional
|
|
103
|
+
condition: has_current?
|
|
104
|
+
|
|
105
|
+
edit_form:
|
|
106
|
+
_class: SWS::Form
|
|
107
|
+
|
|
108
|
+
current_polish_title:
|
|
109
|
+
_class: SWS::TextField
|
|
110
|
+
value: current_movie.polish_title
|
|
111
|
+
|
|
112
|
+
current_english_title:
|
|
113
|
+
_class: SWS::TextField
|
|
114
|
+
value: current_movie.english_title
|
|
115
|
+
|
|
116
|
+
current_cd_count:
|
|
117
|
+
_class: SWS::TextField
|
|
118
|
+
value: current_cd_count
|
|
119
|
+
|
|
120
|
+
current_description:
|
|
121
|
+
_class: SWS::TextArea
|
|
122
|
+
value: current_movie.description
|
|
123
|
+
|
|
124
|
+
submit_confirm:
|
|
125
|
+
_class: SWS::SubmitButton
|
|
126
|
+
value: "'Save'"
|
|
127
|
+
action: confirm_changes
|