gem-content 0.0.1 → 1.0.0
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 +4 -4
- data/lib/gem-content.rb +59 -0
- data/lib/gem-content/version.rb +1 -1
- data/test/gem-content_test.rb +90 -0
- data/test/gems/gems/fake-gem-name-one-1.0.0/lib/fake-gem-name-one.rb +0 -0
- data/test/gems/gems/fake-gem-name-one-2.0.0/lib/fake-gem-name-one.rb +0 -0
- data/test/gems/gems/fake-gem-name-two-1.0.0/lib/fake-gem-name-two.rb +0 -0
- data/test/gems/gems/fake-gem-name-two-2.0.0/lib/fake-gem-name-two.rb +0 -0
- data/test/test_helper.rb +42 -0
- metadata +15 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f35a306f31ac54437438fc0ee24fca20e9f8dc90
|
4
|
+
data.tar.gz: 4b8c7ef518e994c297ddcd5cea8b2c30f29db6dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fcf87c6bc3e7b5ac019490d57d27552c965b2b78127b76085462ecc69fc566b8c8eed7ba16d41a273095dd6bdfd8fb88751ebe9a3b99ec554f65394a351e20ac
|
7
|
+
data.tar.gz: c7b1f2b9bb3cf4722e5d0db75a4494fa7cb1dd54500e45416dff7bf10c688db90aff7e10f8710c0663f570af79ed100e42fc626571cfcba9afb1b8151943face
|
data/lib/gem-content.rb
CHANGED
@@ -5,3 +5,62 @@ See the file LICENSE for copying permission.
|
|
5
5
|
=end
|
6
6
|
|
7
7
|
require "gem-content/version"
|
8
|
+
|
9
|
+
# Find gems with defined content name in metadata and
|
10
|
+
# return pull path to the content
|
11
|
+
class GemContent
|
12
|
+
|
13
|
+
# shortcut to initialize and get the paths in one line
|
14
|
+
# @param content_name [String] the path marker to read from gems metadata
|
15
|
+
# @return [Array<String>] all gems paths containing requested content
|
16
|
+
def self.get_gem_paths(content_name)
|
17
|
+
self.new(content_name).get_gem_paths
|
18
|
+
end
|
19
|
+
|
20
|
+
# @return [String] content name filter
|
21
|
+
attr_reader :content_name
|
22
|
+
|
23
|
+
# initializes the filtered content path
|
24
|
+
# @param content_name [String] the path marker to read from gems metadata
|
25
|
+
def initialize(content_name)
|
26
|
+
@content_name = content_name
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Array<String>] all gems paths containing requested content
|
30
|
+
def get_gem_paths
|
31
|
+
active_or_latest_gems_matching.map do |specification|
|
32
|
+
File.join(
|
33
|
+
specification.full_gem_path,
|
34
|
+
specification.metadata[content_name]
|
35
|
+
)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
# filter active / latest gem versions
|
42
|
+
def active_or_latest_gems_matching
|
43
|
+
all_gems_matching.group_by(&:name).map(&method(:active_or_latest_gem))
|
44
|
+
end
|
45
|
+
|
46
|
+
# find active or latest gem in given set
|
47
|
+
def active_or_latest_gem(params)
|
48
|
+
_, specifications = params
|
49
|
+
specifications.find(&:activated) or
|
50
|
+
specifications.sort_by(&:version).last
|
51
|
+
end
|
52
|
+
|
53
|
+
# filter gems with content_name metadata
|
54
|
+
def all_gems_matching
|
55
|
+
all_gems.select do |specification|
|
56
|
+
specification.metadata.is_a?(Hash) and
|
57
|
+
specification.metadata[content_name]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# get all gem specifications
|
62
|
+
def all_gems
|
63
|
+
Gem::Specification._all
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
data/lib/gem-content/version.rb
CHANGED
@@ -0,0 +1,90 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright 2014 Michal Papis <mpapis@gmail.com>
|
3
|
+
|
4
|
+
See the file LICENSE for copying permission.
|
5
|
+
=end
|
6
|
+
|
7
|
+
require "test_helper"
|
8
|
+
require "context-filters/context"
|
9
|
+
|
10
|
+
describe GemContent do
|
11
|
+
|
12
|
+
subject do
|
13
|
+
GemContent.new("some-templates")
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:gems_all) do
|
17
|
+
Gem::Specification._all
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:gems_one) do
|
21
|
+
gems_all.select{|s| s.name == "fake-gem-name-one"}
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:gems_one_expected) do
|
25
|
+
gems_one.select{|s| s.metadata && s.metadata["some-templates"] }
|
26
|
+
end
|
27
|
+
|
28
|
+
let(:gems_two) do
|
29
|
+
gems_all.select{|s| s.name == "fake-gem-name-two"}
|
30
|
+
end
|
31
|
+
|
32
|
+
before do
|
33
|
+
gems_two.find{ |s| s.version == Gem::Version.new("1.0.0") }.activate
|
34
|
+
end
|
35
|
+
|
36
|
+
it "initializes content_name" do
|
37
|
+
subject.content_name.must_equal("some-templates")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "detects gems" do
|
41
|
+
subject.expects(:all_gems).returns(gems_one)
|
42
|
+
subject.send(:all_gems_matching).sort.must_equal(gems_one_expected.sort)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "finds latest gems" do
|
46
|
+
subject.expects(:all_gems_matching).returns(gems_one_expected)
|
47
|
+
subject.send(:active_or_latest_gems_matching).must_equal([gems_one_expected.sort.last])
|
48
|
+
end
|
49
|
+
|
50
|
+
it "finds latest gem from list" do
|
51
|
+
subject.send(:active_or_latest_gem, ["fake-gem-name-one", gems_one_expected]).must_equal(gems_one_expected.sort.last)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "finds active gems" do
|
55
|
+
subject.expects(:all_gems_matching).returns(gems_two)
|
56
|
+
subject.send(:active_or_latest_gems_matching).must_equal([gems_two.sort.first])
|
57
|
+
end
|
58
|
+
|
59
|
+
it "finds active gem on list" do
|
60
|
+
subject.send(:active_or_latest_gem, ["fake-gem-name-two", gems_two]).must_equal(gems_two.sort.first)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "returns gems paths" do
|
64
|
+
subject.expects(:active_or_latest_gems_matching).returns(gems_one_expected.sort)
|
65
|
+
subject.get_gem_paths.must_equal(
|
66
|
+
[
|
67
|
+
File.expand_path("../gems/gems/fake-gem-name-one-1.0.0/templates-v1", __FILE__),
|
68
|
+
File.expand_path("../gems/gems/fake-gem-name-one-2.0.0/templates-v2", __FILE__),
|
69
|
+
]
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
73
|
+
it "returns gems paths - no mocking - the real test" do
|
74
|
+
subject.get_gem_paths.must_equal(
|
75
|
+
[
|
76
|
+
File.expand_path("../gems/gems/fake-gem-name-one-2.0.0/templates-v2", __FILE__),
|
77
|
+
File.expand_path("../gems/gems/fake-gem-name-two-1.0.0/templates-v1", __FILE__),
|
78
|
+
]
|
79
|
+
)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "has class helper" do
|
83
|
+
test_subject = mock()
|
84
|
+
test_subject.expects(:get_gem_paths).once.returns([:a, :b])
|
85
|
+
GemContent.expects(:new).once.with("some-templates").returns(test_subject)
|
86
|
+
|
87
|
+
GemContent.get_gem_paths("some-templates").must_equal([:a, :b])
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright 2014 Michal Papis <mpapis@gmail.com>
|
3
|
+
|
4
|
+
See the file LICENSE for copying permission.
|
5
|
+
=end
|
6
|
+
|
7
|
+
require "rubygems"
|
8
|
+
require "minitest"
|
9
|
+
|
10
|
+
# fix lib in LOAD_PATH and load version for gems manipulation
|
11
|
+
lib = File.expand_path("../lib", __FILE__)
|
12
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
13
|
+
|
14
|
+
# register our own path with gems
|
15
|
+
Gem.path << File.expand_path("../gems", __FILE__)
|
16
|
+
Gem.refresh
|
17
|
+
|
18
|
+
if
|
19
|
+
RUBY_VERSION == "2.0.0" && # check Gemfile
|
20
|
+
$0 != "-e" # do not do that in guard
|
21
|
+
then
|
22
|
+
require "coveralls"
|
23
|
+
require "simplecov"
|
24
|
+
|
25
|
+
SimpleCov.start do
|
26
|
+
formatter SimpleCov::Formatter::MultiFormatter[
|
27
|
+
SimpleCov::Formatter::HTMLFormatter,
|
28
|
+
Coveralls::SimpleCov::Formatter,
|
29
|
+
]
|
30
|
+
command_name "Unit Tests"
|
31
|
+
add_filter "/test/"
|
32
|
+
end
|
33
|
+
|
34
|
+
Coveralls.noisy = true unless ENV["CI"]
|
35
|
+
end
|
36
|
+
|
37
|
+
# Autoload all lib/**/*.rb files so simplecov does not misses anything
|
38
|
+
Dir[File.expand_path("../../lib/**/*.rb", __FILE__)].each{|f| require f }
|
39
|
+
|
40
|
+
require "minitest/autorun" unless $0=="-e" # skip in guard
|
41
|
+
require "minitest/unit"
|
42
|
+
require "mocha/setup"
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem-content
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michal Papis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: context-filters
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.11'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0.11'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: guard
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -117,6 +103,12 @@ extra_rdoc_files: []
|
|
117
103
|
files:
|
118
104
|
- lib/gem-content.rb
|
119
105
|
- lib/gem-content/version.rb
|
106
|
+
- test/gem-content_test.rb
|
107
|
+
- test/gems/gems/fake-gem-name-one-1.0.0/lib/fake-gem-name-one.rb
|
108
|
+
- test/gems/gems/fake-gem-name-one-2.0.0/lib/fake-gem-name-one.rb
|
109
|
+
- test/gems/gems/fake-gem-name-two-1.0.0/lib/fake-gem-name-two.rb
|
110
|
+
- test/gems/gems/fake-gem-name-two-2.0.0/lib/fake-gem-name-two.rb
|
111
|
+
- test/test_helper.rb
|
120
112
|
homepage: https://github.com/mpapis/gem-content
|
121
113
|
licenses:
|
122
114
|
- MIT
|
@@ -141,5 +133,11 @@ rubygems_version: 2.2.2
|
|
141
133
|
signing_key:
|
142
134
|
specification_version: 4
|
143
135
|
summary: Search gems for content directory
|
144
|
-
test_files:
|
136
|
+
test_files:
|
137
|
+
- test/test_helper.rb
|
138
|
+
- test/gems/gems/fake-gem-name-one-1.0.0/lib/fake-gem-name-one.rb
|
139
|
+
- test/gems/gems/fake-gem-name-one-2.0.0/lib/fake-gem-name-one.rb
|
140
|
+
- test/gems/gems/fake-gem-name-two-1.0.0/lib/fake-gem-name-two.rb
|
141
|
+
- test/gems/gems/fake-gem-name-two-2.0.0/lib/fake-gem-name-two.rb
|
142
|
+
- test/gem-content_test.rb
|
145
143
|
has_rdoc:
|