arkenstone-open 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []