Skip to content

Commit

Permalink
Merge pull request PositiveControl#3 from pjdavis/rails-5-generator
Browse files Browse the repository at this point in the history
Add a generator for creating deserializers in the rails project.
  • Loading branch information
PositiveControl authored May 18, 2018
2 parents 53cefa9 + 296e7e7 commit d933d2c
Show file tree
Hide file tree
Showing 8 changed files with 80 additions and 3 deletions.
8 changes: 6 additions & 2 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
params_deserializers (2.0.0)
params_deserializers (2.1.0)
activesupport (>= 5.0)

GEM
Expand Down Expand Up @@ -53,6 +53,9 @@ GEM
erubi (1.6.1)
ffi (1.9.18)
formatador (0.2.5)
generator_spec (0.9.4)
activesupport (>= 3.0.0)
railties (>= 3.0.0)
globalid (0.4.0)
activesupport (>= 4.2.0)
guard (2.14.1)
Expand Down Expand Up @@ -169,11 +172,12 @@ PLATFORMS
ruby

DEPENDENCIES
generator_spec
guard-rspec
params_deserializers!
rails (>= 5.0)
rspec-rails
sqlite3

BUNDLED WITH
1.16.0.pre.2
1.16.1
5 changes: 5 additions & 0 deletions lib/generators/rails/USAGE
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Description:
Generates a deserializer for the given resource.

Example:
`rails generate params_deserializer User first_name last_name birthday`
24 changes: 24 additions & 0 deletions lib/generators/rails/params_deserializer_generator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
module Rails
module Generators
class ParamsDeserializerGenerator < NamedBase
source_root File.expand_path('../templates', __FILE__)
check_class_collision suffix: 'ParamsDeserializer'

argument :attributes, type: :array, default: [], banner: 'field field'

def create_serializer_file
template 'deserializer.rb.erb', File.join('app/deserializers', class_path, "#{file_name}_params_deserializer.rb")
end

private

def attributes_names
attributes.map! { |a| a.name.to_sym }
end

def parent_class_name
'ParamsDeserializer'
end
end
end
end
10 changes: 10 additions & 0 deletions lib/generators/rails/resource_override.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
require 'rails/generators'
require 'rails/generators/rails/resource/resource_generator'

module Rails
module Generators
class ResourceGenerator
hook_for :params_deserializer, default: true, type: :boolean
end
end
end
5 changes: 5 additions & 0 deletions lib/generators/rails/templates/deserializer.rb.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<% module_namespacing do -%>
class <%= class_name %>ParamsDeserializer < <%= parent_class_name %>
attributes <%= attributes_names.map(&:inspect).join(", ") %>
end
<% end -%>
2 changes: 1 addition & 1 deletion lib/params_deserializers/version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,5 @@
# POSSIBILITY OF SUCH DAMAGE.

module ParamsDeserializers
VERSION = "2.0.0"
VERSION = "2.1.0"
end
1 change: 1 addition & 0 deletions params_deserializers.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,5 @@ Gem::Specification.new do |s|
s.add_development_dependency 'sqlite3'
s.add_development_dependency 'rails', '>= 5.0'
s.add_development_dependency 'rspec-rails'
s.add_development_dependency 'generator_spec'
end
28 changes: 28 additions & 0 deletions spec/generators/rails/params_deserailizer_generator_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
require "generator_spec"
require_relative '../../../lib/generators/rails/params_deserializer_generator'
describe "Rails::Generators::ParamsDeserializerGenerator", type: :generator do
tests Rails::Generators::ParamsDeserializerGenerator
destination File.expand_path("../../tmp", __FILE__)
arguments %w(User birthday)

before(:each) do
prepare_destination
run_generator
end

after(:each) do
remove_entry_secure(destination_root)
end

it "creates a user deserializer" do
expect(destination_root).to have_structure {
directory "app" do
directory "deserializers" do
file "user_params_deserializer.rb" do
contains "UserParamsDeserializer < ParamsDeserializer"
end
end
end
}
end
end

0 comments on commit d933d2c

Please sign in to comment.