magic_lamp 1.5.2 → 1.6.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: 41478cabfbc093d487b0dba06c3da1eda0f2cd7b
4
- data.tar.gz: 739255d6adb9212a7353f1d5ab21100f8c91c589
3
+ metadata.gz: c8bca611448f6cd6086f0a9a17393ffce473d65d
4
+ data.tar.gz: adfc6d57c0e0a61d4a02c1c36ec8b137c1ca3ed9
5
5
  SHA512:
6
- metadata.gz: 7f55d8114967531bf6da21d5863b9fdaa03822daf179e21de2f26fffbb16ff1eb33f86b705db85b4635c5a6e5fccfb7a24af44a7ffe48b93500fa0b1d5b52677
7
- data.tar.gz: e8e0a9c49ee7403bf9735e8a9205f43fa513a3808e9507ffb2bacb7f2dbc54635ff35fdbd5c1a370ec174682b2e53345c03c1051017ded7a629eac48a83c59bd
6
+ metadata.gz: 8eeab2759a000a30e47eabd000e5c49fcf46c20de833026c9aa464c3647f1d95f85a138450010fab737387f01aab5fa82ee290d942b68747467aaba54cdcd768
7
+ data.tar.gz: 83aab308b53d110243d0c8132fdb96aa4a83c47e9d6bcd36e6a5dd4c231cfe790af3f483834bb29ed4da0540022d849d8f491925385ef4bee2b75bfeae8eb3cd
data/README.md CHANGED
@@ -6,8 +6,6 @@ Magic Lamp helps you get your Rails templates into your JavaScript tests. This m
6
6
  if you change your templates _and_ you don't have to create so many fixtures. Plus, it lets you test your views in JavaScript.
7
7
  All you have to do is set up your data just like you would in a controller.
8
8
 
9
- It's not required that you use [Teaspoon](https://github.com/modeset/teaspoon) as your JavaScript test runner, but you should.
10
-
11
9
  Table of Contents
12
10
  -----------------
13
11
  1. [Installation](#installation)
@@ -31,12 +29,7 @@ And then execute:
31
29
 
32
30
  $ bundle install
33
31
 
34
- Or install it yourself with:
35
-
36
- $ gem install magic_lamp
37
-
38
- Then paste `mount MagicLamp::Genie, at: "/magic_lamp" if defined?(MagicLamp)` into your `config/routes.rb`
39
- like so:
32
+ Then paste `mount MagicLamp::Genie, at: "/magic_lamp" if defined?(MagicLamp)` into your `config/routes.rb` like so:
40
33
  ```ruby
41
34
  Rails.application.routes.draw do
42
35
  # ...
@@ -50,24 +43,29 @@ Then drop this:
50
43
  ```js
51
44
  //= require magic_lamp
52
45
  ```
53
- at the top of your `spec_helper.js` (assuming you're using [Teaspoon](https://github.com/modeset/teaspoon) or another JavaScript spec runner for Rails that allows the use of Sprockets directives).
46
+ at the top of your `spec_helper.js` (assuming you're using JavaScript spec runner for Rails that allows the use of Sprockets directives).
54
47
 
55
- (I highly recommend that you use [Teaspoon](https://github.com/modeset/teaspoon) as your JavaScript spec runner.)
48
+ If your JavaScript doesn't support XHR requests, you can drop this in instead:
56
49
 
57
- Now you've got the basic setup.
50
+ ```js
51
+ //= require magic_lamp
52
+ //= require magic_lamp/all_fixtures
53
+ ```
58
54
 
59
- In case you need it, [here's an example app](https://github.com/crismali/magic_lamp/tree/master/example).
55
+ `//= require magic_lamp/all_fixtures` will load all of your fixtures without making any XHR requests.
56
+
57
+ Now you've got the basic setup.
60
58
 
61
59
  ### Debugging
62
60
  Visit `/magic_lamp/lint` in your browser to lint your fixtures. You can also run `rake magic_lamp:lint` (or `rake mll` for short) to lint your fixtures from the command line.
63
61
 
64
62
  ### Loading Helpers
65
63
 
66
- Simply `require` or `load` your helpers in the `magic_lamp_config.rb` file like so:
64
+ Simply `load` your helpers in the `magic_lamp_config.rb` file like so:
67
65
 
68
66
  ```ruby
69
67
  # in magic_lamp_config.rb
70
- Dir[Rails.root.join("spec", "support", "magic_lamp_helpers/**/*.rb")].each { |f| require f }
68
+ Dir[Rails.root.join("spec", "support", "magic_lamp_helpers/**/*.rb")].each { |f| load f }
71
69
  ```
72
70
 
73
71
  ### With Database Cleaner
@@ -399,6 +397,7 @@ It requires a block to which it yields the configuration object. Here you can se
399
397
  Example:
400
398
 
401
399
  ```ruby
400
+ # spec/support/magic_lamp/helpers/auth_stub.rb
402
401
  module AuthStub
403
402
  def current_user
404
403
  @current_user ||= User.create!(
@@ -408,8 +407,11 @@ module AuthStub
408
407
  end
409
408
  end
410
409
 
410
+ # spec/magic_lamp_config.rb (can be anywhere in /spec)
411
411
  MagicLamp.configure do |config|
412
412
 
413
+ Dir[Rails.root.join("spec", "support", "magic_lamp_helpers/**/*.rb")].each { |f| load f }
414
+
413
415
  # if you want to require the name parameter for the `fixture` method
414
416
  config.infer_names = false
415
417
 
@@ -0,0 +1,12 @@
1
+ <% all_fixtures = MagicLamp.generate_all_fixtures.to_json rescue nil %>
2
+
3
+ <% if all_fixtures %>
4
+
5
+ MagicLamp.genie.cacheOnly = true;
6
+ MagicLamp.genie.cache = <%= MagicLamp.generate_all_fixtures.to_json %>;
7
+
8
+ <% else %>
9
+
10
+ throw new Error(MagicLamp.genericError);
11
+
12
+ <% end %>
@@ -85,7 +85,7 @@
85
85
  if (this.xhrStatus(xhr) === 400) {
86
86
  this.handleError(xhr.responseText);
87
87
  } else if (this.xhrStatus(xhr) > 400) {
88
- this.handleError('Something went wrong, please check the server log or run `rake magic_lamp:lint` for more information');
88
+ this.handleError(MagicLamp.genericError);
89
89
  }
90
90
  return xhr;
91
91
  },
@@ -17,7 +17,9 @@
17
17
 
18
18
  preload: function() {
19
19
  this.genie.preload.apply(this.genie, arguments);
20
- }
20
+ },
21
+
22
+ genericError: 'Something went wrong, please check the server log, run `rake magic_lamp:lint`, or visit `/magic_lamp/lint` for more information'
21
23
  };
22
24
 
23
25
  MagicLamp.clean = function() {
data/lib/magic_lamp.rb CHANGED
@@ -1,4 +1,4 @@
1
- require "rake"
1
+ require "method_source"
2
2
 
3
3
  require "magic_lamp/engine"
4
4
  require "magic_lamp/constants"
@@ -9,8 +9,8 @@ require "magic_lamp/defaults_manager"
9
9
  require "magic_lamp/fixture_creator"
10
10
  require "magic_lamp/render_catcher"
11
11
 
12
- require "tasks/lint_task"
13
- require "tasks/fixture_names_task"
12
+ require "tasks/lint"
13
+ require "tasks/fixture_names"
14
14
 
15
15
  module MagicLamp
16
16
  class << self
@@ -1,3 +1,3 @@
1
1
  module MagicLamp
2
- VERSION = "1.5.2"
2
+ VERSION = "1.6.0"
3
3
  end
@@ -0,0 +1,12 @@
1
+ MagicLamp::Genie.rake_tasks do
2
+ namespace :magic_lamp do
3
+ desc "Displays all Magic Lamp fixture names"
4
+ task fixture_names: :environment do
5
+ MagicLamp.load_lamp_files
6
+ puts MagicLamp.registered_fixtures.keys.sort
7
+ end
8
+ end
9
+
10
+ desc "Displays all Magic Lamp fixture names (alias for `magic_lamp:fixture_names`)"
11
+ task mlfn: "magic_lamp:fixture_names"
12
+ end
data/lib/tasks/lint.rb ADDED
@@ -0,0 +1,88 @@
1
+ MagicLamp::Genie.rake_tasks do
2
+ namespace :magic_lamp do
3
+ desc "Generates all Magic Lamp fixtures and displays errors for debugging"
4
+ task lint: ["magic_lamp:lint:config", "magic_lamp:lint:files", "magic_lamp:lint:fixtures"]
5
+
6
+ namespace :lint do
7
+ desc "Lints your Magic Lamp configuration and reports any errors"
8
+ task config: :environment do
9
+ puts "Linting Magic Lamp configuration..."
10
+ errors = MagicLamp.lint_config
11
+ if errors.present?
12
+ if errors[:config_file_load].present?
13
+ puts "Loading configuration failed with:"
14
+ puts "\n#{errors[:config_file_load]}"
15
+ end
16
+
17
+ [:before_each, :after_each].each do |callback|
18
+ if errors[callback].present?
19
+ puts "Executing #{callback} failed with:"
20
+ puts "\n#{errors[callback]}"
21
+ end
22
+ end
23
+ abort
24
+ else
25
+ puts "Configuration looks good!"
26
+ end
27
+ end
28
+
29
+ desc "Lints your Magic Lamp lamp files and reports any errors"
30
+ task files: :environment do
31
+ puts "Linting lamp files..."
32
+ errors = MagicLamp.lint_fixtures[:files]
33
+
34
+ if errors.present?
35
+ puts "The following files are broken:"
36
+ puts ""
37
+
38
+ errors.each do |path, error|
39
+ puts "File: #{path}"
40
+ puts "Error: #{error}"
41
+ puts ""
42
+ end
43
+ abort
44
+ else
45
+ puts "Lamp files look good!"
46
+ end
47
+ end
48
+
49
+ desc "Lints your Magic Lamp fixtures and reports any errors"
50
+ task fixtures: :environment do
51
+ puts "Linting Magic Lamp fixtures..."
52
+ errors = MagicLamp.lint_fixtures[:fixtures]
53
+
54
+ if errors.present?
55
+ puts "The following fixtures are broken:"
56
+ puts ""
57
+
58
+ errors.each do |name, fixture_info|
59
+ puts "Name: \"#{name}\""
60
+ render_block = fixture_info[:render_block]
61
+ puts "File: #{render_block.source_location.join(':')}"
62
+ puts "Controller: #{fixture_info[:controller]}"
63
+
64
+ if fixture_info[:extend].present?
65
+ extensions = fixture_info[:extend].join(", ")
66
+ else
67
+ extensions = "None"
68
+ end
69
+
70
+ puts "Extensions: #{extensions}"
71
+ puts ""
72
+ puts "Source code:"
73
+ puts render_block.source
74
+ puts ""
75
+ puts "Error: #{fixture_info[:error]}"
76
+ puts ""
77
+ end
78
+ abort
79
+ else
80
+ puts "Fixtures look good!"
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ desc "Generates all Magic Lamp fixtures and displays errors for debugging (alias for `magic_lamp:lint`)"
87
+ task mll: "magic_lamp:lint"
88
+ end
@@ -2,7 +2,7 @@ require "rails_helper"
2
2
 
3
3
  module MagicLamp
4
4
  describe LintController do
5
- routes { Engine.routes }
5
+ routes { MagicLamp::Engine.routes }
6
6
 
7
7
  describe "#index" do
8
8
  context "no errors" do
@@ -308,7 +308,7 @@ describe('Genie', function() {
308
308
  stub(subject, 'xhrStatus', 500);
309
309
  var path = '/magic_lamp/foo/bar';
310
310
  subject.xhrRequest(path);
311
- expect(subject.handleError).to.have.been.calledWith('Something went wrong, please check the server log or run `rake magic_lamp:lint` for more information');
311
+ expect(subject.handleError).to.have.been.calledWith(MagicLamp.genericError);
312
312
  });
313
313
 
314
314
  it('calls handleError with the default error message if the status was 404', function() {
@@ -316,7 +316,7 @@ describe('Genie', function() {
316
316
  stub(subject, 'xhrStatus', 404);
317
317
  var path = '/magic_lamp/foo/bar';
318
318
  subject.xhrRequest(path);
319
- expect(subject.handleError).to.have.been.calledWith('Something went wrong, please check the server log or run `rake magic_lamp:lint` for more information');
319
+ expect(subject.handleError).to.have.been.calledWith(MagicLamp.genericError);
320
320
  });
321
321
  });
322
322
 
@@ -0,0 +1,32 @@
1
+ require "rails_helper"
2
+
3
+ describe "All fixtures js erb" do
4
+ subject do
5
+ sprockets_env = Sprockets::Environment.new
6
+ sprockets_env.append_path("app/assets/javascripts/")
7
+ sprockets_env["magic_lamp/all_fixtures.js"].to_s
8
+ end
9
+
10
+ it "sets cache only to true" do
11
+ expect(subject).to match(/MagicLamp.genie.cacheOnly = true/)
12
+ end
13
+
14
+ it "provides all of the fixtures as json in the cache" do
15
+ excaped_json = Regexp.escape(MagicLamp.generate_all_fixtures.to_json)
16
+ expect(subject).to match(/MagicLamp.genie.cache = #{excaped_json}/)
17
+ end
18
+
19
+ it "does not throw an error" do
20
+ expect(subject).to_not match(/throw new Error\(MagicLamp.genericError\)/)
21
+ end
22
+
23
+ context "errors" do
24
+ before do
25
+ allow(MagicLamp).to receive(:generate_all_fixtures).and_raise("Some error")
26
+ end
27
+
28
+ it "throws an error" do
29
+ expect(subject).to match(/throw new Error\(MagicLamp.genericError\)/)
30
+ end
31
+ end
32
+ end
data/spec/spec_helper.rb CHANGED
@@ -15,7 +15,6 @@
15
15
  #
16
16
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
17
17
  require "fantaskspec"
18
- MAIN_OBJECT = self
19
18
 
20
19
  Dir[File.expand_path("../support/**/*.rb", __FILE__)].each { |file| require file }
21
20
 
@@ -4,7 +4,7 @@ describe "magic_lamp:fixture_names" do
4
4
  it { is_expected.to depend_on(:environment) }
5
5
 
6
6
  it "outputs a sorted list of all the fixture names" do
7
- expect(MAIN_OBJECT).to receive(:puts) do |output|
7
+ expect(MagicLamp::Genie.instance).to receive(:puts) do |output|
8
8
  fixture_names = MagicLamp.registered_fixtures.keys.sort
9
9
  expect(output).to_not be_empty
10
10
  expect(output).to eq(fixture_names)
@@ -34,7 +34,7 @@ describe "magic_lamp:lint:config" do
34
34
  end
35
35
 
36
36
  it "does not abort" do
37
- expect(MAIN_OBJECT).to_not receive(:abort)
37
+ expect(MagicLamp::Genie.instance).to_not receive(:abort)
38
38
  end
39
39
  end
40
40
 
@@ -42,7 +42,7 @@ describe "magic_lamp:lint:config" do
42
42
  let!(:error_proc) { proc { raise "Nope" } }
43
43
 
44
44
  before do
45
- allow(MAIN_OBJECT).to receive(:abort)
45
+ allow(MagicLamp::Genie.instance).to receive(:abort)
46
46
  end
47
47
 
48
48
  it "tells us if the file could be loaded" do
@@ -70,7 +70,7 @@ describe "magic_lamp:lint:config" do
70
70
  allow(MagicLamp).to receive(:load_config) do
71
71
  load Rails.root.join("error_specs", "config_file_load_error.rb")
72
72
  end
73
- expect(MAIN_OBJECT).to receive(:abort)
73
+ expect(MagicLamp::Genie.instance).to receive(:abort)
74
74
  capture_stdout { subject.execute }
75
75
  end
76
76
  end
@@ -81,7 +81,7 @@ describe "magic_lamp:lint:files" do
81
81
  let(:output) { capture_stdout { subject.execute } }
82
82
 
83
83
  before do
84
- allow(MAIN_OBJECT).to receive(:abort).and_return(:abort)
84
+ allow(MagicLamp::Genie.instance).to receive(:abort).and_return(:abort)
85
85
  end
86
86
 
87
87
  it { is_expected.to depend_on(:environment) }
@@ -93,7 +93,7 @@ describe "magic_lamp:lint:files" do
93
93
  end
94
94
 
95
95
  it "does not abort" do
96
- expect(MAIN_OBJECT).to_not receive(:abort)
96
+ expect(MagicLamp::Genie.instance).to_not receive(:abort)
97
97
  capture_stdout { subject.execute }
98
98
  end
99
99
  end
@@ -120,7 +120,7 @@ describe "magic_lamp:lint:files" do
120
120
 
121
121
  it "aborts the task" do
122
122
  allow(MagicLamp).to receive(:lamp_files).and_return(lamp_file_paths)
123
- expect(MAIN_OBJECT).to receive(:abort)
123
+ expect(MagicLamp::Genie.instance).to receive(:abort)
124
124
  capture_stdout { subject.execute }
125
125
  end
126
126
  end
@@ -139,14 +139,14 @@ describe "magic_lamp:lint:fixtures" do
139
139
  end
140
140
 
141
141
  it "does not abort" do
142
- expect(MAIN_OBJECT).to_not receive(:abort)
142
+ expect(MagicLamp::Genie.instance).to_not receive(:abort)
143
143
  capture_stdout { subject.execute }
144
144
  end
145
145
  end
146
146
 
147
147
  context "errors" do
148
148
  before do
149
- allow(MAIN_OBJECT).to receive(:abort).and_return(:abort)
149
+ allow(MagicLamp::Genie.instance).to receive(:abort).and_return(:abort)
150
150
  allow(MagicLamp).to receive(:lamp_files).and_return([Rails.root.join("error_specs", "broken_fixtures.rb").to_s])
151
151
  end
152
152
 
@@ -181,7 +181,7 @@ describe "magic_lamp:lint:fixtures" do
181
181
  end
182
182
 
183
183
  it "aborts the task" do
184
- expect(MAIN_OBJECT).to receive(:abort)
184
+ expect(MagicLamp::Genie.instance).to receive(:abort)
185
185
  capture_stdout { subject.execute }
186
186
  end
187
187
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: magic_lamp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Crismali
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-28 00:00:00.000000000 Z
11
+ date: 2015-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -245,6 +245,7 @@ files:
245
245
  - LICENSE
246
246
  - README.md
247
247
  - app/assets/javascripts/magic_lamp.js
248
+ - app/assets/javascripts/magic_lamp/all_fixtures.js.erb
248
249
  - app/assets/javascripts/magic_lamp/application.js
249
250
  - app/assets/javascripts/magic_lamp/boot.js
250
251
  - app/assets/javascripts/magic_lamp/genie.js
@@ -270,8 +271,8 @@ files:
270
271
  - lib/magic_lamp/fixture_creator.rb
271
272
  - lib/magic_lamp/render_catcher.rb
272
273
  - lib/magic_lamp/version.rb
273
- - lib/tasks/fixture_names_task.rb
274
- - lib/tasks/lint_task.rb
274
+ - lib/tasks/fixture_names.rb
275
+ - lib/tasks/lint.rb
275
276
  - spec/controllers/magic_lamp/fixtures_controller_spec.rb
276
277
  - spec/controllers/magic_lamp/lint_controller_spec.rb
277
278
  - spec/dummy/README.rdoc
@@ -337,6 +338,7 @@ files:
337
338
  - spec/javascripts/support/chai-fuzzy.js
338
339
  - spec/javascripts/support/sinon-chai.js
339
340
  - spec/javascripts/support/underscore-1.6.js
341
+ - spec/lib/all_fixtures_spec.rb
340
342
  - spec/lib/configuration_spec.rb
341
343
  - spec/lib/defaults_manager_spec.rb
342
344
  - spec/lib/fixture_creator_spec.rb
@@ -438,6 +440,7 @@ test_files:
438
440
  - spec/javascripts/support/chai-fuzzy.js
439
441
  - spec/javascripts/support/sinon-chai.js
440
442
  - spec/javascripts/support/underscore-1.6.js
443
+ - spec/lib/all_fixtures_spec.rb
441
444
  - spec/lib/configuration_spec.rb
442
445
  - spec/lib/defaults_manager_spec.rb
443
446
  - spec/lib/fixture_creator_spec.rb
@@ -1,10 +0,0 @@
1
- namespace :magic_lamp do
2
- desc "Displays all Magic Lamp fixture names"
3
- task fixture_names: :environment do
4
- MagicLamp.load_lamp_files
5
- puts MagicLamp.registered_fixtures.keys.sort
6
- end
7
- end
8
-
9
- desc "Displays all Magic Lamp fixture names (alias for `magic_lamp:fixture_names`)"
10
- task mlfn: "magic_lamp:fixture_names"
@@ -1,88 +0,0 @@
1
- require "method_source"
2
-
3
- namespace :magic_lamp do
4
- desc "Generates all Magic Lamp fixtures and displays errors for debugging"
5
- task lint: ["magic_lamp:lint:config", "magic_lamp:lint:files", "magic_lamp:lint:fixtures"]
6
-
7
- namespace :lint do
8
- desc "Lints your Magic Lamp configuration and reports any errors"
9
- task config: :environment do
10
- puts "Linting Magic Lamp configuration..."
11
- errors = MagicLamp.lint_config
12
- if errors.present?
13
- if errors[:config_file_load].present?
14
- puts "Loading configuration failed with:"
15
- puts "\n#{errors[:config_file_load]}"
16
- end
17
-
18
- [:before_each, :after_each].each do |callback|
19
- if errors[callback].present?
20
- puts "Executing #{callback} failed with:"
21
- puts "\n#{errors[callback]}"
22
- end
23
- end
24
- abort
25
- else
26
- puts "Configuration looks good!"
27
- end
28
- end
29
-
30
- desc "Lints your Magic Lamp lamp files and reports any errors"
31
- task files: :environment do
32
- puts "Linting lamp files..."
33
- errors = MagicLamp.lint_fixtures[:files]
34
-
35
- if errors.present?
36
- puts "The following files are broken:"
37
- puts ""
38
-
39
- errors.each do |path, error|
40
- puts "File: #{path}"
41
- puts "Error: #{error}"
42
- puts ""
43
- end
44
- abort
45
- else
46
- puts "Lamp files look good!"
47
- end
48
- end
49
-
50
- desc "Lints your Magic Lamp fixtures and reports any errors"
51
- task fixtures: :environment do
52
- puts "Linting Magic Lamp fixtures..."
53
- errors = MagicLamp.lint_fixtures[:fixtures]
54
-
55
- if errors.present?
56
- puts "The following fixtures are broken:"
57
- puts ""
58
-
59
- errors.each do |name, fixture_info|
60
- puts "Name: \"#{name}\""
61
- render_block = fixture_info[:render_block]
62
- puts "File: #{render_block.source_location.join(':')}"
63
- puts "Controller: #{fixture_info[:controller]}"
64
-
65
- if fixture_info[:extend].present?
66
- extensions = fixture_info[:extend].join(", ")
67
- else
68
- extensions = "None"
69
- end
70
-
71
- puts "Extensions: #{extensions}"
72
- puts ""
73
- puts "Source code:"
74
- puts render_block.source
75
- puts ""
76
- puts "Error: #{fixture_info[:error]}"
77
- puts ""
78
- end
79
- abort
80
- else
81
- puts "Fixtures look good!"
82
- end
83
- end
84
- end
85
- end
86
-
87
- desc "Generates all Magic Lamp fixtures and displays errors for debugging (alias for `magic_lamp:lint`)"
88
- task mll: "magic_lamp:lint"