ibrain-core 0.1.3 → 0.1.4

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: 77b55d552570271ff6defb94a2f5f990816d29966703112050987bd7f5ef8b1e
4
- data.tar.gz: 0b7c63567310a31fb93c7d277c8216ee7be843e9a7bf4c16117317493c20bf1d
3
+ metadata.gz: 4037e5cd9ca8b82b658114e6d61cf5376861c2d39dc0ad5b63e1a41a56ef482b
4
+ data.tar.gz: a1723cc8a56105297c25e92286d8547d9aead9936b342cf40b1adf19b156398b
5
5
  SHA512:
6
- metadata.gz: 46264a7f0478a26389829084b8a12c7cfc6a7da3cf8920d7edc06e7acc14fe951f97ac8ff39547d7d1874fae87dcecd25043c206ead022eb0caf0752bbe13b98
7
- data.tar.gz: 7259f9823c599f96c600adb64fa0effa65dbece73df38357aa93da0aa47654d40dad625a7308b5f12d709833dac7ea83bdcf0ecd60389b9434e09c69315ef28e
6
+ metadata.gz: 5459ecaf4eb74fe6afa3a482040a3495d189f1a583344527b585be5203b58ba440bfceadcf8b14f5c7530fc3bc74f3d6ba2b093afb28c89a0d93efed8c553ad7
7
+ data.tar.gz: 3bdf0366d1c33131c247c767fe9ee8dd3c4637e453124d1ad04c93b8712b62a802276ddab578a372950db3ab5317162ff0868795ec3c9f1bc716f383a0c31ea2
@@ -10,7 +10,7 @@ module Ibrain
10
10
  variables: variables,
11
11
  context: {
12
12
  session: session,
13
- current_user: current_ibrain_user
13
+ current_user: try_ibrain_current_user
14
14
  },
15
15
  operation_name: operation_name
16
16
  )
@@ -3,8 +3,6 @@
3
3
  module Ibrain
4
4
  module Extentions
5
5
  class DefaultValue < GraphQL::Schema::FieldExtension
6
- description 'Default value extention'
7
-
8
6
  def after_resolve(value:, **_rest)
9
7
  if value.nil?
10
8
  options[:default_value]
@@ -3,8 +3,6 @@
3
3
  module Ibrain::Interfaces::RecordInterface
4
4
  include Ibrain::Types::BaseInterface
5
5
 
6
- description 'Common Interface'
7
-
8
6
  field :created_at, ::GraphQL::Types::ISO8601DateTime, null: false
9
7
  field :updated_at, ::GraphQL::Types::ISO8601DateTime, null: false
10
8
  end
@@ -3,9 +3,9 @@
3
3
  module Ibrain
4
4
  module Resolvers
5
5
  class BaseResolver < GraphQL::Schema::Resolver
6
- argument :filter, Ibrain::Types::FilterType, required: false, default_value: nil, description: 'Filter object for resolver'
7
- argument :limit, Int, required: false, default_value: 10, description: 'Limit records'
8
- argument :offset, Int, required: false, default_value: 0, description: 'Get records from cursor position'
6
+ argument :filter, Ibrain::Types::FilterType, required: false, default_value: nil
7
+ argument :limit, Int, required: false, default_value: 10
8
+ argument :offset, Int, required: false, default_value: 0
9
9
 
10
10
  def current_user
11
11
  context.fetch(:current_user)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Ibrain::Types::BaseNode < Types::BaseObject
4
- implements ::GraphQL::Relay::Node.interface
4
+ include ::GraphQL::Relay::Node
5
5
  implements ::Ibrain::Interfaces::RecordInterface
6
6
 
7
7
  global_id_field :id
@@ -3,7 +3,7 @@
3
3
  module Ibrain
4
4
  module Types
5
5
  class BaseObject < GraphQL::Schema::Object
6
- implements GraphQL::Relay::Node.interface
6
+ include GraphQL::Relay::Node
7
7
 
8
8
  edge_type_class(Ibrain::Types::BaseEdge)
9
9
  connection_type_class(Ibrain::Types::BaseConnection)
@@ -3,7 +3,6 @@
3
3
  module Ibrain
4
4
  module Types
5
5
  class FilterType < GraphQL::Schema::Scalar
6
- description 'Filter Type'
7
6
  end
8
7
  end
9
8
  end
@@ -5,16 +5,12 @@ class Ibrain::Base < Ibrain::ApplicationRecord
5
5
 
6
6
  self.abstract_class = true
7
7
 
8
- def self.adjust_date_for_cdt(datetime)
9
- datetime.in_time_zone('UTC')
10
- end
11
-
12
8
  def string_id
13
9
  try(:id).try(:to_s)
14
10
  end
15
11
 
16
12
  scope :graphql_ransack, lambda { |params|
17
- ransack(params).result(distinct: true)
13
+ ransack(params).result
18
14
  }
19
15
 
20
16
  scope :reverse_scope, lambda {
@@ -36,12 +32,22 @@ class Ibrain::Base < Ibrain::ApplicationRecord
36
32
  time_ago_in_words(created_at)
37
33
  end
38
34
 
39
- # Provides a scope that should be included any time data
40
- # are fetched with the intention of displaying to the user.
41
- #
42
- # Allows individual stores to include any active record scopes or joins
43
- # when data are displayed.
44
- def self.display_includes
45
- where(nil)
35
+ class << self
36
+ # Provides a scope that should be included any time data
37
+ # are fetched with the intention of displaying to the user.
38
+ #
39
+ # Allows individual stores to include any active record scopes or joins
40
+ # when data are displayed.
41
+ def display_includes
42
+ where(nil)
43
+ end
44
+
45
+ def paginate(args)
46
+ limit(args[:limit]).offset(args[:offset])
47
+ end
48
+
49
+ def adjust_date_for_cdt(datetime)
50
+ datetime.in_time_zone('UTC')
51
+ end
46
52
  end
47
53
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ibrain
4
+ class BaseRepository
5
+ def initialize(current_user, record)
6
+ @current_user = current_user
7
+ @record = record
8
+ end
9
+
10
+ attr_reader :current_user, :record
11
+
12
+ protected
13
+
14
+ def cryptor
15
+ Ibrain::Encryptor.new
16
+ end
17
+ end
18
+ end
@@ -36,6 +36,10 @@ module Ibrain
36
36
  insert_root_type('query', 'QueryType')
37
37
  end
38
38
 
39
+ def create_repository_root_type
40
+ create_dir("app/repositories")
41
+ end
42
+
39
43
  def schema_file_path
40
44
  "#{options[:directory]}/#{schema_name.underscore}.rb"
41
45
  end
@@ -36,6 +36,10 @@ module Ibrain
36
36
  create_mutation_root_type
37
37
  end
38
38
 
39
+ if options[:model].present?
40
+ system("bundle exec rails generate ibrain:graphql:object #{options[:model].downcase}")
41
+ end
42
+
39
43
  template "mutation.erb", "#{options[:directory]}/mutations/#{file_name}.rb"
40
44
 
41
45
  sentinel = /class .*MutationType\s*<\s*[^\s]+?\n/m
@@ -29,7 +29,10 @@ module Ibrain
29
29
  desc: "Include the Relay Node interface"
30
30
 
31
31
  def create_type_file
32
+ create_dir('app/repositories') unless Dir.exist?('app/repositories')
33
+
32
34
  template "object.erb", "#{options[:directory]}/types/objects/#{type_file_name}.rb"
35
+ template "repository.erb", "app/repositories/#{type_name}_repository.rb"
33
36
  end
34
37
 
35
38
  def fields
@@ -72,6 +75,10 @@ module Ibrain
72
75
  false
73
76
  end
74
77
 
78
+ def model_name
79
+ type_name.capitalize
80
+ end
81
+
75
82
  def klass
76
83
  @klass ||= Module.const_get(type_name.camelize)
77
84
  end
@@ -20,6 +20,10 @@ module Ibrain
20
20
  create_resolver_root_type
21
21
  end
22
22
 
23
+ if options[:model].present?
24
+ system("bundle exec rails generate ibrain:graphql:object #{options[:model].downcase}")
25
+ end
26
+
23
27
  template "resolver.erb", "#{options[:directory]}/resolvers/#{file_name}.rb"
24
28
 
25
29
  sentinel = /class .*QueryType\s*<\s*[^\s]+?\n/m
@@ -36,6 +36,10 @@ module Ibrain
36
36
  create_resolver_root_type
37
37
  end
38
38
 
39
+ if options[:model].present?
40
+ system("bundle exec rails generate ibrain:graphql:object #{options[:model].downcase}")
41
+ end
42
+
39
43
  template "resolvers.erb", "#{options[:directory]}/resolvers/#{file_name}.rb"
40
44
  template "aggregate.erb", "#{options[:directory]}/resolvers/#{file_name}_aggregate.rb"
41
45
 
@@ -6,7 +6,7 @@ module Resolvers
6
6
  description 'Define aggregate to count total records for <%= resolver_name %>'
7
7
  # define resolve method
8
8
  def resolve(args)
9
- <%= model_name.capitalize %>.ransack(args[:filter]).result
9
+ <%= model_name.capitalize %>Repository.aggregate(args)
10
10
  end
11
11
  end
12
12
  end
@@ -14,7 +14,8 @@ module Mutations
14
14
 
15
15
  # TODO: define resolve method
16
16
  def resolve(args)
17
- # TODO: define logic
17
+ # TODO: define logic inside repository
18
+ # Something like Repository.new(current_user, Post.new).create(args)
18
19
  end
19
20
  end
20
21
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ <% module_namespacing_when_supported do -%>
4
+ class <%= model_name %>Repository < Ibrain::BaseRepository
5
+ def initialize(current_user, record = nil)
6
+ super(current_user, record)
7
+ end
8
+
9
+ class << self
10
+ def find(args)
11
+ <%= model_name %>.find args[:id]
12
+ end
13
+
14
+ def aggregate(args)
15
+ <%= model_name %>.ransack(args[:filter]).result
16
+ end
17
+ end
18
+ end
19
+ <% end -%>
@@ -13,7 +13,7 @@ module Resolvers
13
13
 
14
14
  # TODO: define resolve method
15
15
  def resolve(args)
16
- <%= model_name.capitalize %>.find args[:id]
16
+ <%= model_name.capitalize %>Repository.find args[:id]
17
17
  end
18
18
  end
19
19
  end
@@ -11,7 +11,7 @@ module Resolvers
11
11
 
12
12
  # TODO: define resolve method
13
13
  def resolve(args)
14
- super(args).limit(args[:limit]).offset(args[:offset])
14
+ super(args).paginate(args)
15
15
  end
16
16
  end
17
17
  end
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class AppSchema < Ibrain::BaseSchema
4
- description 'Define root schema'
5
-
6
4
  mutation(Types::MutationType)
7
5
  query(Types::QueryType)
8
6
  end
@@ -113,6 +113,7 @@ Rails/DynamicFindBy:
113
113
  # It's okay to skip model validations to setup a spec.
114
114
  Rails/SkipsModelValidations:
115
115
  Exclude:
116
+ - db/seeds/**/*.rb
116
117
  - '*/spec/**/*'
117
118
 
118
119
  # We use a lot of
@@ -277,7 +278,7 @@ Metrics/BlockLength:
277
278
  Metrics/CyclomaticComplexity:
278
279
  Enabled: false
279
280
 
280
- Metrics/LineLength:
281
+ Layout/LineLength:
281
282
  Enabled: false
282
283
 
283
284
  Metrics/MethodLength:
@@ -595,4 +596,20 @@ Gemspec/RequiredRubyVersion:
595
596
  Enabled: false
596
597
 
597
598
  GraphQL/FieldDescription:
598
- Enabled: false
599
+ Enabled: false
600
+
601
+ GraphQL/ObjectDescription:
602
+ Enabled: true
603
+ Exclude:
604
+ - app/graphql/policies/*.rb
605
+ - app/graphql/*.rb
606
+
607
+ GraphQL/ExtractType:
608
+ Enabled: false
609
+
610
+ Rails/UnknownEnv:
611
+ Environments:
612
+ - production
613
+ - development
614
+ - test
615
+ - staging
@@ -52,11 +52,15 @@ module Ibrain
52
52
  # This one will be defined by apps looking to hook into Ibrain
53
53
  # As per authentication_helpers.rb
54
54
  if respond_to?(:ibrain_current_user, true)
55
- ibrain_current_user
55
+ try(:ibrain_current_user)
56
56
  # This one will be defined by Devise
57
57
  elsif respond_to?(:current_ibrain_user, true)
58
- current_ibrain_user
58
+ try(:current_ibrain_user)
59
59
  end
60
+ rescue StandardError => e
61
+ Ibrain::Logger.warn e.message.to_s
62
+
63
+ nil
60
64
  end
61
65
  end
62
66
  end
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ibrain
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.4"
5
5
 
6
6
  def self.ibrain_version
7
7
  VERSION
8
8
  end
9
9
 
10
10
  def self.previous_ibrain_minor_version
11
- '0.1.2'
11
+ '0.1.3'
12
12
  end
13
13
 
14
14
  def self.ibrain_gem_version
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ibrain-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tai Nguyen Van
@@ -210,6 +210,7 @@ files:
210
210
  - app/models/ibrain/legacy_user.rb
211
211
  - app/models/ibrain/role.rb
212
212
  - app/models/ibrain/role_user.rb
213
+ - app/repositories/ibrain/base_repository.rb
213
214
  - config/initializers/friendly_id.rb
214
215
  - config/locales/en.yml
215
216
  - config/locales/jp.yml
@@ -223,6 +224,7 @@ files:
223
224
  - lib/generators/ibrain/graphql/templates/aggregate.erb
224
225
  - lib/generators/ibrain/graphql/templates/mutation.erb
225
226
  - lib/generators/ibrain/graphql/templates/object.erb
227
+ - lib/generators/ibrain/graphql/templates/repository.erb
226
228
  - lib/generators/ibrain/graphql/templates/resolver.erb
227
229
  - lib/generators/ibrain/graphql/templates/resolvers.erb
228
230
  - lib/generators/ibrain/graphql/type_generator.rb