gemstash 1.0.0.pre.3 → 1.0.0.pre.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: af8acc09e82627c900cabfb1cbadb9ac1bb4935f
4
- data.tar.gz: d0fd544e6506ec5930eae821595c6bd3276f5135
3
+ metadata.gz: f5a0e21d8484a3788102eb3c17efe992b484f407
4
+ data.tar.gz: e076bb584f76301f806c8479f1e27d18b5853443
5
5
  SHA512:
6
- metadata.gz: 48f3eed8bb96a55434b942e7fcf16c4d965d00f3cee105e1eaa15b2120f1b02957db600fdc76571fc06a0d2354b3bd7d9c898a11fbc742c5f5b7d6f05a2086c2
7
- data.tar.gz: 6e09a7c5d0ca727f2e64ed439dd84c185982b2a25bb223649d3964c18305a60925e3a03aceb46447b63559376131f03c0551c28894d687cefb0bec325a72f5bc
6
+ metadata.gz: 2d1339519304f001e2f9ec394d56dd4826ab9775982f45e804eb8b3e028d50a0efd5c3abf8bbb046291c0dc4ea6463b7b08d7adbe3d64935359f9dec3aa9db39
7
+ data.tar.gz: 9672f47d249e673d79eb76cc0b943fd13497dba969ad363712c608ace051add7feaddab442554cafa11bd2cf4af4cacfb0b5a3ef9ed39d0b346a7185b9328e7d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,21 @@
1
+ ## 1.0.0.pre.4 (2015-12-23)
2
+
3
+ ### Upgrade Notes
4
+
5
+ Any gems fetched before this release won't be indexed, which means plugins you
6
+ might install can't know about them. These cached gems might also have
7
+ incorrect headers stored (which shouldn't affect bundling). If you wish to
8
+ correct this, you can delete or back up your cache by deleting or moving your
9
+ `~/.gemstash/gem_cache` directory.
10
+
11
+ ### Bugfixes
12
+
13
+ - Cached gem and spec headers don't clobber each other ([#68](https://github.com/bundler/gemstash/pull/68), [@smellsblue](https://github.com/smellsblue))
14
+
15
+ ### Features
16
+
17
+ - Index cached gems and their upstreams for future use of plugins ([#68](https://github.com/bundler/gemstash/pull/68), [@smellsblue](https://github.com/smellsblue))
18
+
1
19
  ## 1.0.0.pre.3 (2015-12-21)
2
20
 
3
21
  ### Bugfixes
data/lib/gemstash/db.rb CHANGED
@@ -8,8 +8,10 @@ module Gemstash
8
8
  Sequel::Model.raise_on_save_failure = true
9
9
  Sequel::Model.plugin :timestamps, update_on_create: true
10
10
  autoload :Authorization, "gemstash/db/authorization"
11
+ autoload :CachedRubygem, "gemstash/db/cached_rubygem"
11
12
  autoload :Dependency, "gemstash/db/dependency"
12
13
  autoload :Rubygem, "gemstash/db/rubygem"
14
+ autoload :Upstream, "gemstash/db/upstream"
13
15
  autoload :Version, "gemstash/db/version"
14
16
  end
15
17
  end
@@ -0,0 +1,17 @@
1
+ require "gemstash"
2
+
3
+ module Gemstash
4
+ module DB
5
+ # Sequel model for cached_rubygems table.
6
+ class CachedRubygem < Sequel::Model
7
+ def self.store(upstream, gem_name, resource_type)
8
+ db.transaction do
9
+ upstream_id = Gemstash::DB::Upstream.find_or_insert(upstream)
10
+ record = self[upstream_id: upstream_id, name: gem_name.name, resource_type: resource_type.to_s]
11
+ return record.id if record
12
+ new(upstream_id: upstream_id, name: gem_name.name, resource_type: resource_type.to_s).tap(&:save).id
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ module Gemstash
2
+ module DB
3
+ # Sequel model for upstreams table.
4
+ class Upstream < Sequel::Model
5
+ def self.find_or_insert(upstream)
6
+ record = self[uri: upstream.to_s]
7
+ return record.id if record
8
+ new(uri: upstream.to_s, host_id: upstream.host_id).tap(&:save).id
9
+ end
10
+ end
11
+ end
12
+ end
@@ -160,7 +160,15 @@ module Gemstash
160
160
  def fetch_remote_gem(gem_name, gem_resource, resource_type)
161
161
  log.info "Gem #{gem_name.name} is not cached, fetching #{resource_type}"
162
162
  gem_fetcher.fetch(gem_name.id, resource_type) do |content, properties|
163
- gem_resource.save({ resource_type => content }, headers: { resource_type => properties })
163
+ resource_properties = {
164
+ upstream: upstream.to_s,
165
+ gem_name: gem_name.name,
166
+ headers: { resource_type => properties }
167
+ }
168
+
169
+ gem = gem_resource.save({ resource_type => content }, resource_properties)
170
+ Gemstash::DB::CachedRubygem.store(upstream, gem_name, resource_type)
171
+ gem
164
172
  end
165
173
  end
166
174
  end
@@ -0,0 +1,24 @@
1
+ Sequel.migration do
2
+ change do
3
+ create_table :upstreams do
4
+ primary_key :id
5
+ String :uri, size: 191, null: false
6
+ String :host_id, size: 191, null: false
7
+ DateTime :created_at, null: false
8
+ DateTime :updated_at, null: false
9
+ index [:uri], unique: true
10
+ index [:host_id], unique: true
11
+ end
12
+
13
+ create_table :cached_rubygems do
14
+ primary_key :id
15
+ Integer :upstream_id, null: false
16
+ String :name, size: 191, null: false
17
+ String :resource_type, size: 191, null: false
18
+ DateTime :created_at, null: false
19
+ DateTime :updated_at, null: false
20
+ index [:upstream_id, :resource_type, :name], unique: true
21
+ index [:name]
22
+ end
23
+ end
24
+ end
@@ -139,7 +139,7 @@ module Gemstash
139
139
  #
140
140
  # Separate calls to save for the same resource will replace existing files,
141
141
  # and add new ones. Properties on additional calls will be merged with
142
- # existing properties.
142
+ # existing properties. Nested hashes in properties will also be merged.
143
143
  #
144
144
  # Examples:
145
145
  #
@@ -181,12 +181,23 @@ module Gemstash
181
181
  end
182
182
 
183
183
  # Update the metadata properties of this resource. The +props+ will be
184
- # merged with any existing properties.
184
+ # merged with any existing properties. Nested hashes in the properties will
185
+ # also be merged.
185
186
  #
186
187
  # @param props [Hash] the properties to add
187
188
  # @return [Gemstash::Resource] self for chaining purposes
188
189
  def update_properties(props)
189
190
  load_properties(true)
191
+
192
+ deep_merge = proc do |_, old_value, new_value|
193
+ if old_value.is_a?(Hash) && new_value.is_a?(Hash)
194
+ old_value.merge(new_value, &deep_merge)
195
+ else
196
+ new_value
197
+ end
198
+ end
199
+
200
+ props = properties.merge(props || {}, &deep_merge)
190
201
  save_properties(properties.merge(props || {}))
191
202
  self
192
203
  end
@@ -1,4 +1,4 @@
1
1
  #:nodoc:
2
2
  module Gemstash
3
- VERSION = "1.0.0.pre.3"
3
+ VERSION = "1.0.0.pre.4"
4
4
  end
@@ -83,7 +83,7 @@ grammar Changelog::Grammar
83
83
  end
84
84
 
85
85
  rule paragraph
86
- (" " !"- " /\w[^\n]*/ "\n")+ "\n"
86
+ (" " !"- " /(\w|`)[^\n]*/ "\n")+ "\n"
87
87
  end
88
88
 
89
89
  rule changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemstash
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.3
4
+ version: 1.0.0.pre.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andre Arko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-21 00:00:00.000000000 Z
11
+ date: 2015-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dalli
@@ -283,8 +283,10 @@ files:
283
283
  - lib/gemstash/configuration.rb
284
284
  - lib/gemstash/db.rb
285
285
  - lib/gemstash/db/authorization.rb
286
+ - lib/gemstash/db/cached_rubygem.rb
286
287
  - lib/gemstash/db/dependency.rb
287
288
  - lib/gemstash/db/rubygem.rb
289
+ - lib/gemstash/db/upstream.rb
288
290
  - lib/gemstash/db/version.rb
289
291
  - lib/gemstash/dependencies.rb
290
292
  - lib/gemstash/env.rb
@@ -301,6 +303,7 @@ files:
301
303
  - lib/gemstash/logging.rb
302
304
  - lib/gemstash/migrations/01_gem_dependencies.rb
303
305
  - lib/gemstash/migrations/02_authorizations.rb
306
+ - lib/gemstash/migrations/03_cached_gems.rb
304
307
  - lib/gemstash/puma.rb
305
308
  - lib/gemstash/rack_env_rewriter.rb
306
309
  - lib/gemstash/specs_builder.rb
@@ -331,7 +334,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
331
334
  version: 1.3.1
332
335
  requirements: []
333
336
  rubyforge_project:
334
- rubygems_version: 2.4.8
337
+ rubygems_version: 2.4.6
335
338
  signing_key:
336
339
  specification_version: 4
337
340
  summary: A place to stash gems you'll need