rails_mocks 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 18844b035c16dde338319e066450327234660c9eb12d3a9c202e3e6f1bf601d4
4
+ data.tar.gz: 2a6493246d7d5f8e52d3f73def90060b8391a8423823aba45868da110bb2d77f
5
+ SHA512:
6
+ metadata.gz: 287bbcdcf0f8d507644c53c34f89e8e290b6fabc8478f6b6e7c3cfe973c804029e6d4cd0d647033ad06ffa52cfe522cb47b0523bfc02e17152cc494ce40d63cd
7
+ data.tar.gz: f1aa861a3d1c78e21923a7f3491ed53689f37d9cb5aeaa060f8bd5ee0ab2a744e93097c6e6f2a1f466427c92d27e39d733dbed207edd9cc0a8a1aa376cb5c6e2
data/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Rails Mocks
2
+
3
+ `Rails Mocks` Makes stubbing in your Rails application from an external resource easier.
@@ -0,0 +1,3 @@
1
+ require 'rails_mocks/stub'
2
+ require 'rails_mocks/middleware'
3
+ require 'rails_mocks/rails'
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsMocks
4
+ class Middleware
5
+ HEADER_NAME = "HTTP_RAILS_MOCKS"
6
+
7
+ def initialize(app)
8
+ @app = app
9
+ end
10
+
11
+ def call(req)
12
+ return @app.call(req) if stubs(req).blank?
13
+
14
+ status, headers, response = nil
15
+ RSpec::Mocks.with_temporary_scope do
16
+ RSpec::Mocks::Syntax.enable_expect(self.class)
17
+ parsed_stubs(req).each do |stub|
18
+ allow(stub.allow).to(stub.receiver)
19
+ end
20
+ status, headers, response = @app.call(req)
21
+ end
22
+ [status, headers, response]
23
+ end
24
+
25
+ private
26
+
27
+ def parsed_stubs(req)
28
+ JSON.parse(stubs(req), symbolize_names: true).map do |stub|
29
+ RailsMocks::Stub.new(stub)
30
+ end
31
+ end
32
+
33
+ def stubs(req)
34
+ req[HEADER_NAME]
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsMocks
4
+ class Railtie < Rails::Railtie
5
+ initializer "rails_mocks.configure_rails_initialization" do
6
+ insert_middleware
7
+ end
8
+
9
+ def insert_middleware
10
+ app.middleware.use RailsMocks::Middleware
11
+ end
12
+
13
+ def app
14
+ Rails.application
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsMocks
4
+ class Stub
5
+ include RSpec::Mocks::ExampleMethods
6
+
7
+ def initialize(stub)
8
+ @stub = stub
9
+ end
10
+
11
+ def allow
12
+ stub[:allow].constantize
13
+ end
14
+
15
+ def receiver
16
+ receiver = receive(_receive)
17
+ receiver.with(_with) if _with
18
+ receiver.and_return(_and_return) if _and_return
19
+ receiver
20
+ end
21
+
22
+ private
23
+
24
+ attr_reader :stub
25
+
26
+ def _receive
27
+ stub[:receive]
28
+ end
29
+
30
+ def _with
31
+ fetch_data(:with)
32
+ end
33
+
34
+ def _and_return
35
+ fetch_data(:and_return)
36
+ end
37
+
38
+ def fetch_data(key)
39
+ data = stub.fetch(key, {})
40
+ body = data[:body]
41
+ return double(body) if wrap_double?(data)
42
+ body
43
+ end
44
+
45
+ def wrap_double?(data)
46
+ data[:double]
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsMocks
4
+ VERSION = "0.0.1"
5
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails_mocks
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Anton Kachan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-07-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 6.1.3.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 6.1.3.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec-mocks
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 3.9.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 3.9.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry-byebug
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.7'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.7'
55
+ description: Provides rspec-mocks syntax from an external source like cypress
56
+ email:
57
+ - anton.kachan@freshly.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - README.md
63
+ - lib/rails_mocks.rb
64
+ - lib/rails_mocks/middleware.rb
65
+ - lib/rails_mocks/rails.rb
66
+ - lib/rails_mocks/stub.rb
67
+ - lib/rails_mocks/version.rb
68
+ homepage: https://github.com/anton-kachan/rails_mocks
69
+ licenses:
70
+ - MIT
71
+ metadata:
72
+ homepage_uri: https://github.com/anton-kachan/rails_mocks
73
+ source_code_uri: https://github.com/anton-kachan/rails_mocks
74
+ changelog_uri: https://github.com/anton-kachan/rails_mocks/blob/master/CHANGELOG.md
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubygems_version: 3.2.23
91
+ signing_key:
92
+ specification_version: 4
93
+ summary: Makes stubbing in your Rails application from an external resource easier.
94
+ test_files: []