zero_ruby 0.1.0.alpha1

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 +7 -0
  2. data/CHANGELOG.md +0 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +245 -0
  5. data/lib/zero_ruby/argument.rb +75 -0
  6. data/lib/zero_ruby/configuration.rb +57 -0
  7. data/lib/zero_ruby/errors.rb +90 -0
  8. data/lib/zero_ruby/input_object.rb +121 -0
  9. data/lib/zero_ruby/lmid_store.rb +43 -0
  10. data/lib/zero_ruby/lmid_stores/active_record_store.rb +63 -0
  11. data/lib/zero_ruby/mutation.rb +141 -0
  12. data/lib/zero_ruby/push_processor.rb +126 -0
  13. data/lib/zero_ruby/schema.rb +124 -0
  14. data/lib/zero_ruby/type_names.rb +24 -0
  15. data/lib/zero_ruby/types/base_type.rb +54 -0
  16. data/lib/zero_ruby/types/big_int.rb +32 -0
  17. data/lib/zero_ruby/types/boolean.rb +30 -0
  18. data/lib/zero_ruby/types/float.rb +31 -0
  19. data/lib/zero_ruby/types/id.rb +33 -0
  20. data/lib/zero_ruby/types/integer.rb +31 -0
  21. data/lib/zero_ruby/types/iso8601_date.rb +43 -0
  22. data/lib/zero_ruby/types/iso8601_date_time.rb +43 -0
  23. data/lib/zero_ruby/types/string.rb +20 -0
  24. data/lib/zero_ruby/typescript_generator.rb +192 -0
  25. data/lib/zero_ruby/validator.rb +69 -0
  26. data/lib/zero_ruby/validators/allow_blank_validator.rb +31 -0
  27. data/lib/zero_ruby/validators/allow_null_validator.rb +26 -0
  28. data/lib/zero_ruby/validators/exclusion_validator.rb +29 -0
  29. data/lib/zero_ruby/validators/format_validator.rb +35 -0
  30. data/lib/zero_ruby/validators/inclusion_validator.rb +30 -0
  31. data/lib/zero_ruby/validators/length_validator.rb +42 -0
  32. data/lib/zero_ruby/validators/numericality_validator.rb +63 -0
  33. data/lib/zero_ruby/version.rb +5 -0
  34. data/lib/zero_ruby/zero_client.rb +25 -0
  35. data/lib/zero_ruby.rb +87 -0
  36. metadata +145 -0
data/lib/zero_ruby.rb ADDED
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "zero_ruby/version"
4
+ require_relative "zero_ruby/configuration"
5
+ require_relative "zero_ruby/errors"
6
+
7
+ # Types (must be loaded before InputObject/Mutation which use them)
8
+ require_relative "zero_ruby/types/base_type"
9
+ require_relative "zero_ruby/types/string"
10
+ require_relative "zero_ruby/types/integer"
11
+ require_relative "zero_ruby/types/float"
12
+ require_relative "zero_ruby/types/boolean"
13
+ require_relative "zero_ruby/types/id"
14
+ require_relative "zero_ruby/types/big_int"
15
+ require_relative "zero_ruby/types/iso8601_date"
16
+ require_relative "zero_ruby/types/iso8601_date_time"
17
+
18
+ # Type name shortcuts (ID, Boolean, etc. without ZeroRuby::Types:: prefix)
19
+ # Must be loaded before InputObject/Mutation which include this module
20
+ require_relative "zero_ruby/type_names"
21
+
22
+ # Validators
23
+ require_relative "zero_ruby/validators/length_validator"
24
+ require_relative "zero_ruby/validators/numericality_validator"
25
+ require_relative "zero_ruby/validators/format_validator"
26
+ require_relative "zero_ruby/validators/inclusion_validator"
27
+ require_relative "zero_ruby/validators/exclusion_validator"
28
+ require_relative "zero_ruby/validators/allow_blank_validator"
29
+ require_relative "zero_ruby/validators/allow_null_validator"
30
+
31
+ # Core classes
32
+ require_relative "zero_ruby/argument"
33
+ require_relative "zero_ruby/validator"
34
+ require_relative "zero_ruby/input_object"
35
+ require_relative "zero_ruby/mutation"
36
+ require_relative "zero_ruby/schema"
37
+ require_relative "zero_ruby/typescript_generator"
38
+
39
+ # LMID (Last Mutation ID) Tracking
40
+ require_relative "zero_ruby/lmid_store"
41
+ require_relative "zero_ruby/lmid_stores/active_record_store"
42
+ require_relative "zero_ruby/push_processor"
43
+
44
+ # ZeroRuby - A Ruby gem for handling Zero mutations with type safety
45
+ #
46
+ # @example Basic usage with InputObject
47
+ # # Define an input type
48
+ # class Types::PostInput < ZeroRuby::InputObject
49
+ # argument :id, ID, required: true
50
+ # argument :title, String, required: true
51
+ # argument :body, String, required: false
52
+ # end
53
+ #
54
+ # # Define a mutation
55
+ # class Mutations::PostCreate < ZeroRuby::Mutation
56
+ # argument :post_input, Types::PostInput, required: true
57
+ # argument :notify, Boolean, required: false
58
+ #
59
+ # def execute(post_input:, notify: false)
60
+ # Post.create!(**post_input)
61
+ # notify_subscribers if notify
62
+ # end
63
+ # end
64
+ #
65
+ # # Register in schema
66
+ # class ZeroSchema < ZeroRuby::Schema
67
+ # mutation "posts.create", handler: Mutations::PostCreate
68
+ # end
69
+ #
70
+ # # Use in controller (Rails example)
71
+ # class ZeroController < ApplicationController
72
+ # def push
73
+ # if request.get?
74
+ # render plain: ZeroSchema.to_typescript, content_type: "text/plain"
75
+ # else
76
+ # body = JSON.parse(request.body.read)
77
+ # result = ZeroSchema.execute(body, context: {current_user: current_user})
78
+ # render json: result
79
+ # end
80
+ # end
81
+ # end
82
+ module ZeroRuby
83
+ # Convenience method for quick type access
84
+ module Types
85
+ # Already defined in individual type files
86
+ end
87
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zero_ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0.alpha1
5
+ platform: ruby
6
+ authors:
7
+ - Alex Serban
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 2025-12-20 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: bundler
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.5'
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.5'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rspec
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '3.13'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.13'
40
+ - !ruby/object:Gem::Dependency
41
+ name: ostruct
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.6'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.6'
54
+ - !ruby/object:Gem::Dependency
55
+ name: rake
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '13.3'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '13.3'
68
+ - !ruby/object:Gem::Dependency
69
+ name: standard
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.51'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.51'
82
+ description: Handle Zero mutations with runtime type safety
83
+ executables: []
84
+ extensions: []
85
+ extra_rdoc_files: []
86
+ files:
87
+ - CHANGELOG.md
88
+ - LICENSE.txt
89
+ - README.md
90
+ - lib/zero_ruby.rb
91
+ - lib/zero_ruby/argument.rb
92
+ - lib/zero_ruby/configuration.rb
93
+ - lib/zero_ruby/errors.rb
94
+ - lib/zero_ruby/input_object.rb
95
+ - lib/zero_ruby/lmid_store.rb
96
+ - lib/zero_ruby/lmid_stores/active_record_store.rb
97
+ - lib/zero_ruby/mutation.rb
98
+ - lib/zero_ruby/push_processor.rb
99
+ - lib/zero_ruby/schema.rb
100
+ - lib/zero_ruby/type_names.rb
101
+ - lib/zero_ruby/types/base_type.rb
102
+ - lib/zero_ruby/types/big_int.rb
103
+ - lib/zero_ruby/types/boolean.rb
104
+ - lib/zero_ruby/types/float.rb
105
+ - lib/zero_ruby/types/id.rb
106
+ - lib/zero_ruby/types/integer.rb
107
+ - lib/zero_ruby/types/iso8601_date.rb
108
+ - lib/zero_ruby/types/iso8601_date_time.rb
109
+ - lib/zero_ruby/types/string.rb
110
+ - lib/zero_ruby/typescript_generator.rb
111
+ - lib/zero_ruby/validator.rb
112
+ - lib/zero_ruby/validators/allow_blank_validator.rb
113
+ - lib/zero_ruby/validators/allow_null_validator.rb
114
+ - lib/zero_ruby/validators/exclusion_validator.rb
115
+ - lib/zero_ruby/validators/format_validator.rb
116
+ - lib/zero_ruby/validators/inclusion_validator.rb
117
+ - lib/zero_ruby/validators/length_validator.rb
118
+ - lib/zero_ruby/validators/numericality_validator.rb
119
+ - lib/zero_ruby/version.rb
120
+ - lib/zero_ruby/zero_client.rb
121
+ homepage: https://github.com/alse/zero-ruby
122
+ licenses:
123
+ - MIT
124
+ metadata:
125
+ homepage_uri: https://github.com/alse/zero-ruby
126
+ source_code_uri: https://github.com/alse/zero-ruby
127
+ changelog_uri: https://github.com/alse/zero-ruby/blob/main/CHANGELOG.md
128
+ rdoc_options: []
129
+ require_paths:
130
+ - lib
131
+ required_ruby_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: 3.0.0
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ requirements: []
142
+ rubygems_version: 3.6.2
143
+ specification_version: 4
144
+ summary: Ruby gem for handling Zero mutations with type safety
145
+ test_files: []