Skip to content

A big pile of refactoring #140

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 23 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
958e028
Remove unused and redundant CongressMember methods
k-stewart May 2, 2018
1972c6e
Refactor CongressMember model
k-stewart May 2, 2018
1ea4c94
Fix test db setup
k-stewart May 3, 2018
861bdb7
Little refactors to debug_controller_spec
k-stewart May 3, 2018
4ad4ff5
Refactor CongressMemberAction model
k-stewart May 4, 2018
03fb25a
Simplify FormFilling concern
k-stewart May 4, 2018
a8ec759
One file, one factory
k-stewart May 4, 2018
fd55f6a
Be firm about the possible CongressMemberAction actions
k-stewart May 4, 2018
9e04834
Clean up DelayedJobHelper
k-stewart May 4, 2018
c362b33
Move delayed_job tasks into their own file
k-stewart May 4, 2018
5dd061e
Replace demeter violation in CongressMember
k-stewart May 7, 2018
1f81929
Simplify CongressMember.as_required_json
k-stewart May 7, 2018
2fcb225
Decouple fill_out_form logic from the model
k-stewart May 11, 2018
f8c7daf
Make the DelayedJobHelper a little more concise
k-stewart May 11, 2018
69ec7c2
Move PhantomJS fillers into their own file
k-stewart May 13, 2018
c5f15a6
Shallower if trees in update_cwc_code task
k-stewart May 13, 2018
a6b7e57
Docker, watch the lib directory
k-stewart May 21, 2018
84204e9
Remove redundant aliases; rename asset helper
k-stewart May 21, 2018
5b83272
Fix CongressMember.has_captcha?
k-stewart May 22, 2018
40bfa92
Pull "$CAPTCHA_SOLUTION" into a variable
k-stewart May 22, 2018
d524140
Refactor rake congress_member:fill_out_all
k-stewart May 22, 2018
3ae57ca
Refactor helpers
k-stewart May 23, 2018
4b8753f
Clean up controllers
k-stewart May 24, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ ADD ./cwc/ ./cwc
RUN bundle install

ADD app ./app
ADD lib ./lib
ADD config ./config
ADD db ./db
ADD public ./public
Expand Down
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -270,15 +270,16 @@ If you prefer to dive deep, you can fire up the padrino console with `padrino c`
> job = Delayed::Job.where(queue: "error_or_failure").first # get the first job
=> #<Delayed::Backend::ActiveRecord::Job id: 318, priority: 0, attempts: 1, handler: "--- !ruby/object:Delayed::PerformableMethod\nobject:...", last_error: "Unable to find css \"p\" with text /Thank you!/\n[\"/ho...", run_at: "2014-07-03 12:14:10", locked_at: nil, failed_at: nil, locked_by: nil, queue: "error_or_failure", created_at: "2014-07-03 12:14:10", updated_at: "2014-08-26 18:50:27">
> handler = YAML.load job.handler # get the "handler" which contains the object to be acted upon and the arguments
=> #<Delayed::PerformableMethod:0x0000000544ae30 @object=#<CongressMember id: 60, bioguide_id: "F000457", success_criteria: "---\nheaders:\n status: 200\nbody:\n contains: Your m...", created_at: "2014-04-30 19:08:05", updated_at: "2014-07-03 18:54:34">, @method_name=:fill_out_form, @args=[{"$NAME_FIRST"=>"John", "$NAME_LAST"=>"Doe", "$ADDRESS_STREET"=>"123 Fake Street", "$ADDRESS_CITY"=>"Hennepin", "$ADDRESS_ZIP5"=>"55369", "$EMAIL"=>"[email protected]", "subscribe"=>"1", "$SUBJECT"=>"Example subject", "$MESSAGE"=>"Example Message", "$NAME_PREFIX"=>"Mr.", "$ADDRESS_STATE_POSTAL_ABBREV"=>"MN", "$TOPIC"=>"Example Topic", "$PHONE"=>"555-555-5555", "$ADDRESS_ZIP4"=>"1234"}, nil]>
=> #<Delayed::PerformableMethod:0x0000000544ae30 @object=
#<FormFiller:0x007fd1abb23728 @campaign_tag=nil, @fields={}, @rep= #<CongressMember:0x007fd1ac1e0020 id: 1, bioguide_id: "A000374", success_criteria: "---\n" + "headers:\n" + " status: 200\n" + "body:\n" + " contains: your message has been sent\n", created_at: 2018-05-04 19:38:48 UTC, updated_at: 2018-05-04 19:41:35 UTC, defunct: false, contact_url: "https://abraham.house.gov", name: "Abraham", state: "LA", chamber: "house", house_district: 5, senate_class: nil>, @session=nil>, @method_name=:fill_out_form, @args=[{"$NAME_FIRST"=>"John", "$NAME_LAST"=>"Doe", "$ADDRESS_STREET"=>"123 Fake Street", "$ADDRESS_CITY"=>"Hennepin", "$ADDRESS_ZIP5"=>"55369", "$EMAIL"=>"[email protected]", "subscribe"=>"1", "$SUBJECT"=>"Example subject", "$MESSAGE"=>"Example Message", "$NAME_PREFIX"=>"Mr.", "$ADDRESS_STATE_POSTAL_ABBREV"=>"MN", "$TOPIC"=>"Example Topic", "$PHONE"=>"555-555-5555", "$ADDRESS_ZIP4"=>"1234"}, nil]>
handler.args[0]['$PHONE'] = '123-456-7890' # set the phone number
```

Then, when you're ready to retry the fill:

```rb
handler.perform # try filling out the form
handler.object.fill_out_form(handler.args[0]) do |c|
handler.object.fill_out_form do |c|
puts c
STDIN.gets.strip
end # fills out a form with a captcha
Expand Down
170 changes: 0 additions & 170 deletions app/concerns/form_filling.rb

This file was deleted.

28 changes: 10 additions & 18 deletions app/controllers/cwc.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,53 +3,45 @@
CongressForms::App.controller do
before do
Raven.tags_context web: true
@cm = CongressMember.find_by_cwc_office_code(params[:office_code])
end

get "cwc/:office_code/fields" do
cm = CongressMember.find_by_cwc_office_code(params[:office_code])
Cwc::RequiredJson.to_json
end

post "cwc/:office_code/messages" do
content_type :json

cm = CongressMember.find_by_cwc_office_code(params[:office_code])
return { status: "error", message: "Congress member with provided bio id not found" }.to_json if cm.nil?
return error_response("Congress member with provided bio id not found") if @cm.nil?

missing_parameters = []
fields = params["fields"] || {}
fields["$MESSAGE"] ||= fields["$STATEMENT"]
Cwc::RequiredJson["required_actions"].each do |field|
unless fields.include?(field["value"])
missing_parameters << field["value"]
end
end

missing_parameters = Cwc::RequiredJson["required_actions"].map {|f| f["value"] } - fields.keys
if missing_parameters.any?
see_other = "/cwc/#{params[:office_code]}/fields"
message = "Error: missing fields (#{missing_parameters.join(', ')}). See #{see_other} for required fields."
return { status: "error", message: message }.to_json
return error_response(message)
end

keywords = { campaign_tag: params["campaign_tag"] }
keywords[:organization] = { name: params["organization"] } if params["organization"]
keywords[:validate_only] = true if params["test"] == "1"

begin
cm.message_via_cwc(fields, **keywords)
if params["test"] == "1"
{ status: "success", test: true }.to_json
else
{ status: "success" }.to_json
end
@cm.message_via_cwc(fields, **keywords)
response = { status: "success" }
response[:test] = true if params["test"] == "1"
response.to_json
rescue Cwc::BadRequest => e
logger.warn("Cwc::BadRequest:")
e.errors.each{ |error| logger.warn(" * #{error}") }

Raven.capture_message("Cwc::BadRequest: #{e.errors.last}",
extra: { bioguide: cm.bioguide_id, fields: fields, errors: e.errors })
extra: { bioguide: @cm.bioguide_id, fields: fields, errors: e.errors })

NotifySender.new(cm, fields).delay(queue: "notifications").execute if SMTP_SETTINGS.present?
NotifySender.new(@cm, fields).delay(queue: "notifications").execute if SMTP_SETTINGS.present?

{ status: "error" }.to_json
end
Expand Down
Loading