ibrain-core 0.1.3 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/ibrain/graphql_controller.rb +1 -1
  3. data/app/graphql/ibrain/extentions/default_value.rb +0 -2
  4. data/app/graphql/ibrain/interfaces/record_interface.rb +0 -2
  5. data/app/graphql/ibrain/lazy/base.rb +1 -1
  6. data/app/graphql/ibrain/resolvers/base_resolver.rb +3 -3
  7. data/app/graphql/ibrain/types/attribute_type.rb +8 -0
  8. data/app/graphql/ibrain/types/base_node.rb +2 -2
  9. data/app/graphql/ibrain/types/base_object.rb +1 -1
  10. data/app/graphql/ibrain/types/filter_type.rb +0 -1
  11. data/app/models/{ibrain/concerns → concerns/ibrain}/ransackable_attributes.rb +0 -0
  12. data/app/models/{ibrain/concerns → concerns/ibrain}/soft_deletable.rb +0 -0
  13. data/app/models/{ibrain/concerns → concerns/ibrain}/user_api_authentication.rb +0 -0
  14. data/app/models/{ibrain/concerns → concerns/ibrain}/user_methods.rb +0 -2
  15. data/app/models/ibrain/base.rb +24 -12
  16. data/app/models/ibrain/legacy_user.rb +1 -1
  17. data/app/repositories/ibrain/base_repository.rb +18 -0
  18. data/lib/generators/ibrain/graphql/core.rb +4 -0
  19. data/lib/generators/ibrain/graphql/mutation_generator.rb +4 -0
  20. data/lib/generators/ibrain/graphql/object_generator.rb +7 -0
  21. data/lib/generators/ibrain/graphql/resolver_generator.rb +4 -0
  22. data/lib/generators/ibrain/graphql/resolvers_generator.rb +4 -0
  23. data/lib/generators/ibrain/graphql/templates/aggregate.erb +1 -1
  24. data/lib/generators/ibrain/graphql/templates/mutation.erb +2 -1
  25. data/lib/generators/ibrain/graphql/templates/repository.erb +19 -0
  26. data/lib/generators/ibrain/graphql/templates/resolver.erb +1 -1
  27. data/lib/generators/ibrain/graphql/templates/resolvers.erb +1 -1
  28. data/lib/generators/ibrain/install/install_generator.rb +1 -1
  29. data/lib/generators/ibrain/install/templates/config/initializers/cors.tt +1 -1
  30. data/lib/generators/ibrain/install/templates/graphql/app_schema.rb.tt +0 -2
  31. data/lib/generators/ibrain/install/templates/rubocop.yml.tt +19 -2
  32. data/lib/ibrain/core/controller_helpers/auth.rb +6 -2
  33. data/lib/ibrain/core/version.rb +2 -2
  34. data/lib/ibrain/core.rb +1 -0
  35. metadata +23 -7
  36. data/app/graphql/mutations/insert_user.rb +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 77b55d552570271ff6defb94a2f5f990816d29966703112050987bd7f5ef8b1e
4
- data.tar.gz: 0b7c63567310a31fb93c7d277c8216ee7be843e9a7bf4c16117317493c20bf1d
3
+ metadata.gz: 57017a63ef4f94fba49be6f78fa18d5754bd81109f144995c44d8ff38a7c8bc0
4
+ data.tar.gz: 7204281494ec365f7528714301bf1fd7b2b40eff3f9e29e874207f8592c8fe33
5
5
  SHA512:
6
- metadata.gz: 46264a7f0478a26389829084b8a12c7cfc6a7da3cf8920d7edc06e7acc14fe951f97ac8ff39547d7d1874fae87dcecd25043c206ead022eb0caf0752bbe13b98
7
- data.tar.gz: 7259f9823c599f96c600adb64fa0effa65dbece73df38357aa93da0aa47654d40dad625a7308b5f12d709833dac7ea83bdcf0ecd60389b9434e09c69315ef28e
6
+ metadata.gz: 948449257443e847916a2281a7acd9c346579a800d98af65e2bad7e32cf3812b8b69ff768dc760b0d4fcf098c1eba412e674ec5b34b87fa6e3a75415d69df1c7
7
+ data.tar.gz: 33f5104110a2912405452c65829076ffb92b217835c2a1e9d0b4f7991c3577d35a739342a8e4e99215115f4af0dfcae73b6b3b32c491706432a00a68eee8a207
@@ -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
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Ibrain
4
4
  module Lazy
5
- class Base < GraphQL::Function
5
+ class Base < GraphQL::Schema::Resolver
6
6
  end
7
7
  end
8
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)
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ibrain
4
+ module Types
5
+ class AttributeType < BaseScalar
6
+ end
7
+ end
8
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Ibrain::Types::BaseNode < Types::BaseObject
4
- implements ::GraphQL::Relay::Node.interface
3
+ class Ibrain::Types::BaseNode < Ibrain::Types::BaseObject
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,10 +5,8 @@ module Ibrain
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  include Ibrain::UserApiAuthentication
8
- include Ibrain::UserReporting
9
8
 
10
9
  included do
11
- extend Ibrain::DisplayMoney
12
10
  after_create :auto_generate_ibrain_api_key
13
11
 
14
12
  include Ibrain::RansackableAttributes unless included_modules.include?(Ibrain::RansackableAttributes)
@@ -1,20 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ IGNORE_ATTRIBUTES = %w(id created_at updated_at)
4
+
3
5
  class Ibrain::Base < Ibrain::ApplicationRecord
4
6
  include ActionView::Helpers::DateHelper
5
7
 
6
8
  self.abstract_class = true
7
9
 
8
- def self.adjust_date_for_cdt(datetime)
9
- datetime.in_time_zone('UTC')
10
- end
11
-
12
10
  def string_id
13
11
  try(:id).try(:to_s)
14
12
  end
15
13
 
16
14
  scope :graphql_ransack, lambda { |params|
17
- ransack(params).result(distinct: true)
15
+ ransack(params).result
18
16
  }
19
17
 
20
18
  scope :reverse_scope, lambda {
@@ -36,12 +34,26 @@ class Ibrain::Base < Ibrain::ApplicationRecord
36
34
  time_ago_in_words(created_at)
37
35
  end
38
36
 
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)
37
+ class << self
38
+ # Provides a scope that should be included any time data
39
+ # are fetched with the intention of displaying to the user.
40
+ #
41
+ # Allows individual stores to include any active record scopes or joins
42
+ # when data are displayed.
43
+ def display_includes
44
+ where(nil)
45
+ end
46
+
47
+ def paginate(args)
48
+ limit(args[:limit]).offset(args[:offset])
49
+ end
50
+
51
+ def adjust_date_for_cdt(datetime)
52
+ datetime.in_time_zone('UTC')
53
+ end
54
+
55
+ def permitted_attributes
56
+ column_names.reject { |k| IGNORE_ATTRIBUTES.include?(k) }
57
+ end
46
58
  end
47
59
  end
@@ -6,7 +6,7 @@ module Ibrain
6
6
  # @note This class is intended to be modified by extensions (ex.
7
7
  # ibrain-auth)
8
8
  class LegacyUser < Ibrain::Base
9
- include UserMethods
9
+ include Ibrain::UserMethods
10
10
 
11
11
  self.table_name = 'ibrain_users'
12
12
 
@@ -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
@@ -55,7 +55,7 @@ module Ibrain
55
55
  Would you like to install it? (Y/n)"))
56
56
 
57
57
  @plugins_to_be_installed << 'ibrain-auth' unless system('gem list | grep ibrain-auth')
58
- @plugin_generators_to_run << 'ibrain:auth:install'
58
+ @plugin_generators_to_run << "ibrain:auth:install --with-ridgpole=#{options[:with_ridgepole]}"
59
59
  end
60
60
  end
61
61
 
@@ -7,7 +7,7 @@
7
7
 
8
8
  Rails.application.config.middleware.insert_before 0, Rack::Cors do
9
9
  allow do
10
- origins '*'
10
+ origins ['localhost']
11
11
 
12
12
  resource '*',
13
13
  headers: :any,
@@ -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.7"
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.6'
12
12
  end
13
13
 
14
14
  def self.ibrain_gem_version
data/lib/ibrain/core.rb CHANGED
@@ -14,6 +14,7 @@ require 'friendly_id'
14
14
  require 'kaminari/activerecord'
15
15
  require 'rack/cors'
16
16
  require 'ransack'
17
+ require 'discard'
17
18
 
18
19
  module Ibrain
19
20
  mattr_accessor :user_class
metadata CHANGED
@@ -1,14 +1,14 @@
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.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tai Nguyen Van
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-20 00:00:00.000000000 Z
11
+ date: 2021-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord-session_store
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.15.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: discard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.2'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: friendly_id
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -183,6 +197,7 @@ files:
183
197
  - app/graphql/ibrain/resolvers/base_aggregate.rb
184
198
  - app/graphql/ibrain/resolvers/base_resolver.rb
185
199
  - app/graphql/ibrain/types/aggregate_type.rb
200
+ - app/graphql/ibrain/types/attribute_type.rb
186
201
  - app/graphql/ibrain/types/base_argument.rb
187
202
  - app/graphql/ibrain/types/base_connection.rb
188
203
  - app/graphql/ibrain/types/base_edge.rb
@@ -199,17 +214,17 @@ files:
199
214
  - app/graphql/ibrain/types/node_type.rb
200
215
  - app/graphql/ibrain/util/field_combiner.rb
201
216
  - app/graphql/ibrain/util/query_combiner.rb
202
- - app/graphql/mutations/insert_user.rb
217
+ - app/models/concerns/ibrain/ransackable_attributes.rb
218
+ - app/models/concerns/ibrain/soft_deletable.rb
219
+ - app/models/concerns/ibrain/user_api_authentication.rb
220
+ - app/models/concerns/ibrain/user_methods.rb
203
221
  - app/models/ibrain/ability.rb
204
222
  - app/models/ibrain/application_record.rb
205
223
  - app/models/ibrain/base.rb
206
- - app/models/ibrain/concerns/ransackable_attributes.rb
207
- - app/models/ibrain/concerns/soft_deletable.rb
208
- - app/models/ibrain/concerns/user_api_authentication.rb
209
- - app/models/ibrain/concerns/user_methods.rb
210
224
  - app/models/ibrain/legacy_user.rb
211
225
  - app/models/ibrain/role.rb
212
226
  - app/models/ibrain/role_user.rb
227
+ - app/repositories/ibrain/base_repository.rb
213
228
  - config/initializers/friendly_id.rb
214
229
  - config/locales/en.yml
215
230
  - config/locales/jp.yml
@@ -223,6 +238,7 @@ files:
223
238
  - lib/generators/ibrain/graphql/templates/aggregate.erb
224
239
  - lib/generators/ibrain/graphql/templates/mutation.erb
225
240
  - lib/generators/ibrain/graphql/templates/object.erb
241
+ - lib/generators/ibrain/graphql/templates/repository.erb
226
242
  - lib/generators/ibrain/graphql/templates/resolver.erb
227
243
  - lib/generators/ibrain/graphql/templates/resolvers.erb
228
244
  - lib/generators/ibrain/graphql/type_generator.rb
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Ibrain
4
- module Mutations
5
- class InsertUser < Ibrain::Mutations::BaseMutation
6
- # TODO: define return fields
7
- # field :post, Types::PostType, null: false
8
-
9
- # TODO: define arguments
10
- # argument :name, String, required: true
11
-
12
- # TODO: define resolve method
13
- # def resolve(name:)
14
- # { post: ... }
15
- # end
16
- end
17
- end
18
- end