bogo 0.1.8 → 0.1.10

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: 4c5c90b42afcd5854ba741a6f0da9469a6d548bd
4
- data.tar.gz: 1ae80d7c320ade21655bd0dd8b3f88b876341bb3
3
+ metadata.gz: f4b61b319c9395e4e644f827551a4af16deb76e9
4
+ data.tar.gz: dc1442544264f65268c3f7ef9125c9baeb763d00
5
5
  SHA512:
6
- metadata.gz: 8363d5481480cd9741d14407f8b67222085ac81a04d9844494b3729b0dc1d70d51e0c126484c76eb3bf57d6bc7868dd95e448bfd65a10d061670092dae6459ff
7
- data.tar.gz: 36aac8260f6f7673ab7e37ac7aabb039dbf0037e97371d0b1af7ec31e5e878b53dae610d2005795db20c6b66e40b360c9f4f904a942d99e746193be699cf794c
6
+ metadata.gz: 5170908a533fab6acc5b7d757b24a0e59155913965bffb7bdb416fa4ce9e2ac87efa3739881c87e9cc5746ea152583e8f6ce21a6a13a49819f47f42d9c0a00f5
7
+ data.tar.gz: abd76ee307dc9fdc7761b7d5ed31d783ae7ce6208d5a712bdf134cbc9eee43464e9d40d75d3392c2909fb6eb8fdc215dd7d73792063998bf84c840bfccfd064f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## v0.1.10
2
+ * Add `Lazy#always_clean!` to remove attribute state
3
+ * Add `PriorityQueue`
4
+
1
5
  ## v0.1.8
2
6
  * Use `#to_smash` to for duping to preserve types
3
7
  * Force type on merges
data/bogo.gemspec CHANGED
@@ -10,7 +10,9 @@ Gem::Specification.new do |s|
10
10
  s.description = 'Helper libraries'
11
11
  s.require_path = 'lib'
12
12
  s.license = 'Apache 2.0'
13
- s.add_dependency 'hashie'
14
- s.add_dependency 'multi_json'
13
+ s.add_runtime_dependency 'hashie'
14
+ s.add_runtime_dependency 'multi_json'
15
+ s.add_development_dependency 'pry'
16
+ s.add_development_dependency 'minitest'
15
17
  s.files = Dir['lib/**/*'] + %w(bogo.gemspec README.md CHANGELOG.md CONTRIBUTING.md LICENSE)
16
18
  end
data/lib/bogo.rb CHANGED
@@ -5,6 +5,7 @@ module Bogo
5
5
  autoload :Constants, 'bogo/constants'
6
6
  autoload :Lazy, 'bogo/lazy'
7
7
  autoload :Memoization, 'bogo/memoization'
8
+ autoload :PriorityQueue, 'bogo/priority_queue'
8
9
  autoload :Smash, 'bogo/smash'
9
10
  autoload :Utility, 'bogo/utility'
10
11
  end
data/lib/bogo/lazy.rb CHANGED
@@ -103,6 +103,15 @@ module Bogo
103
103
  # Class methods for laziness
104
104
  module ClassMethods
105
105
 
106
+ # Disable dirty state
107
+ def always_clean!
108
+ self.class_eval do
109
+ def dirty?; false; end
110
+ def valid_state; self; end
111
+ alias_method :dirty, :data
112
+ end
113
+ end
114
+
106
115
  # Add new attributes to class
107
116
  #
108
117
  # @param name [String]
@@ -0,0 +1,80 @@
1
+ require 'bogo'
2
+
3
+ module Bogo
4
+ # Specialized priority based queue
5
+ # @note does not allow duplicate objects to be queued
6
+ class PriorityQueue
7
+
8
+ # Create a new priority queue
9
+ #
10
+ # @return [self]
11
+ def initialize(*args)
12
+ @lock = Mutex.new
13
+ @queue = Hash.new
14
+ @block_costs = 0
15
+ @reverse_sort = args.include?(:highscore)
16
+ end
17
+
18
+ # Push new item to the queue
19
+ #
20
+ # @param item [Object]
21
+ # @param cost [Float]
22
+ # @yield provide cost via proc
23
+ # @return [self]
24
+ def push(item, cost=nil, &block)
25
+ lock.synchronize do
26
+ if(queue[item])
27
+ raise ArgumentError.new "Item already exists in queue. Items must be unique! (#{item})"
28
+ end
29
+ unless(cost || block_given?)
30
+ raise ArgumentError.new 'Cost must be provided as parameter or block!'
31
+ end
32
+ @block_costs += 1 if cost.nil?
33
+ queue[item] = cost || block
34
+ sort!
35
+ end
36
+ self
37
+ end
38
+
39
+ # @return [Object, NilClass] item or nil if empty
40
+ def pop
41
+ lock.synchronize do
42
+ sort! if @block_costs > 0
43
+ item, score = queue.first
44
+ @block_costs -= 1 if score.respond_to?(:call)
45
+ queue.delete(item)
46
+ item
47
+ end
48
+ end
49
+
50
+ # @return [Integer] current size of queue
51
+ def size
52
+ lock.synchronize do
53
+ queue.size
54
+ end
55
+ end
56
+
57
+ def empty?
58
+ size == 0
59
+ end
60
+
61
+ # Sort the queue based on cost
62
+ def sort!
63
+ queue.replace(
64
+ Hash[
65
+ queue.sort do |x,y|
66
+ x,y = y,x if @reverse_score
67
+ (x.last.respond_to?(:call) ? x.last.call : x.last).to_f <=>
68
+ (y.last.respond_to?(:call) ? y.last.call : y.last).to_f
69
+ end
70
+ ]
71
+ )
72
+ end
73
+
74
+ protected
75
+
76
+ attr_reader :queue, :lock
77
+
78
+ end
79
+
80
+ end
data/lib/bogo/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Bogo
2
2
  # Current library version
3
- VERSION = Gem::Version.new('0.1.8')
3
+ VERSION = Gem::Version.new('0.1.10')
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bogo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.10
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-02-12 00:00:00.000000000 Z
11
+ date: 2015-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  description: Helper libraries
42
70
  email: code@chrisroberts.org
43
71
  executables: []
@@ -54,6 +82,7 @@ files:
54
82
  - lib/bogo/constants.rb
55
83
  - lib/bogo/lazy.rb
56
84
  - lib/bogo/memoization.rb
85
+ - lib/bogo/priority_queue.rb
57
86
  - lib/bogo/smash.rb
58
87
  - lib/bogo/utility.rb
59
88
  - lib/bogo/version.rb