graphql_scaffold_fan 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 68aa6550aecb7010f667763fe9f814fd066ddec973fd8ed004f6d149b810c7bc
4
- data.tar.gz: 650976b9be771782fc177273ada62f853402b930286e910bc0fc7063a1cba3e4
3
+ metadata.gz: 8af2cbcd7af17b150c39bac5ca03d7ca8641442bc7b14cdad5f1f27c56372eb4
4
+ data.tar.gz: 8d5b24b65839d5a006e394e1c8923b18664a3b4f577acbbccff9dfd20afa080d
5
5
  SHA512:
6
- metadata.gz: 8c074b2c816c65a8a992c5793fa3df23ea6a65342bb5f67ea0ce12b649de628ba8dffc497ae50388a12b48f9ce9dbc8616d7165d3a90fb94e62f5adbe31bd7dc
7
- data.tar.gz: 20474cd3bdeb3d81fca7e2f00a2f5a3149f6b6f69abec8095b8661bc9e1c8835316837965c6a0a6d45c1e5322c960893427950ce66ad5c2500ee573f9d20c9a3
6
+ metadata.gz: 805b643515818f9c3639f31d7db0d52974f19026bb82d54830cd69f44183ac44f95ace20d0bb7778b755faa6b128825257e180b58cc4445dfac622f9776b1258
7
+ data.tar.gz: 170c72bed0fe4499cd81614c8a879550fe6ac0baee0f3dbe8fcc815a6b6b65dab4bf2224f5485fbc1a6283ce02a0aba3ebe6c97d87cb83bb13fb9967e83a3019
data/.DS_Store ADDED
Binary file
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ /pkg/
2
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in graphql_scaffold_fan.gemspec
6
+ gemspec
7
+
8
+ gem "rake", "~> 13.0"
data/Gemfile.lock ADDED
@@ -0,0 +1,19 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ graphql_scaffold_fan (0.0.3)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ rake (13.0.6)
10
+
11
+ PLATFORMS
12
+ x86_64-darwin-20
13
+
14
+ DEPENDENCIES
15
+ graphql_scaffold_fan!
16
+ rake (~> 13.0)
17
+
18
+ BUNDLED WITH
19
+ 2.2.3
data/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # DemoGem
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/graphql_scaffold_fan`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'graphql_scaffold_fan'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle install
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install graphql_scaffold_fan
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/demo_gem.
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ task default: %i[]
data/bin/console ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "graphql_scaffold_fan"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require "irb"
15
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("../lib", __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require "graphql_scaffold_fan/version"
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "graphql_scaffold_fan"
9
+ spec.version = GraphqlScaffoldFan::VERSION
10
+ spec.authors = ["Fan Zhang"]
11
+ spec.email = ["fan.zhang@pixelforce.com.au"]
12
+
13
+ spec.summary = "Helping creating graphql files"
14
+ spec.description = "Helping creating graphql files"
15
+ spec.homepage = ''
16
+
17
+ # Specify which files should be added to the gem when it is released.
18
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
21
+ end
22
+ spec.bindir = "exe"
23
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
24
+ spec.require_paths = ["lib"]
25
+
26
+ # Uncomment to register a new dependency of your gem
27
+ # spec.add_dependency "example-gem", "~> 1.0"
28
+
29
+ # For more information and examples about making a new gem, checkout our
30
+ # guide at: https://bundler.io/guides/creating_gem.html
31
+ end
@@ -0,0 +1,80 @@
1
+ require 'rails/generators/base'
2
+ module Generators
3
+ module Graphqlscaffold
4
+ class MutationGenerator < Rails::Generators::NamedBase
5
+ source_root File.expand_path('../templates', __dir__)
6
+
7
+ def create_admin_mutation_folders
8
+ admin_mutation_dir_path = 'app/graphql/mutations/admin'
9
+ generator_dir_path = admin_mutation_dir_path + ("/#{@module_name.underscore}" if @module_name.present?).to_s
10
+ @generator_path = generator_dir_path + "/#{file_name}s"
11
+
12
+ FileUtils.mkdir_p(admin_mutation_dir_path) unless File.exist?(admin_mutation_dir_path)
13
+ if File.exist?(@generator_path)
14
+ p 'Folder already exist'
15
+ elsif Dir.mkdir(@generator_path)
16
+ p 'Folder created successfully'
17
+ end
18
+ end
19
+
20
+ def create_admin_mutation_create_file
21
+ if File.exist?(@generator_path)
22
+ create_file_path = @generator_path + "/create_#{file_name}.rb"
23
+ if File.exist?(create_file_path)
24
+ p 'Create File already exist'
25
+ else
26
+ template 'mutation_create.haml', create_file_path
27
+ end
28
+ end
29
+ end
30
+
31
+ def create_admin_mutation_update_file
32
+ if File.exist?(@generator_path)
33
+ update_file_path = @generator_path + "/update_#{file_name}.rb"
34
+ if File.exist?(update_file_path)
35
+ p 'Update File already exist'
36
+ else
37
+ template 'mutation_update.haml', update_file_path
38
+ end
39
+ end
40
+ end
41
+
42
+ def create_admin_mutation_delete_file
43
+ if File.exist?(@generator_path)
44
+ delete_file_path = @generator_path + "/delete_#{file_name}.rb"
45
+ if File.exist?(delete_file_path)
46
+ p 'Delete File already exist'
47
+ else
48
+ template 'mutation_delete.haml', delete_file_path
49
+ end
50
+ end
51
+ end
52
+
53
+ def create_mutation_type_file
54
+ mutation_type_dir_path = 'app/graphql/types/admin'
55
+ generator_dir_path = mutation_type_dir_path
56
+ generator_path = generator_dir_path + '/mutation_type.rb'
57
+
58
+ FileUtils.mkdir_p(mutation_type_dir_path) unless File.exist?(mutation_type_dir_path)
59
+ FileUtils.mkdir_p(generator_dir_path) unless File.exist?(generator_dir_path)
60
+
61
+ if File.exist?(generator_path)
62
+ file = File.open(generator_path)
63
+ file_data = file.read
64
+ new_file_data = file_data.insert(-15, " has_admin_mutation :#{class_name}\n ")
65
+ File.write(file, new_file_data)
66
+ p 'Write to query_type.rb successfully'
67
+ else
68
+ template 'mutation_type.haml', generator_path
69
+ end
70
+ end
71
+
72
+ def create_test_file
73
+ test_dir_path = 'spec/requests/mutations'
74
+ test_file_path = test_dir_path + "/#{file_name}_spec.rb"
75
+ FileUtils.mkdir_p(test_dir_path) unless File.exist?(test_dir_path)
76
+ template 'mutation_test.haml', test_file_path
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,77 @@
1
+ require 'rails/generators/base'
2
+ module Generators
3
+ module Graphqlscaffold
4
+ class TypeGenerator < Rails::Generators::NamedBase
5
+ source_root File.expand_path('../templates', __dir__)
6
+
7
+ def create_type_file
8
+ if system("rails g graphql:object #{file_name}")
9
+
10
+ src_file = "app/graphql/types/#{file_name}_type.rb"
11
+ dst_dir = 'app/graphql/types/admin'
12
+ if File.exist? ("app/graphql/types/#{file_name}_type.rb")
13
+ FileUtils.mv(src_file, dst_dir)
14
+ file = File.open("#{dst_dir}/#{file_name}_type.rb")
15
+ file_data = file.read
16
+ new_file_data = file_data.insert(21, 'Admin::')
17
+ File.write(file, new_file_data)
18
+ else
19
+ p "can not find #{file_name}_type file to move"
20
+ end
21
+ else
22
+ p "can not create #{file_name}_type file"
23
+ end
24
+ end
25
+
26
+ def create_filter_file
27
+ @module_name = options[:module]
28
+
29
+ filter_dir_path = 'app/graphql/types/inputs/admin'
30
+ generator_dir_path = filter_dir_path + ("/#{@module_name.underscore}" if @module_name.present?).to_s
31
+ generator_path = generator_dir_path + "/#{file_name}_filter.rb"
32
+
33
+ FileUtils.mkdir_p(filter_dir_path) unless File.exist?(filter_dir_path)
34
+ FileUtils.mkdir_p(generator_dir_path) unless File.exist?(generator_dir_path)
35
+
36
+ template 'admin_filter.haml', generator_path
37
+ end
38
+
39
+ def create_query_type_file
40
+ query_type_dir_path = 'app/graphql/types/admin'
41
+ generator_dir_path = query_type_dir_path
42
+ generator_path = generator_dir_path + '/query_type.rb'
43
+
44
+ FileUtils.mkdir_p(query_type_dir_path) unless File.exist?(query_type_dir_path)
45
+ FileUtils.mkdir_p(generator_dir_path) unless File.exist?(generator_dir_path)
46
+
47
+ if File.exist?(generator_path)
48
+ file = File.open(generator_path)
49
+ file_data = file.read
50
+ new_file_data = file_data.insert(-15, " has_admin_fields :#{class_name}\n ")
51
+ File.write(file, new_file_data)
52
+ p 'Write to query_type.rb successfully'
53
+ else
54
+ template 'query_type.haml', generator_path
55
+ end
56
+ end
57
+
58
+ def create_base_object_file
59
+ base_object_dir_path = 'app/graphql/types'
60
+ generator_dir_path = base_object_dir_path
61
+ generator_path = generator_dir_path.concat('/base_object.rb')
62
+
63
+ FileUtils.mkdir_p(base_object_dir_path) unless File.exist?(base_object_dir_path)
64
+ FileUtils.mkdir_p(generator_dir_path) unless File.exist?(generator_dir_path)
65
+
66
+ template 'base_object.haml', generator_path
67
+ end
68
+
69
+ def create_test_file
70
+ test_dir_path = 'spec/requests/queries'
71
+ test_file_path = test_dir_path + "/#{file_name}_spec.rb"
72
+ FileUtils.mkdir_p(test_dir_path) unless File.exist?(test_dir_path)
73
+ template 'query_test.haml', test_file_path
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,17 @@
1
+ module Types
2
+ module Inputs
3
+ module Admin
4
+ class <%= class_name %> < Types::BaseInputObject
5
+ argument :ids, [ID], required: false
6
+
7
+ def prepare
8
+ if ids
9
+ ['id in (:ids)', { ids: ids }]
10
+ else
11
+ []
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,68 @@
1
+ module Types
2
+ class BaseObject < GraphQL::Schema::Object
3
+
4
+ def self.has_admin_fields(attach_sttr, **conf)
5
+ attach_sttr = attach_sttr.to_s
6
+ get_one = attach_sttr
7
+ get_many = "all_#{attach_sttr.underscore.pluralize}"
8
+ get_many_meta = "_all_#{attach_sttr.underscore.pluralize}_meta"
9
+ type_class = conf[:type_class] || 'Admin'
10
+ filter_query = conf[:filter_query] || false
11
+ class_eval %(
12
+ field :#{get_one}, Types::#{type_class}::#{attach_sttr}Type, null: true do
13
+ argument :id, ID, required: true
14
+ end
15
+ field :#{get_many}, [Types::#{type_class}::#{attach_sttr}Type], null: true do
16
+ argument :filter, Types::Inputs::Admin::#{attach_sttr}Filter, required: false
17
+ argument :page, Integer, required: false
18
+ argument :per_page, Integer, required: false
19
+ argument :sort_field, String, required: false
20
+ argument :sort_order, String, required: false
21
+ end
22
+ field :#{get_many_meta}, Types::Admin::ListMetadataType, null: true do
23
+ argument :filter, Types::Inputs::Admin::#{attach_sttr}Filter, required: false
24
+ argument :page, Integer, required: false
25
+ argument :per_page, Integer, required: false
26
+ end
27
+
28
+ def #{get_one}(id:)
29
+ #{get_one}.find_by_id(id)
30
+ end
31
+
32
+ def #{get_many}(filter:, **args)
33
+ if args[:sort_field] && args[:sort_order] && args[:page] && args[:per_page]
34
+ if #{filter_query}
35
+ filter.order("\#{args[:sort_field]} \#{args[:sort_order]}").page(args[:page] + 1).per(args[:per_page])
36
+ else
37
+ #{get_one}.where(filter).order("\#{args[:sort_field]} \#{args[:sort_order]}").page(args[:page] + 1).per(args[:per_page])
38
+ end
39
+ else
40
+ if #{filter_query}
41
+ filter
42
+ else
43
+ #{get_one}.where(filter)
44
+ end
45
+ end
46
+ end
47
+
48
+ def #{get_many_meta}(filter:, **args)
49
+ if #{filter_query}
50
+ { count: filter.count('DISTINCT #{attach_sttr.underscore.pluralize}.id') }
51
+ else
52
+ { count: #{get_one}.where(filter).count }
53
+ end
54
+ end
55
+ ), __FILE__, __LINE__ - 44
56
+ end
57
+
58
+ def self.has_admin_mutation(attach_sttr, **_conf)
59
+ attach_sttr = attach_sttr.to_s
60
+
61
+ class_eval %(
62
+ field :create_#{attach_sttr.underscore}, mutation: Mutations::Admin::#{attach_sttr.pluralize}::Create#{attach_sttr} if defined?(Mutations::Admin::#{attach_sttr.pluralize}::Create#{attach_sttr})
63
+ field :update_#{attach_sttr.underscore}, mutation: Mutations::Admin::#{attach_sttr.pluralize}::Update#{attach_sttr} if defined?(Mutations::Admin::#{attach_sttr.pluralize}::Update#{attach_sttr})
64
+ field :delete_#{attach_sttr.underscore}, mutation: Mutations::Admin::#{attach_sttr.pluralize}::Delete#{attach_sttr} if defined?(Mutations::Admin::#{attach_sttr.pluralize}::Delete#{attach_sttr})
65
+ ), __FILE__, __LINE__ - 4
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,12 @@
1
+ module Mutations
2
+ module Admin
3
+ class <%= class_name %>s::Create<%= class_name %> < BaseAdminMutation
4
+
5
+ type Types::Admin::<%= class_name %>Type
6
+
7
+ def resolve(id:, **args)
8
+
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module Mutations
2
+ module Admin
3
+ class <%= class_name %>s::Delete<%= class_name %> < BaseAdminMutation
4
+
5
+ type Types::Admin::<%= class_name %>Type
6
+
7
+ def resolve(id:, **args)
8
+
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,18 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe Mutations::<%= class_name %>, type: :request do
4
+
5
+ describe 'resolve' do
6
+
7
+ end
8
+
9
+ def query(**args)
10
+ <<~GQL
11
+ mutation <%= class_name.underscore %>{
12
+ <%= class_name.underscore %>{
13
+
14
+ }
15
+ }
16
+ GQL
17
+ end
18
+ end
@@ -0,0 +1,8 @@
1
+ module Types
2
+ module Admin
3
+ class MutationType < Types::BaseObject
4
+
5
+ has_admin_mutation :<%= class_name %>
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,12 @@
1
+ module Mutations
2
+ module Admin
3
+ class <%= class_name %>s::Update<%= class_name %> < BaseAdminMutation
4
+
5
+ type Types::Admin::<%= class_name %>Type
6
+
7
+ def resolve(id:, **args)
8
+
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe Resolvers::<%= class_name %>, type: :request do
4
+ let(:query) do
5
+ <<-GRAPHQL
6
+ query {
7
+ <%= class_name.underscore %>()
8
+ }
9
+ GRAPHQL
10
+ end
11
+
12
+ describe '#resolve' do
13
+ it 'pass' do
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,8 @@
1
+ module Types
2
+ module Admin
3
+ class QueryType < Types::BaseObject
4
+
5
+ has_admin_fields :<%= class_name %>
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GraphqlScaffoldFan
4
+ VERSION = "0.0.3"
5
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "graphql_scaffold_fan/version"
4
+
5
+ module GraphqlScaffoldFan
6
+
7
+
8
+ class Error < StandardError; end
9
+ # Your code goes here...
10
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql_scaffold_fan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fan Zhang
@@ -16,7 +16,29 @@ email:
16
16
  executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
- files: []
19
+ files:
20
+ - ".DS_Store"
21
+ - ".gitignore"
22
+ - Gemfile
23
+ - Gemfile.lock
24
+ - README.md
25
+ - Rakefile
26
+ - bin/console
27
+ - bin/setup
28
+ - graphql_scaffold_fan.gemspec
29
+ - lib/generators/graphqlscaffold/mutation_generator.rb
30
+ - lib/generators/graphqlscaffold/type_generator.rb
31
+ - lib/generators/templates/admin_filter.haml
32
+ - lib/generators/templates/base_object.haml
33
+ - lib/generators/templates/mutation_create.haml
34
+ - lib/generators/templates/mutation_delete.haml
35
+ - lib/generators/templates/mutation_test.haml
36
+ - lib/generators/templates/mutation_type.haml
37
+ - lib/generators/templates/mutation_update.haml
38
+ - lib/generators/templates/query_test.haml
39
+ - lib/generators/templates/query_type.haml
40
+ - lib/graphql_scaffold_fan.rb
41
+ - lib/graphql_scaffold_fan/version.rb
20
42
  homepage: ''
21
43
  licenses: []
22
44
  metadata: {}