fletcherm-culerity 0.2.5

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.
Files changed (116) hide show
  1. data/.gitignore +6 -0
  2. data/CHANGES.md +7 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +102 -0
  5. data/Rakefile +47 -0
  6. data/VERSION.yml +5 -0
  7. data/culerity.gemspec +165 -0
  8. data/features/fixtures/jquery +4376 -0
  9. data/features/fixtures/sample_feature +14 -0
  10. data/features/installing_culerity.feature +36 -0
  11. data/features/running_cucumber_without_explicitly_running_external_services.feature +23 -0
  12. data/features/step_definitions/common_steps.rb +175 -0
  13. data/features/step_definitions/culerity_setup_steps.rb +7 -0
  14. data/features/step_definitions/jruby_steps.rb +11 -0
  15. data/features/step_definitions/rails_setup_steps.rb +36 -0
  16. data/features/support/common.rb +32 -0
  17. data/features/support/env.rb +24 -0
  18. data/features/support/matchers.rb +11 -0
  19. data/init.rb +1 -0
  20. data/lib/culerity.rb +44 -0
  21. data/lib/culerity/celerity_server.rb +81 -0
  22. data/lib/culerity/jruby_runner.rb +13 -0
  23. data/lib/culerity/remote_browser_proxy.rb +58 -0
  24. data/lib/culerity/remote_object_proxy.rb +76 -0
  25. data/rails/init.rb +1 -0
  26. data/rails_generators/culerity/culerity_generator.rb +28 -0
  27. data/rails_generators/culerity/templates/config/environments/culerity_continuousintegration.rb +28 -0
  28. data/rails_generators/culerity/templates/config/environments/culerity_development.rb +17 -0
  29. data/rails_generators/culerity/templates/features/step_definitions/culerity_steps.rb +109 -0
  30. data/rails_generators/culerity/templates/features/support/env.rb +9 -0
  31. data/rails_generators/culerity/templates/lib/tasks/culerity.rake +38 -0
  32. data/rails_generators/culerity/templates/public/javascripts/culerity.js +27 -0
  33. data/script/console +10 -0
  34. data/script/destroy +14 -0
  35. data/script/generate +14 -0
  36. data/spec/celerity_server_spec.rb +106 -0
  37. data/spec/culerity_spec.rb +33 -0
  38. data/spec/jruby_runner_spec.rb +12 -0
  39. data/spec/remote_browser_proxy_spec.rb +62 -0
  40. data/spec/remote_object_proxy_spec.rb +63 -0
  41. data/spec/spec_helper.rb +3 -0
  42. data/vendor/gems/celerity-0.7.6/HISTORY +111 -0
  43. data/vendor/gems/celerity-0.7.6/LICENSE +621 -0
  44. data/vendor/gems/celerity-0.7.6/README.rdoc +80 -0
  45. data/vendor/gems/celerity-0.7.6/Rakefile +11 -0
  46. data/vendor/gems/celerity-0.7.6/VERSION.yml +5 -0
  47. data/vendor/gems/celerity-0.7.6/celerity.gemspec +120 -0
  48. data/vendor/gems/celerity-0.7.6/lib/celerity.rb +77 -0
  49. data/vendor/gems/celerity-0.7.6/lib/celerity/browser.rb +893 -0
  50. data/vendor/gems/celerity-0.7.6/lib/celerity/clickable_element.rb +73 -0
  51. data/vendor/gems/celerity-0.7.6/lib/celerity/collections.rb +156 -0
  52. data/vendor/gems/celerity-0.7.6/lib/celerity/container.rb +767 -0
  53. data/vendor/gems/celerity-0.7.6/lib/celerity/default_viewer.rb +14 -0
  54. data/vendor/gems/celerity-0.7.6/lib/celerity/disabled_element.rb +40 -0
  55. data/vendor/gems/celerity-0.7.6/lib/celerity/element.rb +298 -0
  56. data/vendor/gems/celerity-0.7.6/lib/celerity/element_collection.rb +107 -0
  57. data/vendor/gems/celerity-0.7.6/lib/celerity/element_locator.rb +159 -0
  58. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/button.rb +54 -0
  59. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/file_field.rb +29 -0
  60. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/form.rb +33 -0
  61. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/frame.rb +86 -0
  62. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/image.rb +89 -0
  63. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/label.rb +16 -0
  64. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/link.rb +43 -0
  65. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/meta.rb +14 -0
  66. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/non_control_elements.rb +116 -0
  67. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/option.rb +38 -0
  68. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/radio_check.rb +114 -0
  69. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/select_list.rb +147 -0
  70. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/table.rb +153 -0
  71. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/table_cell.rb +36 -0
  72. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/table_elements.rb +42 -0
  73. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/table_row.rb +49 -0
  74. data/vendor/gems/celerity-0.7.6/lib/celerity/elements/text_field.rb +168 -0
  75. data/vendor/gems/celerity-0.7.6/lib/celerity/exception.rb +83 -0
  76. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit.rb +64 -0
  77. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/commons-codec-1.4.jar +0 -0
  78. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/commons-collections-3.2.1.jar +0 -0
  79. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/commons-httpclient-3.1.jar +0 -0
  80. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/commons-io-1.4.jar +0 -0
  81. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/commons-lang-2.4.jar +0 -0
  82. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/commons-logging-1.1.1.jar +0 -0
  83. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/cssparser-0.9.5.jar +0 -0
  84. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/htmlunit-2.7-SNAPSHOT.jar +0 -0
  85. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/htmlunit-core-js-2.7-SNAPSHOT.jar +0 -0
  86. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/nekohtml-1.9.14-20091130.152932-3.jar +0 -0
  87. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/sac-1.3.jar +0 -0
  88. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/serializer-2.7.1.jar +0 -0
  89. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/xalan-2.7.1.jar +0 -0
  90. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/xercesImpl-2.9.1.jar +0 -0
  91. data/vendor/gems/celerity-0.7.6/lib/celerity/htmlunit/xml-apis-1.3.04.jar +0 -0
  92. data/vendor/gems/celerity-0.7.6/lib/celerity/identifier.rb +28 -0
  93. data/vendor/gems/celerity-0.7.6/lib/celerity/ignoring_web_connection.rb +15 -0
  94. data/vendor/gems/celerity-0.7.6/lib/celerity/input_element.rb +25 -0
  95. data/vendor/gems/celerity-0.7.6/lib/celerity/javascript_debugger.rb +32 -0
  96. data/vendor/gems/celerity-0.7.6/lib/celerity/listener.rb +143 -0
  97. data/vendor/gems/celerity-0.7.6/lib/celerity/resources/no_viewer.png +0 -0
  98. data/vendor/gems/celerity-0.7.6/lib/celerity/short_inspect.rb +20 -0
  99. data/vendor/gems/celerity-0.7.6/lib/celerity/util.rb +126 -0
  100. data/vendor/gems/celerity-0.7.6/lib/celerity/version.rb +3 -0
  101. data/vendor/gems/celerity-0.7.6/lib/celerity/viewer_connection.rb +89 -0
  102. data/vendor/gems/celerity-0.7.6/lib/celerity/watir_compatibility.rb +70 -0
  103. data/vendor/gems/celerity-0.7.6/lib/celerity/xpath_support.rb +48 -0
  104. data/vendor/gems/celerity-0.7.6/tasks/benchmark.rake +4 -0
  105. data/vendor/gems/celerity-0.7.6/tasks/check.rake +24 -0
  106. data/vendor/gems/celerity-0.7.6/tasks/clean.rake +3 -0
  107. data/vendor/gems/celerity-0.7.6/tasks/fix.rake +25 -0
  108. data/vendor/gems/celerity-0.7.6/tasks/jar.rake +55 -0
  109. data/vendor/gems/celerity-0.7.6/tasks/jeweler.rake +26 -0
  110. data/vendor/gems/celerity-0.7.6/tasks/rdoc.rake +4 -0
  111. data/vendor/gems/celerity-0.7.6/tasks/snapshot.rake +22 -0
  112. data/vendor/gems/celerity-0.7.6/tasks/spec.rake +26 -0
  113. data/vendor/gems/celerity-0.7.6/tasks/website.rake +10 -0
  114. data/vendor/gems/celerity-0.7.6/tasks/yard.rake +16 -0
  115. data/vendor/jruby/jruby-complete-1.4.0.jar +0 -0
  116. metadata +194 -0
@@ -0,0 +1,126 @@
1
+ module Celerity
2
+ module Util
3
+ module_function
4
+
5
+ HtmlUnit2CelerityElement = {
6
+ HtmlUnit::Html::HtmlAnchor => Celerity::Link,
7
+ HtmlUnit::Html::HtmlArea => Celerity::Area,
8
+ HtmlUnit::Html::HtmlButton => Celerity::Button,
9
+ HtmlUnit::Html::HtmlSubmitInput => Celerity::Button,
10
+ HtmlUnit::Html::HtmlResetInput => Celerity::Button,
11
+ HtmlUnit::Html::HtmlImageInput => Celerity::Button,
12
+ HtmlUnit::Html::HtmlButtonInput => Celerity::Button,
13
+ HtmlUnit::Html::HtmlCaption => Celerity::Button, # ?
14
+ HtmlUnit::Html::HtmlCheckBoxInput => Celerity::CheckBox,
15
+ HtmlUnit::Html::HtmlDefinitionDescription => Celerity::Dd,
16
+ HtmlUnit::Html::HtmlDefinitionList => Celerity::Dl,
17
+ HtmlUnit::Html::HtmlDefinitionTerm => Celerity::Dt,
18
+ HtmlUnit::Html::HtmlDivision => Celerity::Div,
19
+ HtmlUnit::Html::HtmlFileInput => Celerity::FileField,
20
+ HtmlUnit::Html::HtmlForm => Celerity::Form,
21
+ HtmlUnit::Html::HtmlFrame => Celerity::Frame,
22
+ HtmlUnit::Html::HtmlHeading1 => Celerity::H1,
23
+ HtmlUnit::Html::HtmlHeading2 => Celerity::H2,
24
+ HtmlUnit::Html::HtmlHeading3 => Celerity::H3,
25
+ HtmlUnit::Html::HtmlHeading4 => Celerity::H4,
26
+ HtmlUnit::Html::HtmlHeading5 => Celerity::H5,
27
+ HtmlUnit::Html::HtmlHeading6 => Celerity::H6,
28
+ HtmlUnit::Html::HtmlHiddenInput => Celerity::Hidden,
29
+ HtmlUnit::Html::HtmlImage => Celerity::Image,
30
+ HtmlUnit::Html::HtmlLabel => Celerity::Label,
31
+ HtmlUnit::Html::HtmlListItem => Celerity::Li,
32
+ HtmlUnit::Html::HtmlMap => Celerity::Map,
33
+ HtmlUnit::Html::HtmlOption => Celerity::Option,
34
+ HtmlUnit::Html::HtmlOrderedList => Celerity::Ol,
35
+ HtmlUnit::Html::HtmlParagraph => Celerity::P,
36
+ HtmlUnit::Html::HtmlPasswordInput => Celerity::TextField,
37
+ HtmlUnit::Html::HtmlPreformattedText => Celerity::Pre,
38
+ HtmlUnit::Html::HtmlRadioButtonInput => Celerity::Radio,
39
+ HtmlUnit::Html::HtmlSelect => Celerity::SelectList,
40
+ HtmlUnit::Html::HtmlSpan => Celerity::Span,
41
+ HtmlUnit::Html::HtmlTable => Celerity::Table,
42
+ HtmlUnit::Html::HtmlTableBody => Celerity::TableBody,
43
+ HtmlUnit::Html::HtmlTableCell => Celerity::TableCell,
44
+ HtmlUnit::Html::HtmlTableFooter => Celerity::TableFooter,
45
+ HtmlUnit::Html::HtmlTableHeader => Celerity::TableHeader,
46
+ HtmlUnit::Html::HtmlTableRow => Celerity::TableRow,
47
+ HtmlUnit::Html::HtmlTextArea => Celerity::TextField,
48
+ HtmlUnit::Html::HtmlTextInput => Celerity::TextField,
49
+ HtmlUnit::Html::HtmlUnorderedList => Celerity::Ul
50
+ }
51
+
52
+ def htmlunit2celerity(klass)
53
+ HtmlUnit2CelerityElement[klass]
54
+ end
55
+
56
+ #
57
+ # HtmlUnit will recognize most common file types, but custom ones can be added here.
58
+ # Used for FileField uploads.
59
+ #
60
+
61
+ ContentTypes = {
62
+ ".bmp" => "image/x-ms-bmp",
63
+ ".doc" => "application/msword",
64
+ ".odg" => "application/vnd.oasis.opendocument.graphics",
65
+ ".odp" => "application/vnd.oasis.opendocument.presentation",
66
+ ".ods" => "application/vnd.oasis.opendocument.spreadsheet",
67
+ ".odt" => "application/vnd.oasis.opendocument.text",
68
+ ".ppt" => "application/vnd.ms-powerpoint",
69
+ ".xls" => "application/vnd.ms-excel",
70
+ }
71
+
72
+ def content_type_for(path)
73
+ if ct = java.net.URLConnection.getFileNameMap.getContentTypeFor(path)
74
+ return ct
75
+ else
76
+ ContentTypes[File.extname(path).downcase]
77
+ end
78
+ end
79
+
80
+ def normalize_text(string)
81
+ string.gsub("\302\240", ' '). # non-breaking space 00A0
82
+ gsub(/\n|\t/, ''). # get rid of newlines/tabs
83
+ strip
84
+ end
85
+
86
+ def logger_for(package_string)
87
+ java.util.logging.Logger.getLogger(package_string)
88
+ end
89
+
90
+ # number of spaces that separate the property from the value in the create_string method
91
+ TO_S_SIZE = 14
92
+
93
+ def create_string(element)
94
+ ret = []
95
+
96
+ unless (tag = element.getTagName).empty?
97
+ ret << "tag:".ljust(TO_S_SIZE) + tag
98
+ end
99
+
100
+ element.getAttributes.each do |attribute|
101
+ ret << " #{attribute.getName}:".ljust(TO_S_SIZE + 2) + attribute.getValue.to_s
102
+ end
103
+
104
+ unless (text = element.asText).empty?
105
+ ret << " text:".ljust(TO_S_SIZE + 2) + element.asText
106
+ end
107
+
108
+ ret.join("\n")
109
+ end
110
+
111
+ #
112
+ # Used internally.
113
+ #
114
+ # @param [String] string The string to match against.
115
+ # @param [Regexp, String, #to_s] what The match we're looking for.
116
+ # @return [Fixnum, true, false, nil]
117
+ #
118
+ # @api private
119
+ #
120
+
121
+ def matches?(string, what)
122
+ Regexp === what ? string.strip =~ what : string == what.to_s
123
+ end
124
+
125
+ end
126
+ end
@@ -0,0 +1,3 @@
1
+ module Celerity
2
+ VERSION = "0.7.5"
3
+ end
@@ -0,0 +1,89 @@
1
+ module Celerity
2
+ class ViewerConnection
3
+
4
+ #
5
+ # Create a new connection to the given host/port
6
+ #
7
+
8
+ def self.create(host, port)
9
+ # if the connection fails, we won't spend time loading json
10
+ socket = TCPSocket.new(host, port)
11
+ require "json"
12
+ new(socket)
13
+ end
14
+
15
+ def initialize(socket)
16
+ @socket = socket
17
+ end
18
+
19
+ #
20
+ # Tells the viewer to render the given HTML, with the given URL as base url.
21
+ #
22
+
23
+ def render_html(html, url)
24
+ send_data('method' => 'page_changed', 'html' => html, 'url' => url)
25
+ end
26
+
27
+ #
28
+ # Tells the viewer to save a screenshot of the current page to the given path.
29
+ # May not be available on all viewers.
30
+ #
31
+
32
+ def save(path)
33
+ send_data('method' => 'save', 'path' => path)
34
+ end
35
+
36
+
37
+ #
38
+ # Tells the viewer to dump the render tree to the given path.
39
+ # Only available in the Qt viewer.
40
+ #
41
+
42
+ def save_render_tree(path)
43
+ send_data('method' => 'save_render_tree', 'path' => path)
44
+ end
45
+
46
+ #
47
+ # Get the currently rendered page as a Base64-encoded PNG image.
48
+ # Only available in the Qt viewer.
49
+ #
50
+
51
+ def image_data
52
+ send_data('method' => 'image_data')
53
+ data = read_data
54
+ data['image'] || data['error']
55
+ end
56
+
57
+ #
58
+ # Close the connection.
59
+ #
60
+
61
+ def close
62
+ @socket.close rescue nil
63
+ end
64
+
65
+ private
66
+
67
+ def send_data(msg)
68
+ json = msg.to_json
69
+ data = "Content-Length: #{json.size}\n\n#{json}"
70
+ @socket.write data
71
+ @socket.flush
72
+
73
+ nil
74
+ end
75
+
76
+ def read_data
77
+ buf = ''
78
+ until buf =~ /\n\n\z/ || @socket.eof? || @socket.closed?
79
+ buf << @socket.read(1).to_s
80
+ end
81
+
82
+ return if buf.empty?
83
+
84
+ length = buf[/Content-Length: (\d+)/, 1].to_i
85
+ JSON.parse @socket.read(length)
86
+ end
87
+
88
+ end
89
+ end
@@ -0,0 +1,70 @@
1
+ module Celerity
2
+ class Browser
3
+ class << self
4
+
5
+ # Added for Watir compatibility - not in use by Celerity
6
+ attr_accessor :speed, :attach_timeout, :visible
7
+ # Added for Watir compatibility - not in use by Celerity
8
+ alias_method :start_window, :start
9
+ # Added for Watir compatibility - not in use by Celerity
10
+ def each; end
11
+ end
12
+
13
+ # Added for Watir compatibility - not in use by Celerity
14
+ attr_accessor :visible
15
+
16
+ # Added for Watir compatibility - not in use by Celerity
17
+ def bring_to_front; true; end
18
+ # Added for Watir compatibility - not in use by Celerity
19
+ def speed=(s); s end
20
+ end
21
+
22
+
23
+ module ClickableElement
24
+ alias_method :click_no_wait, :click
25
+ end
26
+
27
+ module Container
28
+ alias_method :checkbox, :check_box
29
+ alias_method :checkBox, :check_box
30
+ alias_method :body, :tbody
31
+ alias_method :bodies, :tbodies
32
+ end
33
+
34
+ class Element
35
+ alias_method :exists, :exists?
36
+ alias_method :innerText, :text
37
+ alias_method :inner_text, :text
38
+ end
39
+
40
+ class Image
41
+ alias_method :hasLoaded?, :loaded?
42
+ alias_method :fileSize, :file_size
43
+ alias_method :fileCreatedDate, :file_created_date
44
+ end
45
+
46
+ class Link
47
+ alias_method :click_no_wait, :click
48
+ end
49
+
50
+ class RadioCheckCommon
51
+ alias_method :isSet?, :set?
52
+ alias_method :getState, :set?
53
+ end
54
+
55
+ class SelectList
56
+ alias_method :getSelectedItems, :selected_options
57
+ alias_method :getAllContents, :options
58
+ alias_method :clearSelection, :clear
59
+ alias_method :includes?, :include?
60
+ end
61
+
62
+ class TextField
63
+ alias_method :dragContentsTo, :drag_contents_to
64
+ alias_method :getContents, :value
65
+
66
+ def requires_typing; end
67
+ end
68
+ end
69
+
70
+ Celerity::IE = Celerity::Browser
@@ -0,0 +1,48 @@
1
+ module Celerity
2
+
3
+ #
4
+ # Module to search by xpath
5
+ #
6
+
7
+ module XpathSupport
8
+
9
+ #
10
+ # Get the first element found matching the given XPath.
11
+ #
12
+ # @param [String] xpath
13
+ # @return [Celerity::Element] An element subclass (or Element if none is found)
14
+ #
15
+
16
+ def element_by_xpath(xpath)
17
+ assert_exists
18
+ obj = @page.getFirstByXPath(xpath)
19
+ element_from_dom_node(obj)
20
+ end
21
+
22
+ #
23
+ # Get all the elements matching the given XPath.
24
+ #
25
+ # @param [String] xpath
26
+ # @return [Array<Celerity::Element>] array of elements
27
+ #
28
+
29
+ def elements_by_xpath(xpath)
30
+ assert_exists
31
+ objects = @page.getByXPath(xpath)
32
+ # should use an ElementCollection here?
33
+ objects.map { |o| element_from_dom_node(o) }.compact
34
+ end
35
+
36
+ #
37
+ # Convert the given HtmlUnit DomNode to a Celerity object
38
+ #
39
+
40
+ def element_from_dom_node(obj)
41
+ element_class = Util.htmlunit2celerity(obj.class) || Element
42
+ element_class.new(self, :object, obj)
43
+ end
44
+
45
+
46
+ end
47
+
48
+ end
@@ -0,0 +1,4 @@
1
+ desc "Run benchmark scripts"
2
+ task :benchmark do
3
+ Dir[File.dirname(__FILE__) + "/../benchmark/*.rb"].each { |f| load f }
4
+ end
@@ -0,0 +1,24 @@
1
+ namespace :check do
2
+
3
+ desc 'Check syntax of all .rb files'
4
+ task :syntax do
5
+ failed = []
6
+
7
+ Dir['**/*.rb'].each do |f|
8
+ begin
9
+ eval("lambda do\n return true\n #{File.read f} \nend").call
10
+ print "."
11
+ rescue SyntaxError => e
12
+ print "!"
13
+ failed << [f, e.message]
14
+ end
15
+ end
16
+
17
+ if failed.empty?
18
+ puts "ok."
19
+ else
20
+ puts "\n\t#{failed.join("\n\t")}"
21
+ end
22
+ end
23
+
24
+ end
@@ -0,0 +1,3 @@
1
+ require 'rake/clean'
2
+
3
+ CLEAN.include "classes/", "pkg/", "doc/"
@@ -0,0 +1,25 @@
1
+ namespace :fix do
2
+
3
+ desc 'Make all ruby files use LF line endings'
4
+ task :crlf do
5
+ files = FileList['**/*.rb']
6
+ files.each do |f|
7
+ next if File.directory?(f)
8
+ s = IO.read(f)
9
+ s.gsub!(/\r?\n/, "\n")
10
+ File.open(f, "w") { |io| io.write(s) }
11
+ end
12
+ end
13
+
14
+ desc 'Remove trailing whitespace from all ruby files'
15
+ task :trailing_whitespace do
16
+ files = FileList['**/*.rb']
17
+ files.each do |f|
18
+ next if File.directory?(f)
19
+ s = IO.read(f)
20
+ s.gsub!(/\s*?($)/, '\1')
21
+ File.open(f, "w") { |io| io.write(s) }
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,55 @@
1
+ namespace :jar do
2
+ target_dir = "classes"
3
+
4
+ desc "Compile and create celerity-complete-#{Celerity::VERSION}.jar (includes HtmlUnit)"
5
+ task :fat do
6
+ file_name = "pkg/celerity-complete-#{Celerity::VERSION}.jar"
7
+
8
+ ruby_files = Dir['lib/**/*.rb']
9
+ jar_files = Dir['lib/**/*.jar']
10
+ resources = Dir['lib/celerity/resources/*']
11
+
12
+ rm_rf target_dir if File.exist? target_dir
13
+ mkdir target_dir
14
+ mkdir_p resource_dir = "#{target_dir}/celerity/resources"
15
+
16
+ sh "jrubyc", "-d", "lib", "-t", target_dir, *ruby_files
17
+ resources.each { |extra| cp extra, resource_dir }
18
+
19
+ jar_files.each do |f|
20
+ cp f, target_dir
21
+ end
22
+
23
+ top_dir = Dir.pwd
24
+ chdir target_dir, :verbose => true
25
+ Dir['*.jar'].each do |file|
26
+ sh "jar", "xf", file
27
+ rm_f file
28
+ end
29
+ chdir top_dir, :verbose => true
30
+
31
+ mkdir_p "pkg"
32
+ sh "jar", "cvf", file_name, '-C', target_dir, '.'
33
+ end
34
+
35
+ desc "Compile and create celerity-#{Celerity::VERSION}.jar"
36
+ task :tiny do
37
+ file_name = "pkg/celerity-#{Celerity::VERSION}.jar"
38
+
39
+ ruby_files = Dir['lib/**/*.rb']
40
+ resources = Dir['lib/celerity/resources/*']
41
+
42
+ rm_rf target_dir if File.exist? target_dir
43
+ mkdir target_dir
44
+ mkdir_p resource_dir = "#{target_dir}/celerity/resources"
45
+
46
+ sh "jrubyc", "-d", "lib", "-t", target_dir, *ruby_files
47
+ resources.each { |extra| cp extra, resource_dir }
48
+
49
+ mkdir_p "pkg"
50
+ sh "jar", "cvf", file_name, '-C', target_dir, '.'
51
+ end
52
+ end
53
+
54
+ desc 'Alias for jar:tiny'
55
+ task :jar => %w[jar:tiny]