backend 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 03dad73a5e8c0fcfc1ff9356618c39b383070f0f2d1e38b0fc7ea635b763ad14
4
+ data.tar.gz: f0c1ed7b295b475ef6abd756c3c217317fe993036114152ee0a8158b1a16d590
5
+ SHA512:
6
+ metadata.gz: 92af0f420ee201dc1a742b7e0448572378b430f886ce665e250d0babdc0af09a6311b9b57a6bd1dffaba03f1fa0ba03f6b806198a5cee472afdca59b96007b08
7
+ data.tar.gz: 409f2600bcf7ae40464583bee6edf38717ecdb287c4fdfa3d91b5a9347e127cb4d8ecbfa166bee99a2bce79e6836c81f2906c14581b258fb22075d3a81d6f57e
data/README.md ADDED
@@ -0,0 +1,41 @@
1
+ Backend
2
+ ==============
3
+ [![RuboCop Github Action](https://github.com/kiqr/backend/actions/workflows/rubocop.yml/badge.svg)](https://github.com/kiqr/backend/actions/workflows/rubocop.yml)
4
+ [![RSpec](https://github.com/kiqr/backend/actions/workflows/rspec.yml/badge.svg)](https://github.com/kiqr/backend/actions/workflows/rspec.yml)
5
+ [![MIT License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE.md)
6
+
7
+ An administration panel for Ruby on Rails.
8
+
9
+ Installation
10
+ ------------
11
+
12
+ Add the following line to Gemfile:
13
+
14
+ ```ruby
15
+ gem "backend", "~> 1.0"
16
+ ```
17
+
18
+ and run `bundle install` from your terminal to install it.
19
+
20
+ Contributing
21
+ ------------
22
+ If you are interested in reporting/fixing issues and contributing directly to the code base, please see [CONTRIBUTING.md](CONTRIBUTING.md) for more information on what we're looking for and how to get started.
23
+
24
+ Versioning
25
+ ----------
26
+ This library aims to adhere to [Semantic Versioning](http://semver.org/). Violations
27
+ of this scheme should be reported as bugs. Specifically, if a minor or patch
28
+ version is released that breaks backward compatibility, that version should be
29
+ immediately yanked and/or a new version should be immediately released that
30
+ restores compatibility. Breaking changes to the public API will only be
31
+ introduced with new major versions. As a result of this policy, you can (and
32
+ should) specify a dependency on this gem using the [Pessimistic Version
33
+ Constraint](http://guides.rubygems.org/patterns/#pessimistic-version-constraint) with two digits of precision. For example:
34
+
35
+ ```ruby
36
+ gem "backend", "~> 1.0"
37
+ ```
38
+
39
+ License
40
+ -------
41
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Backend
4
+ class Engine < ::Rails::Engine
5
+ isolate_namespace Backend
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Backend
4
+ module Field
5
+ class Base
6
+ attr_reader :name
7
+
8
+ def initialize(name)
9
+ @name = name.to_sym
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Backend
4
+ module Field
5
+ class Editor < Backend::Field::Base; end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Backend
4
+ module Field
5
+ class String < Backend::Field::Base; end
6
+ end
7
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Backend
4
+ class Resource
5
+ extend ActiveSupport::DescendantsTracker
6
+
7
+ # Define class accessors.
8
+ class_attribute :fields, instance_accessor: false
9
+
10
+ class << self
11
+ # Return demodulized and stripped class name in plural form.
12
+ def scope
13
+ @scope ||= klass_name.pluralize.underscore
14
+ end
15
+
16
+ # Return the related model class.
17
+ def klass
18
+ @klass ||= klass_name.constantize
19
+ end
20
+
21
+ # Human readable name of the resource.
22
+ def resource_name
23
+ klass.model_name.human
24
+ end
25
+
26
+ # Base parameter for form requests.
27
+ def resource_param
28
+ resource_name.downcase.underscore.to_sym
29
+ end
30
+
31
+ delegate :to_sym, to: :scope
32
+
33
+ private
34
+
35
+ # Normalized class name.
36
+ #
37
+ # Returns the demodulized and stripped class name without Resource in the end.
38
+ # Example:
39
+ # CategoryResource => Category
40
+ def klass_name
41
+ @klass_name ||= name.demodulize.chomp("Resource")
42
+ end
43
+
44
+ # Field.
45
+ #
46
+ # Register a new editable field for the resource.
47
+ # The type of field can be set with the :type option.
48
+ # The default type is :string.
49
+ #
50
+ # Example:
51
+ # field :title, type: :string => Backend::Fields::String.new(:title)
52
+ # field :body, type: :editor => Backend::Fields::Editor.new(:body)
53
+ # field :status, type: :boolean => Backend::Fields::Boolean.new(:status)
54
+ #
55
+ # :api: public
56
+ def field(name, type: :base)
57
+ klass = Backend::Field.const_get(type.to_s.classify)
58
+ field = klass.new(name)
59
+
60
+ # Create empty array if #fields is nil.
61
+ self.fields ||= []
62
+
63
+ # Insert field into the array.
64
+ self.fields << field
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Backend
4
+ VERSION = "0.0.0"
5
+ end
data/lib/backend.rb ADDED
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "backend/version"
4
+ require "backend/engine"
5
+ require "dry-configurable"
6
+
7
+ module Backend
8
+ extend Dry::Configurable
9
+
10
+ autoload "Resource", "backend/resource"
11
+
12
+ module Field
13
+ autoload "Base", "backend/field/base"
14
+ autoload "Editor", "backend/field/editor"
15
+ autoload "String", "backend/field/string"
16
+ end
17
+
18
+ setting :route_scope, "backend" # Default route scope for backend routes.
19
+
20
+ class << self
21
+ def resources
22
+ # Force eager load of all resources.
23
+ # Todo: this could be changed to a
24
+ # script that requires all files in app/backend.
25
+ Rails.application.eager_load!
26
+
27
+ # that has inherited from Backend::Resource.
28
+ Backend::Resource.descendants
29
+ end
30
+ end
31
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: backend
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - KIQR
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-03-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dry-configurable
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.11.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.11.0
27
+ description:
28
+ email: hello@kiqr.dev
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - README.md
34
+ - lib/backend.rb
35
+ - lib/backend/engine.rb
36
+ - lib/backend/field/base.rb
37
+ - lib/backend/field/editor.rb
38
+ - lib/backend/field/string.rb
39
+ - lib/backend/resource.rb
40
+ - lib/backend/version.rb
41
+ homepage: https://github.com/kiqr/backend
42
+ licenses:
43
+ - MIT
44
+ metadata:
45
+ bug_tracker_uri: https://github.com/kiqr/authenticatable/issues
46
+ documentation_uri: https://github.com/kiqr/authenticatable/issues
47
+ source_code_uri: https://github.com/kiqr/authenticatable
48
+ rubygems_mfa_required: 'true'
49
+ post_install_message:
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '2.6'
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubygems_version: 3.3.7
65
+ signing_key:
66
+ specification_version: 4
67
+ summary: An administration panel for Ruby on Rails.
68
+ test_files: []