コード例 #1
0
ファイル: builders.go プロジェクト: influx6/reactors
// FileRead2RenderFile turns a fs.FileRead into a RenderFile object
func FileRead2RenderFile() flux.Reactor {
	return flux.FlatSimple(func(root flux.Reactor, data interface{}) {
		if fr, ok := data.(*fs.FileRead); ok {
			root.Reply(&RenderFile{Path: fr.Path, Data: fr.Data})
		}
	})
}
コード例 #2
0
ファイル: builders.go プロジェクト: influx6/reactors
// RenderFile2FileWrite turns a RenderFile into a fs.FileWrite object
func RenderFile2FileWrite() flux.Reactor {
	return flux.FlatSimple(func(root flux.Reactor, data interface{}) {
		if fr, ok := data.(*RenderFile); ok {
			root.Reply(&fs.FileWrite{Path: fr.Path, Data: fr.Data})
		}
	})
}
コード例 #3
0
ファイル: builders.go プロジェクト: influx6/reactors
// MutateFileWrite turns a fs.FileWrite into a RenderFile object
func MutateFileWrite(fx FileWriteMutator) flux.Reactor {
	if fx == nil {
		fx = defaultMutateFileWrite
	}
	return flux.FlatSimple(func(root flux.Reactor, data interface{}) {
		if fr, ok := data.(*fs.FileWrite); ok {
			root.Reply(fx(fr))
		}
	})
}
コード例 #4
0
ファイル: fs.go プロジェクト: influx6/reactors
// StreamListings takes a path and generates a assets.DirListing struct when it receives any signal, it will go through all the files within each listings.
func StreamListings(config ListingConfig) (flux.Reactor, error) {
	dir, err := assets.DirListings(config.Path, config.Validator, config.Mux)

	if err != nil {
		return nil, err
	}

	return flux.FlatSimple(func(root flux.Reactor, data interface{}) {
		if err := dir.Reload(); err != nil {
			root.ReplyError(err)
			return
		}

		// no error occured reloading, so we stream out the directory, list
		dir.Listings.Wo.RLock()
		for _, files := range dir.Listings.Tree {
			if config.DirAlso {
				if !config.UseRelative {
					root.Reply(files.AbsDir)
				} else {
					root.Reply(filepath.ToSlash(files.Dir))
				}
			}
			files.Tree.Each(func(mod, real string) {
				if !config.UseRelative {
					rel, err := filepath.Abs(real)
					if err != nil {
						rel = real
					}
					// log.Printf("Sending %s -> %s -> %s", files.AbsDir, real, rel)
					root.Reply(rel)
				} else {
					root.Reply(filepath.Join(files.Dir, real))
				}
			})
		}
		dir.Listings.Wo.RUnlock()

	}), nil
}