grimoire 0.2.0 → 0.2.2

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: 6edd571b20c68657154ccebb7e415844163e2021
4
- data.tar.gz: c840f072f9a7ea4e7542e1a2243ed9b7b6b6b580
3
+ metadata.gz: 8a67e6b4597f818bf3075b20f3910be621cde2c8
4
+ data.tar.gz: 8d5e37c2641122b761c3c3c1128a77ad906d0430
5
5
  SHA512:
6
- metadata.gz: 9588422c6b487a94fb009f75021499a918e7ffcf5fc247c1c1b4299b8a845170e0c2396b056a978dd04ef5018e434b1f1de71ed658adc0bfd99514e87278fa68
7
- data.tar.gz: 6e73d8db9e4b7a82339cc4a7beb1673158cee6db83f76da3d904efe7a5939720f081aa9f9df638b6350bd264fa4e9d2f503942ba82044e5b7900a67b6cb6c35d
6
+ metadata.gz: bb8424d75e0392beaa679ccdce8d7046d8bc37d061db0f628635f46d44952c508cca2f89f2e8a37edd110ee3df82b62ab63c64c103a30a910573472c99f34f41
7
+ data.tar.gz: b7a5c8769d2c75472eb3e1b0b3a0774a006eae9bfff8df0bfd02e04c9434b29f76e7d5416d236e63d8d5c0c85df349af2a169de0f0b8f7b16378658a276b3065
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # v0.2.2
2
+ * Provide origin solver to score keeper when requesting unit score
3
+ * Introduce Solver#prune_world! to remove extraneous units
4
+
1
5
  # v0.2.0
2
6
  * Use direct `#to_json` to prevent conversion errors on older ruby
3
7
  * Add `UnitScoreKeeper#preferred_score` to provide some score meaning
@@ -17,16 +17,48 @@ module Grimoire
17
17
 
18
18
  # @return [System] subset of full system based on requirements
19
19
  attr_reader :world
20
+ # @return [System, NilClass] new system subset when pruning
21
+ attr_reader :new_world
20
22
 
21
23
  def initialize(*_)
22
24
  super
23
25
  @world = System.new
26
+ @new_world = nil
24
27
  @log = []
25
28
  build_world(requirements.requirements, world, system)
26
29
  @log.clear
27
30
  world.scrub!
28
31
  end
29
32
 
33
+ # After the world has been generated extraneous units will
34
+ # be included as a result of dependency constraints that may
35
+ # be too loose and are not actually required by any resolution
36
+ # that would be requested. This will run a second pass and remove
37
+ # extraneous items not required.
38
+ #
39
+ # @return [self]
40
+ # @note This must be called explicitly and is provided for
41
+ # resolving an entire system, not a single resolution path
42
+ def prune_world!
43
+ @new_world = System.new
44
+ requirements.requirements.each do |req|
45
+ world.units[req.name].each do |r_unit|
46
+ path = Solver.new(
47
+ :requirements => RequirementList.new(
48
+ :name => :world_pruner,
49
+ :requirements => [[r_unit.name, r_unit.version.version]]
50
+ ),
51
+ :system => world,
52
+ :score_keeper => score_keeper
53
+ ).generate!.pop
54
+ new_world.add_unit(*path.units)
55
+ end
56
+ end
57
+ @world = new_world
58
+ @new_world = nil
59
+ self
60
+ end
61
+
30
62
  # Build the world required for the solver (the subset of the
31
63
  # entire system required by the requirements)
32
64
  #
@@ -97,7 +129,7 @@ module Grimoire
97
129
  # @return [Numeric] score
98
130
  def score_unit(unit, score)
99
131
  if(score_keeper)
100
- score_keeper.score_for(unit, score) || score
132
+ score_keeper.score_for(unit, score, :solver => self) || score
101
133
  else
102
134
  score
103
135
  end
@@ -15,8 +15,10 @@ module Grimoire
15
15
  #
16
16
  # @param unit [Unit]
17
17
  # @param idx [Integer] current order index
18
+ # @param opts [Hash] extra options
19
+ # @option opts [Solver] :solver solver requesting score
18
20
  # @return [Numeric]
19
- def score_for(unit, idx)
21
+ def score_for(unit, idx, opts={})
20
22
  raise NotImplementedError.new 'No scoring has been defined'
21
23
  end
22
24
 
@@ -1,4 +1,4 @@
1
1
  module Grimoire
2
2
  # Current library version
3
- VERSION = Gem::Version.new('0.2.0')
3
+ VERSION = Gem::Version.new('0.2.2')
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grimoire
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-23 00:00:00.000000000 Z
11
+ date: 2015-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bogo