Class: RailsEdgeTest::Dsl::Edge
- Inherits:
-
Struct
- Object
- Struct
- RailsEdgeTest::Dsl::Edge
show all
- Defined in:
- lib/rails_edge_test/dsl/edge.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(*args) ⇒ Edge
Returns a new instance of Edge.
10
11
12
13
|
# File 'lib/rails_edge_test/dsl/edge.rb', line 10
def initialize(*args)
super
@let_cache = {}
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name) ⇒ Object
support calling methods defined in action
132
133
134
135
136
137
138
|
# File 'lib/rails_edge_test/dsl/edge.rb', line 132
def method_missing(method_name, ...)
if action.respond_to?(method_name)
action.public_send(method_name, ...)
else
super
end
end
|
Instance Attribute Details
#action ⇒ Object
Returns the value of attribute action
9
10
11
|
# File 'lib/rails_edge_test/dsl/edge.rb', line 9
def action
@action
end
|
#description ⇒ Object
Returns the value of attribute description
9
10
11
|
# File 'lib/rails_edge_test/dsl/edge.rb', line 9
def description
@description
end
|
Instance Method Details
#controller ⇒ Object
In the context of the edge, we want controller to be the rails controller instead of our own RailsEdgeTest::Dsl::Controller. In this way the user can directly access the rails controller within their edge.
25
26
27
|
# File 'lib/rails_edge_test/dsl/edge.rb', line 25
def controller
@controller ||= controller_class.new
end
|
43
44
45
46
47
|
# File 'lib/rails_edge_test/dsl/edge.rb', line 43
def perform_delete(parameters = {})
request.instance_variable_set(:@method, 'DELETE')
request.env['REQUEST_METHOD'] = 'DELETE'
process(parameters)
end
|
33
34
35
|
# File 'lib/rails_edge_test/dsl/edge.rb', line 33
def perform_get(parameters = {})
process(parameters)
end
|
#perform_post(parameters = {}) ⇒ Object
37
38
39
40
41
|
# File 'lib/rails_edge_test/dsl/edge.rb', line 37
def perform_post(parameters = {})
request.instance_variable_set(:@method, 'POST')
request.env['REQUEST_METHOD'] = 'POST'
process(parameters)
end
|
#process(parameters = {}) ⇒ Object
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/rails_edge_test/dsl/edge.rb', line 55
def process(parameters = {})
request.assign_parameters(
::Rails.application.routes,
controller_class.controller_path,
action.name.to_s,
parameters.stringify_keys!,
'',
''
)
response = ActionDispatch::Response.new.tap do |res|
res.request = request
end
@response = controller.dispatch(action.name, request, response)
end
|
#produce_elm_file(module_name, ivar: nil) ⇒ Object
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/rails_edge_test/dsl/edge.rb', line 72
def produce_elm_file(module_name, ivar: nil)
json = produce_json(ivar: ivar)
json = json.gsub('\\', '\\\\\\\\')
filepath = File.join(
RailsEdgeTest.configuration.elm_path,
'Edge',
controller_class.name.gsub('::', '/')
)
full_module_name =
"#{controller_class.name.gsub('::', '.')}.#{module_name}"
data = <<~ELM
module Edge.#{full_module_name} exposing (json)
json : String
json =
"""
#{json}
"""
ELM
write_file(filepath, "#{module_name}.elm", data)
end
|
#request ⇒ Object
18
19
20
|
# File 'lib/rails_edge_test/dsl/edge.rb', line 18
def request
@request ||= ActionController::TestRequest.create(controller_class)
end
|
#response ⇒ Object
29
30
31
|
# File 'lib/rails_edge_test/dsl/edge.rb', line 29
def response
@response
end
|
#set_authenticity_token ⇒ Object
49
50
51
52
53
|
# File 'lib/rails_edge_test/dsl/edge.rb', line 49
def set_authenticity_token
r = request
controller.instance_eval { @_request = r }
request.['X-CSRF-Token'] = controller.send :form_authenticity_token
end
|