suspenders 1.10.2 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7e26c8eb974dd085097abba50f6fd119bbaf8829
4
- data.tar.gz: 270d556f226063e3fe85e10064b0123dd9f3bd19
3
+ metadata.gz: 15e552d7d17ba6f3e6abcce8e48e7357f759b3d5
4
+ data.tar.gz: cf5e84b547ccc981b720be0e0db2a853836fa557
5
5
  SHA512:
6
- metadata.gz: 69e4d8b4f3e13c11d3167e70ec35b56ce80eb9f0835c6961ac835ab5dd64b63e2404bd783fc4b41bcb7ab40a5970c4aca516c9fc4e8c78f5b80f54f6465ad50d
7
- data.tar.gz: ccf491a165331e44dadb931857c80039ad8ac2817631e8b66da4c62ad64a68ebe232396c88d24e66f69c1372e9ee543ff420f8014652fa7814b1ed57fdbaa979
6
+ metadata.gz: fc35351a500d302415077fcedc6809df78b8872c9988ba04c1b9cf1274f88063e412c0a20e84c9e56884ba409e19fb3967c7d3490152f36b38325eddcf632d89
7
+ data.tar.gz: f689a5d0f922bb1ffcc8f7e152ffa664ad1275ace7ed67abb9f13526be6bb2c28cdb7d2255ee5e1ed8b4ddb0d096830a96c7263e7e4a892aabb1638d8b2a864f
@@ -0,0 +1 @@
1
+ 2.1.1
@@ -1,10 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1.0
6
3
  - 2.1.1
7
4
  before_install:
5
+ - "echo '--colour' > ~/.rspec"
8
6
  - git config --global user.name 'Travis CI'
9
7
  - git config --global user.email 'travis-ci@example.com'
10
8
  install:
@@ -1,38 +1,36 @@
1
- We love pull requests. Here's a quick guide:
1
+ # Contributing
2
2
 
3
- 1. Fork the repo.
3
+ We love pull requests. Here's a quick guide.
4
4
 
5
- 2. Run the tests. We only take pull requests with passing tests, and it's great
6
- to know that you have a clean slate: `bundle && rake`
5
+ Fork the repo:
7
6
 
8
- 3. Add a test for your change. Only refactoring and documentation changes
9
- require no new tests. If you are adding functionality or fixing a bug, we need
10
- a test!
7
+ git clone git@github.com:thoughtbot/suspenders.git
11
8
 
12
- 4. Make the test pass.
9
+ Set up your machine:
13
10
 
14
- 5. Push to your fork and submit a pull request.
11
+ ./bin/setup
15
12
 
13
+ Make sure the tests pass:
16
14
 
17
- At this point you're waiting on us. We like to at least comment on, if not
18
- accept, pull requests within three business days (and, typically, one business
19
- day). We may suggest some changes or improvements or alternatives.
15
+ rake
20
16
 
21
- Some things that will increase the chance that your pull request is accepted,
22
- taken straight from the Ruby on Rails guide:
17
+ Make your change. Add tests for your change. Make the tests pass:
23
18
 
24
- * Use Rails idioms and helpers
25
- * Include tests that fail without your code, and pass with it
26
- * Update the documentation, the surrounding one, examples elsewhere, guides,
27
- whatever is affected by your contribution
19
+ rake
28
20
 
29
- Syntax:
21
+ Push to your fork and [submit a pull request][pr].
30
22
 
31
- * Two spaces, no tabs.
32
- * No trailing whitespace. Blank lines should not have any space.
33
- * Prefer &&/|| over and/or.
34
- * my_method(my_arg) not my_method( my_arg ) or my_method my_arg.
35
- * a = b and not a=b.
36
- * Follow the conventions you see used in the source already.
23
+ [pr]: https://github.com/thoughtbot/suspenders/compare/
37
24
 
38
- And in case we didn't emphasize it enough: we love tests!
25
+ At this point you're waiting on us. We like to at least comment on pull requests
26
+ within three business days (and, typically, one business day). We may suggest
27
+ some changes or improvements or alternatives.
28
+
29
+ Some things that will increase the chance that your pull request is accepted:
30
+
31
+ * Write tests.
32
+ * Follow our [style guide][style].
33
+ * Write a [good commit message][commit].
34
+
35
+ [style]: https://github.com/thoughtbot/guides/tree/master/style
36
+ [commit]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
@@ -1,34 +1,34 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- suspenders (1.10.2)
4
+ suspenders (1.11.0)
5
5
  bundler (~> 1.3)
6
6
  rails (~> 4.1.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- actionmailer (4.1.0)
12
- actionpack (= 4.1.0)
13
- actionview (= 4.1.0)
11
+ actionmailer (4.1.1)
12
+ actionpack (= 4.1.1)
13
+ actionview (= 4.1.1)
14
14
  mail (~> 2.5.4)
15
- actionpack (4.1.0)
16
- actionview (= 4.1.0)
17
- activesupport (= 4.1.0)
15
+ actionpack (4.1.1)
16
+ actionview (= 4.1.1)
17
+ activesupport (= 4.1.1)
18
18
  rack (~> 1.5.2)
19
19
  rack-test (~> 0.6.2)
20
- actionview (4.1.0)
21
- activesupport (= 4.1.0)
20
+ actionview (4.1.1)
21
+ activesupport (= 4.1.1)
22
22
  builder (~> 3.1)
23
23
  erubis (~> 2.7.0)
24
- activemodel (4.1.0)
25
- activesupport (= 4.1.0)
24
+ activemodel (4.1.1)
25
+ activesupport (= 4.1.1)
26
26
  builder (~> 3.1)
27
- activerecord (4.1.0)
28
- activemodel (= 4.1.0)
29
- activesupport (= 4.1.0)
27
+ activerecord (4.1.1)
28
+ activemodel (= 4.1.1)
29
+ activesupport (= 4.1.1)
30
30
  arel (~> 5.0.0)
31
- activesupport (4.1.0)
31
+ activesupport (4.1.1)
32
32
  i18n (~> 0.6, >= 0.6.9)
33
33
  json (~> 1.7, >= 1.7.7)
34
34
  minitest (~> 5.1)
@@ -70,7 +70,7 @@ GEM
70
70
  treetop (~> 1.4.8)
71
71
  mime-types (1.25.1)
72
72
  mini_portile (0.5.2)
73
- minitest (5.3.3)
73
+ minitest (5.3.4)
74
74
  multi_json (1.7.9)
75
75
  multi_test (0.0.1)
76
76
  nokogiri (1.6.1)
@@ -81,22 +81,22 @@ GEM
81
81
  rack (1.5.2)
82
82
  rack-test (0.6.2)
83
83
  rack (>= 1.0)
84
- rails (4.1.0)
85
- actionmailer (= 4.1.0)
86
- actionpack (= 4.1.0)
87
- actionview (= 4.1.0)
88
- activemodel (= 4.1.0)
89
- activerecord (= 4.1.0)
90
- activesupport (= 4.1.0)
84
+ rails (4.1.1)
85
+ actionmailer (= 4.1.1)
86
+ actionpack (= 4.1.1)
87
+ actionview (= 4.1.1)
88
+ activemodel (= 4.1.1)
89
+ activerecord (= 4.1.1)
90
+ activesupport (= 4.1.1)
91
91
  bundler (>= 1.3.0, < 2.0)
92
- railties (= 4.1.0)
92
+ railties (= 4.1.1)
93
93
  sprockets-rails (~> 2.0)
94
- railties (4.1.0)
95
- actionpack (= 4.1.0)
96
- activesupport (= 4.1.0)
94
+ railties (4.1.1)
95
+ actionpack (= 4.1.1)
96
+ activesupport (= 4.1.1)
97
97
  rake (>= 0.8.7)
98
98
  thor (>= 0.18.1, < 2.0)
99
- rake (10.3.1)
99
+ rake (10.3.2)
100
100
  rspec (2.14.1)
101
101
  rspec-core (~> 2.14.0)
102
102
  rspec-expectations (~> 2.14.0)
data/NEWS.md CHANGED
@@ -1,3 +1,15 @@
1
+ 1.11.0 (May 17, 2014)
2
+
3
+ * Generate a Rails 4.1.1 app and implement fixes for compatibility.
4
+ * Escape ERb in secrets.yml
5
+ * Maintain ActiveRecord test schema.
6
+ * Make Shoulda Matchers work with Spring.
7
+ * Unify Ruby version for gem and suspended apps.
8
+ * Move SMTP variable settings out of initializer.
9
+ * Connect to Postgres on localhost.
10
+ * Add `bin/setup` for contributors.
11
+ * Improve and document TravisCI configuration.
12
+
1
13
  1.10.2 (April 28, 2014)
2
14
 
3
15
  * Fix bundling Bourbon and Neat.
data/README.md CHANGED
@@ -15,7 +15,7 @@ Then run:
15
15
 
16
16
  suspenders projectname
17
17
 
18
- This will create a Rails 4.1 app in `projectname`.
18
+ This will create a Rails app in `projectname` using the latest version of Rails.
19
19
 
20
20
  By default this script creates a new git repository. See below if you
21
21
  want to use it against an existing repo.
@@ -24,8 +24,8 @@ Gemfile
24
24
  -------
25
25
 
26
26
  To see the latest and greatest gems, look at Suspenders'
27
- [Gemfile](templates/Gemfile.erb),
28
- which will be appended to the default generated projectname/Gemfile.
27
+ [Gemfile](templates/Gemfile.erb), which will be appended to the default
28
+ generated projectname/Gemfile.
29
29
 
30
30
  It includes application gems like:
31
31
 
@@ -91,6 +91,7 @@ Suspenders also comes with:
91
91
  * [t() and l() in specs without prefixing with I18n][i18n]
92
92
  * An automatically-created `SECRET_KEY_BASE` environment variable in all
93
93
  environments.
94
+ * Configuration for [Travis Pro][travis] continuous integration.
94
95
 
95
96
  [bin]: http://robots.thoughtbot.com/bin-setup
96
97
  [compress]: http://robots.thoughtbot.com/content-compression-with-rack-deflater/
@@ -98,6 +99,7 @@ Suspenders also comes with:
98
99
  [pool]: https://devcenter.heroku.com/articles/concurrency-and-database-connections
99
100
  [binstub]: https://github.com/thoughtbot/suspenders/pull/282
100
101
  [i18n]: https://github.com/thoughtbot/suspenders/pull/304
102
+ [travis]: http://docs.travis-ci.com/user/travis-pro/
101
103
 
102
104
  Heroku
103
105
  ------
@@ -137,7 +139,7 @@ This has the same effect as running:
137
139
  Dependencies
138
140
  ------------
139
141
 
140
- Suspenders requires Ruby 1.9.2 or greater.
142
+ Suspenders requires the latest version of Ruby.
141
143
 
142
144
  Some gems included in Suspenders have native extensions. You should have GCC
143
145
  installed on your machine before generating an app with Suspenders.
@@ -149,7 +151,7 @@ Use [Command Line Tools for XCode](https://developer.apple.com/downloads/index.a
149
151
  for Lion (OS X 10.7) or Mountain Lion (OS X 10.8).
150
152
 
151
153
  We use [Capybara Webkit](https://github.com/thoughtbot/capybara-webkit) for
152
- full-stack Javascript integration testing. It requires QT. Instructions for
154
+ full-stack JavaScript integration testing. It requires QT. Instructions for
153
155
  installing QT are
154
156
  [here](https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling-capybara-webkit).
155
157
 
@@ -159,12 +161,14 @@ Issues
159
161
  ------
160
162
 
161
163
  If you have problems, please create a
162
- [Github Issue](https://github.com/thoughtbot/suspenders/issues).
164
+ [GitHub Issue](https://github.com/thoughtbot/suspenders/issues).
163
165
 
164
166
  Contributing
165
167
  ------------
166
168
 
167
- Please see CONTRIBUTING.md for details.
169
+ To update Suspenders' Ruby version, change `.ruby-version` and `.travis.yml`.
170
+
171
+ Please see CONTRIBUTING.md for further details.
168
172
 
169
173
  Credits
170
174
  -------
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rake' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rake', 'rake')
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env sh
2
+
3
+ # Run this script immediately after cloning the codebase.
4
+
5
+ # Exit if any subcommand fails
6
+ set -e
7
+
8
+ # Set up Ruby dependencies via Bundler
9
+ bundle install
10
+
11
+ # Add binstubs to PATH in ~/.zshenv like this:
12
+ # export PATH=".git/safe/../../bin:$PATH"
13
+ mkdir -p .git/safe
@@ -1,3 +1,4 @@
1
+ require 'suspenders/version'
1
2
  require 'suspenders/generators/app_generator'
2
3
  require 'suspenders/actions'
3
4
  require 'suspenders/app_builder'
@@ -56,10 +56,10 @@ module Suspenders
56
56
  end
57
57
 
58
58
  def configure_smtp
59
- copy_file 'smtp.rb', 'config/initializers/smtp.rb'
59
+ copy_file 'smtp.rb', 'config/smtp.rb'
60
60
 
61
61
  prepend_file 'config/environments/production.rb',
62
- "require Rails.root.join('config/initializers/smtp')\n"
62
+ "require Rails.root.join('config/smtp')\n"
63
63
 
64
64
  config = <<-RUBY
65
65
 
@@ -139,7 +139,7 @@ end
139
139
  end
140
140
 
141
141
  def set_ruby_to_version_being_used
142
- template 'ruby-version.erb', '.ruby-version'
142
+ create_file '.ruby-version', "#{Suspenders::RUBY_VERSION}\n"
143
143
  end
144
144
 
145
145
  def setup_heroku_specific_gems
@@ -185,10 +185,6 @@ module Suspenders
185
185
  # Let's not: We'll bundle manually at the right spot
186
186
  end
187
187
 
188
- def ruby_version_with_patch_level
189
- "#{RUBY_VERSION}#{patch_level}"
190
- end
191
-
192
188
  protected
193
189
 
194
190
  def get_builder_class
@@ -198,13 +194,5 @@ module Suspenders
198
194
  def using_active_record?
199
195
  !options[:skip_active_record]
200
196
  end
201
-
202
- def patch_level
203
- if RUBY_VERSION >= '2.1.0'
204
- ''
205
- else
206
- "-p#{RUBY_PATCHLEVEL}"
207
- end
208
- end
209
197
  end
210
198
  end
@@ -1,3 +1,4 @@
1
1
  module Suspenders
2
- VERSION = '1.10.2'
2
+ RUBY_VERSION = IO.read("#{File.dirname(__FILE__)}/../../.ruby-version").strip
3
+ VERSION = '1.11.0'
3
4
  end
@@ -20,19 +20,17 @@ feature 'Suspend a new project with default configuration' do
20
20
  expect(staging_file).to match(/#{config_stub}/), staging_file
21
21
  end
22
22
 
23
- if RUBY_VERSION >= '2.1.0'
24
- scenario '.ruby-version does not include patchlevel for Ruby 2.1.0+' do
25
- run_suspenders
23
+ scenario 'generated .ruby-version is pulled from Suspenders .ruby-version' do
24
+ run_suspenders
26
25
 
27
- ruby_version_file = IO.read("#{project_path}/.ruby-version")
28
- expect(ruby_version_file).to eq "#{RUBY_VERSION}\n"
29
- end
30
- else
31
- scenario '.ruby-version includes patchlevel for all pre-Ruby 2.1.0 versions' do
32
- run_suspenders
26
+ ruby_version_file = IO.read("#{project_path}/.ruby-version")
27
+ expect(ruby_version_file).to eq "#{RUBY_VERSION}\n"
28
+ end
33
29
 
34
- ruby_version_file = IO.read("#{project_path}/.ruby-version")
35
- expect(ruby_version_file).to eq "#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}\n"
36
- end
30
+ scenario 'secrets.yml reads secret from env' do
31
+ run_suspenders
32
+
33
+ secrets_file = IO.read("#{project_path}/config/secrets.yml")
34
+ expect(secrets_file).to match(/secret_key_base: <%= ENV\['SECRET_KEY_BASE'\] %>/)
37
35
  end
38
36
  end
@@ -4,7 +4,7 @@ require 'suspenders/version'
4
4
  require 'date'
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.required_ruby_version = '>= 1.9.3'
7
+ s.required_ruby_version = "~> #{Suspenders::RUBY_VERSION}"
8
8
  s.add_dependency 'bundler', '~> 1.3'
9
9
  s.add_dependency 'rails', '~> 4.1.0'
10
10
  s.add_development_dependency 'aruba', '~> 0.5.2'
@@ -0,0 +1,2 @@
1
+ install postgres --no-python
2
+ install qt imagemagick
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- ruby '<%= RUBY_VERSION %>'
3
+ ruby '<%= Suspenders::RUBY_VERSION %>'
4
4
 
5
5
  gem 'airbrake'
6
6
  gem 'bourbon', '~> 3.2.1'
@@ -39,7 +39,7 @@ group :test do
39
39
  gem 'capybara-webkit', '>= 1.0.0'
40
40
  gem 'database_cleaner'
41
41
  gem 'launchy'
42
- gem 'shoulda-matchers'
42
+ gem 'shoulda-matchers', require: false
43
43
  gem 'simplecov', require: false
44
44
  gem 'timecop'
45
45
  gem 'webmock'
@@ -2,6 +2,7 @@ development: &default
2
2
  adapter: postgresql
3
3
  database: <%= app_name %>_development
4
4
  encoding: utf8
5
+ host: localhost
5
6
  min_messages: warning
6
7
  pool: 2
7
8
  timeout: 5000
@@ -1,5 +1,5 @@
1
1
  default: &default
2
- secret_key_base: <%= ENV['SECRET_KEY_BASE'] %>
2
+ secret_key_base: <%%= ENV['SECRET_KEY_BASE'] %>
3
3
 
4
4
  development:
5
5
  <<: *default
@@ -1,11 +1,9 @@
1
- if Rails.env.staging? || Rails.env.production?
2
- SMTP_SETTINGS = {
3
- address: ENV.fetch('SMTP_ADDRESS'), # example: 'smtp.sendgrid.net'
4
- authentication: :plain,
5
- domain: ENV.fetch('SMTP_DOMAIN'), # example: 'this-app.com'
6
- enable_starttls_auto: true,
7
- password: ENV.fetch('SMTP_PASSWORD'),
8
- port: '587',
9
- user_name: ENV.fetch('SMTP_USERNAME')
10
- }
11
- end
1
+ SMTP_SETTINGS = {
2
+ address: ENV.fetch('SMTP_ADDRESS'), # example: 'smtp.sendgrid.net'
3
+ authentication: :plain,
4
+ domain: ENV.fetch('SMTP_DOMAIN'), # example: 'this-app.com'
5
+ enable_starttls_auto: true,
6
+ password: ENV.fetch('SMTP_PASSWORD'),
7
+ port: '587',
8
+ user_name: ENV.fetch('SMTP_USERNAME')
9
+ }
@@ -6,6 +6,7 @@ ENV['RAILS_ENV'] = 'test'
6
6
  require File.expand_path('../../config/environment', __FILE__)
7
7
 
8
8
  require 'rspec/rails'
9
+ require 'shoulda/matchers'
9
10
  require 'webmock/rspec'
10
11
 
11
12
  Dir[Rails.root.join('spec/support/**/*.rb')].each { |file| require file }
@@ -26,5 +27,6 @@ RSpec.configure do |config|
26
27
  config.use_transactional_fixtures = false
27
28
  end
28
29
 
30
+ ActiveRecord::Migration.maintain_test_schema!
29
31
  Capybara.javascript_driver = :webkit
30
32
  WebMock.disable_net_connect!(allow_localhost: true)
@@ -1,13 +1,29 @@
1
+ before_install:
2
+ - "echo '--colour' > ~/.rspec"
3
+ - "echo 'gem: --no-document' > ~/.gemrc"
4
+ - export DISPLAY=:99.0
5
+ - sh -e /etc/init.d/xvfb start
1
6
  before_script:
2
- - cp .sample.env .env
7
+ - cp .sample.env .env
8
+ <% if options[:database] == 'postgresql' %>
9
+ - psql -c 'create database "<%= app_name %>_test";' -U postgres
10
+ <% end %>
3
11
  branches:
4
12
  only:
5
- - master
6
- cache: bundler
7
- language: ruby
13
+ - master
14
+ cache:
15
+ - bundler
16
+ language:
17
+ - ruby
8
18
  notifications:
9
19
  campfire:
10
- on_success: change
11
- on_failure: always
12
- template: '%{repository_name} build #%{build_number} on %{branch} by %{author} finished: %{message}: %{build_url}'
13
- rvm: ruby-<%= ruby_version_with_patch_level %>
20
+ on_failure:
21
+ - always
22
+ on_success:
23
+ - change
24
+ template:
25
+ - '(%{branch} - %{author}): %{message} - %{build_url}'
26
+ email:
27
+ - false
28
+ rvm:
29
+ - <%= Suspenders::RUBY_VERSION %>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: suspenders
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.2
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - thoughtbot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-28 00:00:00.000000000 Z
11
+ date: 2014-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -107,6 +107,7 @@ extra_rdoc_files:
107
107
  - LICENSE
108
108
  files:
109
109
  - ".gitignore"
110
+ - ".ruby-version"
110
111
  - ".travis.yml"
111
112
  - CONTRIBUTING.md
112
113
  - Gemfile
@@ -115,7 +116,9 @@ files:
115
116
  - NEWS.md
116
117
  - README.md
117
118
  - Rakefile
119
+ - bin/rake
118
120
  - bin/rspec
121
+ - bin/setup
119
122
  - bin/suspenders
120
123
  - lib/suspenders.rb
121
124
  - lib/suspenders/actions.rb
@@ -132,6 +135,7 @@ files:
132
135
  - spec/support/fake_heroku.rb
133
136
  - spec/support/suspenders.rb
134
137
  - suspenders.gemspec
138
+ - templates/Brewfile
135
139
  - templates/Gemfile.erb
136
140
  - templates/Procfile
137
141
  - templates/README.md.erb
@@ -149,7 +153,6 @@ files:
149
153
  - templates/i18n.rb
150
154
  - templates/postgresql_database.yml.erb
151
155
  - templates/rack_timeout.rb
152
- - templates/ruby-version.erb
153
156
  - templates/sample.env
154
157
  - templates/secrets.yml
155
158
  - templates/smtp.rb
@@ -170,9 +173,9 @@ require_paths:
170
173
  - lib
171
174
  required_ruby_version: !ruby/object:Gem::Requirement
172
175
  requirements:
173
- - - ">="
176
+ - - "~>"
174
177
  - !ruby/object:Gem::Version
175
- version: 1.9.3
178
+ version: 2.1.1
176
179
  required_rubygems_version: !ruby/object:Gem::Requirement
177
180
  requirements:
178
181
  - - ">="
@@ -1 +0,0 @@
1
- <%= ruby_version_with_patch_level %>