rails_mocks 0.0.1

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.
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: []