social_snippet-registry_core 0.0.5 → 0.0.6
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.
- checksums.yaml +8 -8
- data/Rakefile +7 -0
- data/lib/social_snippet/registry/webapi/models/repository.rb +65 -0
- data/lib/social_snippet/registry_core/version.rb +1 -1
- data/test/repository_test.rb +93 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YTNhYTYxNTZmOGUxYzVmMjEzZDM3NDk5NDJiMzg4ZTRmNmU0ZjViNQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZTAwYTM3M2FkZTUwZTlmNDA2ZWZlMGVjMzQ2M2Y1Y2Q1Yjc0MmFkYw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTlkNGIzNTVlYTUxZGRiZDJlMTE4Zjc0ODg5NGY2ODFlMjU5YWY2ZTE0Y2E0
|
10
|
+
Y2ZiODk3YWU5NTI1NWU0Mjc3M2YxZWExNzMyZTEwM2YzYTA0YzcwZmE3NDEy
|
11
|
+
MDE5ODJmMGU2ZmZjNGY0ZDZiYTY0NDNiMTk0N2QwNzhjMWE3MjU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MmExMWMxYWZmNGZiNGIxZDU0MzRjZDM0NTRmMDA0NjJlZWMxMjVlZGQ2MmFi
|
14
|
+
NjUzZjMxMDFmYjc1NjRjZDY5MmVjMTJkNGY4MzEyMjc3OTNiYzExZDBhY2E0
|
15
|
+
YTdkOTc2YmQ5NWY5MmIxMjhmMDNjNGU5YjNiZDI3ZTM2YTEyM2E=
|
data/Rakefile
CHANGED
@@ -3,7 +3,9 @@ class SocialSnippet::Registry::WebAPI::Repository
|
|
3
3
|
include Mongoid::Document
|
4
4
|
include Mongoid::Timestamps # adds created_at and updated_at fields
|
5
5
|
|
6
|
+
#
|
6
7
|
# field <name>, :type => <type>, :default => <value>
|
8
|
+
#
|
7
9
|
|
8
10
|
# Repository's Name (e.g. "my-repo")
|
9
11
|
field :name, :type => String
|
@@ -17,6 +19,12 @@ class SocialSnippet::Registry::WebAPI::Repository
|
|
17
19
|
# Repository's dependencies (e.g. ["dep-to-1", "dep-to-2", ...])
|
18
20
|
field :dependencies, :type => Array, :default => lambda { [] }
|
19
21
|
|
22
|
+
# Repository's license (e.g. MIT)
|
23
|
+
field :license, :type => String
|
24
|
+
|
25
|
+
# Target programming languages (e.g. C++, Ruby)
|
26
|
+
field :languages, :type => Array, :default => lambda { [] }
|
27
|
+
|
20
28
|
# You can define indexes on documents using the index macro:
|
21
29
|
# index :field <, :unique => true>
|
22
30
|
index({name: 1}, {unique: true})
|
@@ -24,17 +32,62 @@ class SocialSnippet::Registry::WebAPI::Repository
|
|
24
32
|
# You can create a composite key in mongoid to replace the default id using the key macro:
|
25
33
|
# key :field <, :another_field, :one_more ....>
|
26
34
|
|
35
|
+
#
|
27
36
|
# validations
|
37
|
+
#
|
28
38
|
validates_presence_of :name
|
39
|
+
validates_length_of :name, :minimum => 1, :maximum => 64
|
40
|
+
validates_each :name do |model, key, value|
|
41
|
+
model.errors[:name] << "Invalid name" unless self.is_valid_repo_name?(value)
|
42
|
+
end
|
43
|
+
|
44
|
+
validates_length_of :desc, :maximum => 200
|
45
|
+
|
46
|
+
validates_length_of :url, :maximum => 256
|
47
|
+
validates_each :url do |model, key, value|
|
48
|
+
model.errors[:url] << "Invalid URL" unless self.is_valid_url?(value)
|
49
|
+
end
|
29
50
|
validates_presence_of :url
|
30
51
|
|
52
|
+
validates_each :dependencies do |model, key, value|
|
53
|
+
value.each do |dep|
|
54
|
+
unless self.is_valid_repo_name?(dep)
|
55
|
+
model.errors[:dependencies] << "invalid deps"
|
56
|
+
break
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
validates_each :dependencies do |model, key, value|
|
62
|
+
model.errors[:dependencies] << "The size of dependencies must be less than 64" if value.length > 64
|
63
|
+
end
|
64
|
+
|
65
|
+
validates_length_of :license, :maximum => 64
|
66
|
+
|
67
|
+
validates_each :languages do |model, key, value|
|
68
|
+
value.each do |lang|
|
69
|
+
unless self.is_valid_language?(lang)
|
70
|
+
model.errors[:languages] << "invalid language"
|
71
|
+
break
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
validates_each :languages do |model, key, value|
|
77
|
+
model.errors[:languages] << "The size of languages must be less than 64" if value.length > 64
|
78
|
+
end
|
79
|
+
|
80
|
+
#
|
31
81
|
# methods
|
82
|
+
#
|
32
83
|
|
33
84
|
FIELD_KEYS = [
|
34
85
|
:name,
|
35
86
|
:url,
|
36
87
|
:desc,
|
37
88
|
:dependencies,
|
89
|
+
:license,
|
90
|
+
:languages,
|
38
91
|
]
|
39
92
|
|
40
93
|
def to_object
|
@@ -56,6 +109,18 @@ class SocialSnippet::Registry::WebAPI::Repository
|
|
56
109
|
|
57
110
|
class << self
|
58
111
|
|
112
|
+
def is_valid_url?(url)
|
113
|
+
/^(http|https|git)\:\/\// === url
|
114
|
+
end
|
115
|
+
|
116
|
+
def is_valid_language?(language)
|
117
|
+
/^[a-zA-Z0-9\.\-\_\+\#]+$/ === language
|
118
|
+
end
|
119
|
+
|
120
|
+
def is_valid_repo_name?(repo_name)
|
121
|
+
/^[a-z][a-z0-9\.\-\_]*$/ === repo_name
|
122
|
+
end
|
123
|
+
|
59
124
|
def all_repos
|
60
125
|
all.map {|repo| repo.to_object }
|
61
126
|
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe ::SocialSnippet::Registry::WebAPI::Repository do
|
4
|
+
|
5
|
+
describe "validations" do
|
6
|
+
|
7
|
+
let(:repo) { ::SocialSnippet::Registry::WebAPI::Repository.create }
|
8
|
+
|
9
|
+
describe "valid cases" do
|
10
|
+
|
11
|
+
after { expect(repo).to be_valid }
|
12
|
+
after { expect { repo.save! }.to_not raise_error }
|
13
|
+
|
14
|
+
example do
|
15
|
+
repo.name = "my-repo"
|
16
|
+
repo.url = "git://github.com/user/repo"
|
17
|
+
end
|
18
|
+
|
19
|
+
example do
|
20
|
+
repo.name = "my-repo-2"
|
21
|
+
repo.url = "git://github.com/user/repo"
|
22
|
+
end
|
23
|
+
|
24
|
+
example do
|
25
|
+
repo.name = "my-repo.py"
|
26
|
+
repo.url = "git://github.com/user/repo"
|
27
|
+
end
|
28
|
+
|
29
|
+
example do
|
30
|
+
repo.name = "my-repository"
|
31
|
+
repo.url = "git://github.com/user/repo"
|
32
|
+
end
|
33
|
+
|
34
|
+
example do
|
35
|
+
repo.name = "new-repo"
|
36
|
+
repo.url = "git://github.com/user/repo"
|
37
|
+
end
|
38
|
+
|
39
|
+
example do
|
40
|
+
repo.name = "foo"
|
41
|
+
repo.url = "git://github.com/user/repo"
|
42
|
+
end
|
43
|
+
|
44
|
+
example do
|
45
|
+
repo.name = "foo.cpp"
|
46
|
+
repo.url = "git://github.com/user/repo"
|
47
|
+
end
|
48
|
+
|
49
|
+
end # valid cases
|
50
|
+
|
51
|
+
describe "invalid cases" do
|
52
|
+
|
53
|
+
after { expect(repo).to_not be_valid }
|
54
|
+
after { expect { repo.save! }.to raise_error }
|
55
|
+
|
56
|
+
example do
|
57
|
+
repo.name = "123"
|
58
|
+
repo.url = "git://github.com/user/repo"
|
59
|
+
end
|
60
|
+
|
61
|
+
example do
|
62
|
+
repo.name = "invalid@example.com"
|
63
|
+
repo.url = "git://github.com/user/repo"
|
64
|
+
end
|
65
|
+
|
66
|
+
example do
|
67
|
+
repo.name = "foo"
|
68
|
+
repo.dependencies = ["foo", "123"]
|
69
|
+
repo.url = "git://github.com/user/repo"
|
70
|
+
end
|
71
|
+
|
72
|
+
example do
|
73
|
+
repo.name = "foo"
|
74
|
+
repo.dependencies = ["foo", "invalid@example.com"]
|
75
|
+
repo.url = "git://github.com/user/repo"
|
76
|
+
end
|
77
|
+
|
78
|
+
example do
|
79
|
+
repo.name = "foo"
|
80
|
+
repo.url = "file:///etc/passwd"
|
81
|
+
end
|
82
|
+
|
83
|
+
example do
|
84
|
+
repo.name = "foo"
|
85
|
+
repo.url = "file:///etc/passwd"
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
end # validations
|
91
|
+
|
92
|
+
end # ::SocialSnippet::Registry::WebAPI::Repository
|
93
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: social_snippet-registry_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroyuki Sano
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -223,6 +223,7 @@ files:
|
|
223
223
|
- spec/webapi/controllers/v0/repositories_controller_spec.rb
|
224
224
|
- spec/webapi/helpers/url_helper_spec.rb
|
225
225
|
- spec/webapi/models/repository_spec.rb
|
226
|
+
- test/repository_test.rb
|
226
227
|
homepage: https://sspm.herokuapp.com
|
227
228
|
licenses:
|
228
229
|
- MIT
|
@@ -255,3 +256,4 @@ test_files:
|
|
255
256
|
- spec/webapi/controllers/v0/repositories_controller_spec.rb
|
256
257
|
- spec/webapi/helpers/url_helper_spec.rb
|
257
258
|
- spec/webapi/models/repository_spec.rb
|
259
|
+
- test/repository_test.rb
|