arkenstone-open 3.0.1

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 (45) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/codacy-analysis.yml +46 -0
  3. data/.gitignore +19 -0
  4. data/.rubocop.yml +5 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +16 -0
  7. data/Gemfile +21 -0
  8. data/Gemfile.lock +101 -0
  9. data/LICENSE.txt +11 -0
  10. data/README.md +87 -0
  11. data/Rakefile +36 -0
  12. data/arkenstone.gemspec +27 -0
  13. data/lib/arkenstone/associations/resources.rb +76 -0
  14. data/lib/arkenstone/associations.rb +389 -0
  15. data/lib/arkenstone/document.rb +289 -0
  16. data/lib/arkenstone/enumerable/query_list.rb +20 -0
  17. data/lib/arkenstone/errors/no_url_error.rb +14 -0
  18. data/lib/arkenstone/helpers.rb +18 -0
  19. data/lib/arkenstone/network/env.rb +19 -0
  20. data/lib/arkenstone/network/hook.rb +74 -0
  21. data/lib/arkenstone/network/network.rb +72 -0
  22. data/lib/arkenstone/query_builder.rb +84 -0
  23. data/lib/arkenstone/queryable.rb +38 -0
  24. data/lib/arkenstone/timestamps.rb +25 -0
  25. data/lib/arkenstone/validation/validation_error.rb +34 -0
  26. data/lib/arkenstone/validation/validations.rb +192 -0
  27. data/lib/arkenstone/version.rb +5 -0
  28. data/lib/arkenstone.rb +22 -0
  29. data/test/associations/test_document_overrides.rb +50 -0
  30. data/test/associations/test_has_and_belongs_to_many.rb +80 -0
  31. data/test/dummy/app/models/association.rb +35 -0
  32. data/test/dummy/app/models/superuser.rb +8 -0
  33. data/test/dummy/app/models/user.rb +10 -0
  34. data/test/spec_helper.rb +16 -0
  35. data/test/test_arkenstone.rb +354 -0
  36. data/test/test_arkenstone_hook_inheritance.rb +39 -0
  37. data/test/test_associations.rb +327 -0
  38. data/test/test_enumerables.rb +36 -0
  39. data/test/test_environment.rb +14 -0
  40. data/test/test_helpers.rb +18 -0
  41. data/test/test_hooks.rb +104 -0
  42. data/test/test_query_builder.rb +163 -0
  43. data/test/test_queryable.rb +59 -0
  44. data/test/test_validations.rb +197 -0
  45. metadata +133 -0
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ class QueryableTests < Test::Unit::TestCase
6
+ def test_query_url
7
+ url = 'http://example.com/users/query'
8
+ assert(url == User.query_url)
9
+ end
10
+
11
+ def test_where_with_string
12
+ dummy_user1 = user_options(name: 'user 1')
13
+ dummy_user2 = user_options(name: 'user 2')
14
+ stub_request(:post, "#{User.arkenstone_url}query").to_return(body: [dummy_user1, dummy_user2].to_json)
15
+ results = User.where '{name: "user 1"}'
16
+ assert(results.nil? == false)
17
+ assert(results.first.instance_of?(User))
18
+ end
19
+
20
+ def test_where_with_hash
21
+ dummy_user1 = user_options(name: 'user 1')
22
+ dummy_user2 = user_options(name: 'user 2')
23
+ stub_request(:post,
24
+ "#{User.arkenstone_url}query").with(body: { name: 'user 1' }.to_json).to_return(body: [dummy_user1,
25
+ dummy_user2].to_json)
26
+ results = User.where({ name: 'user 1' })
27
+ assert(results.nil? == false)
28
+ assert(results.first.instance_of?(User))
29
+ end
30
+
31
+ def test_where_with_block
32
+ dummy_user1 = user_options(name: 'user 1')
33
+ dummy_user2 = user_options(name: 'user 2')
34
+ stub_request(:post,
35
+ "#{User.arkenstone_url}query").with(body: { name: 'user 1' }).to_return(body: [dummy_user1,
36
+ dummy_user2].to_json)
37
+ results = User.where do
38
+ {
39
+ name: 'user 1'
40
+ }
41
+ end
42
+ assert(results.nil? == false)
43
+ end
44
+
45
+ def test_where_nil
46
+ result = User.where
47
+ assert(result.nil?)
48
+ end
49
+
50
+ def test_where_no_results
51
+ stub_request(:post, "#{User.arkenstone_url}query").to_return(body: [].to_json)
52
+ result = User.where ''
53
+ assert(result == [])
54
+ end
55
+ end
56
+
57
+ def user_options(options = {})
58
+ { name: 'John Doe', age: 18, gender: 'Male', bearded: true }.merge!(options)
59
+ end
@@ -0,0 +1,197 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ class ArkenstoneValidationTest < Test::Unit::TestCase
6
+ def setup
7
+ eval %(
8
+ class ArkenstoneTestFirstName
9
+ include Arkenstone::Validation
10
+
11
+ attr_accessor :first_name
12
+ validates :first_name, presence: true
13
+ end
14
+ )
15
+ end
16
+
17
+ def test_model_validate_presence
18
+ model = ArkenstoneTestFirstName.new
19
+ model.first_name = nil
20
+ assert(model.valid? == false)
21
+ model.first_name = 'test'
22
+ assert(model.valid?)
23
+ end
24
+
25
+ def test_model_validate_presence_empty_string
26
+ model = ArkenstoneTestFirstName.new
27
+ model.first_name = ''
28
+ assert(model.valid? == false)
29
+ end
30
+
31
+ def test_model_validate_empty_array
32
+ eval %(
33
+ class ArkenstoneTestEmpty
34
+ include Arkenstone::Validation
35
+
36
+ attr_accessor :values
37
+ validates :values, empty: false
38
+ end
39
+ )
40
+ model = ArkenstoneTestEmpty.new
41
+ assert_equal false, model.valid?
42
+ model.values = []
43
+ assert_equal false, model.valid?
44
+ model.values = ['hi']
45
+ assert_equal true, model.valid?
46
+ end
47
+
48
+ def test_model_validate_format
49
+ eval %(
50
+ class ArkenstoneTestLastName
51
+ include Arkenstone::Validation
52
+
53
+ attr_accessor :last_name
54
+ validates :last_name, format: { with: /[a-z]+/, message: "must be lowercase" }
55
+ end
56
+ )
57
+ model = ArkenstoneTestLastName.new
58
+ model.last_name = 'ABC'
59
+ assert(model.valid? == false)
60
+ model.last_name = 'abc'
61
+ assert(model.valid?)
62
+ end
63
+
64
+ def test_model_validate_true_value
65
+ eval %(
66
+ class ArkenstoneTestBool
67
+ include Arkenstone::Validation
68
+
69
+ attr_accessor :accepts_tandcs
70
+ validates :accepts_tandcs, acceptance: true
71
+ end
72
+ )
73
+ model = ArkenstoneTestBool.new
74
+ assert(model.valid? == false)
75
+ assert(model.errors[:accepts_tandcs] == ['must be true'])
76
+ end
77
+
78
+ def test_model_validates_type
79
+ eval %(
80
+ class ArkenstoneTestType
81
+ include Arkenstone::Validation
82
+
83
+ attr_accessor :should_be_string
84
+ validates :should_be_string, type: String
85
+ end
86
+ )
87
+
88
+ model = ArkenstoneTestType.new
89
+ model.should_be_string = 'hi'
90
+ assert(model.valid?)
91
+ model.should_be_string = 100
92
+ assert(model.valid? == false)
93
+
94
+ eval %(
95
+ class BaseThing
96
+ end
97
+
98
+ class ChildThing < BaseThing
99
+ end
100
+
101
+ class InheritanceTestType
102
+ include Arkenstone::Validation
103
+
104
+ attr_accessor :should_be_base
105
+ validates :should_be_base, type: BaseThing
106
+ end
107
+ )
108
+ model = InheritanceTestType.new
109
+ model.should_be_base = ChildThing.new
110
+ assert(model.valid?)
111
+ end
112
+
113
+ def test_model_validates_confirmation
114
+ eval %(
115
+ class ArkenstoneTestConfirmation
116
+ include Arkenstone::Document
117
+ include Arkenstone::Validation
118
+
119
+ attributes :email
120
+ attr_accessor :email_confirmation
121
+
122
+ validates :email, confirmation: true
123
+ end
124
+ )
125
+
126
+ model = ArkenstoneTestConfirmation.new
127
+ model.email = 'test@example.com'
128
+
129
+ assert(!model.valid?)
130
+ assert_equal(['confirmation does not match email'], model.errors[:email])
131
+
132
+ model.email_confirmation = model.email
133
+
134
+ assert(model.valid?)
135
+ end
136
+
137
+ def test_model_custom_validator
138
+ eval %(
139
+ class ArkenstoneTestCustom
140
+ include Arkenstone::Validation
141
+
142
+ attr_accessor :number
143
+ validate :numberwang
144
+
145
+ def numberwang # http://www.youtube.com/watch?v=qjOZtWZ56lc
146
+ errors.add(:number, "That's numberwang!") unless [3, 19, 333].include? @number
147
+ end
148
+ end
149
+ )
150
+ model = ArkenstoneTestCustom.new
151
+ model.number = 100
152
+ assert(model.valid? == false)
153
+ model.number = 19
154
+ assert(model.valid?)
155
+ end
156
+
157
+ def test_validation_errors
158
+ model = ArkenstoneTestFirstName.new
159
+ model.first_name = nil
160
+ model.valid?
161
+ assert(model.errors.nil? == false)
162
+ assert(model.errors[:first_name] == ["can't be blank"])
163
+ end
164
+
165
+ def test_validation_with_nil_fields_to_validate
166
+ eval %(
167
+ class ArkenstoneTestValidator
168
+ include Arkenstone::Validation
169
+ include Arkenstone::Document
170
+
171
+ attributes :id
172
+ end
173
+
174
+ class ArkenstoneChildValidator < ArkenstoneTestValidator
175
+ end
176
+ )
177
+ model = ArkenstoneChildValidator.new
178
+ assert(model.valid?)
179
+ end
180
+
181
+ def test_custom_messages
182
+ eval %(
183
+ class ArkenstoneCustomMessage
184
+ include Arkenstone::Validation
185
+
186
+ attr_accessor :name
187
+
188
+ validates :name, presence: true, message: "Test Message"
189
+ end
190
+ )
191
+
192
+ model = ArkenstoneCustomMessage.new
193
+ model.name = nil
194
+ assert(model.valid? == false)
195
+ assert(model.errors[:name] == ['Test Message'])
196
+ end
197
+ end
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: arkenstone-open
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Michael Christenson II
8
+ - Steve Young
9
+ - Scott Williams
10
+ - Brett Byler
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2023-03-21 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: bundler
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: '2.1'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '2.1'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 13.0.1
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 13.0.1
44
+ - !ruby/object:Gem::Dependency
45
+ name: activesupport
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '5.0'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '5.0'
58
+ description: An Open Source ActiveRecord replacement over REST
59
+ email:
60
+ - m3talsmith@gmail.com
61
+ executables: []
62
+ extensions: []
63
+ extra_rdoc_files: []
64
+ files:
65
+ - ".github/workflows/codacy-analysis.yml"
66
+ - ".gitignore"
67
+ - ".rubocop.yml"
68
+ - ".ruby-version"
69
+ - ".travis.yml"
70
+ - Gemfile
71
+ - Gemfile.lock
72
+ - LICENSE.txt
73
+ - README.md
74
+ - Rakefile
75
+ - arkenstone.gemspec
76
+ - lib/arkenstone.rb
77
+ - lib/arkenstone/associations.rb
78
+ - lib/arkenstone/associations/resources.rb
79
+ - lib/arkenstone/document.rb
80
+ - lib/arkenstone/enumerable/query_list.rb
81
+ - lib/arkenstone/errors/no_url_error.rb
82
+ - lib/arkenstone/helpers.rb
83
+ - lib/arkenstone/network/env.rb
84
+ - lib/arkenstone/network/hook.rb
85
+ - lib/arkenstone/network/network.rb
86
+ - lib/arkenstone/query_builder.rb
87
+ - lib/arkenstone/queryable.rb
88
+ - lib/arkenstone/timestamps.rb
89
+ - lib/arkenstone/validation/validation_error.rb
90
+ - lib/arkenstone/validation/validations.rb
91
+ - lib/arkenstone/version.rb
92
+ - test/associations/test_document_overrides.rb
93
+ - test/associations/test_has_and_belongs_to_many.rb
94
+ - test/dummy/app/models/association.rb
95
+ - test/dummy/app/models/superuser.rb
96
+ - test/dummy/app/models/user.rb
97
+ - test/spec_helper.rb
98
+ - test/test_arkenstone.rb
99
+ - test/test_arkenstone_hook_inheritance.rb
100
+ - test/test_associations.rb
101
+ - test/test_enumerables.rb
102
+ - test/test_environment.rb
103
+ - test/test_helpers.rb
104
+ - test/test_hooks.rb
105
+ - test/test_query_builder.rb
106
+ - test/test_queryable.rb
107
+ - test/test_validations.rb
108
+ homepage: https://github.com/m3talsmith/arkenstone
109
+ licenses:
110
+ - MIT
111
+ metadata:
112
+ rubygems_mfa_required: 'true'
113
+ post_install_message:
114
+ rdoc_options: []
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '3.0'
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ requirements: []
128
+ rubygems_version: 3.4.1
129
+ signing_key:
130
+ specification_version: 4
131
+ summary: A drop-in replacement for ActiveRecord that performs CRUD operations over
132
+ RESTful URLs.
133
+ test_files: []