cryptopunks 1.2.0 → 2.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.
data/lib/cryptopunks.rb CHANGED
@@ -1,112 +1,109 @@
1
1
  ## 3rd party
2
- require 'pixelart'
2
+ require 'pixelart/base'
3
3
  require 'csvreader'
4
4
 
5
5
 
6
6
 
7
7
  ## extra stdlibs
8
- require 'digest'
8
+ require 'digest' ## move/add to pixelart upstream - why? why not?
9
9
  require 'optparse'
10
+ require 'gli' ## used for command line tool
10
11
 
11
12
 
12
13
 
13
14
  ## our own code
14
15
  require 'cryptopunks/version' # note: let version always go first
16
+
17
+ ## forward define superclass for image
18
+ module Cryptopunks
19
+ class Image < Pixelart::Image; end
20
+ end
21
+
22
+
15
23
  require 'cryptopunks/attributes'
16
24
  require 'cryptopunks/structs'
17
25
  require 'cryptopunks/composite'
18
- require 'cryptopunks/dataset'
19
-
20
-
26
+ ## add old backwards compatible alias
21
27
 
22
28
  module Cryptopunks
23
- class Tool
24
- def run( args )
25
- opts = { zoom: 1,
26
- outdir: '.',
27
- file: './punks.png',
28
- offset: 0,
29
- }
30
-
31
- parser = OptionParser.new do |cmd|
32
- cmd.banner = "Usage: punk (or cryptopunk) [options] IDs"
33
-
34
- cmd.separator " Mint punk characters from composite (#{opts[:file]}) - for IDs use 0 to 9999"
35
- cmd.separator ""
36
- cmd.separator " Options:"
37
-
38
- cmd.on("-z", "--zoom=ZOOM", "Zoom factor x2, x4, x8, etc. (default: #{opts[:zoom]})", Integer ) do |zoom|
39
- opts[:zoom] = zoom
40
- end
41
-
42
- cmd.on("-d", "--dir=DIR", "Output directory (default: #{opts[:outdir]})", String ) do |outdir|
43
- opts[:outdir] = outdir
44
- end
45
-
46
- cmd.on("-f", "--file=FILE", "True Official Genuine CryptoPunks™ composite image (default: #{opts[:file]})", String ) do |file|
47
- opts[:file] = file
48
- end
49
-
50
- cmd.on("--offset=NUM", "Start counting at offset (default: #{opts[:offset]})", Integer ) do |offset|
51
- opts[:offset] = offset
52
- end
53
-
54
- cmd.on("-h", "--help", "Prints this help") do
55
- puts cmd
56
- exit
57
- end
58
- end
29
+ class Image
30
+ Composite = ImageComposite
31
+ end
32
+ end
59
33
 
60
- parser.parse!( args )
61
34
 
62
- puts "opts:"
63
- pp opts
35
+ require 'cryptopunks/dataset'
64
36
 
65
- puts "==> reading >#{opts[:file]}<..."
66
- punks = Image::Composite.read( opts[:file] )
37
+ require 'cryptopunks/colors'
38
+ require 'cryptopunks/image'
67
39
 
40
+ require 'cryptopunks/generator'
68
41
 
69
- puts " setting zoom to #{opts[:zoom]}x" if opts[:zoom] != 1
42
+ ###
43
+ ## add convenience pre-configurated generatored with build-in spritesheet (see config)
70
44
 
71
- ## make sure outdir exits (default is current working dir e.g. .)
72
- FileUtils.mkdir_p( opts[:outdir] ) unless Dir.exist?( opts[:outdir] )
45
+ module Cryptopunks
73
46
 
74
- args.each_with_index do |arg,index|
75
- punk_index = arg.to_i
47
+ def self.generator
48
+ @generator ||= Generator.new( "#{root}/config/spritesheet.png",
49
+ "#{root}/config/spritesheet.csv" )
50
+ end
51
+
52
+ class Image
53
+ def self.generate( *values )
54
+ img = Cryptopunks.generator.generate( *values )
55
+ ## note: unwrap inner image before passing on to c'tor (requires ChunkyPNG image for now)
56
+ new( img.image )
57
+ end
58
+ end # class Image
59
+
60
+
61
+ class Spritesheet
62
+ ## note: for now class used for "namespace" only
63
+ def self.find_by( name:, gender: nil ) ## return archetype/attribute image by name
64
+ # note: pass along name as q (query string)
65
+ Cryptopunks.generator.find( name, gender: gender )
66
+ end
67
+ end # class Spritesheet
68
+ ## add convenience (alternate spelling) alias - why? why not?
69
+ SpriteSheet = Spritesheet
70
+ Sheet = Spritesheet
71
+ end # module Cryptopunks
76
72
 
77
- punk = punks[ punk_index ]
78
73
 
79
- punk_name = "punk-" + "%04d" % (punk_index + opts[:offset])
80
74
 
81
- ## if zoom - add x2,x4 or such
82
- if opts[:zoom] != 1
83
- punk = punk.zoom( opts[:zoom] )
84
- punk_name << "x#{opts[:zoom]}"
85
- end
75
+ ####
76
+ # add CryptoPunksData (off-chain) contract
77
+ require 'cryptopunks/contract/punksdata-assets'
78
+ require 'cryptopunks/contract/punksdata-meta'
79
+ require 'cryptopunks/contract/punksdata-contract'
80
+ CryptoPunksData = CryptopunksData
81
+ PunksData = CryptopunksData
86
82
 
87
- path = "#{opts[:outdir]}/#{punk_name}.png"
88
- puts "==> (#{index+1}/#{args.size}) minting punk ##{punk_index+opts[:offset]}; writing to >#{path}<..."
89
83
 
90
- punk.save( path )
91
- end
92
84
 
93
- puts "done"
94
- end ## method run
95
- end # class Tool
96
85
 
97
86
 
98
- def self.main( args=ARGV )
99
- Tool.new.run( args )
100
- end
87
+ require 'cryptopunks/tool'
88
+
89
+ ### add tool convenience helper
90
+ module Cryptopunks
91
+ def self.main( args=ARGV ) Tool.new.run( args ); end
101
92
  end ## module Cryptopunks
102
93
 
103
94
 
104
95
 
96
+
97
+
105
98
  ### add some convenience shortcuts
106
99
  CryptoPunks = Cryptopunks
107
100
  Punks = Cryptopunks
108
101
 
109
102
 
103
+ ###
104
+ # note: for convenience auto include Pixelart namespace!!! - why? why not?
105
+ include Pixelart
106
+
110
107
 
111
108
 
112
109
  puts Cryptopunks.banner # say hello
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cryptopunks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-24 00:00:00.000000000 Z
11
+ date: 2021-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pixelart
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: gli
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rdoc
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -91,11 +105,20 @@ files:
91
105
  - Rakefile
92
106
  - bin/cryptopunk
93
107
  - bin/punk
108
+ - config/spritesheet.csv
109
+ - config/spritesheet.png
94
110
  - lib/cryptopunks.rb
95
111
  - lib/cryptopunks/attributes.rb
112
+ - lib/cryptopunks/colors.rb
96
113
  - lib/cryptopunks/composite.rb
114
+ - lib/cryptopunks/contract/punksdata-assets.rb
115
+ - lib/cryptopunks/contract/punksdata-contract.rb
116
+ - lib/cryptopunks/contract/punksdata-meta.rb
97
117
  - lib/cryptopunks/dataset.rb
118
+ - lib/cryptopunks/generator.rb
119
+ - lib/cryptopunks/image.rb
98
120
  - lib/cryptopunks/structs.rb
121
+ - lib/cryptopunks/tool.rb
99
122
  - lib/cryptopunks/version.rb
100
123
  homepage: https://github.com/cryptopunksnotdead/cryptopunks
101
124
  licenses: