swiss_knife 0.1.2 → 0.1.3

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/Gemfile CHANGED
@@ -1,8 +1,9 @@
1
1
  source :rubygems
2
2
 
3
- gem "rails", "3.0.0"
3
+ gem "rails", "3.0.1"
4
4
  gem "rspec-rails", "2.0.0"
5
5
  gem "nokogiri"
6
+ gem "fakeweb"
6
7
 
7
8
  platforms :mri_19 do
8
9
  gem "ruby-debug19", :require => "ruby-debug"
data/Gemfile.lock CHANGED
@@ -2,12 +2,12 @@ GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
4
  abstract (1.0.0)
5
- actionmailer (3.0.0)
6
- actionpack (= 3.0.0)
5
+ actionmailer (3.0.1)
6
+ actionpack (= 3.0.1)
7
7
  mail (~> 2.2.5)
8
- actionpack (3.0.0)
9
- activemodel (= 3.0.0)
10
- activesupport (= 3.0.0)
8
+ actionpack (3.0.1)
9
+ activemodel (= 3.0.1)
10
+ activesupport (= 3.0.1)
11
11
  builder (~> 2.1.2)
12
12
  erubis (~> 2.6.6)
13
13
  i18n (~> 0.4.1)
@@ -15,19 +15,19 @@ GEM
15
15
  rack-mount (~> 0.6.12)
16
16
  rack-test (~> 0.5.4)
17
17
  tzinfo (~> 0.3.23)
18
- activemodel (3.0.0)
19
- activesupport (= 3.0.0)
18
+ activemodel (3.0.1)
19
+ activesupport (= 3.0.1)
20
20
  builder (~> 2.1.2)
21
21
  i18n (~> 0.4.1)
22
- activerecord (3.0.0)
23
- activemodel (= 3.0.0)
24
- activesupport (= 3.0.0)
22
+ activerecord (3.0.1)
23
+ activemodel (= 3.0.1)
24
+ activesupport (= 3.0.1)
25
25
  arel (~> 1.0.0)
26
26
  tzinfo (~> 0.3.23)
27
- activeresource (3.0.0)
28
- activemodel (= 3.0.0)
29
- activesupport (= 3.0.0)
30
- activesupport (3.0.0)
27
+ activeresource (3.0.1)
28
+ activemodel (= 3.0.1)
29
+ activesupport (= 3.0.1)
30
+ activesupport (3.0.1)
31
31
  archive-tar-minitar (0.5.2)
32
32
  arel (1.0.1)
33
33
  activesupport (~> 3.0.0)
@@ -36,10 +36,11 @@ GEM
36
36
  diff-lcs (1.1.2)
37
37
  erubis (2.6.6)
38
38
  abstract (>= 1.0.0)
39
+ fakeweb (1.3.0)
39
40
  i18n (0.4.1)
40
41
  linecache19 (0.5.11)
41
42
  ruby_core_source (>= 0.1.4)
42
- mail (2.2.6.1)
43
+ mail (2.2.7)
43
44
  activesupport (>= 2.3.6)
44
45
  mime-types
45
46
  treetop (>= 1.4.5)
@@ -51,17 +52,17 @@ GEM
51
52
  rack (>= 1.0.0)
52
53
  rack-test (0.5.6)
53
54
  rack (>= 1.0)
54
- rails (3.0.0)
55
- actionmailer (= 3.0.0)
56
- actionpack (= 3.0.0)
57
- activerecord (= 3.0.0)
58
- activeresource (= 3.0.0)
59
- activesupport (= 3.0.0)
55
+ rails (3.0.1)
56
+ actionmailer (= 3.0.1)
57
+ actionpack (= 3.0.1)
58
+ activerecord (= 3.0.1)
59
+ activeresource (= 3.0.1)
60
+ activesupport (= 3.0.1)
60
61
  bundler (~> 1.0.0)
61
- railties (= 3.0.0)
62
- railties (3.0.0)
63
- actionpack (= 3.0.0)
64
- activesupport (= 3.0.0)
62
+ railties (= 3.0.1)
63
+ railties (3.0.1)
64
+ actionpack (= 3.0.1)
65
+ activesupport (= 3.0.1)
65
66
  rake (>= 0.8.4)
66
67
  thor (~> 0.14.0)
67
68
  rake (0.8.7)
@@ -96,7 +97,8 @@ PLATFORMS
96
97
  ruby
97
98
 
98
99
  DEPENDENCIES
100
+ fakeweb
99
101
  nokogiri
100
- rails (= 3.0.0)
102
+ rails (= 3.0.1)
101
103
  rspec-rails (= 2.0.0)
102
104
  ruby-debug19
data/README.rdoc CHANGED
@@ -118,6 +118,30 @@ The are some action aliases:
118
118
  update => edit
119
119
  remove => destroy
120
120
 
121
+ === gravatar_tag
122
+
123
+ gravatar_tag user.email
124
+ gravatar_tag "098f6bcd4621d373cade4e832627b4f6"
125
+ gravatar_tag user.email, :size => 80
126
+ gravatar_tag user.email, :rating => :x
127
+
128
+ # Predefined default images provided by Gravatar. Can be
129
+ # :mm, :identicon, :monsterid, :wavatar, :retro, 404
130
+ gravatar_tag user.email, :default => :mm
131
+
132
+ gravatar_tag user.email, :default => "gravatar.png"
133
+ gravatar_tag user.email, :ssl => true
134
+ gravatar_tag user.email, :alt => user.name
135
+ gravatar_tag user.email, :title => user.name
136
+
137
+ === submit_or_cancel
138
+
139
+ submit_or_cancel root_path
140
+ submit_or_cancel root_path :button => "Save"
141
+ submit_or_cancel root_path :button => :"some.scope.for.save"
142
+ submit_or_cancel root_path :cancel => "Go back"
143
+ submit_or_cancel root_path :cancel => :"some.scope.for.go_back"
144
+
121
145
  === RSpec
122
146
 
123
147
  Swiss Knife includes some RSpec matchers. To use them, add the following like to your <tt>spec_helper.rb</tt> file:
@@ -139,21 +163,10 @@ The <tt>have_tag</tt> matcher uses Nokogiri, so you can use any CSS selector acc
139
163
 
140
164
  If you're inspecting some XML snippet, you can use the <tt>have_node</tt> matcher.
141
165
 
142
- === gravatar_tag
143
-
144
- gravatar_tag user.email
145
- gravatar_tag "098f6bcd4621d373cade4e832627b4f6"
146
- gravatar_tag user.email, :size => 80
147
- gravatar_tag user.email, :rating => :x
148
-
149
- # Predefined default images provided by Gravatar. Can be
150
- # :mm, :identicon, :monsterid, :wavatar, :retro, 404
151
- gravatar_tag user.email, :default => :mm
166
+ ==== have_text
152
167
 
153
- gravatar_tag user.email, :default => "gravatar.png"
154
- gravatar_tag user.email, :ssl => true
155
- gravatar_tag user.email, :alt => user.name
156
- gravatar_tag user.email, :title => user.name
168
+ string.should have_text("Lorem ipsum")
169
+ string.should have_text(/Lorem ipsum/)
157
170
 
158
171
  == Maintainer
159
172
 
data/Rakefile CHANGED
@@ -17,7 +17,7 @@ begin
17
17
  gem.has_rdoc = true
18
18
  gem.add_dependency "rails", ">= 3.0.0"
19
19
  gem.add_development_dependency "rspec", ">= 2.0.0"
20
- gem.files = FileList["{Gemfile,Gemfile.lock,Rakefile,README.*,swiss_knife.gemspec}", "{spec,lib}/**/*"]
20
+ gem.files = FileList["{Gemfile,Gemfile.lock,Rakefile,README.*,swiss_knife.gemspec}", "{spec,lib,locales}/**/*"]
21
21
  end
22
22
 
23
23
  Jeweler::GemcutterTasks.new
@@ -57,7 +57,7 @@ module SwissKnife
57
57
  flash.discard(name)
58
58
  end
59
59
 
60
- html
60
+ html.html_safe
61
61
  end
62
62
 
63
63
  def dispatcher_tag
@@ -175,5 +175,23 @@ module SwissKnife
175
175
  body
176
176
  end
177
177
  end
178
+
179
+ # Create a submit button with a cancel link besides.
180
+ #
181
+ # submit_or_cancel root_path
182
+ # submit_or_cancel root_path, :button => "Save"
183
+ # submit_or_cancel root_path, :button => :"some.scope.for.button"
184
+ # submit_or_cancel root_path, :cancel => "Go back"
185
+ # submit_or_cancel root_path, :cancel => :"some.scope.for.link"
186
+ #
187
+ def submit_or_cancel(url, options = {})
188
+ options.reverse_merge!(:button => :"swiss_knife.submit", :cancel => :"swiss_knife.cancel")
189
+
190
+ String.new.tap do |html|
191
+ html << submit_tag(t(options[:button], :default => options[:button]), :class => "button")
192
+ html << " "
193
+ html << link_to(t(options[:cancel], :default => options[:cancel]), url, :class => "cancel")
194
+ end.html_safe
195
+ end
178
196
  end
179
197
  end
@@ -10,12 +10,14 @@ module SwissKnife
10
10
  require "swiss_knife/rake_tasks"
11
11
  end
12
12
 
13
- config.after_initialize do
14
- ActiveSupport.on_load(:action_controller) do
13
+ initializer "swiss_knife.initialize" do
14
+ ::ActionController::Base.instance_eval do
15
15
  include SwissKnife::ActionController
16
16
  helper SwissKnife::Helpers
17
17
  helper_method :page_title
18
18
  end
19
+
20
+ ::I18n.load_path += Dir[File.dirname(__FILE__) + "/../../locales/*.yml"]
19
21
  end
20
22
  end
21
23
  end
@@ -55,6 +55,10 @@ module SwissKnife
55
55
  !matches.empty?
56
56
  end
57
57
 
58
+ def description
59
+ "have tag #{selector.inspect} with #{options.inspect}"
60
+ end
61
+
58
62
  def failure_message
59
63
  explanation = actual_count ? "but found #{actual_count}" : "but did not"
60
64
  "expected\n#{doc.to_s}\nto have #{failure_count_phrase} #{failure_selector_phrase}, #{explanation}"
@@ -0,0 +1,40 @@
1
+ module SwissKnife
2
+ module RSpec
3
+ module Matchers
4
+ def have_text(matcher)
5
+ HaveText.new(matcher)
6
+ end
7
+
8
+ class HaveText
9
+ attr_accessor :matcher, :subject, :regex
10
+
11
+ def initialize(matcher)
12
+ @matcher = matcher
13
+ end
14
+
15
+ def matches?(text)
16
+ @subject = text.to_s
17
+
18
+ case matcher
19
+ when String
20
+ subject.index(matcher)
21
+ when Regexp
22
+ subject.match(matcher)
23
+ end
24
+ end
25
+
26
+ def description
27
+ "have text #{matcher.inspect}"
28
+ end
29
+
30
+ def failure_message
31
+ "expected #{subject.inspect} to include #{matcher.inspect}"
32
+ end
33
+
34
+ def negative_failure_message
35
+ "expected #{subject.inspect} to exclude #{matcher.inspect}"
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,3 +1,4 @@
1
1
  require "swiss_knife/rspec/have_tag"
2
+ require "swiss_knife/rspec/have_text"
2
3
 
3
4
  RSpec.configure {|config| config.include(SwissKnife::RSpec::Matchers)} if defined?(RSpec)
@@ -2,7 +2,7 @@ module SwissKnife
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- PATCH = 2
5
+ PATCH = 3
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
data/locales/en.yml ADDED
@@ -0,0 +1,4 @@
1
+ en:
2
+ swiss_knife:
3
+ submit: "Submit"
4
+ cancel: "Cancel"
data/locales/pt.yml ADDED
@@ -0,0 +1,8 @@
1
+ pt:
2
+ swiss_knife: &PT
3
+ submit: "Submit"
4
+ cancel: "Cancel"
5
+
6
+ "pt-BR":
7
+ swiss_knife:
8
+ <<: *PT
@@ -299,6 +299,7 @@ describe SwissKnife::Helpers do
299
299
  helper.gravatar_tag(@email, :title => "title text").should match(/\btitle="title text"/)
300
300
  end
301
301
 
302
+ private
302
303
  def uri_for(html)
303
304
  html = Nokogiri(html)
304
305
  uri = URI.parse(html.css("img.gravatar").first["src"])
@@ -311,4 +312,34 @@ describe SwissKnife::Helpers do
311
312
  })
312
313
  end
313
314
  end
315
+
316
+ describe "#submit_or_cancel" do
317
+ it "should use defaults" do
318
+ html = helper.submit_or_cancel("/some/path")
319
+ html.should have_tag("a.cancel[href='/some/path']", :text => "Cancel")
320
+ html.should have_tag("input.button[type=submit][value=Submit]")
321
+ end
322
+
323
+ it "should use custom link text from I18n file" do
324
+ I18n.backend.stub :translations => {:en => {:go_back => "Go back"}}
325
+ html = helper.submit_or_cancel("/some/path", :cancel => :go_back)
326
+ html.should have_tag("a.cancel", :text => "Go back")
327
+ end
328
+
329
+ it "should use custom link text" do
330
+ html = helper.submit_or_cancel("/some/path", :cancel => "Go back")
331
+ html.should have_tag("a.cancel", :text => "Go back")
332
+ end
333
+
334
+ it "should use custom button text from I18n file" do
335
+ I18n.backend.stub :translations => {:en => {:send => "Send"}}
336
+ html = helper.submit_or_cancel("/some/path", :button => :send)
337
+ html.should have_tag("input[type=submit][value=Send]")
338
+ end
339
+
340
+ it "should use custom button text" do
341
+ html = helper.submit_or_cancel("/some/path", :button => "Send")
342
+ html.should have_tag("input[type=submit][value=Send]")
343
+ end
344
+ end
314
345
  end
data/spec/spec_helper.rb CHANGED
@@ -5,6 +5,8 @@ require File.dirname(__FILE__) + "/support/config/boot"
5
5
  require "rspec/rails"
6
6
  require "swiss_knife/rspec"
7
7
 
8
+ FakeWeb.allow_net_connect = false
9
+
8
10
  # Load support files
9
11
  Dir[File.dirname(__FILE__) + "/support/rspec/**/*.rb"].each {|file| require file}
10
12
 
@@ -3,8 +3,7 @@ shared_examples_for "remote file" do
3
3
  let(:file_path) { directory.join(file) }
4
4
 
5
5
  it "should update file" do
6
- mock = mock(:read => "FILE CONTENT")
7
- subject.should_receive(:open).with(url).and_return(mock)
6
+ FakeWeb.register_uri(:get, url, :body => "FILE CONTENT")
8
7
  subject.update
9
8
 
10
9
  File.read(file_path).should == "FILE CONTENT"
@@ -12,8 +11,7 @@ shared_examples_for "remote file" do
12
11
 
13
12
  it "should overwrite previous file" do
14
13
  File.open(file_path, "w+") << "OLD CONTENT"
15
- mock = mock(:read => "UPDATED CONTENT")
16
- subject.should_receive(:open).with(url).and_return(mock)
14
+ FakeWeb.register_uri(:get, url, :body => "UPDATED CONTENT")
17
15
  subject.update
18
16
 
19
17
  File.read(file_path).should == "UPDATED CONTENT"
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ describe SwissKnife::RSpec::Matchers::HaveText do
4
+ it "should match string" do
5
+ "abc".should have_text("abc")
6
+ end
7
+
8
+ it "should match regexp" do
9
+ "abc".should have_text(/b/)
10
+ end
11
+
12
+ it "should not match string" do
13
+ "abc".should_not have_text("d")
14
+ end
15
+
16
+ it "should not match regexp" do
17
+ "abc".should_not have_text(/d/)
18
+ end
19
+ end
data/swiss_knife.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{swiss_knife}
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Nando Vieira"]
12
- s.date = %q{2010-10-12}
12
+ s.date = %q{2010-10-14}
13
13
  s.description = %q{Several helpers for Rails 3}
14
14
  s.email = %q{fnando.vieira@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -34,8 +34,11 @@ Gem::Specification.new do |s|
34
34
  "lib/swiss_knife/rake_tasks.rb",
35
35
  "lib/swiss_knife/rspec.rb",
36
36
  "lib/swiss_knife/rspec/have_tag.rb",
37
+ "lib/swiss_knife/rspec/have_text.rb",
37
38
  "lib/swiss_knife/support/remote_file.rb",
38
39
  "lib/swiss_knife/version.rb",
40
+ "locales/en.yml",
41
+ "locales/pt.yml",
39
42
  "spec/controllers/application_controller_spec.rb",
40
43
  "spec/helpers/helpers_spec.rb",
41
44
  "spec/resources/assets.yml",
@@ -62,6 +65,7 @@ Gem::Specification.new do |s|
62
65
  "spec/swiss_knife/jquery_spec.rb",
63
66
  "spec/swiss_knife/jquery_ujs_spec.rb",
64
67
  "spec/swiss_knife/modernizr_spec.rb",
68
+ "spec/swiss_knife/rspec/have_text_spec.rb",
65
69
  "swiss_knife.gemspec"
66
70
  ]
67
71
  s.homepage = %q{http://github.com/fnando/swiss_knife}
@@ -81,7 +85,8 @@ Gem::Specification.new do |s|
81
85
  "spec/swiss_knife/i18n_js_spec.rb",
82
86
  "spec/swiss_knife/jquery_spec.rb",
83
87
  "spec/swiss_knife/jquery_ujs_spec.rb",
84
- "spec/swiss_knife/modernizr_spec.rb"
88
+ "spec/swiss_knife/modernizr_spec.rb",
89
+ "spec/swiss_knife/rspec/have_text_spec.rb"
85
90
  ]
86
91
 
87
92
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 2
9
- version: 0.1.2
8
+ - 3
9
+ version: 0.1.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Nando Vieira
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-12 00:00:00 -03:00
17
+ date: 2010-10-14 00:00:00 -03:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -74,8 +74,11 @@ files:
74
74
  - lib/swiss_knife/rake_tasks.rb
75
75
  - lib/swiss_knife/rspec.rb
76
76
  - lib/swiss_knife/rspec/have_tag.rb
77
+ - lib/swiss_knife/rspec/have_text.rb
77
78
  - lib/swiss_knife/support/remote_file.rb
78
79
  - lib/swiss_knife/version.rb
80
+ - locales/en.yml
81
+ - locales/pt.yml
79
82
  - spec/controllers/application_controller_spec.rb
80
83
  - spec/helpers/helpers_spec.rb
81
84
  - spec/resources/assets.yml
@@ -102,6 +105,7 @@ files:
102
105
  - spec/swiss_knife/jquery_spec.rb
103
106
  - spec/swiss_knife/jquery_ujs_spec.rb
104
107
  - spec/swiss_knife/modernizr_spec.rb
108
+ - spec/swiss_knife/rspec/have_text_spec.rb
105
109
  - swiss_knife.gemspec
106
110
  has_rdoc: true
107
111
  homepage: http://github.com/fnando/swiss_knife
@@ -148,3 +152,4 @@ test_files:
148
152
  - spec/swiss_knife/jquery_spec.rb
149
153
  - spec/swiss_knife/jquery_ujs_spec.rb
150
154
  - spec/swiss_knife/modernizr_spec.rb
155
+ - spec/swiss_knife/rspec/have_text_spec.rb