From c73d23b9644e94f26a051194e4dca8f7233f3393 Mon Sep 17 00:00:00 2001 From: Alexey Dubovskoy Date: Tue, 4 Jun 2019 16:11:42 +0100 Subject: [PATCH] created rails generators --- Appraisals | 7 +++++++ Gemfile.lock | 2 +- filtered.gemspec | 1 + gemfiles/activerecord_4.0.gemfile | 1 + gemfiles/activerecord_4.1.gemfile | 1 + gemfiles/activerecord_4.2.gemfile | 1 + gemfiles/activerecord_5.0.gemfile | 1 + gemfiles/activerecord_5.1.gemfile | 1 + gemfiles/activerecord_5.2.gemfile | 1 + gemfiles/activerecord_6.0rc1.gemfile | 1 + lib/filtered.rb | 13 +++++++++---- lib/filtered/base.rb | 5 +++++ lib/filtered/engine.rb | 5 +++++ lib/generators/filter/USAGE | 15 +++++++++++++++ lib/generators/filter/filter_generator.rb | 17 +++++++++++++++++ lib/generators/filter/templates/filter.rb | 8 ++++++++ .../filtered/install/install_generator.rb | 12 ++++++++++++ .../install/templates/application_filter.rb | 3 +++ spec/generators/filter_generator_spec.rb | 17 +++++++++++++++++ spec/generators/install_generator_spec.rb | 16 ++++++++++++++++ spec/tmp/app/filters/application_filter.rb | 3 +++ 21 files changed, 126 insertions(+), 5 deletions(-) create mode 100644 lib/filtered/engine.rb create mode 100644 lib/generators/filter/USAGE create mode 100644 lib/generators/filter/filter_generator.rb create mode 100644 lib/generators/filter/templates/filter.rb create mode 100644 lib/generators/filtered/install/install_generator.rb create mode 100644 lib/generators/filtered/install/templates/application_filter.rb create mode 100644 spec/generators/filter_generator_spec.rb create mode 100644 spec/generators/install_generator_spec.rb create mode 100644 spec/tmp/app/filters/application_filter.rb diff --git a/Appraisals b/Appraisals index 0891331..9c0bcd9 100644 --- a/Appraisals +++ b/Appraisals @@ -1,5 +1,6 @@ appraise "activerecord-6.0rc1" do gem "activerecord", "~>6.0.0.rc1", require: "active_record" + gem "generator_spec" platforms :jruby do gem "activerecord-jdbcsqlite3-adapter" @@ -15,6 +16,7 @@ end appraise "activerecord-5.2" do gem "activerecord", "~>5.2", require: "active_record" + gem "generator_spec" gemfile.platforms :jruby do gem "activerecord-jdbcsqlite3-adapter" @@ -30,6 +32,7 @@ end appraise "activerecord-5.1" do gem "activerecord", "~>5.1", require: "active_record" + gem "generator_spec" gemfile.platforms :jruby do gem "activerecord-jdbcsqlite3-adapter" @@ -45,6 +48,7 @@ end appraise "activerecord-5.0" do gem "activerecord", "~>5.0", require: "active_record" + gem "generator_spec" gemfile.platforms :jruby do gem "activerecord-jdbcsqlite3-adapter" @@ -60,6 +64,7 @@ end appraise "activerecord-4.2" do gem "activerecord", "~>4.2", require: "active_record" + gem "generator_spec" gemfile.platforms :jruby do gem "activerecord-jdbcsqlite3-adapter", "~>1.3" @@ -75,6 +80,7 @@ end appraise "activerecord-4.1" do gem "activerecord", "~>4.1", require: "active_record" + gem "generator_spec" gemfile.platforms :jruby do gem "activerecord-jdbcsqlite3-adapter", "~>1.3" @@ -90,6 +96,7 @@ end appraise "activerecord-4.0" do gem "activerecord", "~>4.0", require: "active_record" + gem "generator_spec" gemfile.platforms :jruby do gem "activerecord-jdbcsqlite3-adapter", "~>1.3" diff --git a/Gemfile.lock b/Gemfile.lock index 69665b5..ce50d91 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -31,9 +31,9 @@ PLATFORMS ruby DEPENDENCIES - filtered! appraisal (~> 2.2) bundler (~> 2.0) + filtered! rake (~> 10.0) rspec (~> 3.0) diff --git a/filtered.gemspec b/filtered.gemspec index 12e8670..5f3e6e9 100644 --- a/filtered.gemspec +++ b/filtered.gemspec @@ -26,4 +26,5 @@ Gem::Specification.new do |spec| spec.add_development_dependency "rake", "~> 10.0" spec.add_development_dependency "rspec", "~> 3.0" spec.add_development_dependency "appraisal", "~> 2.2" + end diff --git a/gemfiles/activerecord_4.0.gemfile b/gemfiles/activerecord_4.0.gemfile index 6a27d14..bdd90d0 100644 --- a/gemfiles/activerecord_4.0.gemfile +++ b/gemfiles/activerecord_4.0.gemfile @@ -3,6 +3,7 @@ source "https://rubygems.org" gem "activerecord", "~>4.0", require: "active_record" +gem "generator_spec" platforms :jruby do gem "activerecord-jdbcsqlite3-adapter", "~>1.3" diff --git a/gemfiles/activerecord_4.1.gemfile b/gemfiles/activerecord_4.1.gemfile index bdf64a8..49b635a 100644 --- a/gemfiles/activerecord_4.1.gemfile +++ b/gemfiles/activerecord_4.1.gemfile @@ -3,6 +3,7 @@ source "https://rubygems.org" gem "activerecord", "~>4.1", require: "active_record" +gem "generator_spec" platforms :jruby do gem "activerecord-jdbcsqlite3-adapter", "~>1.3" diff --git a/gemfiles/activerecord_4.2.gemfile b/gemfiles/activerecord_4.2.gemfile index 69d7e1d..044ce08 100644 --- a/gemfiles/activerecord_4.2.gemfile +++ b/gemfiles/activerecord_4.2.gemfile @@ -3,6 +3,7 @@ source "https://rubygems.org" gem "activerecord", "~>4.2", require: "active_record" +gem "generator_spec" platforms :jruby do gem "activerecord-jdbcsqlite3-adapter", "~>1.3" diff --git a/gemfiles/activerecord_5.0.gemfile b/gemfiles/activerecord_5.0.gemfile index d84b79a..14d7839 100644 --- a/gemfiles/activerecord_5.0.gemfile +++ b/gemfiles/activerecord_5.0.gemfile @@ -3,6 +3,7 @@ source "https://rubygems.org" gem "activerecord", "~>5.0", require: "active_record" +gem "generator_spec" platforms :jruby do gem "activerecord-jdbcsqlite3-adapter" diff --git a/gemfiles/activerecord_5.1.gemfile b/gemfiles/activerecord_5.1.gemfile index e8b6957..5fa9312 100644 --- a/gemfiles/activerecord_5.1.gemfile +++ b/gemfiles/activerecord_5.1.gemfile @@ -3,6 +3,7 @@ source "https://rubygems.org" gem "activerecord", "~>5.1", require: "active_record" +gem "generator_spec" platforms :jruby do gem "activerecord-jdbcsqlite3-adapter" diff --git a/gemfiles/activerecord_5.2.gemfile b/gemfiles/activerecord_5.2.gemfile index 2ff69b6..537fc37 100644 --- a/gemfiles/activerecord_5.2.gemfile +++ b/gemfiles/activerecord_5.2.gemfile @@ -3,6 +3,7 @@ source "https://rubygems.org" gem "activerecord", "~>5.2", require: "active_record" +gem "generator_spec" platforms :jruby do gem "activerecord-jdbcsqlite3-adapter" diff --git a/gemfiles/activerecord_6.0rc1.gemfile b/gemfiles/activerecord_6.0rc1.gemfile index 78fbc92..a31397a 100644 --- a/gemfiles/activerecord_6.0rc1.gemfile +++ b/gemfiles/activerecord_6.0rc1.gemfile @@ -3,6 +3,7 @@ source "https://rubygems.org" gem "activerecord", "~>6.0.0.rc1", require: "active_record" +gem "generator_spec" platforms :jruby do gem "activerecord-jdbcsqlite3-adapter" diff --git a/lib/filtered.rb b/lib/filtered.rb index b825915..09cbfaa 100644 --- a/lib/filtered.rb +++ b/lib/filtered.rb @@ -1,7 +1,12 @@ -require "filtered/version" -require "filtered/field_definition" -require "filtered/base" - module Filtered + + require "filtered/version" + require "filtered/field_definition" + require "filtered/base" + + if defined?(Rails) + require "filtered/engine" + end + class Error < StandardError; end end diff --git a/lib/filtered/base.rb b/lib/filtered/base.rb index 90c94a0..cac119a 100644 --- a/lib/filtered/base.rb +++ b/lib/filtered/base.rb @@ -22,6 +22,11 @@ def base.field(field_name, options = {}, &block) end field_definitions[field_name] = field_definition + + + define_method field_name do + fields[field_name] + end end def base.field_definitions diff --git a/lib/filtered/engine.rb b/lib/filtered/engine.rb new file mode 100644 index 0000000..02a42c1 --- /dev/null +++ b/lib/filtered/engine.rb @@ -0,0 +1,5 @@ +module Filtered + class Engine < ::Rails::Engine + config.autoload_paths += Dir["#{config.root}/app/filters/**/"] + end +end diff --git a/lib/generators/filter/USAGE b/lib/generators/filter/USAGE new file mode 100644 index 0000000..78a05e3 --- /dev/null +++ b/lib/generators/filter/USAGE @@ -0,0 +1,15 @@ +Description: + Stubs out a new filter. Pass the filter name, either CamelCased or + under_scored, and an optional list of fields as arguments. + + You don't have to think up every field up front, but it helps to + sketch out a few so you can start working with the filter immediately. + + To create a filter within a module, specify the filter name as a + path like 'parent_module/filter_name'. + +Example: + `rails generate filter users group persmission` + + Users filter. + Filter: app/filters/users_filter.rb diff --git a/lib/generators/filter/filter_generator.rb b/lib/generators/filter/filter_generator.rb new file mode 100644 index 0000000..d1aa4fb --- /dev/null +++ b/lib/generators/filter/filter_generator.rb @@ -0,0 +1,17 @@ +class FilterGenerator < Rails::Generators::NamedBase + check_class_collision suffix: "Filter" + + source_root File.expand_path("templates", __dir__) + + argument :fields, type: :array, default: [], banner: "field field" + + def create_filter_file + template "filter.rb", File.join("app/filters", class_path, "#{file_name}_filter.rb") + end + + private + + def file_name + @_file_name ||= super.sub(/_filter\z/i, "") + end +end diff --git a/lib/generators/filter/templates/filter.rb b/lib/generators/filter/templates/filter.rb new file mode 100644 index 0000000..5a1010d --- /dev/null +++ b/lib/generators/filter/templates/filter.rb @@ -0,0 +1,8 @@ +class <%= class_name %>Filter < ApplicationFilter + +<% for field in fields -%> + field :<%= field %> +<% end -%> + +end + diff --git a/lib/generators/filtered/install/install_generator.rb b/lib/generators/filtered/install/install_generator.rb new file mode 100644 index 0000000..2d15a6c --- /dev/null +++ b/lib/generators/filtered/install/install_generator.rb @@ -0,0 +1,12 @@ +module Filtered + module Generators + class InstallGenerator < Rails::Generators::Base + + source_root File.expand_path("templates", __dir__) + + def generate_install + copy_file "application_filter.rb", "app/filters/application_filter.rb" + end + end + end +end diff --git a/lib/generators/filtered/install/templates/application_filter.rb b/lib/generators/filtered/install/templates/application_filter.rb new file mode 100644 index 0000000..668c3c2 --- /dev/null +++ b/lib/generators/filtered/install/templates/application_filter.rb @@ -0,0 +1,3 @@ +class ApplicationFilter < Filtered::Base + +end diff --git a/spec/generators/filter_generator_spec.rb b/spec/generators/filter_generator_spec.rb new file mode 100644 index 0000000..ede04af --- /dev/null +++ b/spec/generators/filter_generator_spec.rb @@ -0,0 +1,17 @@ +require "spec_helper" +require "generator_spec" +require "generators/filter/filter_generator" + +RSpec.describe FilterGenerator, type: :generator do + destination File.expand_path("../../tmp", __FILE__) + arguments %w(users group persmission) + + before(:all) do + prepare_destination + run_generator + end + + it "creates a filter file" do + assert_file "app/filters/users_filter.rb", /class UsersFilter < ApplicationFilter/ + end +end diff --git a/spec/generators/install_generator_spec.rb b/spec/generators/install_generator_spec.rb new file mode 100644 index 0000000..2a08e6c --- /dev/null +++ b/spec/generators/install_generator_spec.rb @@ -0,0 +1,16 @@ +require "spec_helper" +require "generator_spec" +require "generators/filtered/install/install_generator" + +RSpec.describe Filtered::Generators::InstallGenerator, type: :generator do + destination File.expand_path("../../tmp", __FILE__) + + before(:all) do + prepare_destination + run_generator + end + + it "creates a base file" do + assert_file "app/filters/application_filter.rb" + end +end diff --git a/spec/tmp/app/filters/application_filter.rb b/spec/tmp/app/filters/application_filter.rb new file mode 100644 index 0000000..668c3c2 --- /dev/null +++ b/spec/tmp/app/filters/application_filter.rb @@ -0,0 +1,3 @@ +class ApplicationFilter < Filtered::Base + +end