Skip to content

Commit

Permalink
Add controller rewrite fucntion.
Browse files Browse the repository at this point in the history
  • Loading branch information
Eric-Guo committed Oct 3, 2014
1 parent 87f1dce commit 081c610
Show file tree
Hide file tree
Showing 4 changed files with 139 additions and 0 deletions.
3 changes: 3 additions & 0 deletions attr_accessible2strong_params.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,13 @@ Gem::Specification.new do |spec|

if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
spec.add_runtime_dependency(%q<astrolabe>, ["~> 1.3"])
spec.add_runtime_dependency(%q<unparser>, ["~> 0.1.15"])
else
spec.add_dependency(%q<astrolabe>, ["~> 1.3"])
spec.add_dependency(%q<unparser>, ["~> 0.1.15"])
end
else
spec.add_dependency(%q<astrolabe>, ["~> 1.3"])
spec.add_dependency(%q<unparser>, ["~> 0.1.15"])
end
end
12 changes: 12 additions & 0 deletions lib/attr_accessible2strong_params/converter.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
require 'astrolabe/builder'
require 'parser/current'
require 'unparser'

class AttrAccessible2StrongParams::Converter
def read_attr_accessible(filename)
Expand All @@ -13,4 +14,15 @@ def read_attr_accessible(filename)
m = root_node.each_node(:send).select {|n| n.children[1] == :attr_accessible}.first
@aa = m.each_node(:sym).collect {|n| n.children[0]}
end

def write_controller_with_strong_params(filename)
ast, comments = Parser::CurrentRuby.parse_with_comments(File.read(filename))
rewritten = Unparser.unparse(ast, comments)
temp_path = "#{filename}.rewritten"
File.open(temp_path, 'w') do |temp_file|
temp_file.write(rewritten)
temp_file.puts unless rewritten.end_with?(?\n)
end
File.rename(temp_path, filename)
end
end
118 changes: 118 additions & 0 deletions test/example_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
require("csv")
class MaterialTransferIssuesController < ApplicationController
load_and_authorize_resource
# GET /material_transfer_issues
# GET /material_transfer_issues.json
def index
@q = MaterialTransferIssue.search(params[:q])
@material_transfer_issues = @q.result.order("created_at DESC").paginate(page: params[:page], per_page: 10)
respond_to do |format|
format.html
# index.html.erb
format.json do
render(json: @material_transfer_issues)
end
format.csv do
render_csv_header(:material_transfer_issues.to_s)
csv_res = CSV.generate do |csv|
csv << MaterialTransferIssue.new.attributes.keys
MaterialTransferIssue.where("created_at > ?", 3.months.ago).find_each do |o|
csv << o.attributes.values
end
end
send_data("\uFEFF" << csv_res)
end
end
end
# GET /material_transfer_issues/1
# GET /material_transfer_issues/1.json
def show
@material_transfer_issue = MaterialTransferIssue.find(params[:id])
respond_to do |format|
format.html
# show.html.erb
format.json do
render(json: @material_transfer_issue)
end
end
end
# GET /material_transfer_issues/new
# GET /material_transfer_issues/new.json
def new
if params[:last]
@material_transfer_issue = MaterialTransferIssue.all.last.dup
else
@material_transfer_issue = MaterialTransferIssue.new
end
# after_controller_new
respond_to do |format|
format.html
# new.html.erb
format.json do
render(json: @material_transfer_issue)
end
end
end
# GET /material_transfer_issues/1/edit
def edit
@material_transfer_issue = MaterialTransferIssue.find(params[:id])
end
# POST /material_transfer_issues
# POST /material_transfer_issues.json
def create
@material_transfer_issue = MaterialTransferIssue.new(merge_create_fields(params[:material_transfer_issue]))
respond_to do |format|
if @material_transfer_issue.save
format.html do
redirect_to(material_transfer_issues_path, notice: "Material transfer issue was successfully created.")
end
format.json do
render(json: @material_transfer_issue, status: :created, location: @material_transfer_issue)
end
else
format.html do
render(action: "new")
end
format.json do
render(json: @material_transfer_issue.errors, status: :unprocessable_entity)
end
end
end
end
# PUT /material_transfer_issues/1
# PUT /material_transfer_issues/1.json
def update
@material_transfer_issue = MaterialTransferIssue.find(params[:id])
respond_to do |format|
if @material_transfer_issue.update_attributes(merge_update_fields(params[:material_transfer_issue]))
format.html do
redirect_to(@material_transfer_issue, notice: "Material transfer issue was successfully updated.")
end
format.json do
head(:no_content)
end
else
format.html do
render(action: "edit")
end
format.json do
render(json: @material_transfer_issue.errors, status: :unprocessable_entity)
end
end
end
end
# DELETE /material_transfer_issues/1
# DELETE /material_transfer_issues/1.json
def destroy
@material_transfer_issue = MaterialTransferIssue.find(params[:id])
@material_transfer_issue.destroy
respond_to do |format|
format.html do
redirect_to(material_transfer_issues_url)
end
format.json do
head(:no_content)
end
end
end
end
6 changes: 6 additions & 0 deletions test/test_attr_accessible2strong_params.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,10 @@ def test_read_model_attr_accessible_sym_list
assert_equal [:create_badge, :create_shift_code, :in_time, :out_time, :profile_check, :update_badge, :update_shift_code] \
, c.read_attr_accessible('test/example_model.rb')
end

def test_write_controller_src
c = AttrAccessible2StrongParams::Converter.new
c.read_attr_accessible('test/example_model.rb')
assert_equal 0, c.write_controller_with_strong_params('test/example_controller.rb')
end
end

0 comments on commit 081c610

Please sign in to comment.