blacklight 4.0.1 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +6 -6
- checksums.yaml.gz.sig +2 -0
- data.tar.gz.sig +0 -0
- data/.gitignore +1 -0
- data/.travis.yml +14 -6
- data/Gemfile +2 -3
- data/README.md +3 -1
- data/VERSION +1 -1
- data/app/assets/stylesheets/blacklight/_blacklight_base.css.scss +1 -0
- data/app/assets/stylesheets/blacklight/_dropdown.css.scss +2 -1
- data/app/assets/stylesheets/blacklight/_search_history.css.scss +1 -1
- data/app/assets/stylesheets/blacklight/blacklight.css.scss +2 -0
- data/app/assets/stylesheets/improved-modal/bootstrap-modal.css +2 -0
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +199 -48
- data/app/helpers/blacklight/catalog_helper_behavior.rb +1 -1
- data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +1 -1
- data/app/views/catalog/_document_header.html.erb +1 -1
- data/app/views/catalog/_index_default.html.erb +3 -3
- data/app/views/catalog/_per_page_widget.html.erb +1 -1
- data/app/views/catalog/_show_default.html.erb +3 -3
- data/app/views/catalog/_sort_widget.html.erb +1 -1
- data/app/views/catalog/show.html.erb +29 -32
- data/app/views/layouts/blacklight.html.erb +1 -1
- data/blacklight.gemspec +1 -1
- data/config/locales/blacklight.fr.yml +236 -0
- data/gemfiles/rails3.gemfile +9 -0
- data/gemfiles/rails4.gemfile +10 -0
- data/lib/blacklight/catalog.rb +22 -10
- data/lib/blacklight/configurable.rb +2 -3
- data/lib/blacklight/configuration/fields.rb +5 -4
- data/lib/blacklight/mash.rb +7 -139
- data/lib/blacklight/routes.rb +19 -18
- data/lib/blacklight/solr_helper.rb +14 -11
- data/lib/blacklight/solr_response.rb +1 -1
- data/lib/generators/blacklight/blacklight_generator.rb +9 -1
- data/lib/generators/blacklight/test_support_generator.rb +15 -0
- data/test_support/bin/setup-test-app.sh +8 -12
- data/test_support/bin/test.sh +20 -24
- data/test_support/features/search.feature +0 -3
- data/test_support/features/search_pagination.feature +53 -0
- data/test_support/features/step_definitions/search_pagination_steps.rb +29 -0
- data/test_support/features/step_definitions/search_steps.rb +0 -11
- data/test_support/spec/controllers/catalog_controller_spec.rb +15 -80
- data/test_support/spec/helpers/blacklight_helper_spec.rb +75 -22
- data/test_support/spec/helpers/catalog_helper_spec.rb +8 -1
- data/test_support/spec/helpers/html_head_helper_spec.rb +21 -7
- data/test_support/spec/lib/blacklight_configurable_spec.rb +18 -4
- data/test_support/spec/lib/blacklight_configuration_spec.rb +28 -0
- data/test_support/spec/lib/solr_helper_spec.rb +14 -4
- data/test_support/spec/routing/catalog_routing_spec.rb +67 -0
- data/test_support/spec/views/catalog/index.atom.builder_spec.rb +3 -7
- metadata +42 -15
- metadata.gz.sig +0 -0
@@ -6,10 +6,9 @@ module Blacklight::Configurable
|
|
6
6
|
helper_method :blacklight_config if respond_to? :helper_method
|
7
7
|
end
|
8
8
|
|
9
|
-
#instance methods for blacklight_config,
|
10
|
-
# version unless set specifically on instance
|
9
|
+
#instance methods for blacklight_config, so get a deep copy of the class-level config
|
11
10
|
def blacklight_config
|
12
|
-
@blacklight_config
|
11
|
+
@blacklight_config ||= self.class.blacklight_config.deep_copy
|
13
12
|
end
|
14
13
|
attr_writer :blacklight_config
|
15
14
|
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module Blacklight
|
2
2
|
class Configuration
|
3
|
-
|
4
3
|
# This mixin provides Blacklight::Configuration with generic
|
5
4
|
# solr fields configuration
|
6
5
|
module Fields
|
@@ -9,14 +8,16 @@ module Blacklight
|
|
9
8
|
module ClassMethods
|
10
9
|
|
11
10
|
# Add a configuration block for a collection of solr fields
|
12
|
-
def define_field_access(key)
|
11
|
+
def define_field_access(key, options = {})
|
13
12
|
key = key.to_s if respond_to? :to_s
|
14
13
|
|
15
14
|
self.default_values[key.pluralize.to_sym] = ActiveSupport::OrderedHash.new
|
16
15
|
|
16
|
+
base_class_name = options.fetch(:class, SolrField)
|
17
|
+
|
17
18
|
unless self.const_defined? key.camelcase
|
18
19
|
class_eval <<-END_EVAL, __FILE__, __LINE__ + 1
|
19
|
-
class #{key.camelcase} <
|
20
|
+
class #{key.camelcase} < #{base_class_name}; end
|
20
21
|
END_EVAL
|
21
22
|
end
|
22
23
|
|
@@ -70,7 +71,7 @@ module Blacklight
|
|
70
71
|
when String
|
71
72
|
field_config_from_key_and_hash(config_key, *args)
|
72
73
|
when Symbol
|
73
|
-
args
|
74
|
+
args[0] = args[0].to_s
|
74
75
|
field_config_from_key_and_hash(config_key, *args)
|
75
76
|
when Array
|
76
77
|
field_config_from_array(config_key, *args)
|
data/lib/blacklight/mash.rb
CHANGED
@@ -1,151 +1,19 @@
|
|
1
1
|
# This class has dubious semantics and we only have it so that people can write
|
2
2
|
# params[:key] instead of params['key'].
|
3
|
-
class Mash <
|
3
|
+
class Mash < HashWithIndifferentAccess
|
4
|
+
def initialize *args, &block
|
5
|
+
ActiveSupport::Deprecation.warn("Mash is deprecated, and should be replaced with HashWithIndifferentAccess")
|
4
6
|
|
5
|
-
|
6
|
-
# The default value for the mash. Defaults to an empty hash.
|
7
|
-
#
|
8
|
-
# @details [Alternatives]
|
9
|
-
# If constructor is a Hash, a new mash will be created based on the keys of
|
10
|
-
# the hash and no default value will be set.
|
11
|
-
def initialize(constructor = {})
|
12
|
-
if constructor.is_a?(Hash)
|
13
|
-
super()
|
14
|
-
update(constructor)
|
15
|
-
else
|
16
|
-
super(constructor)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# @param key<Object> The default value for the mash. Defaults to nil.
|
21
|
-
#
|
22
|
-
# @details [Alternatives]
|
23
|
-
# If key is a Symbol and it is a key in the mash, then the default value will
|
24
|
-
# be set to the value matching the key.
|
25
|
-
def default(key = nil)
|
26
|
-
if key.is_a?(Symbol) && include?(key = key.to_s)
|
27
|
-
self[key]
|
28
|
-
else
|
29
|
-
super
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
alias_method :regular_writer, :[]= unless method_defined?(:regular_writer)
|
34
|
-
alias_method :regular_update, :update unless method_defined?(:regular_update)
|
35
|
-
|
36
|
-
# @param key<Object> The key to set.
|
37
|
-
# @param value<Object>
|
38
|
-
# The value to set the key to.
|
39
|
-
#
|
40
|
-
# @see Mash#convert_key
|
41
|
-
# @see Mash#convert_value
|
42
|
-
def []=(key, value)
|
43
|
-
regular_writer(convert_key(key), convert_value(value))
|
44
|
-
end
|
45
|
-
|
46
|
-
# @param other_hash<Hash>
|
47
|
-
# A hash to update values in the mash with. The keys and the values will be
|
48
|
-
# converted to Mash format.
|
49
|
-
#
|
50
|
-
# @return <Mash> The updated mash.
|
51
|
-
def update(other_hash)
|
52
|
-
other_hash.each_pair { |key, value| regular_writer(convert_key(key), convert_value(value)) }
|
53
|
-
self
|
54
|
-
end
|
55
|
-
|
56
|
-
alias_method :merge!, :update
|
57
|
-
|
58
|
-
# @param key<Object> The key to check for. This will be run through convert_key.
|
59
|
-
#
|
60
|
-
# @return <TrueClass, FalseClass> True if the key exists in the mash.
|
61
|
-
def key?(key)
|
62
|
-
super(convert_key(key))
|
63
|
-
end
|
64
|
-
|
65
|
-
# def include? def has_key? def member?
|
66
|
-
alias_method :include?, :key?
|
67
|
-
alias_method :has_key?, :key?
|
68
|
-
alias_method :member?, :key?
|
69
|
-
|
70
|
-
# @param key<Object> The key to fetch. This will be run through convert_key.
|
71
|
-
# @param *extras<Array> Default value.
|
72
|
-
#
|
73
|
-
# @return <Object> The value at key or the default value.
|
74
|
-
def fetch(key, *extras)
|
75
|
-
super(convert_key(key), *extras)
|
76
|
-
end
|
77
|
-
|
78
|
-
# @param *indices<Array>
|
79
|
-
# The keys to retrieve values for. These will be run through +convert_key+.
|
80
|
-
#
|
81
|
-
# @return <Array> The values at each of the provided keys
|
82
|
-
def values_at(*indices)
|
83
|
-
indices.collect {|key| self[convert_key(key)]}
|
84
|
-
end
|
85
|
-
|
86
|
-
# @return <Mash> A duplicate of this mash.
|
87
|
-
def dup
|
88
|
-
Mash.new(self)
|
89
|
-
end
|
90
|
-
|
91
|
-
# @param hash<Hash> The hash to merge with the mash.
|
92
|
-
#
|
93
|
-
# @return <Mash> A new mash with the hash values merged in.
|
94
|
-
def merge(hash)
|
95
|
-
self.dup.update(hash)
|
96
|
-
end
|
97
|
-
|
98
|
-
# @param key<Object>
|
99
|
-
# The key to delete from the mash.\
|
100
|
-
def delete(key)
|
101
|
-
super(convert_key(key))
|
102
|
-
end
|
103
|
-
|
104
|
-
# Used to provide the same interface as Hash.
|
105
|
-
#
|
106
|
-
# @return <Mash> This mash unchanged.
|
107
|
-
def stringify_keys!; self end
|
108
|
-
|
109
|
-
# @return <Hash> The mash as a Hash with string keys.
|
110
|
-
def to_hash
|
111
|
-
Hash.new(default).merge(self)
|
112
|
-
end
|
113
|
-
|
114
|
-
protected
|
115
|
-
# @param key<Object> The key to convert.
|
116
|
-
#
|
117
|
-
# @param <Object>
|
118
|
-
# The converted key. If the key was a symbol, it will be converted to a
|
119
|
-
# string.
|
120
|
-
#
|
121
|
-
# @api private
|
122
|
-
def convert_key(key)
|
123
|
-
key.kind_of?(Symbol) ? key.to_s : key
|
124
|
-
end
|
125
|
-
|
126
|
-
# @param value<Object> The value to convert.
|
127
|
-
#
|
128
|
-
# @return <Object>
|
129
|
-
# The converted value. A Hash or an Array of hashes, will be converted to
|
130
|
-
# their Mash equivalents.
|
131
|
-
#
|
132
|
-
# @api private
|
133
|
-
def convert_value(value)
|
134
|
-
case value
|
135
|
-
when Hash
|
136
|
-
value.to_mash
|
137
|
-
when Array
|
138
|
-
value.collect { |e| convert_value(e) }
|
139
|
-
else
|
140
|
-
value
|
141
|
-
end
|
7
|
+
super
|
142
8
|
end
|
143
9
|
end
|
144
10
|
|
145
11
|
unless Hash.respond_to?(:to_mash)
|
146
12
|
class Hash
|
147
13
|
def to_mash
|
148
|
-
|
14
|
+
ActiveSupport::Deprecation.warn("Hash#to_mash is deprecated, and should be replaced with #with_indifferent_access")
|
15
|
+
|
16
|
+
HashWithIndifferentAccess.new(self)
|
149
17
|
end
|
150
18
|
end
|
151
19
|
end
|
data/lib/blacklight/routes.rb
CHANGED
@@ -30,43 +30,44 @@ module Blacklight
|
|
30
30
|
module RouteSets
|
31
31
|
def bookmarks
|
32
32
|
add_routes do |options|
|
33
|
-
|
33
|
+
delete "bookmarks/clear", :to => "bookmarks#clear", :as => "clear_bookmarks"
|
34
34
|
resources :bookmarks
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
def search_history
|
39
39
|
add_routes do |options|
|
40
|
-
|
41
|
-
|
40
|
+
get "search_history", :to => "search_history#index", :as => "search_history"
|
41
|
+
delete "search_history/clear", :to => "search_history#clear", :as => "clear_search_history"
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
|
46
46
|
def saved_searches
|
47
47
|
add_routes do |options|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
48
|
+
delete "saved_searches/clear", :to => "saved_searches#clear", :as => "clear_saved_searches"
|
49
|
+
get "saved_searches", :to => "saved_searches#index", :as => "saved_searches"
|
50
|
+
put "saved_searches/save/:id", :to => "saved_searches#save", :as => "save_search"
|
51
|
+
delete "saved_searches/forget/:id", :to => "saved_searches#forget", :as => "forget_search"
|
52
|
+
post "saved_searches/forget/:id", :to => "saved_searches#forget", :as => "forget_search"
|
52
53
|
end
|
53
54
|
end
|
54
55
|
|
55
56
|
def catalog
|
56
57
|
add_routes do |options|
|
57
58
|
# Catalog stuff.
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
59
|
+
get 'catalog/opensearch', :as => "opensearch_catalog"
|
60
|
+
get 'catalog/citation', :as => "citation_catalog"
|
61
|
+
get 'catalog/email', :as => "email_catalog"
|
62
|
+
get 'catalog/sms', :as => "sms_catalog"
|
63
|
+
get 'catalog/endnote', :as => "endnote_catalog"
|
64
|
+
get 'catalog/send_email_record', :as => "send_email_record_catalog"
|
65
|
+
get "catalog/facet/:id", :to => 'catalog#facet', :as => 'catalog_facet'
|
65
66
|
|
66
67
|
|
67
|
-
|
68
|
+
get "catalog", :to => 'catalog#index', :as => 'catalog_index'
|
68
69
|
|
69
|
-
|
70
|
+
get 'catalog/:id/librarian_view', :to => "catalog#librarian_view", :as => "librarian_view_catalog"
|
70
71
|
end
|
71
72
|
end
|
72
73
|
|
@@ -83,8 +84,8 @@ module Blacklight
|
|
83
84
|
# Feedback
|
84
85
|
def feedback
|
85
86
|
add_routes do |options|
|
86
|
-
|
87
|
-
|
87
|
+
get "feedback", :to => "feedback#show"
|
88
|
+
get "feedback/complete", :to => "feedback#complete"
|
88
89
|
end
|
89
90
|
end
|
90
91
|
end
|
@@ -84,10 +84,10 @@ module Blacklight::SolrHelper
|
|
84
84
|
|
85
85
|
def find(*args)
|
86
86
|
path = blacklight_config.solr_path
|
87
|
-
response =
|
87
|
+
response = blacklight_solr.get(path, :params=> args[1])
|
88
88
|
Blacklight::SolrResponse.new(force_to_utf8(response), args[1])
|
89
89
|
rescue Errno::ECONNREFUSED => e
|
90
|
-
raise Blacklight::Exceptions::ECONNREFUSED.new("Unable to connect to Solr instance using #{
|
90
|
+
raise Blacklight::Exceptions::ECONNREFUSED.new("Unable to connect to Solr instance using #{blacklight_solr.inspect}")
|
91
91
|
end
|
92
92
|
|
93
93
|
|
@@ -154,6 +154,7 @@ module Blacklight::SolrHelper
|
|
154
154
|
end
|
155
155
|
|
156
156
|
# Now any over-rides from current URL?
|
157
|
+
solr_params[:rows] = user_params[:rows].to_i unless user_params[:rows].blank?
|
157
158
|
solr_params[:rows] = user_params[:per_page].to_i unless user_params[:per_page].blank?
|
158
159
|
|
159
160
|
# Do we need to translate :page to Solr :start?
|
@@ -166,8 +167,8 @@ module Blacklight::SolrHelper
|
|
166
167
|
if solr_params[:rows].blank?
|
167
168
|
raise Exception.new("To use pagination when no :per_page is supplied in the URL, :rows must be configured in blacklight_config default_solr_params")
|
168
169
|
end
|
169
|
-
|
170
|
-
solr_params[:
|
170
|
+
solr_params[:start] = solr_params[:rows].to_i * (user_params[:page].to_i - 1)
|
171
|
+
solr_params[:start] = 0 if solr_params[:start].to_i < 0
|
171
172
|
end
|
172
173
|
|
173
174
|
solr_params[:rows] ||= blacklight_config.per_page.first unless blacklight_config.per_page.blank?
|
@@ -381,14 +382,16 @@ module Blacklight::SolrHelper
|
|
381
382
|
# In later versions of Rails, the #benchmark method can do timing
|
382
383
|
# better for us.
|
383
384
|
bench_start = Time.now
|
384
|
-
|
385
|
-
|
385
|
+
solr_params = self.solr_search_params(user_params).merge(extra_controller_params)
|
386
|
+
solr_params[:qt] ||= blacklight_config.qt
|
386
387
|
path = blacklight_config.solr_path
|
387
|
-
|
388
|
-
|
389
|
-
res =
|
390
|
-
|
391
|
-
|
388
|
+
|
389
|
+
# delete these parameters, otherwise rsolr will pass them through.
|
390
|
+
res = blacklight_solr.send_and_receive(path, :params=>solr_params)
|
391
|
+
|
392
|
+
solr_response = Blacklight::SolrResponse.new(force_to_utf8(res), solr_params)
|
393
|
+
|
394
|
+
Rails.logger.debug("Solr query: #{solr_params.inspect}")
|
392
395
|
Rails.logger.debug("Solr response: #{solr_response.inspect}") if defined?(::BLACKLIGHT_VERBOSE_LOGGING) and ::BLACKLIGHT_VERBOSE_LOGGING
|
393
396
|
Rails.logger.debug("Solr fetch: #{self.class}#query_solr (#{'%.1f' % ((Time.now.to_f - bench_start.to_f)*1000)}ms)")
|
394
397
|
|
@@ -71,8 +71,16 @@ EOF
|
|
71
71
|
# Install Devise?
|
72
72
|
def generate_devise_assets
|
73
73
|
if options[:devise]
|
74
|
-
|
74
|
+
if Rails::VERSION::MAJOR == 4
|
75
|
+
gem "devise", github:'plataformatec/devise', branch: 'rails4'
|
76
|
+
else
|
77
|
+
gem "devise"
|
78
|
+
end
|
79
|
+
|
75
80
|
gem "devise-guests", "~> 0.3"
|
81
|
+
if Rails::VERSION::MAJOR == 4
|
82
|
+
gem 'protected_attributes' # Required for devise
|
83
|
+
end
|
76
84
|
|
77
85
|
Bundler.with_clean_env do
|
78
86
|
run "bundle install"
|
@@ -31,5 +31,20 @@ Requires system('unzip... ') to work, probably won't work on Windows.
|
|
31
31
|
|
32
32
|
|
33
33
|
end
|
34
|
+
|
35
|
+
def configure_action_mailer
|
36
|
+
|
37
|
+
if Rails::VERSION::MAJOR == 4
|
38
|
+
insert_into_file "config/environments/test.rb", :after => "config.action_mailer.delivery_method = :test\n" do <<-EOF
|
39
|
+
config.action_mailer.default_options = {from: 'no-reply@example.org'}
|
40
|
+
EOF
|
41
|
+
end
|
42
|
+
else
|
43
|
+
insert_into_file "config/environments/test.rb", :after => "config.action_mailer.delivery_method = :test\n" do <<-EOF
|
44
|
+
ActionMailer::Base.default(from: 'no-reply@example.org')
|
45
|
+
EOF
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
34
49
|
end
|
35
50
|
end
|
@@ -89,23 +89,19 @@ end
|
|
89
89
|
gem 'blacklight', :path => '../../'
|
90
90
|
gem 'jquery-rails'
|
91
91
|
|
92
|
-
group :assets do
|
93
|
-
gem 'compass-rails', '~> 1.0.0'
|
94
|
-
gem 'compass-susy-plugin', '~> 0.9.0'
|
95
|
-
end
|
96
|
-
|
97
|
-
|
98
92
|
# For testing
|
99
93
|
group :development, :test do
|
100
|
-
gem 'rspec'
|
101
|
-
|
94
|
+
gem 'rspec-rails', '~> 2.12.0'
|
95
|
+
end
|
96
|
+
|
97
|
+
group :test do
|
98
|
+
gem 'cucumber-rails', :require => false
|
102
99
|
gem 'generator_spec'
|
103
|
-
gem 'cucumber-rails'
|
104
100
|
gem 'database_cleaner'
|
105
101
|
gem 'capybara'
|
106
|
-
gem 'rcov', :platform => :mri_18
|
107
|
-
gem 'simplecov', :platform => :mri_19
|
108
|
-
gem 'simplecov-rcov', :platform => :mri_19
|
102
|
+
gem 'rcov', :platform => :mri_18
|
103
|
+
gem 'simplecov', :platform => :mri_19
|
104
|
+
gem 'simplecov-rcov', :platform => :mri_19
|
109
105
|
end
|
110
106
|
|
111
107
|
gem 'jettywrapper', '>= 1.2.0'
|
data/test_support/bin/test.sh
CHANGED
@@ -2,8 +2,7 @@
|
|
2
2
|
# test.sh
|
3
3
|
# Create a default rails appliaction, install blacklight, and run all the tests.
|
4
4
|
|
5
|
-
#If null or empty, use default
|
6
|
-
RAILS_VERSION=${RAILS_VERSION:-"~> 3.2"}
|
5
|
+
#If null or empty, use default valueRAILS
|
7
6
|
JETTY_URL=${JETTY_URL:-"https://github.com/projectblacklight/blacklight-jetty/zipball/v4.0.0"}
|
8
7
|
|
9
8
|
before="$(date +%s)"
|
@@ -38,7 +37,6 @@ rm -rf tmp/test_app
|
|
38
37
|
mkdir -p tmp/test_app
|
39
38
|
cd tmp
|
40
39
|
|
41
|
-
|
42
40
|
if [[ $# -gt 0 ]]
|
43
41
|
then
|
44
42
|
# Make certain rvm will work correctly.
|
@@ -58,18 +56,20 @@ rvm use "$@" --create
|
|
58
56
|
check_errs $? "rvm failed. please run 'rvm install $@', and then re-run these tests."
|
59
57
|
fi
|
60
58
|
|
61
|
-
|
62
|
-
gem install --no-rdoc --no-ri 'rails' -v "$RAILS_VERSION"
|
63
|
-
fi
|
59
|
+
rails new test_app
|
64
60
|
|
65
|
-
|
66
|
-
|
61
|
+
cd test_app
|
62
|
+
|
63
|
+
if [ -e public/index.html ]; then
|
64
|
+
rm public/index.html
|
67
65
|
fi
|
68
66
|
|
69
|
-
rails new test_app
|
70
67
|
|
71
|
-
|
72
|
-
|
68
|
+
if [ "${TRAVIS}" = "true" ]; then
|
69
|
+
echo "adding utf-8 header for the css under travis"
|
70
|
+
echo '@charset "UTF-8";'|cat - app/assets/stylesheets/application.css > app/assets/stylesheets/application.css.utf8 && mv app/assets/stylesheets/application.css.utf8 app/assets/stylesheets/application.css
|
71
|
+
fi
|
72
|
+
|
73
73
|
|
74
74
|
echo "
|
75
75
|
platforms :jruby do
|
@@ -89,27 +89,23 @@ end
|
|
89
89
|
gem 'blacklight', :path => '../../'
|
90
90
|
gem 'jquery-rails'
|
91
91
|
|
92
|
-
group :assets do
|
93
|
-
gem 'compass-rails', '~> 1.0.0'
|
94
|
-
gem 'compass-susy-plugin', '~> 0.9.0'
|
95
|
-
end
|
96
|
-
|
97
|
-
|
98
92
|
# For testing
|
99
93
|
group :development, :test do
|
100
|
-
gem 'rspec'
|
101
|
-
|
94
|
+
gem 'rspec-rails', '~> 2.12.0'
|
95
|
+
end
|
96
|
+
|
97
|
+
group :test do
|
102
98
|
gem 'generator_spec'
|
103
|
-
gem 'cucumber-rails'
|
104
|
-
gem 'database_cleaner'
|
99
|
+
gem 'cucumber-rails', :require => false
|
100
|
+
gem 'database_cleaner', '>= 1.0.0.RC1'
|
105
101
|
if defined? :JRUBY_VERSION
|
106
102
|
gem 'capybara', '~> 1.0'
|
107
103
|
else
|
108
104
|
gem 'capybara'
|
109
105
|
end
|
110
|
-
gem 'rcov', :platform => :mri_18
|
111
|
-
gem 'simplecov', :platform => :mri_19
|
112
|
-
gem 'simplecov-rcov', :platform => :mri_19
|
106
|
+
gem 'rcov', :platform => :mri_18
|
107
|
+
gem 'simplecov', :platform => :mri_19
|
108
|
+
gem 'simplecov-rcov', :platform => :mri_19
|
113
109
|
end
|
114
110
|
|
115
111
|
gem 'jettywrapper', '>= 1.2.0'
|