webmachine 1.2.2 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/CHANGELOG.md +57 -0
  4. data/Gemfile +20 -15
  5. data/README.md +89 -91
  6. data/RELEASING.md +21 -0
  7. data/Rakefile +5 -21
  8. data/documentation/adapters.md +41 -0
  9. data/documentation/authentication-and-authorization.md +37 -0
  10. data/documentation/configurator.md +19 -0
  11. data/documentation/error-handling.md +86 -0
  12. data/documentation/examples.md +224 -0
  13. data/documentation/how-it-works.md +76 -0
  14. data/documentation/routes.md +112 -0
  15. data/documentation/validation.md +159 -0
  16. data/documentation/versioning-apis.md +74 -0
  17. data/documentation/visual-debugger.md +38 -0
  18. data/examples/application.rb +2 -2
  19. data/examples/debugger.rb +1 -1
  20. data/lib/webmachine.rb +3 -1
  21. data/lib/webmachine/adapter.rb +7 -13
  22. data/lib/webmachine/adapters.rb +1 -2
  23. data/lib/webmachine/adapters/httpkit.rb +74 -0
  24. data/lib/webmachine/adapters/lazy_request_body.rb +1 -2
  25. data/lib/webmachine/adapters/rack.rb +70 -25
  26. data/lib/webmachine/adapters/rack_mapped.rb +42 -0
  27. data/lib/webmachine/adapters/reel.rb +22 -23
  28. data/lib/webmachine/adapters/webrick.rb +16 -16
  29. data/lib/webmachine/application.rb +2 -2
  30. data/lib/webmachine/chunked_body.rb +3 -4
  31. data/lib/webmachine/configuration.rb +1 -1
  32. data/lib/webmachine/constants.rb +75 -0
  33. data/lib/webmachine/decision/conneg.rb +12 -10
  34. data/lib/webmachine/decision/flow.rb +42 -32
  35. data/lib/webmachine/decision/fsm.rb +14 -21
  36. data/lib/webmachine/decision/helpers.rb +10 -38
  37. data/lib/webmachine/dispatcher.rb +13 -10
  38. data/lib/webmachine/dispatcher/route.rb +45 -9
  39. data/lib/webmachine/errors.rb +9 -3
  40. data/lib/webmachine/events.rb +2 -2
  41. data/lib/webmachine/header_negotiation.rb +25 -0
  42. data/lib/webmachine/headers.rb +8 -3
  43. data/lib/webmachine/locale/en.yml +7 -5
  44. data/lib/webmachine/media_type.rb +10 -8
  45. data/lib/webmachine/request.rb +67 -26
  46. data/lib/webmachine/rescueable_exception.rb +62 -0
  47. data/lib/webmachine/resource.rb +1 -1
  48. data/lib/webmachine/resource/callbacks.rb +11 -9
  49. data/lib/webmachine/response.rb +3 -5
  50. data/lib/webmachine/spec/IO_response.body +1 -0
  51. data/lib/webmachine/spec/adapter_lint.rb +83 -37
  52. data/lib/webmachine/spec/test_resource.rb +15 -4
  53. data/lib/webmachine/streaming/fiber_encoder.rb +1 -5
  54. data/lib/webmachine/streaming/io_encoder.rb +7 -1
  55. data/lib/webmachine/trace.rb +1 -0
  56. data/lib/webmachine/trace/fsm.rb +20 -10
  57. data/lib/webmachine/trace/resource_proxy.rb +2 -0
  58. data/lib/webmachine/translation.rb +2 -1
  59. data/lib/webmachine/version.rb +3 -3
  60. data/memory_test.rb +37 -0
  61. data/spec/spec_helper.rb +17 -9
  62. data/spec/webmachine/adapter_spec.rb +14 -15
  63. data/spec/webmachine/adapters/httpkit_spec.rb +10 -0
  64. data/spec/webmachine/adapters/rack_mapped_spec.rb +71 -0
  65. data/spec/webmachine/adapters/rack_spec.rb +32 -6
  66. data/spec/webmachine/adapters/reel_spec.rb +16 -12
  67. data/spec/webmachine/adapters/webrick_spec.rb +2 -2
  68. data/spec/webmachine/application_spec.rb +18 -17
  69. data/spec/webmachine/chunked_body_spec.rb +3 -3
  70. data/spec/webmachine/configuration_spec.rb +5 -5
  71. data/spec/webmachine/cookie_spec.rb +13 -13
  72. data/spec/webmachine/decision/conneg_spec.rb +49 -43
  73. data/spec/webmachine/decision/falsey_spec.rb +4 -4
  74. data/spec/webmachine/decision/flow_spec.rb +195 -145
  75. data/spec/webmachine/decision/fsm_spec.rb +81 -19
  76. data/spec/webmachine/decision/helpers_spec.rb +20 -20
  77. data/spec/webmachine/dispatcher/rfc3986_percent_decode_spec.rb +22 -0
  78. data/spec/webmachine/dispatcher/route_spec.rb +114 -32
  79. data/spec/webmachine/dispatcher_spec.rb +49 -24
  80. data/spec/webmachine/errors_spec.rb +1 -1
  81. data/spec/webmachine/etags_spec.rb +19 -19
  82. data/spec/webmachine/events_spec.rb +6 -6
  83. data/spec/webmachine/headers_spec.rb +14 -14
  84. data/spec/webmachine/media_type_spec.rb +36 -36
  85. data/spec/webmachine/request_spec.rb +70 -39
  86. data/spec/webmachine/rescueable_exception_spec.rb +15 -0
  87. data/spec/webmachine/resource/authentication_spec.rb +6 -6
  88. data/spec/webmachine/response_spec.rb +18 -12
  89. data/spec/webmachine/trace/fsm_spec.rb +8 -8
  90. data/spec/webmachine/trace/resource_proxy_spec.rb +9 -9
  91. data/spec/webmachine/trace/trace_store_spec.rb +5 -5
  92. data/spec/webmachine/trace_spec.rb +3 -3
  93. data/webmachine.gemspec +2 -6
  94. metadata +78 -228
  95. data/lib/webmachine/adapters/hatetepe.rb +0 -108
  96. data/lib/webmachine/adapters/mongrel.rb +0 -127
  97. data/lib/webmachine/dispatcher/not_found_resource.rb +0 -5
  98. data/lib/webmachine/fiber18.rb +0 -88
  99. data/spec/webmachine/adapters/hatetepe_spec.rb +0 -60
  100. data/spec/webmachine/adapters/mongrel_spec.rb +0 -16
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: edddc1a3a4d7be22971484644cbf1bece06b2ba0f95ab5c8a3ed08cf485982b2
4
+ data.tar.gz: 4a1e642ad3fb3a1a57e8eee886393802f7b85f8ecb81bf9f06812577fe253840
5
+ SHA512:
6
+ metadata.gz: 89062ab939aadad0f1a41d3c3b85d030acf0e4668b5d06b0c65ad4a4425284bdaf60ece3af7e76f2b9eacc02cf2052f657cfb491372fef62463dad4324933617
7
+ data.tar.gz: 0a6078e13d68abaa7692675f5057e3b69d06dd5311d6e662a176490f427b6d1a1053bd3e5e0ed82fa9536eab421f05285e54939a2c900ca364347a361c21b21a
data/.gitignore CHANGED
@@ -26,3 +26,6 @@ Gemfile.lock
26
26
  **/bin
27
27
  *.rbc
28
28
  .rvmrc
29
+ .SyncID
30
+ .SyncIgnore
31
+ vendor
data/CHANGELOG.md CHANGED
@@ -1,3 +1,60 @@
1
+ ### HEAD
2
+
3
+ ### 1.6.0 June 22, 2021
4
+
5
+ * fix: replace missed URI.decode with new Route.rfc3986_percent_decode (#261)
6
+ * fix: implement rfc3986 Percent-Encoding decoder
7
+ * feat: make rack env available on the webmachine request when using a rack adapter
8
+
9
+ ### 1.5.0 September 8, 2017
10
+
11
+ * Removed Fixnum/Integer deprecation warnings in Ruby 2.4
12
+ * Fixed multiple cookie setting code
13
+ * Added support for named captures
14
+ * Improved logic for determining which errors are 'rescuable' by Webmachine,
15
+ and which are 'unhandlable'.
16
+
17
+ ### 1.4.0 March 20, 2015
18
+
19
+ * Added RackMapped adapter which allows Webmachine apps to be mounted
20
+ at a non-root path using Rack::Map.
21
+ Thanks to [Julian Doherty](https://github.com/madlep) for writing this.
22
+
23
+ ### 1.3.1 January 15, 2015
24
+
25
+ * Fixed URI construction, including handling IPv6 addresses, when the
26
+ adapter did not supply a complete hostname.
27
+ * Removed dependency of Rack Adapter on REQUEST_INFO rack environment
28
+ variable which was not always present.
29
+ * Use IPAddr instead of Addrinfo as rbx does not support Addrinfo.
30
+
31
+ ### 1.3.0 January 3, 2015
32
+
33
+ 1.3.0 is a feature and bugfix release that removes two adapters,
34
+ reduces memory usage, fixes bugs, and includes a bunch of new
35
+ documentation. Thank you to our new contributor @rpag!
36
+
37
+ * Greatly reduced per-request garbage by freezing commonly used
38
+ Strings and Regexps into constants.
39
+ * Tutorial/example documentation was extracted from the README and
40
+ extended in the `documentation` directory.
41
+ * HTTPkit adapter was added.
42
+ * Hatetepe and Mongrel adapters were removed and adapters no longer
43
+ install interrupt handlers.
44
+ * The "splat" matcher in path specifications is now a Symbol `:*`
45
+ rather than a String `"*"`. Using the String version will result in
46
+ a deprecation warning.
47
+ * Requests with If-None-Match where the resource does not supply an
48
+ ETag will no longer respond with 412 or 500, but follow the success
49
+ path.
50
+ * Path fragments are now decoded.
51
+ * Simplified the interaction between the decision FSM and tracing.
52
+ * Updated specs to use RSpec 3.
53
+ * Improved handling of IO.copy_stream on Rack servers.
54
+ * Updated the Reel adapter.
55
+ * Exposed Application instance to the Adapter.
56
+ * Decode the value of the header 'Content-MD5' as base64-encoded string.
57
+
1
58
  ### 1.2.2 January 8, 2014
2
59
 
3
60
  1.2.2 is a bugfix/patch release that expands functionality with some edge
data/Gemfile CHANGED
@@ -1,24 +1,34 @@
1
1
  require 'rbconfig'
2
-
3
2
  source 'https://rubygems.org'
4
-
5
3
  gemspec
6
4
 
7
- gem 'bundler'
5
+ group :development do
6
+ gem "yard", "~> 0.9"
7
+ gem "rake", "~> 12.0"
8
+ end
9
+
10
+ group :test do
11
+ gem "rspec", "~> 3.0", ">= 3.6.0"
12
+ gem "rspec-its", "~> 1.2"
13
+ gem "rack", "~> 2.0"
14
+ gem "rack-test", "~> 0.7"
15
+ gem "websocket_parser", "~>1.0"
16
+ end
8
17
 
9
18
  group :webservers do
10
- gem 'mongrel', '~> 1.2.beta', :platform => [:mri, :rbx]
11
- gem 'reel', '~> 0.4.0.pre5'
12
- gem 'hatetepe', '~> 0.5.2'
19
+ gem 'reel', '~> 0.5.0'
20
+ gem 'http', '~> 0.6.0'
21
+ gem 'celluloid', '0.17.4' # Refactors in 0.18.0 break the tests
22
+ gem 'httpkit', :platform => [:mri, :rbx]
13
23
  end
14
24
 
15
25
  group :guard do
16
- gem 'guard-rspec'
26
+ gem 'guard-rspec', '~> 4.7'
17
27
  case RbConfig::CONFIG['host_os']
18
28
  when /darwin/
19
- gem 'rb-fsevent'
29
+ gem 'rb-fsevent', '~> 0.10'
20
30
  # gem 'growl_notify'
21
- gem 'growl'
31
+ gem 'growl', '~> 1.0'
22
32
  when /linux/
23
33
  gem 'rb-inotify'
24
34
  gem 'libnotify'
@@ -27,15 +37,10 @@ end
27
37
 
28
38
  group :docs do
29
39
  platform :mri_19, :mri_20 do
30
- gem 'redcarpet'
40
+ gem 'redcarpet', '~> 3.4'
31
41
  end
32
42
  end
33
43
 
34
44
  platforms :jruby do
35
45
  gem 'jruby-openssl'
36
46
  end
37
-
38
- platform :rbx do
39
- gem 'rubysl'
40
- gem 'racc'
41
- end
data/README.md CHANGED
@@ -1,12 +1,15 @@
1
- # webmachine for Ruby [![travis](https://travis-ci.org/seancribbs/webmachine-ruby.png?branch=master)](http://travis-ci.org/seancribbs/webmachine-ruby)
1
+ # webmachine for Ruby
2
+ [![Gem Version](https://badge.fury.io/rb/webmachine.svg)](https://badge.fury.io/rb/webmachine)
3
+ [![Build Status](https://travis-ci.org/webmachine/webmachine-ruby.svg)](https://travis-ci.org/webmachine/webmachine-ruby)
2
4
 
3
5
  webmachine-ruby is a port of
4
6
  [Webmachine](https://github.com/basho/webmachine), which is written in
5
7
  Erlang. The goal of both projects is to expose interesting parts of
6
8
  the HTTP protocol to your application in a declarative way. This
7
- means that you are less concerned with handling requests directly and
8
- more with describing the behavior of the resources that make up your
9
- application. Webmachine is not a web framework _per se_, but more of a
9
+ means that you are less concerned with the procedures involved in handling
10
+ requests directly and more with describing facts about the resources
11
+ that make up your application.
12
+ Webmachine is not a web framework _per se_, but more of a
10
13
  toolkit for building HTTP-friendly applications. For example, it does
11
14
  not provide a templating engine or a persistence layer; those choices
12
15
  are up to you.
@@ -15,46 +18,34 @@ are up to you.
15
18
 
16
19
  * Handles the hard parts of content negotiation, conditional
17
20
  requests, and response codes for you.
18
- * Most callbacks can interrupt the decision flow by returning an
19
- integer response code. You generally only want to do this when new
20
- information comes to light, requiring a modification of the response.
21
- * Supports WEBrick and Mongrel (1.2pre+), and a Rack shim. Other host
21
+ * Provides a base resource with points of extension to let you
22
+ describe what is relevant about your particular resource.
23
+ * Supports WEBrick, Reel, HTTPkit, and a Rack shim. Other host
22
24
  servers are being investigated.
23
25
  * Streaming/chunked response bodies are permitted as Enumerables,
24
26
  Procs, or Fibers!
25
27
  * Unlike the Erlang original, it does real Language negotiation.
26
- * Includes the visual debugger so you can look through the decision
28
+ * Includes a visual debugger so you can look through the decision
27
29
  graph to determine how your resources are behaving.
28
30
 
29
31
  ## Documentation & Finding Help
30
32
 
33
+ * [How it works](/documentation/how-it-works.md) - understand how Webmachine works and the basics of creating a resource.
34
+ * [Example resources][example-resources] showing how to implement each HTTP method.
35
+ * [Routes][routes]
36
+ * [Authentication and authorization][authentication-and-authorization]
37
+ * [Validation][validation]
38
+ * [Error handling][error-handling]
39
+ * [Visual debugger][visual-debugger]
40
+ * [Configurator][configurator]
41
+ * [Webserver adapters][adapters]
42
+ * [Versioning APIs][versioning-apis]
31
43
  * [API documentation](http://rubydoc.info/gems/webmachine/frames/file/README.md)
32
44
  * [Mailing list](mailto:webmachine.rb@librelist.com)
33
45
  * IRC channel #webmachine on freenode
34
46
 
35
- ## A Note about Rack
36
-
37
- In order to be compatible with popular deployment stacks,
38
- Webmachine has a [Rack](https://github.com/rack/rack) adapter (thanks to Jamis Buck).
39
- **n.b.:** We recommend that NO middleware is used. The
40
- behaviors that are encapsulated in Webmachine assume that no modifications
41
- are done to requests or response outside of Webmachine.
42
-
43
- ## A Note about MRI 1.9
44
-
45
- The [Reel](https://github.com/celluloid/reel) and [Hatetepe](https://github.com/lgierth/hatetepe)
46
- adapters might crash with a `SystemStackError` on MRI 1.9 due to its
47
- limited fiber stack size. If your application is affected by this, the
48
- only known solution is to switch to JRuby, Rubinius or MRI 2.0.
49
-
50
-
51
47
  ## Getting Started
52
48
 
53
- [GiddyUp](https://github.com/basho/giddyup) is an actively
54
- developed webmachine-ruby app that is in production. You
55
- can look there for an example of how to write and structure a
56
- webmachine-ruby app (although it is hacky in places).
57
-
58
49
  Below we go through some examples of how to do basic things
59
50
  with webmachine-ruby.
60
51
 
@@ -71,8 +62,11 @@ There are many other HTTP features exposed to a resource through
71
62
  of the decision tree Webmachine implements, and the decision tree
72
63
  is what makes Webmachine unique and powerful.
73
64
 
65
+ ### A simple static HTML resource
66
+
74
67
  ```ruby
75
68
  require 'webmachine'
69
+
76
70
  class MyResource < Webmachine::Resource
77
71
  def to_html
78
72
  "<html><body>Hello, world!</body></html>"
@@ -83,6 +77,39 @@ end
83
77
  MyResource.run
84
78
  ```
85
79
 
80
+ ### A simple dynamic JSON Resource
81
+
82
+ ```ruby
83
+ require 'webmachine'
84
+ require 'widget'
85
+
86
+ class MyResource < Webmachine::Resource
87
+
88
+ # GET and HEAD are allowed by default, but are shown here for clarity.
89
+ def allowed_methods
90
+ ['GET','HEAD']
91
+ end
92
+
93
+ def content_types_provided
94
+ [['application/json', :to_json]]
95
+ end
96
+
97
+ # Return a Truthy or Falsey value
98
+ def resource_exists?
99
+ widget
100
+ end
101
+
102
+ def widget
103
+ @widget ||= Widget.find(request.path_info[:id])
104
+ end
105
+
106
+ def to_json
107
+ widget.to_json
108
+ end
109
+ end
110
+
111
+ ```
112
+
86
113
  ### Router
87
114
 
88
115
  The router is used to map a resource to a given path. To map the class `MyResource` to
@@ -97,92 +124,54 @@ end
97
124
  Webmachine.application.run
98
125
  ```
99
126
 
100
- ### Application/Configurator
101
-
102
- There's a configurator that allows you to set what IP address and port
103
- a web server should bind to as well as what web server should serve a
104
- webmachine resource.
105
-
106
- A call to `Webmachine::Application#configure` returns a `Webmachine::Application` instance,
107
- so you could chain other method calls if you like. If you don't want to create your own separate
108
- application object `Webmachine.application` will return a global one.
127
+ When the resource needs to be mapped with variables that will be passed into the resource, use symbols to identify which path components are variables.
109
128
 
110
129
  ```ruby
111
- require 'webmachine'
112
- require 'my_resource'
113
130
 
114
- Webmachine.application.configure do |config|
115
- config.ip = '127.0.0.1'
116
- config.port = 3000
117
- config.adapter = :Mongrel
131
+ Webmachine.application.routes do
132
+ add ['myresource', :id], MyResource
118
133
  end
119
134
 
120
- # Start a web server to serve requests via localhost
121
- Webmachine.application.run
122
135
  ```
123
136
 
124
- Webmachine includes adapters for [Webrick][webrick], [Mongrel][mongrel],
125
- [Reel][reel], and [Hatetepe][hatetepe]. Additionally, the [Rack][rack] adapter lets it
126
- run on any webserver that provides a Rack interface. It also lets it run on
127
- [Shotgun][shotgun] ([example][shotgun_example]).
128
-
129
- [webrick]: http://rubydoc.info/stdlib/webrick
130
- [mongrel]: https://github.com/evan/mongrel
131
- [reel]: https://github.com/celluloid/reel
132
- [hatetepe]: https://github.com/lgierth/hatetepe
133
- [rack]: https://github.com/rack/rack
134
- [shotgun]: https://github.com/rtomayko/shotgun
135
- [shotgun_example]: https://gist.github.com/4389220
136
-
137
- ### Visual debugger
138
-
139
- It can be hard to understand all of the decisions that Webmachine
140
- makes when servicing a request to your resource, which is why we have
141
- the "visual debugger". In development, you can turn on tracing of the
142
- decision graph for a resource by implementing the `#trace?` callback
143
- so that it returns true:
137
+ To add more components to the URL mapping, simply add them to the array.
144
138
 
145
139
  ```ruby
146
- class MyTracedResource < Webmachine::Resource
147
- def trace?
148
- true
149
- end
150
140
 
151
- # The rest of your callbacks...
141
+ Webmachine.application.routes do
142
+ add ['myparentresource', :parent_id, 'myresource', :id], MyResource
152
143
  end
144
+
153
145
  ```
154
146
 
155
- Then enable the visual debugger resource by adding a route to your
156
- configuration:
147
+ Read more about routing [here][routes].
157
148
 
158
- ```ruby
159
- Webmachine.application.routes do
160
- # This can be any path as long as it ends with '*'
161
- add ['trace', '*'], Webmachine::Trace::TraceResource
162
- # The rest of your routes...
163
- end
164
- ```
149
+ ### Application/Configurator
150
+
151
+ There is a configurator that allows you to set what IP address and port
152
+ a web server should bind to as well as what web server should serve a
153
+ webmachine resource. Learn how to configure your application [here][configurator].
165
154
 
166
- Now when you visit your traced resource, a trace of the request
167
- process will be recorded in memory. Open your browser to `/trace` to
168
- list the recorded traces and inspect the result. The response from your
169
- traced resource will also include the `X-Webmachine-Trace-Id` that you
170
- can use to lookup the trace. It might look something like this:
171
155
 
172
- ![preview calls at decision](http://seancribbs-skitch.s3.amazonaws.com/Webmachine_Trace_2156885920-20120625-100153.png)
156
+ ### Adapters
173
157
 
174
- Refer to
175
- [examples/debugger.rb](/examples/debugger.rb)
176
- for an example of how to enable the debugger.
158
+ Webmachine provides adapters for many popular webservers. Learn more [here][adapters].
159
+
160
+ ### Visual debugger
161
+
162
+ It can be hard to understand all of the decisions that Webmachine
163
+ makes when servicing a request to your resource, which is why we have
164
+ the "visual debugger". Learn how to configure it [here][visual-debugger].
177
165
 
178
166
  ## Related libraries
179
167
 
180
- * [irwebmachine](https://github.com/robgleeson/irwebmachine) - IRB/Pry debugging of Webmachine applications
168
+ * [irwebmachine](https://github.com/generalassembly/irwebmachine) - IRB/Pry debugging of Webmachine applications
181
169
  * [webmachine-test](https://github.com/bernd/webmachine-test) - Helpers for testing Webmachine applications
182
170
  * [webmachine-linking](https://github.com/petejohanson/webmachine-linking) - Helpers for linking between Resources, and Web Linking
183
171
  * [webmachine-sprockets](https://github.com/lgierth/webmachine-sprockets) - Integration with Sprockets assets packaging system
184
172
  * [webmachine-actionview](https://github.com/rgarner/webmachine-actionview) - Integration of some Rails-style view conventions into Webmachine
185
173
  * [jruby-http-kit](https://github.com/nLight/jruby-http-kit) - Includes an adapter for the Clojure-based Ring library/server
174
+ * [newrelic-webmachine](https://github.com/mdub/newrelic-webmachine) - NewRelic instrumentation
186
175
 
187
176
  ## LICENSE
188
177
 
@@ -190,3 +179,12 @@ webmachine-ruby is licensed under the
190
179
  [Apache v2.0 license](http://www.apache.org/licenses/LICENSE-2.0). See
191
180
  LICENSE for details.
192
181
 
182
+ [example-resources]: /documentation/examples.md
183
+ [versioning-apis]: /documentation/versioning-apis.md
184
+ [routes]: /documentation/routes.md
185
+ [error-handling]: /documentation/error-handling.md
186
+ [authentication-and-authorization]: /documentation/authentication-and-authorization.md
187
+ [adapters]: /documentation/adapters.md
188
+ [visual-debugger]: /documentation/visual-debugger.md
189
+ [configurator]: /documentation/configurator.md
190
+ [validation]: /documentation/validation.md
data/RELEASING.md ADDED
@@ -0,0 +1,21 @@
1
+ 1. Open `CHANGELOG.md` and summarize the changes made since the last release (hopefully better than the individual commit messages). The history can be grabbed with a simple git command (assuming the last version was 1.3.0:
2
+
3
+ $ git log --pretty=format:' * %s' v1.3.0..HEAD
4
+
5
+ 2. Edit the version in `lib/webmachine/version.rb` according to semantic versioning rules.
6
+ 3. Commit both files.
7
+
8
+ $ git add CHANGELOG.md lib/webmachine/version.rb
9
+ $ git commit -m "chore(release): version $(ruby -r ./lib/webmachine/version.rb -e "puts Webmachine::VERSION")" && git push
10
+
11
+ 4. Release the gem.
12
+
13
+ $ bundle exec rake release
14
+
15
+ 5. If this is a new major or minor release, push a new stable branch, otherwise merge the commit into the stable branch (or master, depending on where you made the commit).
16
+
17
+ $ git push origin HEAD:1.3-stable
18
+ # or
19
+ $ git checkout 1.3-stable; git merge master; git push origin; git checkout master
20
+
21
+ 6. YOU'RE DONE!
data/Rakefile CHANGED
@@ -1,5 +1,4 @@
1
- require 'rubygems'
2
- require 'rubygems/package_task'
1
+ require "bundler/gem_tasks"
3
2
 
4
3
  begin
5
4
  require 'yard'
@@ -11,26 +10,12 @@ begin
11
10
  rescue LoadError
12
11
  end
13
12
 
14
- def gemspec
15
- $webmachine_gemspec ||= Gem::Specification.load("webmachine.gemspec")
13
+ desc "Validate the gemspec file."
14
+ task :validate_gemspec do
15
+ Gem::Specification.load("webmachine.gemspec").validate
16
16
  end
17
17
 
18
- Gem::PackageTask.new(gemspec) do |pkg|
19
- pkg.need_zip = false
20
- pkg.need_tar = false
21
- end
22
-
23
- task :gem => :gemspec
24
-
25
- desc %{Validate the gemspec file.}
26
- task :gemspec do
27
- gemspec.validate
28
- end
29
-
30
- desc %{Release the gem to RubyGems.org}
31
- task :release => :gem do
32
- system "gem push pkg/#{gemspec.name}-#{gemspec.version}.gem"
33
- end
18
+ task :build => :validate_gemspec
34
19
 
35
20
  desc "Cleans up white space in source files"
36
21
  task :clean_whitespace do
@@ -51,7 +36,6 @@ task :clean_whitespace do
51
36
  end
52
37
  end
53
38
 
54
- require 'rspec/core'
55
39
  require 'rspec/core/rake_task'
56
40
 
57
41
  desc "Run specs"