activefunction 0.3.5 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,12 +1,63 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "active_function_core"
4
+ require "active_function/version"
5
+ require "active_function/base"
4
6
 
5
7
  RubyNext::Language.setup_gem_load_path(transpile: true)
6
8
 
7
9
  module ActiveFunction
8
- class Error < StandardError; end
10
+ class << self
11
+ # Configure ActiveFunction through DSL method calls.
12
+ # Setups {ActiveFunction::Base} with provided internal and custom plugins.
13
+ # Also freezes plugins and {ActiveFunction::Base}.
14
+ #
15
+ # @example
16
+ # ActiveFunction.config do
17
+ # plugin :callbacks
18
+ # end
19
+ #
20
+ # @param block [Proc] class_eval'ed block in ActiveFunction module.
21
+ # @return [void]
22
+ def config(&block)
23
+ class_eval(&block)
24
+ @_plugins.freeze
25
+ self::Base.freeze
26
+ end
9
27
 
10
- require "active_function/version"
11
- require "active_function/base"
28
+ # List of registered internal plugins.
29
+ def plugins = @_plugins ||= {}
30
+
31
+ # Register internal Symbol'ed plugin.
32
+ #
33
+ # @param [Symbol] symbol name of internal plugin,
34
+ # should match file name in ./lib/active_function/functions/*.rb
35
+ # @param [Module] mod module to register.
36
+ def register_plugin(symbol, mod)
37
+ plugins[symbol] = mod
38
+ end
39
+
40
+ # Add plugin to ActiveFunction::Base.
41
+ #
42
+ # @example
43
+ # ActiveFunction.plugin :callbacks
44
+ # ActiveFunction.plugin CustomPlugin
45
+ #
46
+ # @param [Symbol, Module] mod
47
+ # @return [void]
48
+ def plugin(mod)
49
+ if mod.is_a? Symbol
50
+ begin
51
+ require "active_function/functions/#{mod}"
52
+ mod = plugins.fetch(mod)
53
+ rescue LoadError
54
+ raise ArgumentError, "Unknown plugin #{mod}"
55
+ end
56
+ end
57
+
58
+ self::Base.include(mod)
59
+ end
60
+ end
61
+
62
+ plugin :response
12
63
  end
metadata CHANGED
@@ -1,43 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activefunction
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nerbyk
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-20 00:00:00.000000000 Z
11
+ date: 2024-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activefunction-core
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.0.1
19
+ version: 0.2.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.0.1
26
+ version: 0.2.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '13.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: ruby-next
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: minitest
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,11 +80,30 @@ dependencies:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
82
  version: 1.4.3
69
- description: "\n rails/action_controller like gem which provides lightweight callbacks,\n
70
- \ strong parameters & rendering features. It's designed to be used with\n AWS
71
- Lambda functions, but can be also used with any Ruby application.\n\n Implemented
72
- with some of ruby 3.x features, but also supports\n ruby 2.6.x thanks to RubyNext
73
- transpiler. Type safety achieved\n by RBS and Steep.\n "
83
+ - !ruby/object:Gem::Dependency
84
+ name: mocha
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 2.1.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 2.1.0
97
+ description: "\n ActiveFunction is a collection of gems designed to be used with
98
+ Function as a Service (FaaS) computing instances. Inspired by aws-sdk v3 gem structure
99
+ and rails/activesupport.\n\n Features:\n - Ruby Version Compatibility: Implemented
100
+ with most of Ruby 3.2+ features, with support for Ruby versions >= 2.6 through the
101
+ RubyNext transpiler (CI'ed).\n - Type Safety: Achieves type safety through the
102
+ use of RBS and Steep (CI'ed) [Note: disabled due to the presence of Ruby::UnsupportedSyntax
103
+ errors].\n - Plugins System: Provides a simple Plugin system inspired by Polishing
104
+ Ruby Programming by Jeremy Evans to load gem plugins and self-defined plugins.\n
105
+ \ - Gem Collection: Offers a collection of gems designed for use within ActiveFunction
106
+ or as standalone components.\n "
74
107
  email:
75
108
  - danil.maximov2000@gmail.com
76
109
  executables: []
@@ -80,18 +113,14 @@ files:
80
113
  - CHANGELOG.md
81
114
  - LICENSE.txt
82
115
  - README.md
83
- - bin/console
84
- - bin/rake
85
- - bin/rubocop
86
- - bin/ruby-next
87
- - bin/setup
88
116
  - lib/.rbnext/2.7/active_function/functions/strong_parameters.rb
89
- - lib/.rbnext/3.0/active_function/functions/core.rb
117
+ - lib/.rbnext/3.0/active_function.rb
118
+ - lib/.rbnext/3.0/active_function/base.rb
90
119
  - lib/.rbnext/3.0/active_function/functions/response.rb
120
+ - lib/.rbnext/3.1/active_function/functions/response.rb
91
121
  - lib/active_function.rb
92
122
  - lib/active_function/base.rb
93
123
  - lib/active_function/functions/callbacks.rb
94
- - lib/active_function/functions/core.rb
95
124
  - lib/active_function/functions/rendering.rb
96
125
  - lib/active_function/functions/response.rb
97
126
  - lib/active_function/functions/strong_parameters.rb
@@ -105,7 +134,7 @@ metadata:
105
134
  homepage_uri: https://github.com/DanilMaximov/activefunction
106
135
  source_code_uri: https://github.com/DanilMaximov/activefunction
107
136
  changelog_uri: https://github.com/DanilMaximov/activefunction/CHANGELOG.md
108
- post_install_message:
137
+ post_install_message:
109
138
  rdoc_options: []
110
139
  require_paths:
111
140
  - lib
@@ -120,9 +149,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
149
  - !ruby/object:Gem::Version
121
150
  version: '0'
122
151
  requirements: []
123
- rubygems_version: 3.4.10
124
- signing_key:
152
+ rubygems_version: 3.5.4
153
+ signing_key:
125
154
  specification_version: 4
126
- summary: rails/action_controller like gem which provides callbacks, strong parameters
127
- & rendering features.
155
+ summary: Playground gem for Ruby 3.2+ features and more, designed for FaaS computing
156
+ instances, but mostly used for experiments.
128
157
  test_files: []
data/bin/console DELETED
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require "bundler/setup"
5
- require "active_function"
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/rake DELETED
@@ -1,27 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- #
5
- # This file was generated by Bundler.
6
- #
7
- # The application 'rake' is installed as part of a gem, and
8
- # this file is here to facilitate running it.
9
- #
10
-
11
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
12
-
13
- bundle_binstub = File.expand_path("bundle", __dir__)
14
-
15
- if File.file?(bundle_binstub)
16
- if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
17
- load(bundle_binstub)
18
- else
19
- abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
20
- Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
21
- end
22
- end
23
-
24
- require "rubygems"
25
- require "bundler/setup"
26
-
27
- load Gem.bin_path("rake", "rake")
data/bin/rubocop DELETED
@@ -1,27 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- #
5
- # This file was generated by Bundler.
6
- #
7
- # The application 'rubocop' is installed as part of a gem, and
8
- # this file is here to facilitate running it.
9
- #
10
-
11
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
12
-
13
- bundle_binstub = File.expand_path("bundle", __dir__)
14
-
15
- if File.file?(bundle_binstub)
16
- if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
17
- load(bundle_binstub)
18
- else
19
- abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
20
- Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
21
- end
22
- end
23
-
24
- require "rubygems"
25
- require "bundler/setup"
26
-
27
- load Gem.bin_path("rubocop", "rubocop")
data/bin/ruby-next DELETED
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- lib_path = File.expand_path("../lib", __dir__)
4
- $LOAD_PATH.unshift(lib_path) unless $LOAD_PATH.include?(lib_path)
5
-
6
- require "ruby-next/cli"
7
-
8
- begin
9
- cli = RubyNext::CLI.new
10
- cli.run(ARGV)
11
- rescue => e
12
- raise e if $DEBUG
13
- STDERR.puts e.message
14
- STDERR.puts e.backtrace.join("\n") if ENV["RUBY_NEXT_DEBUG"] == "1"
15
- exit 1
16
- end
data/bin/setup DELETED
@@ -1,8 +0,0 @@
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
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveFunction
4
- class MissingRouteMethod < Error
5
- MESSAGE_TEMPLATE = "Missing function route: %s"
6
-
7
- attr_reader :message
8
-
9
- def initialize(context)
10
- @message = MESSAGE_TEMPLATE % context
11
- end
12
- end
13
-
14
- class NotRenderedError < Error
15
- MESSAGE_TEMPLATE = "render was not called: %s"
16
-
17
- attr_reader :message
18
-
19
- def initialize(context)
20
- @message = MESSAGE_TEMPLATE % context
21
- end
22
- end
23
-
24
- module Functions
25
- module Core
26
- attr_reader :action_name, :request, :response
27
-
28
- def dispatch(action_name, request, response)
29
- @action_name = action_name
30
- @request = request
31
- @response = response
32
-
33
- raise MissingRouteMethod, @action_name unless respond_to?(action_name)
34
-
35
- process(@action_name)
36
-
37
- raise NotRenderedError, @action_name unless performed?
38
-
39
- @response.to_h
40
- end
41
-
42
- private
43
-
44
- def process(action) ; public_send(action); end
45
-
46
- def performed? ; @response.committed?; end
47
- end
48
- end
49
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveFunction
4
- class MissingRouteMethod < Error
5
- MESSAGE_TEMPLATE = "Missing function route: %s"
6
-
7
- attr_reader :message
8
-
9
- def initialize(context)
10
- @message = MESSAGE_TEMPLATE % context
11
- end
12
- end
13
-
14
- class NotRenderedError < Error
15
- MESSAGE_TEMPLATE = "render was not called: %s"
16
-
17
- attr_reader :message
18
-
19
- def initialize(context)
20
- @message = MESSAGE_TEMPLATE % context
21
- end
22
- end
23
-
24
- module Functions
25
- module Core
26
- attr_reader :action_name, :request, :response
27
-
28
- def dispatch(action_name, request, response)
29
- @action_name = action_name
30
- @request = request
31
- @response = response
32
-
33
- raise MissingRouteMethod, @action_name unless respond_to?(action_name)
34
-
35
- process(@action_name)
36
-
37
- raise NotRenderedError, @action_name unless performed?
38
-
39
- @response.to_h
40
- end
41
-
42
- private
43
-
44
- def process(action) = public_send(action)
45
-
46
- def performed? = @response.committed?
47
- end
48
- end
49
- end